Name: series-workflowbfp4f Phase: Failed StartedAt: 2026-09-10 08:03:10 +0000 UTC FinishedAt: 2026-09-10 08:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbfp4f[0] Phase: Succeeded StartedAt: 2026-09-10 08:03:10 +0000 UTC FinishedAt: 2026-09-10 08:22:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbfp4f[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 08:03:10 +0000 UTC FinishedAt: 2026-09-10 08:22:01 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OTA3YTRhN2U2M2U4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjMgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBLeWxlIFN3aXRjaCBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbiYjNDM7XG4mIzQzOyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxuJiM0MztcbiYjNDM7ICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogfFxuJiM0MzsgICAgICBQSFkgcGFja2FnZSBpbnRlcmZhY2UgbW9kZS5cbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSBpbnRlcm5hbFxuJiM0MzsgICAgICAtIHVzeGdtaWlcbiYjNDM7ICAgIGRlZmF1bHQ6IGludGVybmFsXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDRmNTEuZThiOFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjOVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSA9IFwmIzM0O3VzeGdtaWlcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M0XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M3XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0zNjEsOSAmIzQzOzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuJiM0MztcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuXG4gXG4gY29uZmlnIE5BVElPTkFMX1BIWVxuIFx0dHJpc3RhdGUgXCYjMzQ7TmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5mNDExODZiNWI3MzdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICYjNDM7MSwyOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4mIzQzOyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4mIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiAmIzQzOzM1LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbiYjNDM7ICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0VVNYR01JSSBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRVU1hHTUlJIE1JSVx0ICAgICAgICB8XG4mIzQzOyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRVU1hHTUlJIEV4dGVuZGVkXHR8XG4mIzQzOyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICovXG4mIzQzO1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICYjNDM7Mzk4LDE1IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVx0XHQweDFcbiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MFxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgJiM0Mzs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiAmIzQzOzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0MztcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjYsMTEgJiM0Mzs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiBcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXG4mIzQzO1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqL1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbiYjNDM7XHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHZhbDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJldDogb3BlcmF0aW9uJiMzOTtzIHJldHVybiBjb2RlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0ID0gcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztyZXRyeTpcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogcGxsIGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBuaWJibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0LyogcmVzZXQgKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmU6XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6XG4mIzQzO1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHJlYWQgZWZ1c2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzEgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMiA9IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8zID0gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XHRyZXQgfD0gdG1wO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIHJlc2V0IHNlcmRlcyAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4mIzQzO1x0XHRcdFx0ISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSB2YWw7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHIgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAyLjVHIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIEVNQyBSRSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlOlxuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOlxuJiM0MztcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiBcbi1lcnJfcmVzdG9yZV9wYWdlOlxuLVx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMxMDQsNiAmIzQzOzQyNDUsNDI5IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0bGluayA9ICEhKHJldCBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcdHJldHVybiBsaW5rO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuJiM0MztcdGlmIChsaW5rKVxuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDApXG4mIzQzO1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMSlcbiYjNDM7XHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuJiM0MztcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuJiM0MztcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuJiM0MztcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxuJiM0MztcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0OyVzLCBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgbWlzc2luZyBpbiBEVFMuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgX19mdW5jX18pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICYjNDM7NDc1NCwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHRcdD0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMyMDYsNiAmIzQzOzQ3ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTQwOCw2ICYjNDM7MTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbiYjNDM7ICpcdHJlYWQvd3JpdGUgZXJyb3IpLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbiYjNDM7e1xuJiM0MztcdGludCBjdHJsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0ZXN0X21vZGUpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzNTcsNiAmIzQzOzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjg1NzZhNDg4NzdjNmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQFxuIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXHQweDAwMDFcdC8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi9cbiBcbiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXHQvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwXHQvKiBUZW1wbGF0ZSBOb3JtYWwgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbiYjNDM7XG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45OTA3YTRhN2U2M2U4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwKQEAgLTAsMCAmIzQzOzEsNjMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEt5bGUgU3dpdGNoICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuCiYjNDM7CiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOAomIzQzOwomIzQzOyAgbW90b3Jjb21tLGludGVyZmFjZS1tb2RlOgomIzQzOyAgICBkZXNjcmlwdGlvbjogfAomIzQzOyAgICAgIFBIWSBwYWNrYWdlIGludGVyZmFjZSBtb2RlLgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9zdHJpbmcKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIGludGVybmFsCiYjNDM7ICAgICAgLSB1c3hnbWlpCiYjNDM7ICAgIGRlZmF1bHQ6IGludGVybmFsCiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDRmNTEuZThiOCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDs5Jmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgPSAmIzM0O3VzeGdtaWkmIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs0Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzUmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NiZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs3Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggYjRlZjkyN2ZkNGE2Ny4uMWRkODBlMDZlMjM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZCiAKIGNvbmZpZyBNT1RPUkNPTU1fUEhZCiAJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gUEhZcyYjMzQ7CiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQogCWhlbHAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy4KLQkgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLgomIzQzOwkgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLgogCiBjb25maWcgTkFUSU9OQUxfUEhZCiAJdHJpc3RhdGUgJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXMmIzM0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IDkwYTRmODZmMjc1OGIuLmY0MTE4NmI1YjczN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTEsMjQgJiM0MzsxLDI5IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsKICNkZWZpbmUgUEhZX0lEX1lUODUxMQkJMHgwMDAwMDEwYQogI2RlZmluZSBQSFlfSURfWVQ4NTIxCQkweDAwMDAwMTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjIJCTB4NGY1MWU5MjgKICNkZWZpbmUgUEhZX0lEX1lUODUzMQkJMHg0ZjUxZTkxYgogI2RlZmluZSBQSFlfSURfWVQ4NTMxUwkJMHg0ZjUxZTkxYQogI2RlZmluZSBQSFlfSURfWVQ4ODIxCQkweDRmNTFlYTE5CiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0CQkweDRmNTFlOGI4CiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXcKICAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICYjNDM7MzUsMTggQEAKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3CiYjNDM7ICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJVVNYR01JSSBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CVVTWEdNSUkgTUlJCSAgICAgICAgfAomIzQzOyAqIHwJVVRQIE1NRAkJCXwJCQkJfAomIzQzOyAqIHwJVVRQIEV4dGVuZGVkCQl8CVVTWEdNSUkgRXh0ZW5kZWQJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CVVTWEdNSUkgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAkJCUNvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzgxLDYgJiM0MzszOTgsMTUgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxCQkweDEKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwJCTB4MAomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFCQkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORwkJKDB4NykKJiM0MzsKIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJLyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHMKQEAgLTM5OSw2ICYjNDM7NDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJdTggcmVnX3BhZ2U7CiB9OwogCiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTsKJiM0MzsJLyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDM3LDYgJiM0Mzs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sCiYjNDM7CQkJICAgICAgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7CXJldCB8PSAocGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTYyNiwxMSAmIzQzOzcyMiwxMDU2IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJCXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLAogCQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvCiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqLwomIzQzOwlyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovCiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLAomIzQzOwkJCSAgIEJNQ1JfUkVTRVQgJmFtcDsgfkJNQ1JfSVNPTEFURSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsICZsdDsgMCkgfHwKJiM0MzsJCQkJISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCTUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJLyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCQlyZXQgPSByOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgc29mdCByZXNldCAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7cmV0cnk6CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemF0aW9uIHV0cCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBSRSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZToKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6CiYjNDM7CXIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzIgPSByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMyA9IHJldDsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG9wdGltaXphdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFBMTCBsb2NrICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSkgJmd0OyZndDsgNjsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpKSAmZ3Q7Jmd0OyA0OwomIzQzOwlyZXQgfD0gdG1wOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgTERPICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpICZndDsmZ3Q7IDI7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHJlc2V0IHNlcmRlcyAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsICZsdDsgMCkgfHwKJiM0MzsJCQkJISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCTUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgTUFVKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlOgomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX25vcm1hbDoKJiM0MzsJciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJcmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKIAotZXJyX3Jlc3RvcmVfcGFnZToKLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtMzEwNCw2ICYjNDM7NDI0NSw0MjkgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWxpbmsgPSAhIShyZXQgJmFtcDsgWVRQSFlfU1NSX0xJTkspOwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyLCBsaW5rKTsKJiM0MzsJcmV0dXJuIGxpbms7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F1dG9uZWdfY29tcGxldGUpIHsKJiM0MzsJCXJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2YWwgPSByZXQ7CiYjNDM7CiYjNDM7CWxpbmsgPSB2YWwgJmFtcDsgWVRQSFlfU1NSX0xJTks7CiYjNDM7CWlmIChsaW5rKQomIzQzOwkJeXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7bGluayA9PSAwKQomIzQzOwkJCXBoeWRldl9kYmcocGh5ZGV2LAomIzQzOwkJCQkgICAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O2xpbmsgPT0gMSkKJiM0MzsJCQlwaHlkZXZfZGJnKHBoeWRldiwKJiM0MzsJCQkJICAgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMDsKJiM0MzsJfQomIzQzOwlwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbgomIzQzOwkgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb24KJiM0MzsJICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHBoeV9jdHJsID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJICAgICAgcGh5ZGV2LSZndDthZHZlcnRpc2luZykpCiYjNDM7CQlwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLAomIzQzOwkJCQkgICAgIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpOwomIzQzOwljb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXNlIHNoYXJlZCBsb2NrIGZvciBZVDg4MjQgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAKJiM0MzsJCQkJKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCSBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7JXMsIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSBtaXNzaW5nIGluIERUUy5cbiYjMzQ7LAomIzQzOwkJCSAgICBfX2Z1bmNfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzU0LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMjA2LDYgJiM0Mzs0Nzg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXIKJiM0MzsgKglyZWFkL3dyaXRlIGVycm9yKS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IGN0cmwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRlc3RfbW9kZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQljdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLAomIzQzOwkJCSAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTsKJiM0MzsKIC8qKgogICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpOwogaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTsKJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTsKIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTsKIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCkBAIC02Myw2ICYjNDM7NjMsNyBAQAogLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTAkxMzAJLyogMTBHQkFTRS1UIHBhaXIgc3dhcCAmYW1wOyBwb2xhcml0eSAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUgkxMzEJLyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMgkvKiBUZXN0IG1vZGUgY29udHJvbCAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlIJMTMzCS8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuCiAJCQkJCSAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1IJMTQ3CS8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovCkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQAogLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRQkweDAwMDEJLyogRmFzdCByZXRyYWluIGVuYWJsZSAqLwogCiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDAJLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwCS8qIFRlbXBsYXRlIE5vcm1hbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovCiYjNDM7CiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqLwogI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEsJMHgwMDAxCS8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi8KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGZldyBmaWxlcyBhZmZlY3RlZDogZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBtb2RpZmljYXRpb25zIHNlbGVjdGluZyBgUEhZX1BBQ0tBR0VgIGZvciBgTU9UT1JDT01NX1BIWWAsIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUgZm9yIHRoZSBZVDg4MjQgUEhZLCBhIGhlbHBlciBmdW5jdGlvbiBhZGRpdGlvbiBpbiBgcGh5LWM0NS5jYCBjYWxsZWQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLCB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBoZWxwZXIsIGFuZCBzb21lIGRlZmluaXRpb25zIGluIGBtZGlvLmhgLgoKVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHksIHJpZ2h0PyBDYW4gd2UgaGl0IHRoaXMgc3R1ZmYgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCBsaWtlIHN5emthbGxlciBvciBhIHJlZ3VsYXIgUUVNVSBlbnZpcm9ubWVudD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIFBIWSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgZXRoZXJuZXQgUEhZIGRyaXZlcnMgdGhhdCBhdHRhY2ggdmlhIHRoZSBNRElPIGJ1cy4gQ2FuIHdlIHByb2JlIHRoZW0gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJIGhhdmUgdG8gcmVtZW1iZXIgaG93IHRoaXMgYWxsIHdvcmtzLi4uIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgaXMgc2Nhbm5lZC4gU28sIGxpa2UsIGBtZGlvLWJpdGJhbmdgLCBgbWRpby1ncGlvYCwgYGZpeGVkLW1kaW9gLCBvciBNQUMtc3BlY2lmaWMgTURJTyBidXNlcyBzdWNoIGFzIGBmZWNgIGFuZCBgc3RtbWFjYCB3aWxsIGRvIHRoZSB0cmljay4KCkJ1dCB0aGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIHNwZWNpZmljYWxseS4uLiBpcyBpdCBhIGhhcmR3YXJlLWRlcGVuZGVudCBQSFkgZHJpdmVyPyBEb2VzIGl0ICpyZXF1aXJlKiBzcGVjaWZpYyBoYXJkd2FyZSB0byB3b3JrLCBvciBjYW4gd2Ugc2ltdWxhdGUgb3IgbW9jayB0aGUgTURJTyBidXMgYW5kIHByb2JlIGl0PyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBkZXZpY2Ugd2l0aCB0aGUgYFBIWV9JRF9ZVDg4MjRgIElEIGFuZCB0cmlnZ2VyIHRoZSBkcml2ZXIgdG8gcHJvYmU/CgpBbmQgd2hhdCBhYm91dCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBmdW5jdGlvbj8gVGhhdCYjMzk7cyBpbiBgcGh5LWM0NS5jYCwgYnV0IHdobyBhY3R1YWxseSB1c2VzIGl0PyBBaCwgcmlnaHQsIHRoZSBjb2RlIG1lbnRpb25zIHRoYXQgKm9ubHkqIGBtb3RvcmNvbW0uY2AgaXMgY2FsbGluZyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIEdvb2QgdG8ga25vdyEgTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55dGhpbmcgZWxzZSBjYWxscyB0aGF0IGZ1bmN0aW9uLCBvciBpZiBpdCYjMzk7cyBzb21laG93IGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5LCB0aGF0IG1ha2VzIGZ1enppbmcgYSBiaXQgdHJpY2tpZXIsIGJ1dCBzdGlsbCBkb2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9Nzc3PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy03ODQtXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6Nzg1Olx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy03ODYtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MT1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy04NDgtXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ5Olx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy04NTAtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz05Nzk9c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjMyLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyMzM6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzNC1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ny1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjQ4Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDktXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYwLWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjYxOlx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNjItXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MTUyMD1zdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA0LVx0XHRnb3RvIGVycl9yZXN0b3JlO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MDU6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNi1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxOS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzIwOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MjEtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzMxLWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzMyOlx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzMtXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjMtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDY0OkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDY1LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjM1OT1pbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgcmVzaWRlcyB3aXRoaW4gYHBoeS1jNDUuY2AgYW5kLCBhY2NvcmRpbmcgdG8gdGhpcywgaXMgb25seSBpbnZva2VkIGZyb20gYG1vdG9yY29tbS5jYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1vdG9yY29tbS5jYCBpcyBzdHJ1Y3R1cmFsbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50LgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtb3RvcmNvbW0uY2AgaXMgdGllZCB0byB0aGUgTW90b3JDb21tIFlUODgyNCwgYSBwaHlzaWNhbCBFdGhlcm5ldCBQSFkuIFRoZSBxdWVzdGlvbiBpcyBjYW4gSSBldmVuIHByb2JlIG9yIHJ1biBgbW90b3Jjb21tLmNgIHdpdGhvdXQgdGhpcyBwYXJ0aWN1bGFyLCBwaHlzaWNhbCBQSFkgYW5kIE1ESU8gYnVzIGJlaW5nIHByZXNlbnQ/IExldCBtZSByZXZpZXcgdGhlIGNvbnN0cmFpbnRzIGluIHNlY3Rpb24gMiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMuIEFoLCBoZXJlIHdlIGFyZTogdGhlIG1lbnRpb24gb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCBoaWdobGlnaHRzIHNwZWNpZmljIGV4YW1wbGVzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMg4oCTIHRoaW5ncyBkZXBlbmRlbnQgb24gQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3Qgc2ltdWxhdGVkIGluIHRoZSB0eXBpY2FsIFFFTVUgY29udGV4dC4gQW5kIHllcywgaXQgZXhwbGljaXRseSBwb2ludHMgb3V0IHRoYXQgUEhZIGRyaXZlcnMg4oCTIE1vdG9yY29tbSwgUmVhbHRlaywgQnJvYWRjb20sIGV0Yy4g4oCTIGFyZSByZWxpYW50IG9uIGFjdHVhbCBNRElPIGhhcmR3YXJlIG9yIGF0IGxlYXN0IGFuIE1ESU8gYnVzIHdpdGggdGhlIGNvcnJlY3QgUEhZIGRldmljZSBJRCBpbiByZWdpc3RlcnMgMiBhbmQgMy4KClJpZ2h0LCBzbyBjYW4gUUVNVSBlbXVsYXRlIGEgWVQ4ODI0PyBUaGUgYW5zd2VyIGlzIG5vLCBpdCBkb2VzbuKAmXQuIE9rYXksIGlzIHRoZXJlIGV2ZW4gYSB2aXJ0dWFsIFBIWSBkZXZpY2Ugb3IgTURJTyBidXMgdGhhdCBtaWdodCBpbnN0YW50aWF0ZSBgbW90b3Jjb21tX3BoeV9kcnZzYD8gSSBzaG91bGQgY2hlY2sgaWYgTURJTyBvciBQSFkgZGV2aWNlcyBjYW4gYmUgY3JlYXRlZCBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7bGwgY2hlY2sgdmlhIG5ldGxpbmssIGRlYnVnZnMsIG9yIGNvbmZpZ2ZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JRF9ZVDg4MjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTI1LSNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjY6I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yNy0vKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDY3MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ3NTctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NDc1ODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ3NTktXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz00NzgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00Nzg4LVx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0Nzg5Olx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NzkwLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NDIKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUmIzM5O3MgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHBhdGhzIHRoYXQgYXJlIHJlYWxpc3RpY2FsbHkgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYC4gVGhpcyBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGVudGlyZSBkcml2ZXIsIHJlbGllcyBvbiBhIERldmljZSBUcmVlIChEVCkgZGVzY3JpcHRpb24gb2YgdGhlIFBIWSBwYWNrYWdlLCBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDg4MjQuIFRoZSBEVCBub2RlIHRpZXMgdGhlIFBIWSB0byBhIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBzcGVjaWZpZXMgdGhlIFlUODgyNCBQSFkgY2hpcCB3aXRoIGl0cyBJRC4KClRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwcm9ibGVtOiBUaGlzIGtpbmQgb2YgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgdGhhdCBzcGVjaWZpYyBQSFkgY2hpcCwgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUg4oCTIHRoZXkgYXJlbiYjMzk7dCBnb2luZyB0byBoYXZlIHRoaXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgcHJvcGVybHkgZW11bGF0ZWQgRFQuIFRoaXMgaXMgc3RhbmRhcmQgZXRoZXJuZXQgUEhZIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgdGhhdCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSB0byBiZSBtZWFuaW5nZnVsbHkgdGVzdGVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSBteSBpbml0aWFsIHN1c3BpY2lvbi4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggc2VjdGlvbiAyIG9mIG15IGNyaXRlcmlhLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvZGUgdGhhdCBkZWFscyB3aXRoIGhhcmR3YXJlIHRoYXQgaXMgdmVuZG9yLXNwZWNpZmljLCByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3Qgc2ltdWxhdGVkIGluIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuIFRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBpcyBhIHRleHRib29rIGV4YW1wbGUgb2YgdGhpcyBjYXRlZ29yeS4KClRvIHJlaW5mb3JjZSB0aGlzLCBJIGludmVzdGlnYXRlZCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLiBBIHF1aWNrIGdyZXAgY29uZmlybXMgdGhhdCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gTm8gb3RoZXIgZ2VuZXJpYyBQSFkgY29kZSBvciBldGh0b29sL25ldGxpbmsgY29kZSBjYWxscyBpdC4gVGhpcyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoZSBhcmd1bWVudCB0aGF0IHRoaXMgcGFydGljdWxhciBtb2RpZmllZCBjb2RlIGlzIGZ1bmN0aW9uYWxseSBpc29sYXRlZCBhbmQgb25seSBldmVyIHJ1bnMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGNvZGUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyByZWFsaXN0aWMgd2F5IHRvIHRyaWdnZXIgaXQgd2l0aCBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuCgpJJiMzOTttIHNldHRpbmc6CiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBSZWFzb25pbmdgOiBjb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIGNoaXAgKGFuZCBhIGhlbHBlciBmdW5jdGlvbiBpbiBwaHlsaWIgdXNlZCBleGNsdXNpdmVseSBieSB0aGlzIGRyaXZlciksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIC8gRFQgbm9kZXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMToyNC42MzI2MzYzMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQyMTYxMzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MjQuNjMyNjQyMDM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0ODIzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzM1OTNhYWI2YjdiYzdmMWQ5NTg0YTc3NmY2MTY2ZWZmNGIzZTY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5MDdhNGE3ZTYzZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5AQCAtMCwwICsxLDYzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cXG4rXFxuKyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxcbitcXG4rICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XFxuKyAgICBkZXNjcmlwdGlvbjogfFxcbisgICAgICBQSFkgcGFja2FnZSBpbnRlcmZhY2UgbW9kZS5cXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xcbisgICAgZW51bTpcXG4rICAgICAgLSBpbnRlcm5hbFxcbisgICAgICAtIHVzeGdtaWlcXG4rICAgIGRlZmF1bHQ6IGludGVybmFsXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M5XFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSA9IFxcXCJ1c3hnbWlpXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M0XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M1XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M2XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M3XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXFxuIFxcbiBjb25maWcgTU9UT1JDT01NX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbiBcXHRoZWxwXFxuIFxcdCAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLlxcbi1cXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxcbitcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxcbiBcXG4gY29uZmlnIE5BVElPTkFMX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXFxcIlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5mNDExODZiNWI3MzdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbkBAIC0xLDI0ICsxLDI5IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwicGh5bGliLmhcXFwiXFxuK1xcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XFx0XFx0MHg0ZjUxZThiOFxcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0zMCw2ICszNSwxOCBAQFxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAqL1xcbiBcXG4rLyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XFxuKyAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRVU1hHTUlJIE1JSVxcdCAgICAgICAgfFxcbisgKiB8XFx0VVRQIE1NRFxcdFxcdFxcdHxcXHRcXHRcXHRcXHR8XFxuKyAqIHxcXHRVVFAgRXh0ZW5kZWRcXHRcXHR8XFx0VVNYR01JSSBFeHRlbmRlZFxcdHxcXG4rICogfFxcdFVUUCBUb3AgRXh0ZW5kZWRcXHR8XFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zODEsNiArMzk4LDE1IEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcXHRcXHQoMHgxKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVxcdFxcdFxcdCgweDApXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0MHgxXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFxcdFxcdDB4MFxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cXG4rXFx0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0cmV0IHw9IChwYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjI2LDExICs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiBcXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4gXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xcbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXG4rXFx0cmV0dXJuIG9sZF9wYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcdGRhdGEgPSBvbGRfcGFnZSBcXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdGRhdGEgfD0gcGFnZTtcXG4rXFxuK1xcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXFxuK1xcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXFxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIFxcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi9cXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFxcdTAwM2MgMCkgfHxcXG4rXFx0XFx0XFx0XFx0ISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSB2YWw7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZXQ6IG9wZXJhdGlvbidzIHJldHVybiBjb2RlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXQgPSByO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbityZXRyeTpcXG4rXFx0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHQvKiByZXNldCAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiByZWFkIGVmdXNlICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzEgPSByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8yID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMyA9IHJldDtcXG4rXFxuK1xcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogYW5hbG9nIENEUiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgVkNPICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcXHUwMDNlXFx1MDAzZSA2O1xcbitcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyAxMik7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XFxuK1xcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXHRyZXQgfD0gdG1wO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIExETyAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXFx1MDAzZVxcdTAwM2UgMjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xcbitcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXFx1MDAzZVxcdTAwM2UgNTtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFxcdTAwM2UgOCAqL1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHJlc2V0IHNlcmRlcyAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFxcdTAwM2MgMCkgfHxcXG4rXFx0XFx0XFx0XFx0ISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSB2YWw7XFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgciA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAyLjVHIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIEVNQyBSRSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0LyogcmVzZXQgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xcbiBcXG4tZXJyX3Jlc3RvcmVfcGFnZTpcXG4tXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5AQCAtMzEwNCw2ICs0MjQ1LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRsaW5rID0gISEocmV0IFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgbGluayk7XFxuK1xcdHJldHVybiBsaW5rO1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9IHJldDtcXG4rXFxuK1xcdGxpbmsgPSB2YWwgXFx1MDAyNiBZVFBIWV9TU1JfTElOSztcXG4rXFx0aWYgKGxpbmspXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWxpbmsgPT0gMClcXG4rXFx0XFx0XFx0cGh5ZGV2X2RiZyhwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDEpXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHR9XFxuK1xcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXRyeTpcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwibW90b3Jjb21tLGludGVyZmFjZS1tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcXG4rXFx0XFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcXG4rXFx0XFx0XFx0XFx0KGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIiVzLCBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgbWlzc2luZyBpbiBEVFMuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgX19mdW5jX18pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuQEAgLTMxOTAsMTMgKzQ3NTQsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuIFxcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0XFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxcbitcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyNF9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjRfcmVzdW1lLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcXG4gXFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJQZXRlciBHZWlzXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkt5bGVcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuQEAgLTMyMDYsNiArNDc4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5AQCAtMTQwOCw2ICsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuIFxcbisvKipcXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEB0ZXN0X21vZGU6IHRlc3Rtb2RlIGluY2x1ZGVzIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxcbisgKlxcdHJlYWQvd3JpdGUgZXJyb3IpLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG4re1xcbitcXHRpbnQgY3RybCA9IDA7XFxuK1xcbitcXHRzd2l0Y2ggKHRlc3RfbW9kZSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDU6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNjpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA3OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxcbitcXHRcXHRcXHQgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcXG4rXFxuIC8qKlxcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcXG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcXG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbkBAIC02Myw2ICs2Myw3IEBAXFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFxcdDEzMFxcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXFx1MDAyNiBwb2xhcml0eSAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXFx0MTMxXFx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuQEAgLTMyMCw2ICszMjEsMTcgQEBcXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXFx0MHgwMDAxXFx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xcbiBcXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXFx0LyogVGVtcGxhdGUgdGVzdCBtb2RlICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFxcdC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgyMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHg0MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg4MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHhhMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHhlMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqL1xcbitcXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cXG4gI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEtcXHQweDAwMDFcXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMToyNS4xMzM3ODg3ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTIwNDQ3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IHF1YWQtcG9ydCAyLjVHYnBzIEV0aGVybmV0IFBIWSBjaGlwIGFuZCBhIGdlbmVyaWMgQzQ1IHRlc3QgbW9kZSBoZWxwZXIgY2FsbGVkIG9ubHkgYnkgdGhpcyBkcml2ZXIuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGFuZCBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbnMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5MDdhNGE3ZTYzZThcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5AQCAtMCwwICsxLDYzIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBLeWxlIFN3aXRjaCBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gZXRoZXJuZXQtcGh5LWlkNGY1MS5lOGI4XG4rXG4rICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XG4rICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgUEhZIHBhY2thZ2UgaW50ZXJmYWNlIG1vZGUuXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xuKyAgICBlbnVtOlxuKyAgICAgIC0gaW50ZXJuYWxcbisgICAgICAtIHVzeGdtaWlcbisgICAgZGVmYXVsdDogaW50ZXJuYWxcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzlcdTAwM2U7XG4rXG4rICAgICAgICAgICAgbW90b3Jjb21tLGludGVyZmFjZS1tb2RlID0gXCJ1c3hnbWlpXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDQge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M0XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M2XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDcge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M3XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFBIWXNcIlxuK1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4rXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxuIFxuIGNvbmZpZyBOQVRJT05BTF9QSFlcbiBcdHRyaXN0YXRlIFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXCJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLmY0MTE4NmI1YjczN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgKzEsMjkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbisgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTMwLDYgKzM1LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0VVRQIE1JSVx0XHRcdHxcdFVTWEdNSUkgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRVU1hHTUlJIEV4dGVuZGVkXHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICszOTgsMTUgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTFcdFx0MHgxXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4rI2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4rXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTksNiArNDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuK3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuK1x0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xuK1x0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXG4rXHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4rfTtcbitcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiArNDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdCAgICAgICB1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuK31cbitcbisvKipcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbitcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuK1xuK2VycjpcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjI2LDExICs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiBcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXG4rXHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRkYXRhIHw9IHBhZ2U7XG4rXG4rXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWw7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4rXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgdmFsID0gMDtcbitcdGludCByZXQgPSAtMTtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXG4rXHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbitcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0ID0gdmFsO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZXQ6IG9wZXJhdGlvbidzIHJldHVybiBjb2RlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcjtcbitcbitcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXG4rXHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRcdHJldCA9IHI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbityZXRyeTpcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcjtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGVuYWJsZSBuaWJibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHQvKiByZXNldCAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc3RvcmU6XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVzdG9yZV9ub3JtYWw6XG4rXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbitcdGludCByZXQgPSAtMTtcbitcdGludCB2YWw7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZWFkIGVmdXNlICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMSA9IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8yID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzMgPSByZXQ7XG4rXG4rXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBhbmFsb2cgQ0RSICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgVkNPICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRyZXQgfD0gdG1wO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIExETyAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuK1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuK1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXHUwMDNlXHUwMDNlIDU7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbitcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIHJlc2V0IHNlcmRlcyAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4rXHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHIgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogRU1DIENTLCBJbmNvbnNpc3RlbnQgd2l0aCBleHRlcm5hbCBwaHkgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIEVNQyBSRSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHQvKiByZXNldCAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQ1LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0fVxuK1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1x0aW50IHI7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuK1x0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cbitcdCAqL1xuK1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcGh5X2N0cmwgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuK1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbitcbitcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuK1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4rXHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiJXMsIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cIixcbitcdFx0XHQgICAgX19mdW5jX18pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICs0NzU0LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgKzQ3ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuKyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuK3tcbitcdGludCBjdHJsID0gMDtcbitcbitcdHN3aXRjaCAodGVzdF9tb2RlKSB7XG4rXHRjYXNlIDA6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSAxOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDI6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgMzpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA0OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDU6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNjpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA3OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXG4rXHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuK1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzNTcsNiArMjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCAwNmY0YmMzYzIwYzcxLi44NTc2YTQ4ODc3YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTYzLDYgKzYzLDcgQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlx0MTMzXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxuIFx0XHRcdFx0XHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlx0MTQ3XHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xuQEAgLTMyMCw2ICszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDBcdC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFx0LyogVGVtcGxhdGUgTm9ybWFsICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHg0MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHhhMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbitcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXHQweDAwMDFcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjIxOjI1LjEzMzc5MDU4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MDg0MDQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBmZXcgZmlsZXMgYWZmZWN0ZWQ6IGRvY3VtZW50YXRpb24sIEtjb25maWcgbW9kaWZpY2F0aW9ucyBzZWxlY3RpbmcgYFBIWV9QQUNLQUdFYCBmb3IgYE1PVE9SQ09NTV9QSFlgLCB0aGUgYWN0dWFsIGRyaXZlciBjb2RlIGZvciB0aGUgWVQ4ODI0IFBIWSwgYSBoZWxwZXIgZnVuY3Rpb24gYWRkaXRpb24gaW4gYHBoeS1jNDUuY2AgY2FsbGVkIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgdGhlIGRlY2xhcmF0aW9uIG9mIHRoYXQgaGVscGVyLCBhbmQgc29tZSBkZWZpbml0aW9ucyBpbiBgbWRpby5oYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHksIHJpZ2h0PyBDYW4gd2UgaGl0IHRoaXMgc3R1ZmYgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCBsaWtlIHN5emthbGxlciBvciBhIHJlZ3VsYXIgUUVNVSBlbnZpcm9ubWVudD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgUEhZIGRyaXZlcnMsIHBhcnRpY3VsYXJseSBldGhlcm5ldCBQSFkgZHJpdmVycyB0aGF0IGF0dGFjaCB2aWEgdGhlIE1ESU8gYnVzLiBDYW4gd2UgcHJvYmUgdGhlbSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IEkgaGF2ZSB0byByZW1lbWJlciBob3cgdGhpcyBhbGwgd29ya3MuLi4gUEhZIGRyaXZlcnMgYXJlIHByb2JlZCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLiBTbywgbGlrZSwgYG1kaW8tYml0YmFuZ2AsIGBtZGlvLWdwaW9gLCBgZml4ZWQtbWRpb2AsIG9yIE1BQy1zcGVjaWZpYyBNRElPIGJ1c2VzIHN1Y2ggYXMgYGZlY2AgYW5kIGBzdG1tYWNgIHdpbGwgZG8gdGhlIHRyaWNrLlxuXG5CdXQgdGhpcyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCBzcGVjaWZpY2FsbHkuLi4gaXMgaXQgYSBoYXJkd2FyZS1kZXBlbmRlbnQgUEhZIGRyaXZlcj8gRG9lcyBpdCAqcmVxdWlyZSogc3BlY2lmaWMgaGFyZHdhcmUgdG8gd29yaywgb3IgY2FuIHdlIHNpbXVsYXRlIG9yIG1vY2sgdGhlIE1ESU8gYnVzIGFuZCBwcm9iZSBpdD8gQ2FuIHdlIGNyZWF0ZSBhIHZpcnR1YWwgZGV2aWNlIHdpdGggdGhlIGBQSFlfSURfWVQ4ODI0YCBJRCBhbmQgdHJpZ2dlciB0aGUgZHJpdmVyIHRvIHByb2JlP1xuXG5BbmQgd2hhdCBhYm91dCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBmdW5jdGlvbj8gVGhhdCdzIGluIGBwaHktYzQ1LmNgLCBidXQgd2hvIGFjdHVhbGx5IHVzZXMgaXQ/IEFoLCByaWdodCwgdGhlIGNvZGUgbWVudGlvbnMgdGhhdCAqb25seSogYG1vdG9yY29tbS5jYCBpcyBjYWxsaW5nIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYC4gR29vZCB0byBrbm93ISBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBhbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQgZnVuY3Rpb24sIG9yIGlmIGl0J3Mgc29tZWhvdyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgaXQncyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5LCB0aGF0IG1ha2VzIGZ1enppbmcgYSBiaXQgdHJpY2tpZXIsIGJ1dCBzdGlsbCBkb2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MzEuNTQyMTk2ODg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQyNzI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9Nzc3PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4NC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6Nzg1OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4Ni1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MT1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0OC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ5OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg1MC1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz05Nzk9c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzItXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyMzM6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjM0LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ny1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0ODpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDktXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI2MC1lcnJfcmVzdG9yZV9ub3JtYWw6XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyNjE6XFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYyLVxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTIwPXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNC1cXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzA1OlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNi1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTktXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MjA6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzIxLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzEtZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzMyOlxcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1cXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDExLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDYzLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0NjQ6RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDY1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMzU5PWludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MzMuNDE2NDc3MDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3ODQ5NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAqKlxuXG5Pa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgcmVzaWRlcyB3aXRoaW4gYHBoeS1jNDUuY2AgYW5kLCBhY2NvcmRpbmcgdG8gdGhpcywgaXMgb25seSBpbnZva2VkIGZyb20gYG1vdG9yY29tbS5jYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1vdG9yY29tbS5jYCBpcyBzdHJ1Y3R1cmFsbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50LlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1vdG9yY29tbS5jYCBpcyB0aWVkIHRvIHRoZSBNb3RvckNvbW0gWVQ4ODI0LCBhIHBoeXNpY2FsIEV0aGVybmV0IFBIWS4gVGhlIHF1ZXN0aW9uIGlzIGNhbiBJIGV2ZW4gcHJvYmUgb3IgcnVuIGBtb3RvcmNvbW0uY2Agd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIsIHBoeXNpY2FsIFBIWSBhbmQgTURJTyBidXMgYmVpbmcgcHJlc2VudD8gTGV0IG1lIHJldmlldyB0aGUgY29uc3RyYWludHMgaW4gc2VjdGlvbiAyIG9mIHRoZXNlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgd2UgYXJlOiB0aGUgbWVudGlvbiBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0IGhpZ2hsaWdodHMgc3BlY2lmaWMgZXhhbXBsZXMgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhpbmdzIGRlcGVuZGVudCBvbiBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBzaW11bGF0ZWQgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LiBBbmQgeWVzLCBpdCBleHBsaWNpdGx5IHBvaW50cyBvdXQgdGhhdCBQSFkgZHJpdmVycyDigJMgTW90b3Jjb21tLCBSZWFsdGVrLCBCcm9hZGNvbSwgZXRjLiDigJMgYXJlIHJlbGlhbnQgb24gYWN0dWFsIE1ESU8gaGFyZHdhcmUgb3IgYXQgbGVhc3QgYW4gTURJTyBidXMgd2l0aCB0aGUgY29ycmVjdCBQSFkgZGV2aWNlIElEIGluIHJlZ2lzdGVycyAyIGFuZCAzLlxuXG5SaWdodCwgc28gY2FuIFFFTVUgZW11bGF0ZSBhIFlUODgyND8gVGhlIGFuc3dlciBpcyBubywgaXQgZG9lc27igJl0LiBPa2F5LCBpcyB0aGVyZSBldmVuIGEgdmlydHVhbCBQSFkgZGV2aWNlIG9yIE1ESU8gYnVzIHRoYXQgbWlnaHQgaW5zdGFudGlhdGUgYG1vdG9yY29tbV9waHlfZHJ2c2A/IEkgc2hvdWxkIGNoZWNrIGlmIE1ESU8gb3IgUEhZIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuIEknbGwgY2hlY2sgdmlhIG5ldGxpbmssIGRlYnVnZnMsIG9yIGNvbmZpZ2ZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTozOS42OTQ5NzUyOTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODU1MTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSURfWVQ4ODI0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yNS0jZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjI2OiNkZWZpbmUgUEhZX0lEX1lUODgyNFxcdFxcdDB4NGY1MWU4YjhcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMjctLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDY3MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDc1Ny1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjQ3NTg6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NzU5LVxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDc4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00Nzg4LVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjQ3ODk6XFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDc5MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6NDEuNDUzNTMxOTYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYwMDY3NjcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJ3MgRnV6emluZyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSBwYXRocyB0aGF0IGFyZSByZWFsaXN0aWNhbGx5IHJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gSSdtIHN0YXJ0aW5nIHdpdGggdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYC4gVGhpcyBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGVudGlyZSBkcml2ZXIsIHJlbGllcyBvbiBhIERldmljZSBUcmVlIChEVCkgZGVzY3JpcHRpb24gb2YgdGhlIFBIWSBwYWNrYWdlLCBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDg4MjQuIFRoZSBEVCBub2RlIHRpZXMgdGhlIFBIWSB0byBhIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBzcGVjaWZpZXMgdGhlIFlUODgyNCBQSFkgY2hpcCB3aXRoIGl0cyBJRC5cblxuVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW06IFRoaXMga2luZCBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCB0aGF0IHNwZWNpZmljIFBIWSBjaGlwLCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGluayBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSDigJMgdGhleSBhcmVuJ3QgZ29pbmcgdG8gaGF2ZSB0aGlzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByb3Blcmx5IGVtdWxhdGVkIERULiBUaGlzIGlzIHN0YW5kYXJkIGV0aGVybmV0IFBIWSBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYmUgbWVhbmluZ2Z1bGx5IHRlc3RlZC5cblxuTm93LCBsZXQncyBjb25maXJtIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGFsaWducyBwZXJmZWN0bHkgd2l0aCBzZWN0aW9uIDIgb2YgbXkgY3JpdGVyaWEuIEknbSBsb29raW5nIGZvciBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoYXJkd2FyZSB0aGF0IGlzIHZlbmRvci1zcGVjaWZpYywgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IHNpbXVsYXRlZCBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiBUaGUgTW90b3Jjb21tIFlUODgyNCBQSFkgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHRoaXMgY2F0ZWdvcnkuXG5cblRvIHJlaW5mb3JjZSB0aGlzLCBJIGludmVzdGlnYXRlZCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLiBBIHF1aWNrIGdyZXAgY29uZmlybXMgdGhhdCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gTm8gb3RoZXIgZ2VuZXJpYyBQSFkgY29kZSBvciBldGh0b29sL25ldGxpbmsgY29kZSBjYWxscyBpdC4gVGhpcyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoZSBhcmd1bWVudCB0aGF0IHRoaXMgcGFydGljdWxhciBtb2RpZmllZCBjb2RlIGlzIGZ1bmN0aW9uYWxseSBpc29sYXRlZCBhbmQgb25seSBldmVyIHJ1bnMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgY29kZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHJlYWxpc3RpYyB3YXkgdG8gdHJpZ2dlciBpdCB3aXRoIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cblxuSSdtIHNldHRpbmc6XG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFsgXVxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXVxuKiAgIGBSZWFzb25pbmdgOiBjb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIGNoaXAgKGFuZCBhIGhlbHBlciBmdW5jdGlvbiBpbiBwaHlsaWIgdXNlZCBleGNsdXNpdmVseSBieSB0aGlzIGRyaXZlciksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIC8gRFQgbm9kZXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQyLCJPdXRwdXRUb2tlbnMiOjEwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTo1MC4wNTQyMTIxMjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTo1MC4wNTQyMzkwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbfp4f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 08:03:10 +0000 UTC FinishedAt: 2026-09-10 08:21:51 +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+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OTA3YTRhN2U2M2U4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjMgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBLeWxlIFN3aXRjaCBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246IHxcbiYjNDM7ICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbiYjNDM7XG4mIzQzOyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxuJiM0MztcbiYjNDM7ICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjogfFxuJiM0MzsgICAgICBQSFkgcGFja2FnZSBpbnRlcmZhY2UgbW9kZS5cbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xuJiM0MzsgICAgZW51bTpcbiYjNDM7ICAgICAgLSBpbnRlcm5hbFxuJiM0MzsgICAgICAtIHVzeGdtaWlcbiYjNDM7ICAgIGRlZmF1bHQ6IGludGVybmFsXG4mIzQzO1xuJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MztleGFtcGxlczpcbiYjNDM7ICAtIHxcbiYjNDM7ICAgIG1kaW8ge1xuJiM0MzsgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xuJiM0MzsgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDRmNTEuZThiOFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjOVx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSA9IFwmIzM0O3VzeGdtaWlcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M0XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzZcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M3XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0zNjEsOSAmIzQzOzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gUEhZc1wmIzM0O1xuJiM0MztcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuJiM0MztcdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuXG4gXG4gY29uZmlnIE5BVElPTkFMX1BIWVxuIFx0dHJpc3RhdGUgXCYjMzQ7TmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5mNDExODZiNWI3MzdmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICYjNDM7MSwyOSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4mIzQzOyAqIEF1dGhvcjogS3lsZSBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4mIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiAmIzQzOzM1LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbiYjNDM7ICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0VVNYR01JSSBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFVUUCBNSUlcdFx0XHR8XHRVU1hHTUlJIE1JSVx0ICAgICAgICB8XG4mIzQzOyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRVU1hHTUlJIEV4dGVuZGVkXHR8XG4mIzQzOyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICovXG4mIzQzO1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICYjNDM7Mzk4LDE1IEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMVx0XHQweDFcbiYjNDM7I2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MFxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgJiM0Mzs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiAmIzQzOzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0MztcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjYsMTEgJiM0Mzs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiBcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4mIzQzO1x0XHRcdFx0ICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuJiM0MzsgKiBhbmQgc2RzIHNvZnRyZXNldC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXG4mIzQzO1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqL1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbiYjNDM7XHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0aWYgKHZhbCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHZhbDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJldDogb3BlcmF0aW9uJiMzOTtzIHJldHVybiBjb2RlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0ID0gcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztyZXRyeTpcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHV0cCBpbml0XG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogcGxsIGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSBuaWJibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyB0ZW1wbGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplIHV0cCAxMDAwTSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0LyogcmVzZXQgKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuJiM0MztcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdCAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuJiM0MztcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmU6XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6XG4mIzQzO1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIHJlYWQgZWZ1c2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzEgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMiA9IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8zID0gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogYW5hbG9nIENEUiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEpIHwgQklUKDApKTtcbiYjNDM7XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbiYjNDM7XHRyZXQgfD0gdG1wO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0MSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBTZXJkZXMgTERPICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuJiM0MztcdHRtcCA9ICh2YWxfMiBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFx1MDAzZVx1MDAzZSA1O1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcbiYjNDM7XHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIHJlc2V0IHNlcmRlcyAqL1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4mIzQzO1x0XHRcdFx0ISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSB2YWw7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHIgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBwb3dlciBkb3duICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzZDAsIDB4NTIxMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzODgsIDB4YTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAyLjVHIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMCB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIEVNQyBSRSovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHQgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbiYjNDM7XHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlOlxuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOlxuJiM0MztcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiBcbi1lcnJfcmVzdG9yZV9wYWdlOlxuLVx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuQEAgLTMxMDQsNiAmIzQzOzQyNDUsNDI5IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0bGluayA9ICEhKHJldCBcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcdHJldHVybiBsaW5rO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbiYjNDM7XHRcdHJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuJiM0MztcdGlmIChsaW5rKVxuJiM0MztcdFx0eXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpO1xuJiM0MztcbiYjNDM7XHRpZiAobGluaykge1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDApXG4mIzQzO1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocGh5ZGV2LVx1MDAzZWxpbmsgPT0gMSlcbiYjNDM7XHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuJiM0MztcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuJiM0MztcdGNvbnN0IGNoYXIgKmludGVyZmFjZV9tb2RlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcJiMzNDttb3RvcmNvbW0saW50ZXJmYWNlLW1vZGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuJiM0MztcdFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXG4mIzQzO1x0XHRcdFx0cGh5X21vZGVzKFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuJiM0MztcdFx0fSBlbHNlIGlmICghc3RyY2FzZWNtcFxuJiM0MztcdFx0XHRcdChpbnRlcmZhY2VfbW9kZV9uYW1lLFxuJiM0MztcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0OyVzLCBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgbWlzc2luZyBpbiBEVFMuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgX19mdW5jX18pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KSkge1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICYjNDM7NDc1NCwyOSBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4gXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbiYjNDM7XHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHRcdD0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuJiM0MztcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0FVVEhPUihcJiMzNDtQZXRlciBHZWlzXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O0ZyYW5rXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtLeWxlXCYjMzQ7KTtcbiBNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuQEAgLTMyMDYsNiAmIzQzOzQ3ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbiBcdHsgLyogc2VudGluZWwgKi8gfVxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXG5AQCAtMTQwOCw2ICYjNDM7MTQwOCw2MSBAQCBpbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzXG4mIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFNldCB0ZW1wbGF0ZSB0ZXN0bW9kZSBpbmNsdWRlIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXJcbiYjNDM7ICpcdHJlYWQvd3JpdGUgZXJyb3IpLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcbiYjNDM7e1xuJiM0MztcdGludCBjdHJsID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0ZXN0X21vZGUpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgMzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNTpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNjpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgNzpcbiYjNDM7XHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSxcbiYjNDM7XHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XG4mIzQzO1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzNTcsNiAmIzQzOzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbmluZGV4IDA2ZjRiYzNjMjBjNzEuLjg1NzZhNDg4NzdjNmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5AQCAtNjMsNiAmIzQzOzYzLDcgQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcdC8qIFRlc3QgbW9kZSBjb250cm9sICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlJcdDEzM1x0LyogMTBHQkFTRS1UIFNOUiBtYXJnaW4sIGxhbmUgQS5cbiBcdFx0XHRcdFx0ICogTGFuZXMgQi1EIGFyZSBudW1iZXJlZCAxMzQtMTM2LiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1JcdDE0N1x0LyogMTBHQkFTRS1SIGZhc3QgcmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgKi9cbkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQFxuIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXHQweDAwMDFcdC8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi9cbiBcbiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXHQvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwXHQvKiBUZW1wbGF0ZSBOb3JtYWwgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4NjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4YzAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbiYjNDM7XG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45OTA3YTRhN2U2M2U4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwKQEAgLTAsMCAmIzQzOzEsNjMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEt5bGUgU3dpdGNoICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjogfAomIzQzOyAgTW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuCiYjNDM7CiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOAomIzQzOwomIzQzOyAgbW90b3Jjb21tLGludGVyZmFjZS1tb2RlOgomIzQzOyAgICBkZXNjcmlwdGlvbjogfAomIzQzOyAgICAgIFBIWSBwYWNrYWdlIGludGVyZmFjZSBtb2RlLgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9zdHJpbmcKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIGludGVybmFsCiYjNDM7ICAgICAgLSB1c3hnbWlpCiYjNDM7ICAgIGRlZmF1bHQ6IGludGVybmFsCiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgIG1kaW8gewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAgewomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDRmNTEuZThiOCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDs5Jmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgPSAmIzM0O3VzeGdtaWkmIzM0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANCB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs0Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzUmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NiZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANyB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs3Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggYjRlZjkyN2ZkNGE2Ny4uMWRkODBlMDZlMjM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZCiAKIGNvbmZpZyBNT1RPUkNPTU1fUEhZCiAJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gUEhZcyYjMzQ7CiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQogCWhlbHAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy4KLQkgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLgomIzQzOwkgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLgogCiBjb25maWcgTkFUSU9OQUxfUEhZCiAJdHJpc3RhdGUgJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXMmIzM0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCmluZGV4IDkwYTRmODZmMjc1OGIuLmY0MTE4NmI1YjczN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKQEAgLTEsMjQgJiM0MzsxLDI5IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9jbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsjaW5jbHVkZSAmIzM0O3BoeWxpYi5oJiMzNDsKJiM0MzsKICNkZWZpbmUgUEhZX0lEX1lUODUxMQkJMHgwMDAwMDEwYQogI2RlZmluZSBQSFlfSURfWVQ4NTIxCQkweDAwMDAwMTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjIJCTB4NGY1MWU5MjgKICNkZWZpbmUgUEhZX0lEX1lUODUzMQkJMHg0ZjUxZTkxYgogI2RlZmluZSBQSFlfSURfWVQ4NTMxUwkJMHg0ZjUxZTkxYQogI2RlZmluZSBQSFlfSURfWVQ4ODIxCQkweDRmNTFlYTE5CiYjNDM7I2RlZmluZSBQSFlfSURfWVQ4ODI0CQkweDRmNTFlOGI4CiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXcKICAqCVVUUCBSZWdpc3RlciBzcGFjZQl8CUZJQkVSIFJlZ2lzdGVyIHNwYWNlCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMCw2ICYjNDM7MzUsMTggQEAKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3CiYjNDM7ICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJVVNYR01JSSBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CVVTWEdNSUkgTUlJCSAgICAgICAgfAomIzQzOyAqIHwJVVRQIE1NRAkJCXwJCQkJfAomIzQzOyAqIHwJVVRQIEV4dGVuZGVkCQl8CVVTWEdNSUkgRXh0ZW5kZWQJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CVVTWEdNSUkgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfAkJCUNvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzgxLDYgJiM0MzszOTgsMTUgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxCQkweDEKJiM0MzsjZGVmaW5lIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwJCTB4MAomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFCQkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORwkJKDB4NykKJiM0MzsKIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJLyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHMKQEAgLTM5OSw2ICYjNDM7NDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJdTggcmVnX3BhZ2U7CiB9OwogCiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRlcmZhY2VfbW9kZTsKJiM0MzsJLyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDM3LDYgJiM0Mzs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sCiYjNDM7CQkJICAgICAgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7CXJldCB8PSAocGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTYyNiwxMSAmIzQzOzcyMiwxMDU2IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJCXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLAogCQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwogCQlpZiAocmV0ICZsdDsgMCkKLQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvCiYjNDM7ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofllUODgyNF9SU1NSX1NQQUNFX01BU0spOwomIzQzOwlkYXRhIHw9IHBhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gaW52YWxpZCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqLwomIzQzOwlyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZQomIzQzOwkJKHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByZXQgPSAtMTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovCiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLAomIzQzOwkJCSAgIEJNQ1JfUkVTRVQgJmFtcDsgfkJNQ1JfSVNPTEFURSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsICZsdDsgMCkgfHwKJiM0MzsJCQkJISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCTUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1cwomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGUKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJLyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCQlyZXQgPSByOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgc29mdCByZXNldCAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7cmV0cnk6CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHBvd2VyIGRvd24gKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemF0aW9uIHV0cCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBSRSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZToKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6CiYjNDM7CXIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzIgPSByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMyA9IHJldDsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG9wdGltaXphdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFBMTCBsb2NrICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSkgJmd0OyZndDsgNjsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpKSAmZ3Q7Jmd0OyA0OwomIzQzOwlyZXQgfD0gdG1wOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgTERPICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpICZndDsmZ3Q7IDI7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHJlc2V0IHNlcmRlcyAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsICZsdDsgMCkgfHwKJiM0MzsJCQkJISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCiYjNDM7CQkJCTUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgTUFVKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlCiYjNDM7CQkocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CS8qIHJlc2V0ICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlOgomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX25vcm1hbDoKJiM0MzsJciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJcmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJCXJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycjsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTsKIAotZXJyX3Jlc3RvcmVfcGFnZToKLQlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcyBkb25lLCBwaHkgYWRkcjogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB5dDg1MzFfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtMzEwNCw2ICYjNDM7NDI0NSw0MjkgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJcmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CWxpbmsgPSAhIShyZXQgJmFtcDsgWVRQSFlfU1NSX0xJTkspOwomIzQzOwomIzQzOwlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcbiYjMzQ7LAomIzQzOwkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyLCBsaW5rKTsKJiM0MzsJcmV0dXJuIGxpbms7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2UKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IGxpbmsgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F1dG9uZWdfY29tcGxldGUpIHsKJiM0MzsJCXJldCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2YWwgPSByZXQ7CiYjNDM7CiYjNDM7CWxpbmsgPSB2YWwgJmFtcDsgWVRQSFlfU1NSX0xJTks7CiYjNDM7CWlmIChsaW5rKQomIzQzOwkJeXQ4ODIxX2FkanVzdF9zdGF0dXMocGh5ZGV2LCB2YWwpOwomIzQzOwomIzQzOwlpZiAobGluaykgewomIzQzOwkJaWYgKHBoeWRldi0mZ3Q7bGluayA9PSAwKQomIzQzOwkJCXBoeWRldl9kYmcocGh5ZGV2LAomIzQzOwkJCQkgICAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O2xpbmsgPT0gMSkKJiM0MzsJCQlwaHlkZXZfZGJnKHBoeWRldiwKJiM0MzsJCQkJICAgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cbiYjMzQ7LAomIzQzOwkJCQkgICBfX2Z1bmNfXywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwkJcGh5ZGV2LSZndDtsaW5rID0gMDsKJiM0MzsJfQomIzQzOwlwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiB1dHAgcG93ZXIgb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbgomIzQzOwkgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9kb3duKCkgIC0gc2V0IHV0cCBwb3dlciBkb3duLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JldHJ5OgomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb24KJiM0MzsJICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvbgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHBoeV9jdHJsID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJICAgICAgcGh5ZGV2LSZndDthZHZlcnRpc2luZykpCiYjNDM7CQlwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLAomIzQzOwkJCQkgICAgIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpOwomIzQzOwljb25zdCBjaGFyICppbnRlcmZhY2VfbW9kZV9uYW1lOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXNlIHNoYXJlZCBsb2NrIGZvciBZVDg4MjQgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CWlmICghb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICYjMzQ7bW90b3Jjb21tLGludGVyZmFjZS1tb2RlJiMzNDssCiYjNDM7CQkJCSAgICAgJmFtcDtpbnRlcmZhY2VfbW9kZV9uYW1lKSkgewomIzQzOwkJaWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCXBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7CiYjNDM7CQkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTsKJiM0MzsJCX0gZWxzZSBpZiAoIXN0cmNhc2VjbXAKJiM0MzsJCQkJKGludGVyZmFjZV9tb2RlX25hbWUsCiYjNDM7CQkJCSBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHsKJiM0MzsJCQlwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwaHlkZXZfd2FybihwaHlkZXYsICYjMzQ7JXMsIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSBtaXNzaW5nIGluIERUUy5cbiYjMzQ7LAomIzQzOwkJCSAgICBfX2Z1bmNfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzU0LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldCYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg4MjRfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4ODI0X3dyaXRlX3BhZ2UsCiYjNDM7CQkucHJvYmUJCSAgICAgICAgPSB5dDg4MjRfcHJvYmUsCiYjNDM7CQkuY29uZmlnX2FuZWcJCT0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZQkJPSB5dDg4MjRfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CQk9IHl0ODgyNF9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldAkJPSB5dDg4MjRfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCQk9IHl0ODgyNF9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJCT0geXQ4ODI0X3Jlc3VtZSwKJiM0MzsJfSwKIH07CiAKIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O1BldGVyIEdlaXMmIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7RnJhbmsmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0t5bGUmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CkBAIC0zMjA2LDYgJiM0Mzs0Nzg2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7CiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSwKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LAomIzQzOwl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LAogCXsgLyogc2VudGluZWwgKi8gfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCkBAIC0xNDA4LDYgJiM0MzsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTsKIAomIzQzOy8qKgomIzQzOyAqIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgLSBjb25maWd1cmUgdGVtcGxhdGUgdGVzdG1vZGUgcmVnaXN0ZXJzCiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgKGUuZy4gcmVnaXN0ZXIKJiM0MzsgKglyZWFkL3dyaXRlIGVycm9yKS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKQomIzQzO3sKJiM0MzsJaW50IGN0cmwgPSAwOwomIzQzOwomIzQzOwlzd2l0Y2ggKHRlc3RfbW9kZSkgewomIzQzOwljYXNlIDA6CiYjNDM7CQljdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgMzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNToKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNjoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWNhc2UgNzoKJiM0MzsJCWN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83OwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLAomIzQzOwkJCSAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTsKJiM0MzsKIC8qKgogICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzCiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpOwogaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTsKJiM0MztpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTsKIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTsKIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCkBAIC02Myw2ICYjNDM7NjMsNyBAQAogLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTAkxMzAJLyogMTBHQkFTRS1UIHBhaXIgc3dhcCAmYW1wOyBwb2xhcml0eSAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUgkxMzEJLyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMgkvKiBUZXN0IG1vZGUgY29udHJvbCAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TTlIJMTMzCS8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuCiAJCQkJCSAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9DU1IJMTQ3CS8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovCkBAIC0zMjAsNiAmIzQzOzMyMSwxNyBAQAogLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqLwogI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRQkweDAwMDEJLyogRmFzdCByZXRyYWluIGVuYWJsZSAqLwogCiYjNDM7LyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDAJLyogVGVtcGxhdGUgdGVzdCBtb2RlICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwMDAwCS8qIFRlbXBsYXRlIE5vcm1hbCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDIwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4NDAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDgwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4YTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweGUwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovCiYjNDM7CiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqLwogI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEsJMHgwMDAxCS8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi8KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjI2MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGZldyBmaWxlcyBhZmZlY3RlZDogZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBtb2RpZmljYXRpb25zIHNlbGVjdGluZyBgUEhZX1BBQ0tBR0VgIGZvciBgTU9UT1JDT01NX1BIWWAsIHRoZSBhY3R1YWwgZHJpdmVyIGNvZGUgZm9yIHRoZSBZVDg4MjQgUEhZLCBhIGhlbHBlciBmdW5jdGlvbiBhZGRpdGlvbiBpbiBgcGh5LWM0NS5jYCBjYWxsZWQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgLCB0aGUgZGVjbGFyYXRpb24gb2YgdGhhdCBoZWxwZXIsIGFuZCBzb21lIGRlZmluaXRpb25zIGluIGBtZGlvLmhgLgoKVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHksIHJpZ2h0PyBDYW4gd2UgaGl0IHRoaXMgc3R1ZmYgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCBsaWtlIHN5emthbGxlciBvciBhIHJlZ3VsYXIgUUVNVSBlbnZpcm9ubWVudD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIFBIWSBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgZXRoZXJuZXQgUEhZIGRyaXZlcnMgdGhhdCBhdHRhY2ggdmlhIHRoZSBNRElPIGJ1cy4gQ2FuIHdlIHByb2JlIHRoZW0gaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJIGhhdmUgdG8gcmVtZW1iZXIgaG93IHRoaXMgYWxsIHdvcmtzLi4uIFBIWSBkcml2ZXJzIGFyZSBwcm9iZWQgd2hlbiB0aGUgTURJTyBidXMgaXMgc2Nhbm5lZC4gU28sIGxpa2UsIGBtZGlvLWJpdGJhbmdgLCBgbWRpby1ncGlvYCwgYGZpeGVkLW1kaW9gLCBvciBNQUMtc3BlY2lmaWMgTURJTyBidXNlcyBzdWNoIGFzIGBmZWNgIGFuZCBgc3RtbWFjYCB3aWxsIGRvIHRoZSB0cmljay4KCkJ1dCB0aGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgIHNwZWNpZmljYWxseS4uLiBpcyBpdCBhIGhhcmR3YXJlLWRlcGVuZGVudCBQSFkgZHJpdmVyPyBEb2VzIGl0ICpyZXF1aXJlKiBzcGVjaWZpYyBoYXJkd2FyZSB0byB3b3JrLCBvciBjYW4gd2Ugc2ltdWxhdGUgb3IgbW9jayB0aGUgTURJTyBidXMgYW5kIHByb2JlIGl0PyBDYW4gd2UgY3JlYXRlIGEgdmlydHVhbCBkZXZpY2Ugd2l0aCB0aGUgYFBIWV9JRF9ZVDg4MjRgIElEIGFuZCB0cmlnZ2VyIHRoZSBkcml2ZXIgdG8gcHJvYmU/CgpBbmQgd2hhdCBhYm91dCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBmdW5jdGlvbj8gVGhhdCYjMzk7cyBpbiBgcGh5LWM0NS5jYCwgYnV0IHdobyBhY3R1YWxseSB1c2VzIGl0PyBBaCwgcmlnaHQsIHRoZSBjb2RlIG1lbnRpb25zIHRoYXQgKm9ubHkqIGBtb3RvcmNvbW0uY2AgaXMgY2FsbGluZyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIEdvb2QgdG8ga25vdyEgTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgYW55dGhpbmcgZWxzZSBjYWxscyB0aGF0IGZ1bmN0aW9uLCBvciBpZiBpdCYjMzk7cyBzb21laG93IGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBJZiBpdCYjMzk7cyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5LCB0aGF0IG1ha2VzIGZ1enppbmcgYSBiaXQgdHJpY2tpZXIsIGJ1dCBzdGlsbCBkb2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9Nzc3PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy03ODQtXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6Nzg1Olx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy03ODYtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MT1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy04NDgtXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ5Olx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy04NTAtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz05Nzk9c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjMyLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyMzM6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzNC1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ny1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjQ4Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDktXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYwLWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjYxOlx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNjItXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9MTUyMD1zdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzA0LVx0XHRnb3RvIGVycl9yZXN0b3JlO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MDU6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNi1cdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxOS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzIwOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MjEtXHRcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzMxLWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzMyOlx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzMtXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0NjMtfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDY0OkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDY1LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjM1OT1pbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgcmVzaWRlcyB3aXRoaW4gYHBoeS1jNDUuY2AgYW5kLCBhY2NvcmRpbmcgdG8gdGhpcywgaXMgb25seSBpbnZva2VkIGZyb20gYG1vdG9yY29tbS5jYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1vdG9yY29tbS5jYCBpcyBzdHJ1Y3R1cmFsbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50LgoKTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBtb3RvcmNvbW0uY2AgaXMgdGllZCB0byB0aGUgTW90b3JDb21tIFlUODgyNCwgYSBwaHlzaWNhbCBFdGhlcm5ldCBQSFkuIFRoZSBxdWVzdGlvbiBpcyBjYW4gSSBldmVuIHByb2JlIG9yIHJ1biBgbW90b3Jjb21tLmNgIHdpdGhvdXQgdGhpcyBwYXJ0aWN1bGFyLCBwaHlzaWNhbCBQSFkgYW5kIE1ESU8gYnVzIGJlaW5nIHByZXNlbnQ/IExldCBtZSByZXZpZXcgdGhlIGNvbnN0cmFpbnRzIGluIHNlY3Rpb24gMiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMuIEFoLCBoZXJlIHdlIGFyZTogdGhlIG1lbnRpb24gb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBJdCBoaWdobGlnaHRzIHNwZWNpZmljIGV4YW1wbGVzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMg4oCTIHRoaW5ncyBkZXBlbmRlbnQgb24gQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3Qgc2ltdWxhdGVkIGluIHRoZSB0eXBpY2FsIFFFTVUgY29udGV4dC4gQW5kIHllcywgaXQgZXhwbGljaXRseSBwb2ludHMgb3V0IHRoYXQgUEhZIGRyaXZlcnMg4oCTIE1vdG9yY29tbSwgUmVhbHRlaywgQnJvYWRjb20sIGV0Yy4g4oCTIGFyZSByZWxpYW50IG9uIGFjdHVhbCBNRElPIGhhcmR3YXJlIG9yIGF0IGxlYXN0IGFuIE1ESU8gYnVzIHdpdGggdGhlIGNvcnJlY3QgUEhZIGRldmljZSBJRCBpbiByZWdpc3RlcnMgMiBhbmQgMy4KClJpZ2h0LCBzbyBjYW4gUUVNVSBlbXVsYXRlIGEgWVQ4ODI0PyBUaGUgYW5zd2VyIGlzIG5vLCBpdCBkb2VzbuKAmXQuIE9rYXksIGlzIHRoZXJlIGV2ZW4gYSB2aXJ0dWFsIFBIWSBkZXZpY2Ugb3IgTURJTyBidXMgdGhhdCBtaWdodCBpbnN0YW50aWF0ZSBgbW90b3Jjb21tX3BoeV9kcnZzYD8gSSBzaG91bGQgY2hlY2sgaWYgTURJTyBvciBQSFkgZGV2aWNlcyBjYW4gYmUgY3JlYXRlZCBmcm9tIHVzZXJzcGFjZS4gSSYjMzk7bGwgY2hlY2sgdmlhIG5ldGxpbmssIGRlYnVnZnMsIG9yIGNvbmZpZ2ZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BIWV9JRF9ZVDg4MjQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTI1LSNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MjY6I2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yNy0vKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDY3MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ3NTctXHR7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NDc1ODpcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTQ3NTktXHRcdC5uYW1lXHRcdFx0PSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz00NzgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00Nzg4LVx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0Nzg5Olx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NzkwLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NDIKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogNTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvZGUmIzM5O3MgRnV6emluZyBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjb2RlIHBhdGhzIHRoYXQgYXJlIHJlYWxpc3RpY2FsbHkgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiBJJiMzOTttIHN0YXJ0aW5nIHdpdGggdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYC4gVGhpcyBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGVudGlyZSBkcml2ZXIsIHJlbGllcyBvbiBhIERldmljZSBUcmVlIChEVCkgZGVzY3JpcHRpb24gb2YgdGhlIFBIWSBwYWNrYWdlLCBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDg4MjQuIFRoZSBEVCBub2RlIHRpZXMgdGhlIFBIWSB0byBhIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBzcGVjaWZpZXMgdGhlIFlUODgyNCBQSFkgY2hpcCB3aXRoIGl0cyBJRC4KClRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwcm9ibGVtOiBUaGlzIGtpbmQgb2YgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgdGhhdCBzcGVjaWZpYyBQSFkgY2hpcCwgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUg4oCTIHRoZXkgYXJlbiYjMzk7dCBnb2luZyB0byBoYXZlIHRoaXMgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgb3IgcHJvcGVybHkgZW11bGF0ZWQgRFQuIFRoaXMgaXMgc3RhbmRhcmQgZXRoZXJuZXQgUEhZIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgdGhhdCBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSB0byBiZSBtZWFuaW5nZnVsbHkgdGVzdGVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSBteSBpbml0aWFsIHN1c3BpY2lvbi4gVGhpcyBhbGlnbnMgcGVyZmVjdGx5IHdpdGggc2VjdGlvbiAyIG9mIG15IGNyaXRlcmlhLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNvZGUgdGhhdCBkZWFscyB3aXRoIGhhcmR3YXJlIHRoYXQgaXMgdmVuZG9yLXNwZWNpZmljLCByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQ3Mgb3IgUENJZSBjYXJkcyBub3Qgc2ltdWxhdGVkIGluIGNvbW1vbiB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuIFRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBpcyBhIHRleHRib29rIGV4YW1wbGUgb2YgdGhpcyBjYXRlZ29yeS4KClRvIHJlaW5mb3JjZSB0aGlzLCBJIGludmVzdGlnYXRlZCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLiBBIHF1aWNrIGdyZXAgY29uZmlybXMgdGhhdCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gTm8gb3RoZXIgZ2VuZXJpYyBQSFkgY29kZSBvciBldGh0b29sL25ldGxpbmsgY29kZSBjYWxscyBpdC4gVGhpcyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoZSBhcmd1bWVudCB0aGF0IHRoaXMgcGFydGljdWxhciBtb2RpZmllZCBjb2RlIGlzIGZ1bmN0aW9uYWxseSBpc29sYXRlZCBhbmQgb25seSBldmVyIHJ1bnMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGNvZGUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIGlzICpzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUqIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZSBpcyBubyByZWFsaXN0aWMgd2F5IHRvIHRyaWdnZXIgaXQgd2l0aCBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuCgpJJiMzOTttIHNldHRpbmc6CiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UKKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBSZWFzb25pbmdgOiBjb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIGNoaXAgKGFuZCBhIGhlbHBlciBmdW5jdGlvbiBpbiBwaHlsaWIgdXNlZCBleGNsdXNpdmVseSBieSB0aGlzIGRyaXZlciksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIC8gRFQgbm9kZXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDA4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMToyNC42MzI2MzYzMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQyMTYxMzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MjQuNjMyNjQyMDM5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA0ODIzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NzM1OTNhYWI2YjdiYzdmMWQ5NTg0YTc3NmY2MTY2ZWZmNGIzZTY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5MDdhNGE3ZTYzZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcXG5AQCAtMCwwICsxLDYzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcXG4rXFxuK21haW50YWluZXJzOlxcbisgIC0gS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246IHxcXG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cXG4rXFxuKyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIGV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxcbitcXG4rICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XFxuKyAgICBkZXNjcmlwdGlvbjogfFxcbisgICAgICBQSFkgcGFja2FnZSBpbnRlcmZhY2UgbW9kZS5cXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xcbisgICAgZW51bTpcXG4rICAgICAgLSBpbnRlcm5hbFxcbisgICAgICAtIHVzeGdtaWlcXG4rICAgIGRlZmF1bHQ6IGludGVybmFsXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcImV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M5XFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSA9IFxcXCJ1c3hnbWlpXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M0XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M1XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M2XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M3XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXFxuIFxcbiBjb25maWcgTU9UT1JDT01NX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbiBcXHRoZWxwXFxuIFxcdCAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLlxcbi1cXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxcbitcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxcbiBcXG4gY29uZmlnIE5BVElPTkFMX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXFxcIlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5mNDExODZiNWI3MzdmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbkBAIC0xLDI0ICsxLDI5IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuIFxcbisjaW5jbHVkZSBcXFwicGh5bGliLmhcXFwiXFxuK1xcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcXHRcXHQweDAwMDAwMTBhXFxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVxcdFxcdDB4MDAwMDAxMWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXFx0XFx0MHg0ZjUxZTkyOFxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcXHRcXHQweDRmNTFlOTFiXFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcXHRcXHQweDRmNTFlOTFhXFxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVxcdFxcdDB4NGY1MWVhMTlcXG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XFx0XFx0MHg0ZjUxZThiOFxcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4gICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkBAIC0zMCw2ICszNSwxOCBAQFxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAqL1xcbiBcXG4rLyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XFxuKyAqXFx0VVRQIFJlZ2lzdGVyIHNwYWNlXFx0fFxcdFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRVU1hHTUlJIE1JSVxcdCAgICAgICAgfFxcbisgKiB8XFx0VVRQIE1NRFxcdFxcdFxcdHxcXHRcXHRcXHRcXHR8XFxuKyAqIHxcXHRVVFAgRXh0ZW5kZWRcXHRcXHR8XFx0VVNYR01JSSBFeHRlbmRlZFxcdHxcXG4rICogfFxcdFVUUCBUb3AgRXh0ZW5kZWRcXHR8XFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zODEsNiArMzk4LDE1IEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcXHRcXHQoMHgxKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVxcdFxcdFxcdCgweDApXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxXFx0XFx0MHgxXFxuKyNkZWZpbmUgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTFxcdFxcdDB4MFxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cXG4rXFx0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0cmV0IHw9IChwYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjI2LDExICs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiBcXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4gXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xcbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXG4rXFx0cmV0dXJuIG9sZF9wYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gb2xkX3BhZ2U7XFxuK1xcdGRhdGEgPSBvbGRfcGFnZSBcXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdGRhdGEgfD0gcGFnZTtcXG4rXFxuK1xcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXFxuK1xcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXFxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogc2RzIHNvZnRyZXNldCBhbmQgZGlzYWJsZSBpc29sYXRlICovXFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIFxcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi9cXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFxcdTAwM2MgMCkgfHxcXG4rXFx0XFx0XFx0XFx0ISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSB2YWw7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZXQ6IG9wZXJhdGlvbidzIHJldHVybiBjb2RlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXQgPSByO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbityZXRyeTpcXG4rXFx0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIGVuYWJsZSBuaWJibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDEwME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGJlLCAweDY0MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBSRSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHQvKiByZXNldCAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHQgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG4rXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbitcXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiByZWFkIGVmdXNlICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzEgPSByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8yID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMyA9IHJldDtcXG4rXFxuK1xcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogYW5hbG9nIENEUiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgVkNPICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcXHUwMDNlXFx1MDAzZSA2O1xcbitcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyAxMik7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XFxuK1xcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcXHUwMDNlXFx1MDAzZSA0O1xcbitcXHRyZXQgfD0gdG1wO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIExETyAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXFx1MDAzZVxcdTAwM2UgMjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xcbitcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXFx1MDAzZVxcdTAwM2UgNTtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFxcdTAwM2UgOCAqL1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0IFxcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XFxuK1xcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHJlc2V0IHNlcmRlcyAqL1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLCAodmFsIFxcdTAwM2MgMCkgfHxcXG4rXFx0XFx0XFx0XFx0ISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0NTAwMDAsIDYwMDAwMCwgdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7XFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSB2YWw7XFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgciA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAyLjVHIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMCB0ZW1wYXRlIE1BVSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIEVNQyBSRSovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjLCAweDQxYTEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbitcXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0LyogcmVzZXQgKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcXG4rXFx0XFx0XFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHQgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpO1xcbiBcXG4tZXJyX3Jlc3RvcmVfcGFnZTpcXG4tXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHJldHVybiByZXQ7XFxuK2VycjpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5AQCAtMzEwNCw2ICs0MjQ1LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIHl0ODgyMV9tb2RpZnlfdXRwX2ZpYmVyX2JtY3IocGh5ZGV2LCBCTUNSX1BET1dOLCAwKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XFxuK1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogbGluayBzdGF0dXMgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRsaW5rID0gISEocmV0IFxcdTAwMjYgWVRQSFlfU1NSX0xJTkspO1xcbitcXG4rXFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdCAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgbGluayk7XFxuK1xcdHJldHVybiBsaW5rO1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3JlYWRfc3RhdHVzKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlYXV0b25lZ19jb21wbGV0ZSkge1xcbitcXHRcXHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9IHJldDtcXG4rXFxuK1xcdGxpbmsgPSB2YWwgXFx1MDAyNiBZVFBIWV9TU1JfTElOSztcXG4rXFx0aWYgKGxpbmspXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFxuK1xcdGlmIChsaW5rKSB7XFxuK1xcdFxcdGlmIChwaHlkZXYtXFx1MDAzZWxpbmsgPT0gMClcXG4rXFx0XFx0XFx0cGh5ZGV2X2RiZyhwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDEpXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBfX2Z1bmNfXywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAwO1xcbitcXHR9XFxuK1xcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKCkgIC0gc2V0IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIG9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityZXRyeTpcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiB1dHAgcG93ZXIgZG93biAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxcbitcXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcGh5X2N0cmwgPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcXFwibW90b3Jjb21tLGludGVyZmFjZS1tb2RlXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aW50ZXJmYWNlX21vZGVfbmFtZSkpIHtcXG4rXFx0XFx0aWYgKCFzdHJjYXNlY21wKGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk7XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXN0cmNhc2VjbXBcXG4rXFx0XFx0XFx0XFx0KGludGVyZmFjZV9tb2RlX25hbWUsXFxuK1xcdFxcdFxcdFxcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHBoeWRldl93YXJuKHBoeWRldiwgXFxcIiVzLCBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGUgbWlzc2luZyBpbiBEVFMuXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgX19mdW5jX18pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqc2hhcmVkX3ByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0e1xcbiBcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuQEAgLTMxOTAsMTMgKzQ3NTQsMjkgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xcbiBcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuIFxcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0XFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxcbitcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyNF9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjRfcmVzdW1lLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcXG4gXFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJQZXRlciBHZWlzXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkt5bGVcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuQEAgLTMyMDYsNiArNDc4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbmluZGV4IDg3MDkyMDMxMWY5YTAuLjUyOGUzZjQxNDMxMTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcXG5AQCAtMTQwOCw2ICsxNDA4LDYxIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XFxuIFxcbisvKipcXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEB0ZXN0X21vZGU6IHRlc3Rtb2RlIGluY2x1ZGVzIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxcbisgKlxcdHJlYWQvd3JpdGUgZXJyb3IpLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG4re1xcbitcXHRpbnQgY3RybCA9IDA7XFxuK1xcbitcXHRzd2l0Y2ggKHRlc3RfbW9kZSkge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgMzpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRjYXNlIDU6XFxuK1xcdFxcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgNjpcXG4rXFx0XFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSA3OlxcbitcXHRcXHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxcbitcXHRcXHRcXHQgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcXG4rXFxuIC8qKlxcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcXG4gaW50IGdlbnBoeV9jNDVfcG1hX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcXG4gaW50IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uODU3NmE0ODg3N2M2ZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxcbkBAIC02Myw2ICs2Myw3IEBAXFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFxcdDEzMFxcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXFx1MDAyNiBwb2xhcml0eSAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXFx0MTMxXFx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzJcXHQvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuQEAgLTMyMCw2ICszMjEsMTcgQEBcXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXFx0MHgwMDAxXFx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xcbiBcXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgMHhFMDAwXFx0LyogVGVtcGxhdGUgdGVzdCBtb2RlICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFxcdC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgyMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHg0MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHg2MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg4MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHhhMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHhjMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHhlMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqL1xcbitcXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cXG4gI2RlZmluZSBNRElPX1BDU18xMEdCUlRfU1RBVDFfQkxLTEtcXHQweDAwMDFcXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMToyNS4xMzM3ODg3ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI0OTIwNDQ3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IHF1YWQtcG9ydCAyLjVHYnBzIEV0aGVybmV0IFBIWSBjaGlwIGFuZCBhIGdlbmVyaWMgQzQ1IHRlc3QgbW9kZSBoZWxwZXIgY2FsbGVkIG9ubHkgYnkgdGhpcyBkcml2ZXIuIFRoaXMgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUEhZIGhhcmR3YXJlIGFuZCBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbnMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSwgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTczNTkzYWFiNmI3YmM3ZjFkOTU4NGE3NzZmNjE2NmVmZjRiM2U2NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDA4OjIxOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk5MDdhNGE3ZTYzZThcbi0tLSAvZGV2L251bGxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5AQCAtMCwwICsxLDYzIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4rJVlBTUwgMS4yXG4rLS0tXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxuK1xuK21haW50YWluZXJzOlxuKyAgLSBLeWxlIFN3aXRjaCBcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gZXRoZXJuZXQtcGh5LWlkNGY1MS5lOGI4XG4rXG4rICBtb3RvcmNvbW0saW50ZXJmYWNlLW1vZGU6XG4rICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgUEhZIHBhY2thZ2UgaW50ZXJmYWNlIG1vZGUuXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3N0cmluZ1xuKyAgICBlbnVtOlxuKyAgICAgIC0gaW50ZXJuYWxcbisgICAgICAtIHVzeGdtaWlcbisgICAgZGVmYXVsdDogaW50ZXJuYWxcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcImV0aGVybmV0LXBoeS1pZDRmNTEuZThiOFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzlcdTAwM2U7XG4rXG4rICAgICAgICAgICAgbW90b3Jjb21tLGludGVyZmFjZS1tb2RlID0gXCJ1c3hnbWlpXCI7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDQge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M0XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M2XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDcge1xuKyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M3XHUwMDNlO1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbmluZGV4IGI0ZWY5MjdmZDRhNjcuLjFkZDgwZTA2ZTIzNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFBIWXNcIlxuK1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4rXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxuIFxuIGNvbmZpZyBOQVRJT05BTF9QSFlcbiBcdHRyaXN0YXRlIFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXCJcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLmY0MTE4NmI1YjczN2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgKzEsMjkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbisgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTMwLDYgKzM1LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0VVRQIE1JSVx0XHRcdHxcdFVTWEdNSUkgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRVU1hHTUlJIEV4dGVuZGVkXHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0VVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfFx0XHRcdENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICszOTgsMTUgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTFcdFx0MHgxXG4rI2RlZmluZSBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMXHRcdDB4MFxuKyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLXHRcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIFlUODgyNF9TRFNfRU5fRklMTF9QUkVcdFx0XHRCSVQoMTMpXG4rI2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4rXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTksNiArNDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHR1OCByZWdfcGFnZTtcbiB9O1xuIFxuK3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuK1x0dW5zaWduZWQgaW50IGludGVyZmFjZV9tb2RlO1xuK1x0Lyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovXG4rXHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4rfTtcbitcbiAvKipcbiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiArNDY5LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIFJldHVybnM6IHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3JlYWQocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEpO1xuK31cbitcbisvKipcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcbisgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdCAgICAgICB1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuK31cbitcbisvKipcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbitcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQpO1xuK1xuK2VycjpcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNjI2LDExICs3MjIsMTA1NiBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcbiBcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXG4rXHRyZXR1cm4gb2xkX3BhZ2UgXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXHRkYXRhID0gb2xkX3BhZ2UgXHUwMDI2ICh+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4rXHRkYXRhIHw9IHBhZ2U7XG4rXG4rXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4rfTtcbitcbisvKipcbisgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcbitcdFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX01PREUxKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWw7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovXG4rXHRyZXR1cm4gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbitcdFx0XHRcdCAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgdmFsID0gMDtcbitcdGludCByZXQgPSAtMTtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHNkcyBzb2Z0cmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0ZSAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXG4rXHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBwb2xsIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCwgKHZhbCBcdTAwM2MgMCkgfHxcbitcdFx0XHRcdCEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdDUwMDAwLCA2MDAwMDAsIHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0ID0gdmFsO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKCkgLSBjYWxsZWQgdG8gZG8gc3RvcmUgd29ya2luZyBzdGF0dXNcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZXQ6IG9wZXJhdGlvbidzIHJldHVybiBjb2RlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcjtcbitcbitcdC8qIGNvbmZpZ3VyZSBub3JtYWwgdGVzdCBtb2RlICovXG4rXHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0ciA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRcdHJldCA9IHI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbityZXRyeTpcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcjtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGVuYWJsZSBuaWJibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogaWRsZSBlcnIgZGV0ZWN0IGVuYWJsZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgZmFzdCByZXRyYWluICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMi41RyB0ZW1wbGF0ZSB0b25lICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHQvKiByZXNldCAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc3RvcmU6XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVzdG9yZV9ub3JtYWw6XG4rXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCBzZHMgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3Nkc19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcbitcdGludCByZXQgPSAtMTtcbitcdGludCB2YWw7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZWFkIGVmdXNlICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMSA9IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8yID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzMgPSByZXQ7XG4rXG4rXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBhbmFsb2cgQ0RSICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgVkNPICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXHUwMDNlXHUwMDNlIDY7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgMTIpO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXHUwMDNlXHUwMDNlIDQ7XG4rXHRyZXQgfD0gdG1wO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHR0bXAgPSAodmFsXzMgXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogU2VyZGVzIExETyAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xuK1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuK1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgXHUwMDNlXHUwMDNlIDU7XG4rXHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfUkVTVjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0IFx1MDAyNj0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSztcbitcdHJldCB8PSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIHJlc2V0IHNlcmRlcyAqL1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsICh2YWwgXHUwMDNjIDApIHx8XG4rXHRcdFx0XHQhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQ1MDAwMCwgNjAwMDAwLCB0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHIgPSAwO1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNGEsIDB4ZmYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZCwgMHhkMDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMywgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwIHRlbXBhdGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMCB0ZW1wYXRlIE1BVSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogRU1DIENTLCBJbmNvbnNpc3RlbnQgd2l0aCBleHRlcm5hbCBwaHkgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIEVNQyBSRSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHQvKiByZXNldCAqL1xuK1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbitcdFx0XHQgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXHRyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0ICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxuK1x0XHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQ1LDQyOSBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIixcbitcdFx0ICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LFxuK1x0XHRcdFx0ICAgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rIGRvd25cXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuK1x0fVxuK1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKTogdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpOiB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1x0aW50IHI7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Jlc3VtZSgpIC0gcmVzdW1lIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogTk9URTogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK3JldHJ5OlxuK1x0LypcbitcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuK1x0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cbitcdCAqL1xuK1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpIC0gY29uZmlnIG5lZ290aWF0aW9uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcGh5X2N0cmwgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbitcdFx0XHQgICAgICBwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpKVxuK1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuK1xuK1x0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4rXHRcdFx0XHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxuK1x0XHRcdFx0ICAgICBwaHlfY3RybCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpO1xuK1x0Y29uc3QgY2hhciAqaW50ZXJmYWNlX21vZGVfbmFtZTtcbitcbitcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRpZiAoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCBcIm1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZVwiLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZpbnRlcmZhY2VfbW9kZV9uYW1lKSkge1xuK1x0XHRpZiAoIXN0cmNhc2VjbXAoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkpKSB7XG4rXHRcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJO1xuK1x0XHR9IGVsc2UgaWYgKCFzdHJjYXNlY21wXG4rXHRcdFx0XHQoaW50ZXJmYWNlX21vZGVfbmFtZSxcbitcdFx0XHRcdCBwaHlfbW9kZXMoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSkpIHtcbitcdFx0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwiJXMsIG1vdG9yY29tbSxpbnRlcmZhY2UtbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cIixcbitcdFx0XHQgICAgX19mdW5jX18pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICs0NzU0LDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWVcdFx0XHQ9IFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODI0X2dldF9mZWF0dXJlcyxcbitcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODgyNF9yZWFkX3BhZ2UsXG4rXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgKzQ3ODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uNTI4ZTNmNDE0MzExMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsNjEgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuKyAqXHRyZWFkL3dyaXRlIGVycm9yKS5cbisgKi9cbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuK3tcbitcdGludCBjdHJsID0gMDtcbitcbitcdHN3aXRjaCAodGVzdF9tb2RlKSB7XG4rXHRjYXNlIDA6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUw7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSAxOlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMTtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDI6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yO1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgMzpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzM7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA0OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNDtcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIDU6XG4rXHRcdGN0cmwgPSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81O1xuK1x0XHRicmVhaztcbitcbitcdGNhc2UgNjpcbitcdFx0Y3RybCA9IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzY7XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSA3OlxuK1x0XHRjdHJsID0gTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNztcbitcdFx0YnJlYWs7XG4rXG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXG4rXHRcdFx0ICAgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgY3RybCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuK1xuIC8qKlxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xuICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzNTcsNiArMjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbitpbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xuIGludCBnZW5waHlfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXG5pbmRleCAwNmY0YmMzYzIwYzcxLi44NTc2YTQ4ODc3YzZkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuQEAgLTYzLDYgKzYzLDcgQEBcbiAvKiBNZWRpYS1kZXBlbmRlbnQgcmVnaXN0ZXJzLiAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU1dBUFBPTFx0MTMwXHQvKiAxMEdCQVNFLVQgcGFpciBzd2FwIFx1MDAyNiBwb2xhcml0eSAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcdDEzMVx0LyogMTBHQkFTRS1UIFRYIHBvd2VyIGNvbnRyb2wgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMlx0LyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlx0MTMzXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxuIFx0XHRcdFx0XHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlx0MTQ3XHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xuQEAgLTMyMCw2ICszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyAweEUwMDBcdC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MDAwMFx0LyogVGVtcGxhdGUgTm9ybWFsICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xIDB4MjAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTEgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHg0MDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDYwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV80IDB4ODAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTQgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHhhMDAwIC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweGMwMDAgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV83IDB4ZTAwMCAvKiBUZW1wbGF0ZSBUZXN0TW9kZTcgKi9cbitcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXHQweDAwMDFcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDA4OjIxOjI1LjEzMzc5MDU4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MDg0MDQwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBmZXcgZmlsZXMgYWZmZWN0ZWQ6IGRvY3VtZW50YXRpb24sIEtjb25maWcgbW9kaWZpY2F0aW9ucyBzZWxlY3RpbmcgYFBIWV9QQUNLQUdFYCBmb3IgYE1PVE9SQ09NTV9QSFlgLCB0aGUgYWN0dWFsIGRyaXZlciBjb2RlIGZvciB0aGUgWVQ4ODI0IFBIWSwgYSBoZWxwZXIgZnVuY3Rpb24gYWRkaXRpb24gaW4gYHBoeS1jNDUuY2AgY2FsbGVkIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgdGhlIGRlY2xhcmF0aW9uIG9mIHRoYXQgaGVscGVyLCBhbmQgc29tZSBkZWZpbml0aW9ucyBpbiBgbWRpby5oYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyByZWFjaGFiaWxpdHksIHJpZ2h0PyBDYW4gd2UgaGl0IHRoaXMgc3R1ZmYgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLCBsaWtlIHN5emthbGxlciBvciBhIHJlZ3VsYXIgUUVNVSBlbnZpcm9ubWVudD8gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgUEhZIGRyaXZlcnMsIHBhcnRpY3VsYXJseSBldGhlcm5ldCBQSFkgZHJpdmVycyB0aGF0IGF0dGFjaCB2aWEgdGhlIE1ESU8gYnVzLiBDYW4gd2UgcHJvYmUgdGhlbSBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQ/IEkgaGF2ZSB0byByZW1lbWJlciBob3cgdGhpcyBhbGwgd29ya3MuLi4gUEhZIGRyaXZlcnMgYXJlIHByb2JlZCB3aGVuIHRoZSBNRElPIGJ1cyBpcyBzY2FubmVkLiBTbywgbGlrZSwgYG1kaW8tYml0YmFuZ2AsIGBtZGlvLWdwaW9gLCBgZml4ZWQtbWRpb2AsIG9yIE1BQy1zcGVjaWZpYyBNRElPIGJ1c2VzIHN1Y2ggYXMgYGZlY2AgYW5kIGBzdG1tYWNgIHdpbGwgZG8gdGhlIHRyaWNrLlxuXG5CdXQgdGhpcyBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYCBzcGVjaWZpY2FsbHkuLi4gaXMgaXQgYSBoYXJkd2FyZS1kZXBlbmRlbnQgUEhZIGRyaXZlcj8gRG9lcyBpdCAqcmVxdWlyZSogc3BlY2lmaWMgaGFyZHdhcmUgdG8gd29yaywgb3IgY2FuIHdlIHNpbXVsYXRlIG9yIG1vY2sgdGhlIE1ESU8gYnVzIGFuZCBwcm9iZSBpdD8gQ2FuIHdlIGNyZWF0ZSBhIHZpcnR1YWwgZGV2aWNlIHdpdGggdGhlIGBQSFlfSURfWVQ4ODI0YCBJRCBhbmQgdHJpZ2dlciB0aGUgZHJpdmVyIHRvIHByb2JlP1xuXG5BbmQgd2hhdCBhYm91dCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBmdW5jdGlvbj8gVGhhdCdzIGluIGBwaHktYzQ1LmNgLCBidXQgd2hvIGFjdHVhbGx5IHVzZXMgaXQ/IEFoLCByaWdodCwgdGhlIGNvZGUgbWVudGlvbnMgdGhhdCAqb25seSogYG1vdG9yY29tbS5jYCBpcyBjYWxsaW5nIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYC4gR29vZCB0byBrbm93ISBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBhbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQgZnVuY3Rpb24sIG9yIGlmIGl0J3Mgc29tZWhvdyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gSWYgaXQncyBvbmx5IGNhbGxlZCBpbnRlcm5hbGx5LCB0aGF0IG1ha2VzIGZ1enppbmcgYSBiaXQgdHJpY2tpZXIsIGJ1dCBzdGlsbCBkb2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjYzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MzEuNTQyMTk2ODg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQyNzI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9Nzc3PXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4NC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6Nzg1OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTc4Ni1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MT1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0OC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ5OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg1MC1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz05Nzk9c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzItXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyMzM6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjM0LVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9NT0RFMSk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ny1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0ODpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNDktXFx0XFx0KHBoeWRldiwgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI2MC1lcnJfcmVzdG9yZV9ub3JtYWw6XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyNjE6XFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjYyLVxcdFxcdFxcdFxcdFxcdCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTIwPXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNC1cXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzA1OlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwNi1cXHRcXHQocGh5ZGV2LCBZVDg4MjRfVVRQX1RFTVBMQVRFX1RFU1RfTU9ERTEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTktXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MjA6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzIxLVxcdFxcdChwaHlkZXYsIFlUODgyNF9VVFBfVEVNUExBVEVfVEVTVF9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzEtZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzMyOlxcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTczMy1cXHRcXHRcXHRcXHRcXHQgWVQ4ODI0X1VUUF9URU1QTEFURV9URVNUX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDExLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDYzLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0NjQ6RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDY1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMzU5PWludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6MzMuNDE2NDc3MDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3ODQ5NjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAqKlxuXG5Pa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgcmVzaWRlcyB3aXRoaW4gYHBoeS1jNDUuY2AgYW5kLCBhY2NvcmRpbmcgdG8gdGhpcywgaXMgb25seSBpbnZva2VkIGZyb20gYG1vdG9yY29tbS5jYC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG1vdG9yY29tbS5jYCBpcyBzdHJ1Y3R1cmFsbHkgYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50LlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG1vdG9yY29tbS5jYCBpcyB0aWVkIHRvIHRoZSBNb3RvckNvbW0gWVQ4ODI0LCBhIHBoeXNpY2FsIEV0aGVybmV0IFBIWS4gVGhlIHF1ZXN0aW9uIGlzIGNhbiBJIGV2ZW4gcHJvYmUgb3IgcnVuIGBtb3RvcmNvbW0uY2Agd2l0aG91dCB0aGlzIHBhcnRpY3VsYXIsIHBoeXNpY2FsIFBIWSBhbmQgTURJTyBidXMgYmVpbmcgcHJlc2VudD8gTGV0IG1lIHJldmlldyB0aGUgY29uc3RyYWludHMgaW4gc2VjdGlvbiAyIG9mIHRoZXNlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgd2UgYXJlOiB0aGUgbWVudGlvbiBvZiBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIEl0IGhpZ2hsaWdodHMgc3BlY2lmaWMgZXhhbXBsZXMgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhpbmdzIGRlcGVuZGVudCBvbiBBU0lDcyBvciBQQ0llIGNhcmRzIG5vdCBzaW11bGF0ZWQgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LiBBbmQgeWVzLCBpdCBleHBsaWNpdGx5IHBvaW50cyBvdXQgdGhhdCBQSFkgZHJpdmVycyDigJMgTW90b3Jjb21tLCBSZWFsdGVrLCBCcm9hZGNvbSwgZXRjLiDigJMgYXJlIHJlbGlhbnQgb24gYWN0dWFsIE1ESU8gaGFyZHdhcmUgb3IgYXQgbGVhc3QgYW4gTURJTyBidXMgd2l0aCB0aGUgY29ycmVjdCBQSFkgZGV2aWNlIElEIGluIHJlZ2lzdGVycyAyIGFuZCAzLlxuXG5SaWdodCwgc28gY2FuIFFFTVUgZW11bGF0ZSBhIFlUODgyND8gVGhlIGFuc3dlciBpcyBubywgaXQgZG9lc27igJl0LiBPa2F5LCBpcyB0aGVyZSBldmVuIGEgdmlydHVhbCBQSFkgZGV2aWNlIG9yIE1ESU8gYnVzIHRoYXQgbWlnaHQgaW5zdGFudGlhdGUgYG1vdG9yY29tbV9waHlfZHJ2c2A/IEkgc2hvdWxkIGNoZWNrIGlmIE1ESU8gb3IgUEhZIGRldmljZXMgY2FuIGJlIGNyZWF0ZWQgZnJvbSB1c2Vyc3BhY2UuIEknbGwgY2hlY2sgdmlhIG5ldGxpbmssIGRlYnVnZnMsIG9yIGNvbmZpZ2ZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU1MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTozOS42OTQ5NzUyOTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODU1MTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQSFlfSURfWVQ4ODI0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0yNS0jZGVmaW5lIFBIWV9JRF9ZVDg4MjFcXHRcXHQweDRmNTFlYTE5XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjI2OiNkZWZpbmUgUEhZX0lEX1lUODgyNFxcdFxcdDB4NGY1MWU4YjhcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMjctLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDY3MT1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDc1Ny1cXHR7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjQ3NTg6XFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00NzU5LVxcdFxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9NDc4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy00Nzg4LVxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjQ3ODk6XFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDc5MC1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDg6MjE6NDEuNDUzNTMxOTYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODYwMDY3NjcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlJ3MgRnV6emluZyBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgY29kZSBwYXRocyB0aGF0IGFyZSByZWFsaXN0aWNhbGx5IHJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4gSSdtIHN0YXJ0aW5nIHdpdGggdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYC4gVGhpcyBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgdGhlIGVudGlyZSBkcml2ZXIsIHJlbGllcyBvbiBhIERldmljZSBUcmVlIChEVCkgZGVzY3JpcHRpb24gb2YgdGhlIFBIWSBwYWNrYWdlLCBzcGVjaWZpY2FsbHkgdGhlIE1vdG9yY29tbSBZVDg4MjQuIFRoZSBEVCBub2RlIHRpZXMgdGhlIFBIWSB0byBhIHBoeXNpY2FsIE1ESU8gYnVzIGFuZCBzcGVjaWZpZXMgdGhlIFlUODgyNCBQSFkgY2hpcCB3aXRoIGl0cyBJRC5cblxuVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHByb2JsZW06IFRoaXMga2luZCBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCB0aGF0IHNwZWNpZmljIFBIWSBjaGlwLCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGluayBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSDigJMgdGhleSBhcmVuJ3QgZ29pbmcgdG8gaGF2ZSB0aGlzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHByb3Blcmx5IGVtdWxhdGVkIERULiBUaGlzIGlzIHN0YW5kYXJkIGV0aGVybmV0IFBIWSBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHRoYXQgc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUgdG8gYmUgbWVhbmluZ2Z1bGx5IHRlc3RlZC5cblxuTm93LCBsZXQncyBjb25maXJtIG15IGluaXRpYWwgc3VzcGljaW9uLiBUaGlzIGFsaWducyBwZXJmZWN0bHkgd2l0aCBzZWN0aW9uIDIgb2YgbXkgY3JpdGVyaWEuIEknbSBsb29raW5nIGZvciBjb2RlIHRoYXQgZGVhbHMgd2l0aCBoYXJkd2FyZSB0aGF0IGlzIHZlbmRvci1zcGVjaWZpYywgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUNzIG9yIFBDSWUgY2FyZHMgbm90IHNpbXVsYXRlZCBpbiBjb21tb24gdmlydHVhbGl6YXRpb24gc2NlbmFyaW9zLiBUaGUgTW90b3Jjb21tIFlUODgyNCBQSFkgaXMgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIHRoaXMgY2F0ZWdvcnkuXG5cblRvIHJlaW5mb3JjZSB0aGlzLCBJIGludmVzdGlnYXRlZCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAuIFRoaXMgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBldmFsdWF0aW9uLiBBIHF1aWNrIGdyZXAgY29uZmlybXMgdGhhdCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCB3aXRoaW4gYG1vdG9yY29tbS5jYC4gTm8gb3RoZXIgZ2VuZXJpYyBQSFkgY29kZSBvciBldGh0b29sL25ldGxpbmsgY29kZSBjYWxscyBpdC4gVGhpcyBmdXJ0aGVyIHN0cmVuZ3RoZW5zIHRoZSBhcmd1bWVudCB0aGF0IHRoaXMgcGFydGljdWxhciBtb2RpZmllZCBjb2RlIGlzIGZ1bmN0aW9uYWxseSBpc29sYXRlZCBhbmQgb25seSBldmVyIHJ1bnMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgY29kZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggaXMgKnN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSogaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlIGlzIG5vIHJlYWxpc3RpYyB3YXkgdG8gdHJpZ2dlciBpdCB3aXRoIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cblxuSSdtIHNldHRpbmc6XG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFsgXVxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXVxuKiAgIGBSZWFzb25pbmdgOiBjb25jaXNlIGV4cGxhbmF0aW9uIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIGNoaXAgKGFuZCBhIGhlbHBlciBmdW5jdGlvbiBpbiBwaHlsaWIgdXNlZCBleGNsdXNpdmVseSBieSB0aGlzIGRyaXZlciksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIC8gRFQgbm9kZXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXG5cbkknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjQyLCJPdXRwdXRUb2tlbnMiOjEwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTo1MC4wNTQyMTIxMjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZIGNoaXAgYW5kIGEgZ2VuZXJpYyBDNDUgdGVzdCBtb2RlIGhlbHBlciBjYWxsZWQgb25seSBieSB0aGlzIGRyaXZlci4gVGhpcyByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQSFkgaGFyZHdhcmUgYW5kIERldmljZSBUcmVlIGRlc2NyaXB0aW9ucyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41R2JwcyBFdGhlcm5ldCBQSFkgY2hpcCBhbmQgYSBnZW5lcmljIEM0NSB0ZXN0IG1vZGUgaGVscGVyIGNhbGxlZCBvbmx5IGJ5IHRoaXMgZHJpdmVyLiBUaGlzIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBIWSBoYXJkd2FyZSBhbmQgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb25zIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSksIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwODoyMTo1MC4wNTQyMzkwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowbfp4f[1] Phase: Running StartedAt: 2026-09-10 08:22:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbfp4f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 08:22:01 +0000 UTC FinishedAt: 2026-09-10 08:22:05 +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,}