Name: series-workflow52d95 Phase: Failed StartedAt: 2026-08-31 05:57:11 +0000 UTC FinishedAt: 2026-08-31 06:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52d95[0] Phase: Succeeded StartedAt: 2026-08-31 05:57:11 +0000 UTC FinishedAt: 2026-08-31 06:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52d95[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 05:57:11 +0000 UTC FinishedAt: 2026-08-31 06:19:19 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzZjY5ZTA2YTA1NzE3YmM2YTY3ZWU5YWQ1YmE3YmE5NjlhNGRlYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNjoxODo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjksNiAmIzQzOzI5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbkBAIC03NCw5ICYjNDM7NzUsMzMgQEBcbiAjZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgTlVNX1JYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBSODE2OV9UWF9SSU5HX0JZVEVTXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXb3JrYXJvdW5kIGZvciB0aGUgaGFyZHdhcmUgRE1BIHByZWZldGNoZXIuIFRoZSBIL1cgbWlnaHQgYWdncmVzc2l2ZWx5XG4mIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlXG4mIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbiYjNDM7ICogYWNjZXNzIGFuZCBwb3RlbnRpYWwgSU9NTVUgZmF1bHRzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXHQoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG4mIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFU1x0MTZcbiYjNDM7I2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTXHQ4XG4mIzQzOyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbiYjNDM7I2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXHQxXG4mIzQzOyNkZWZpbmUgUjgxMjdfTUFYX05VTV9JUlFWRUNcdDMyXG4mIzQzOyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG4mIzQzOyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcdDFcbiYjNDM7I2RlZmluZSBSVExfUlNTX0tFWV9TSVpFXHQ0MFxuJiM0MzsjZGVmaW5lIFJTU19DUFVfTlVNX01BU0tcdEdFTk1BU0soMTgsIDE2KVxuJiM0MzsjZGVmaW5lIFJTU19IQVNIX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbiYjNDM7I2RlZmluZSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVMgMTI4XG4mIzQzOyNkZWZpbmUgUlhTX1JTU19VRFBcdFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lIFJYU19SU1NfSVBWNFx0XHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY2XHRcdEJJVCgyOSlcbiYjNDM7I2RlZmluZSBSWFNfUlNTX1RDUFx0XHRCSVQoMzApXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcdChSWFNfUlNTX0lQVjQgfCBSWFNfUlNTX0lQVjYpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19MNF9UWVBFX01BU0tcdChSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKVxuIFxuICNkZWZpbmUgT0NQX1NURF9QSFlfQkFTRVx0MHhhNDAwXG4gXG5AQCAtNDQxLDExICYjNDM7NDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xuIFx0VHhQb2xsXzgxMjVcdFx0PSAweDkwLFxuIFx0TEVEU0VMM1x0XHRcdD0gMHg5NixcbiBcdE1BQzBfQktQXHRcdD0gMHgxOWUwLFxuJiM0MztcdFJEU0FSX1ExX0xPV1x0XHQ9IDB4NDAwMCxcbiBcdFJTU19DVFJMXzgxMjVcdFx0PSAweDQ1MDAsXG4gXHRRX05VTV9DVFJMXzgxMjVcdFx0PSAweDQ4MDAsXG4gXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcdD0gMHg2MDQ4LFxuJiM0MztcdElNUl9DTEVBUl9WRUNfTUFQX1JFR1x0PSAweDBkMDAsXG4mIzQzO1x0SVNSX1ZFQ19NQVBfUkVHXHRcdD0gMHgwZDA0LFxuJiM0MztcdElNUl9TRVRfVkVDX01BUF9SRUdcdD0gMHgwZDBjLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEdcdDI5XG4gI2RlZmluZSBMRURTRUxfTUFTS184MTI1XHQweDIzZlxuIFxuICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1XHRCSVQoMjIpXG5AQCAtNDc0LDYgJiM0Mzs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcdFJ4UlVOVFx0PSAoMSBcdTAwM2NcdTAwM2MgMjApLFxuIFx0UnhDUkNcdD0gKDEgXHUwMDNjXHUwMDNjIDE5KSxcbiBcbiYjNDM7XHRSWFJVTlRfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4mIzQzO1x0UlhDUkNfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1xuIFx0LyogQ2hpcENtZEJpdHMgKi9cbiBcdFN0b3BSZXFcdFx0PSAweDgwLFxuIFx0Q21kUmVzZXRcdD0gMHgxMCxcbkBAIC01NzYsNiAmIzQzOzYwOSwyNSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuJiM0MzsjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuJiM0MzsjZGVmaW5lXHRJU1JJTVJfVE9LX1EwXHRCSVQoOClcbiYjNDM7I2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbiYjNDM7I2RlZmluZSBSU1NfS0VZX1JFR1x0XHRcdDB4NDYwMFxuJiM0MzsjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9SU1NcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNl9TVVBQXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY0X1NVUFBcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY2X1NVUFBcdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lXHRSWF9SRVNfUlNTXHRcdFx0QklUKDIyKVxuJiM0MzsjZGVmaW5lXHRSWF9SVU5UX1JTU1x0XHRcdEJJVCgyMSlcbiYjNDM7I2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBSVExfUlhfUV9OVU1fTUFTS1x0XHRHRU5NQVNLKDQsIDIpXG4gfTtcbiBcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XG5AQCAtNjMzLDYgJiM0Mzs2ODUsMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xuICNkZWZpbmUgUnhQcm90b0lQXHQoUElEMSB8IFBJRDApXG4gI2RlZmluZSBSeFByb3RvTWFza1x0UnhQcm90b0lQXG4gXG4mIzQzOyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbiYjNDM7I2RlZmluZVx0UlhfVENQVF9ERVNDX1JTU1x0QklUKDE4KVxuJiM0MzsjZGVmaW5lXHRSWF9VRFBGX0RFU0NfUlNTXHRCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbiYjNDM7I2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4mIzQzO1xuIFx0SVBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRVRFBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE1KSwgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuIFx0VENQRmFpbFx0XHQ9ICgxIFx1MDAzY1x1MDAzYyAxNCksIC8qIFRDUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbkBAIC02NTQsOSAmIzQzOzcxMSwyNyBAQCBzdHJ1Y3QgVHhEZXNjIHtcbiB9O1xuIFxuIHN0cnVjdCBSeERlc2Mge1xuLVx0X19sZTMyIG9wdHMxO1xuLVx0X19sZTMyIG9wdHMyO1xuLVx0X19sZTY0IGFkZHI7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX0RFRkFVTFQgKi9cbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdF9fbGUzMiBvcHRzMTtcbiYjNDM7XHRcdFx0X19sZTMyIG9wdHMyO1xuJiM0MztcdFx0XHRfX2xlNjQgYWRkcjtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX1JTUyAqL1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdF9fbGU2NCByc3NfYWRkcjtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19pbmZvO1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19yZXN1bHQ7XG4mIzQzO1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czI7XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgcmluZ19pbmZvIHtcbkBAIC03MjgsMjcgJiM0Mzs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4mIzQzO2VudW0gcnhfZGVzY190eXBlIHtcbiYjNDM7XHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRSWF9ERVNDX1RZUEVfUlNTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4mIzQzO1x0dTMyIGN1cl9yeDtcbiYjNDM7XHR1MzIgZGlydHlfcng7XG4mIzQzO1x0c3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTtcbiYjNDM7XHRkbWFfYWRkcl90IHJ4X2Rlc2NfcGh5X2FkZHJbTlVNX1JYX0RFU0NdO1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHU2NCByeF9lcnJvcnM7XG4mIzQzO1x0XHR1NjQgcnhfZHJvcHBlZDtcbiYjNDM7XHRcdHU2NCByeF9sZW5ndGhfZXJyb3JzO1xuJiM0MztcdFx0dTY0IHJ4X2NyY19lcnJvcnM7XG4mIzQzO1x0XHR1NjQgbXVsdGljYXN0O1xuJiM0MztcdFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuJiM0MztcdH0gc3RhdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XG4mIzQzO1x0dTggcnNzX2tleVtSVExfUlNTX0tFWV9TSVpFXTtcbiYjNDM7XHR1OCByc3NfaW5kaXJfdGJsW1JUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFU107XG4mIzQzO1x0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4tXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuLVx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBkaXJ0eV90eDtcbiBcdHN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgVHggZGVzY3JpcHRvciByaW5nICovXG4tXHRzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTtcdC8qIDI1Ni1hbGlnbmVkIFJ4IGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBUeFBoeUFkZHI7XG4tXHRkbWFfYWRkcl90IFJ4UGh5QWRkcjtcbi1cdHN0cnVjdCBwYWdlICpSeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cbiBcdHN0cnVjdCByaW5nX2luZm8gdHhfc2tiW05VTV9UWF9ERVNDXTtcdC8qIFR4IGRhdGEgYnVmZmVycyAqL1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJ4X3Jpbmc7XG4mIzQzO1x0dW5zaWduZWQgaW50IG51bV9yeF9yaW5ncztcbiBcdHUxNiBjcF9jbWQ7XG4gXHR1MTYgdHhfbHBpX3RpbWVyO1xuIFx0dTMyIGlycV9tYXNrO1xuLVx0aW50IGlycTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaXJxX252ZWNzO1xuJiM0MztcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgJiM0MzsxNjgzLDExIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICYjNDM7MTc1NCwzOCBAQCBzdGF0aWMgdTMyIHJ0bF9nZXRfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9hY2tfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgYml0cylcbiB7XG4tXHRpZiAocnRsX2lzXzgxMjUodHApKVxuLVx0XHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgYml0cyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0UlRMX1cxNih0cCwgSW50clN0YXR1cywgYml0cyk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIDApO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMTg2Nyw5ICYjNDM7MTk4OSwyMCBAQCBzdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3R4X3ZsYW5fdGFnKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFR4VmxhblRhZyB8IHN3YWIxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpIDogMHgwMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgUnhEZXNjICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBSeERlc2MgKmRlc2MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMyKTtcbiYjNDM7XHR1MzIgb3B0czI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCAmIzQzOzI1NDksNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbi1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbi1cdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4tXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXG4tXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuLVx0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4tXHQuc2V0X2NvYWxlc2NlXHRcdD0gcnRsX3NldF9jb2FsZXNjZSxcbi1cdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4tXHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbi1cdC5zZXRfd29sXHRcdD0gcnRsODE2OV9zZXRfd29sLFxuLVx0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbi1cdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4tXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbi1cdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4tXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbi1cdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuLVx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4tXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuLVx0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbi1cdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXG4tXHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcbi1cdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4tfTtcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpXG4ge1xuIFx0LyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqL1xuQEAgLTI2MTksOSAmIzQzOzI3MjQsMjYgQEAgc3RhdGljIHZvaWQgcnRsX2luaXRfcnhjZmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LCAweDAsIFI4MTY5X1JYX1JJTkdfQllURVMpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHRwLVx1MDAzZWRpcnR5X3R4ID0gdHAtXHUwMDNlY3VyX3R4ID0gdHAtXHUwMDNlY3VyX3J4ID0gMDtcbiYjNDM7XHR0cC1cdTAwM2VkaXJ0eV90eCA9IDA7XG4mIzQzO1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJpbmctXHUwMDNlZGlydHlfcnggPSAwO1xuJiM0MztcdFx0cmluZy1cdTAwM2VjdXJfcnggPSAwO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgJiM0MzsyODAyLDI5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSAxO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiYjNDM7XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfODA6XG4mIzQzO1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9NQVhfUlhfUVVFVUVTO1xuJiM0MztcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0cnVjdCBydGxfZncgKnJ0bF9mdztcbkBAIC0yODAyLDggJiM0MzsyOTQ3LDYyIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICYjNDM7IDEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggKnJzc19rZXkgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3Nfa2V5O1xuJiM0MztcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xuJiM0MztcbiYjNDM7XHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBSVExfUlNTX0tFWV9TSVpFOyBpICYjNDM7PSBzaXplb2YodTMyKSlcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJzc19rZXlfcmVnICYjNDM7IGksIGdldF91bmFsaWduZWRfbGUzMihyc3Nfa2V5ICYjNDM7IGkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggKmluZGlyX3RibCA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90Ymw7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSAmIzQzOz0gNCkge1xuJiM0MztcdFx0dTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoXHUwMDI2aW5kaXJfdGJsW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyAmIzQzOyBpLCByZXRhKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUzMiByc3NfY3RybDtcbiYjNDM7XG4mIzQzO1x0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncykpO1xuJiM0MztcbiYjNDM7XHQvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovXG4mIzQzO1x0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUCB8XG4mIzQzO1x0XHQgICAgUlNTX0NUUkxfSVBWNF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX0lQVjZfRVhUX1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9VRFBfSVBWNF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9VRFBfSVBWNl9TVVBQO1xuJiM0MztcbiYjNDM7XHRyc3NfY3RybCB8PSBGSUVMRF9QUkVQKFJTU19IQVNIX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgICBpbG9nMih0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzKSk7XG4mIzQzO1xuJiM0MztcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIHJzc19jdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldF9yc3NfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbiYjNDM7XHRydGw4MTY5X3N0b3JlX3JldGEodHApO1xuJiM0MztcdHJ0bDgxNjlfc3RvcmVfcnNzX2tleSh0cCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbMF07XG4mIzQzO1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICYjNDM7MzAxMCwxOCBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICovXG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlVHhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuIFx0UlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRyTG93LCAoKHU2NCkgdHAtXHUwMDNlVHhQaHlBZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4tXHRSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csICgodTY0KSB0cC1cdTAwM2VSeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LFxuJiM0MztcdFx0KCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyAmIzQzOyAoaSAtIDEpICogODtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxuJiM0MztcdFx0XHQoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMzg1OCw2ICYjNDM7NDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUxNiByeF9xX251bTtcbiYjNDM7XHR1MTYgcV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcbiYjNDM7XHRxX2N0cmwgXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XG4mIzQzO1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIHFfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggdG1wO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xuJiM0MztcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbiYjNDM7XHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICYjNDM7NDA5Niw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xuIFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCAwKTtcbiBcbiYjNDM7XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuJiM0MztcbiBcdC8qIGRpc2FibGUgVVBTICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XG4gXG5AQCAtMzg4NSw2ICYjNDM7NDExOCwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFx1MDAyNiB+MHgwMik7XG4gXG4mIzQzO1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzICovXG4mIzQzO1x0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuJiM0MztcdFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xuJiM0MztcdFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXG4mIzQzO1x0XHQgICAgICAgUlRMX1I4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwpIHwgUlRMX0RFU0NfVFlQRV9SU1MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xuIFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbkBAIC00MTIxLDYgJiM0Mzs0MzYxLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHRwLCB0cnVlKTtcbiBcdHJ0bF9zZXRfcnhfbWF4X3NpemUodHApO1xuIFx0cnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7XG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0cnRsX3NldF9yc3NfY29uZmlnKHRwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XG4mIzQzO1x0fVxuIFx0cnRsX2xvY2tfY29uZmlnX3JlZ3ModHApO1xuIFxuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG5AQCAtNDE0OCwxOSAmIzQzOzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4ge1xuLVx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuJiM0MztcdHUzMiBlb3I7XG4gXG4tXHRkZXNjLVx1MDAzZW9wdHMyID0gMDtcbi1cdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXG4tXHRkbWFfd21iKCk7XG4tXHRXUklURV9PTkNFKGRlc2MtXHUwMDNlb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19vcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRcdGRtYV93bWIoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VvcHRzMiA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRcdGRtYV93bWIoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleClcbiB7XG4mIzQzO1x0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSAmIzQzOyBpbmRleDtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTtcbiBcdGRtYV9hZGRyX3QgbWFwcGluZztcbkBAIC00MTc3LDU2ICYjNDM7NDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4tXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcbiYjNDM7XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaW5kZXhdID0gbWFwcGluZztcbiYjNDM7XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbiYjNDM7XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XG4gXG4gXHRyZXR1cm4gZGF0YTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuIFx0XHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxuLVx0XHRcdCAgICAgICBsZTY0X3RvX2NwdSh0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcbiYjNDM7XHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3NfYWRkciA9IDA7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3Nfb3B0czEgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLmFkZHIgPSAwO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ub3B0czEgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZXNjLVx1MDAzZW9wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcbiB7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgJiM0MzsgaSk7XG4mIzQzO1x0XHRkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTtcbiBcdFx0aWYgKCFkYXRhKSB7XG4tXHRcdFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuIFx0fVxuIFxuIFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4mIzQzO1x0cnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgXHUwMDI2cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFx1MDAyNnJpbmctXHUwMDNlcnhfcGh5X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0aWYgKHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuJiM0MztcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LFxuJiM0MztcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4gXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7XG4gXG4gXHRtZW1zZXQodHAtXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXHUwMDNldHhfc2tiKSk7XG4tXHRtZW1zZXQodHAtXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cdTAwM2VSeF9kYXRhYnVmZikpO1xuIFxuLVx0cmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4mIzQzO1x0XHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfY2xlYXI7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2NsZWFyOlxuJiM0MztcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgJiM0Mzs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuYXBpX2Rpc2FibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGludCBuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggJiM0Mzs0NjUwLDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGRtYV9hZGRyX3QgcGh5X2FkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgJiM0Mzsgaik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KVxuLVx0XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBpKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xuIFxuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XG4gXHRydGxfaHdfc3RhcnQodHApO1xuIH1cbiBcbkBAIC00NzU4LDMwICYjNDM7NTExNywxMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2hhc2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJzc19oZWFkZXJfaW5mbztcbiYjNDM7XHR1MzIgaGFzaF92YWw7XG4mIzQzO1xuJiM0MztcdGlmICghKHRwLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWEhBU0gpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyc3NfaGVhZGVyX2luZm8gPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19kd29yZC5yc3NfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmICghKHJzc19oZWFkZXJfaW5mbyBcdTAwMjYgUlhTX1JTU19MM19UWVBFX01BU0spKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoYXNoX3ZhbCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX2R3b3JkLnJzc19yZXN1bHQpO1xuJiM0MztcbiYjNDM7XHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbiYjNDM7XHRcdCAgICAgKFJYU19SU1NfTDRfVFlQRV9NQVNLIFx1MDAyNiByc3NfaGVhZGVyX2luZm8pID9cbiYjNDM7XHRcdCAgICAgUEtUX0hBU0hfVFlQRV9MNCA6IFBLVF9IQVNIX1RZUEVfTDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHMxKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbiYjNDM7XHRib29sIGNzdW1fb2sgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4mIzQzO1x0XHQgICAgKChvcHRzMSBcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXHUwMDI2XHUwMDI2ICEob3B0czEgXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OiB7XG4mIzQzO1x0XHR1MzIgc3RhdHVzID0gb3B0czEgXHUwMDI2IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuJiM0MztcdFx0XHRjc3VtX29rID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHR9XG4gXG4tXHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4mIzQzO1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0XHR1MzIgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJYX1JFU19SU1MpKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX0NSQ19SU1MpXG4mIzQzO1x0XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCxcbiYjNDM7XHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50JiM0MzsmIzQzOywgdHAtXHUwMDNlY3VyX3J4JiM0MzsmIzQzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gdHAtXHUwMDNlY3VyX3J4ICUgTlVNX1JYX0RFU0M7XG4tXHRcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSB0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBlbnRyeTtcbiYjNDM7XHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCByaW5nLVx1MDAzZWN1cl9yeCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVx1MDAzZWN1cl9yeCAlIE5VTV9SWF9ERVNDO1xuJiM0MztcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSAmIzQzOyBlbnRyeTtcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xuIFx0XHRkbWFfYWRkcl90IGFkZHI7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXG4tXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKSk7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShydGw4MTY5X3J4X2Rlc2Nfb3B0czEodHAsIGRlc2MpKTtcbiBcdFx0aWYgKHN0YXR1cyBcdTAwMjYgRGVzY093bilcbiBcdFx0XHRicmVhaztcbiBcbkBAIC00NzkxLDIwICYjNDM7NTIzMSwyNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbiYjNDM7XHRcdGlmIChydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3IocmluZywgdHAsIHN0YXR1cykpIHtcbiBcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuIFx0XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cyk7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgKFJ4UldUIHwgUnhSVU5UKSlcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbi1cdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeENSQylcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcbiBcdFx0XHRpZiAoIShkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhBTEwpKVxuIFx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4tXHRcdFx0ZWxzZSBpZiAoc3RhdHVzIFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXG4tXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkge1xuJiM0MztcdFx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGlmICghKHN0YXR1cyBcdTAwMjYgKFJYUlVOVF9SU1MgfCBSWENSQ19SU1MpKSlcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0cGt0X3NpemUgPSBzdGF0dXMgXHUwMDI2IEdFTk1BU0soMTMsIDApO1xuQEAgLTQ4MTUsMTkgJiM0Mzs1MjU5LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdCAqIFRoZXkgYXJlIHNlZW4gYXMgYSBzeW1wdG9tIG9mIG92ZXItbXR1IHNpemVkIGZyYW1lcy5cbiBcdFx0ICovXG4gXHRcdGlmICh1bmxpa2VseShydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHtcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihcdTAwMjZ0cC1cdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XG4mIzQzO1x0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCBwa3Rfc2l6ZSk7XG4gXHRcdGlmICh1bmxpa2VseSghc2tiKSkge1xuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbi1cdFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNlYWRkcik7XG4tXHRcdHJ4X2J1ZiA9IHBhZ2VfYWRkcmVzcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltlbnRyeV0pO1xuJiM0MztcdFx0YWRkciA9IHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltlbnRyeV07XG4mIzQzO1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICYjNDM7NTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHRza2ItXHUwMDNlbGVuID0gcGt0X3NpemU7XG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGQsIGFkZHIsIHBrdF9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuIFxuLVx0XHRydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuJiM0MztcdFx0cnRsODE2OV9yeF9jc3VtKHRwLCBza2IsIHN0YXR1cyk7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbiBcbi1cdFx0cnRsODE2OV9yeF92bGFuX3RhZyhkZXNjLCBza2IpO1xuJiM0MztcdFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcbiBcbi1cdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5tdWx0aWNhc3QmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlc3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2dHAtXHUwMDNlbmFwaSwgc2tiKTtcbiYjNDM7XHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiBcbiBcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcbiByZWxlYXNlX2Rlc2NyaXB0b3I6XG4tXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXG4mIzQzO1x0XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcbiYjNDM7XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcdH1cbiBcbiBcdHJldHVybiBjb3VudDtcbkBAIC00ODU2LDggJiM0Mzs1MzExLDEyIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXG4gc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTtcbi1cdHUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuJiM0MztcdHUzMiBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbiBcbiBcdGlmICgoc3RhdHVzIFx1MDAyNiAweGZmZmYpID09IDB4ZmZmZiB8fCAhKHN0YXR1cyBcdTAwMjYgdHAtXHUwMDNlaXJxX21hc2spKVxuIFx0XHRyZXR1cm4gSVJRX05PTkU7XG5AQCAtNDg3MywxMyAmIzQzOzUzMzIsMTE0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuLVx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuIG91dDpcbiBcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX29uZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXG4mIzQzO1x0XHRcdHBjaV9mcmVlX2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRylcbiYjNDM7XHRcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHRwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGludCBtZXNzYWdlX2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgbWVzc2FnZV9pZClcbiYjNDM7e1xuJiM0MztcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1x0aW50IG1lc3NhZ2VfaWQ7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbiYjNDM7XHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgbWVzc2FnZV9pZCk7XG4mIzQzO1xuJiM0MztcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X290aGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuJiM0MztcbiYjNDM7XHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xuJiM0MztcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcbiYjNDM7XHRpbnQgaSwgcmM7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5hcGkgPSBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV07XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBOVUxMLCBuYXBpLCBcJiMzNDslcy0lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkZXYtXHUwMDNlbmFtZSwgaSk7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpXG4mIzQzO1x0XHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBOVUxMLCB0cCwgXCYjMzQ7JXMtJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBydGw4MTY5X2ludGVycnVwdCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgTlVMTCwgbmFwaSwgXCYjMzQ7JXMtJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9pcnE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9pcnE6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApXG4mIzQzO1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyAmIzQzOzU0NzQsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4tXHRpbnQgd29ya19kb25lO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiBcbiBcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuIFxuLVx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1x0LyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi9cbiYjNDM7XHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgJiM0Mzs1NTk2LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4gXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4gXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbi1cdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG5AQCAtNTA1MSwxOCAmIzQzOzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xuIFxuIFx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBOVUxMO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcbiBcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTUwNzMsOCAmIzQzOzU2MzMsMTggQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGludCBuYXBpX251bTtcbiYjNDM7XG4mIzQzO1x0bmFwaV9udW0gPSBtaW4odHAtXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcbiBcbi1cdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0fVxuIH1cbiAjZW5kaWZcbiBcbkBAIC01MDgyLDcgJiM0Mzs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2Rldjtcbi1cdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmV0dmFsID0gLUVOT01FTTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuQEAgLTUwOTYsMTAgJiM0Mzs1NjY1LDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCF0cC1cdTAwM2VUeERlc2NBcnJheSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbi1cdFx0XHRcdFx0ICAgICBcdTAwMjZ0cC1cdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF0cC1cdTAwM2VSeERlc2NBcnJheSlcbi1cdFx0Z290byBlcnJfZnJlZV90eF8wO1xuJiM0MztcdGlmIChydGw4MTY5X2FsbG9jX3J4X2Rlc2ModHApIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9yeF8xO1xuIFxuIFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbkBAIC01MTA3LDggJiM0Mzs1Njc0LDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xuIFxuLVx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcbi1cdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXHUwMDNlbmFtZSwgdHApO1xuJiM0MztcdHJldHZhbCA9IHJ0bDgxNjlfcmVxdWVzdF9pcnEodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuQEAgLTUxMjUsMTUgJiM0Mzs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByZXR2YWw7XG4gXG4gZXJyX2ZyZWVfaXJxOlxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4mIzQzO1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gZXJyX3JlbGVhc2VfZndfMjpcbiBcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcbi1cdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSk7XG4gZXJyX2ZyZWVfcnhfMTpcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4tZXJyX2ZyZWVfdHhfMDpcbiYjNDM7XHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuQEAgLTUxNTIsNiAmIzQzOzU3MTYsMjcgQEAgcnRsODE2OV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuIFx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4gXHRkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RhdHMsIGRldi1cdTAwM2V0c3RhdHMpO1xuIFxuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgZXJyb3JzLCBkcm9wcGVkLCBsZW5ndGhfZXJyb3JzLCBjcmNfZXJyb3JzLCBtdWx0aWNhc3Q7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRlcnJvcnMgPSByaW5nLVx1MDAzZXN0YXRzLnJ4X2Vycm9ycztcbiYjNDM7XHRcdFx0ZHJvcHBlZCA9IHJpbmctXHUwMDNlc3RhdHMucnhfZHJvcHBlZDtcbiYjNDM7XHRcdFx0bGVuZ3RoX2Vycm9ycyA9IHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycztcbiYjNDM7XHRcdFx0Y3JjX2Vycm9ycyA9IHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycztcbiYjNDM7XHRcdFx0bXVsdGljYXN0ID0gcmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3Q7XG4mIzQzO1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgJiM0Mzs9IGVycm9ycztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICYjNDM7PSBsZW5ndGhfZXJyb3JzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyAmIzQzOz0gY3JjX2Vycm9ycztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW11bHRpY2FzdCAmIzQzOz0gbXVsdGljYXN0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogRmV0Y2ggYWRkaXRpb25hbCBjb3VudGVyIHZhbHVlcyBtaXNzaW5nIGluIHN0YXRzIGNvbGxlY3RlZCBieSBkcml2ZXJcbiBcdCAqIGZyb20gdGFsbHkgY291bnRlcnMuXG5AQCAtNTI3NSw2ICYjNDM7NTg2MCwxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiAmIzQzOzU4ODQsOSBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuIFxuQEAgLTUzMjAsMTUgJiM0Mzs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuIFxuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNilcbi1cdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4mIzQzO1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbiYjNDM7XG4mIzQzO1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XG4mIzQzO1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyAmIzQzOzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSxcbiYjNDM7XHRcdFx0XHQgICAgICBnZXRfbWF4X2lycV9udmVjcyh0cCksIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuJiM0MztcdFx0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAobnZlY3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gbnZlY3M7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZWlycV9udmVjcyA9IG52ZWNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5AQCAtNTU5OSw2ICYjNDM7NjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuJiM0MztcdGludCB3b3JrX2RvbmUgPSAwO1xuJiM0MztcdGludCBtZXNzYWdlX2lkO1xuJiM0MztcbiYjNDM7XHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0bWVzc2FnZV9pZCA9IG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGk7XG4mIzQzO1xuJiM0MztcdGlmIChtZXNzYWdlX2lkIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4mIzQzO1x0XHR3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW21lc3NhZ2VfaWRdLFxuJiM0MztcdFx0XHRcdCAgICBidWRnZXQsIG5hcGkpO1xuJiM0MztcbiYjNDM7XHRpZiAod29ya19kb25lIFx1MDAzYyBidWRnZXQgXHUwMDI2XHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxuJiM0MztcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gd29ya19kb25lO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBDdXJyZW50bHkgcjgxNjkgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBUeCByaW5nLlxuJiM0MztcdCAqIFRoZXJlZm9yZSwgd2UgZG9uJiMzOTt0IG5lZWQgYSBwZXItcmluZyBUeCBwcm9jZXNzaW5nIGxvb3AgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4mIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4mIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4mIzQzOyAqIE5BUEkgaXMgb25seSBhbGxvY2F0ZWQgZm9yIGRhdGEgcGF0aFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfaW5pdF9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMpXG4mIzQzO1x0XHRcdFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3J4O1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9nZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4mIzQzO1x0Y2gtXHUwMDNlbWF4X3R4ID0gMTtcbiYjNDM7XG4mIzQzO1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4mIzQzO1x0Y2gtXHUwMDNldHhfY291bnQgPSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4mIzQzO1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbiYjNDM7XHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbiYjNDM7XHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuJiM0MztcdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbiYjNDM7XHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuJiM0MztcdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuJiM0MztcdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuJiM0MztcdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4mIzQzO1x0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4mIzQzO1x0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4mIzQzO1x0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuJiM0MztcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4mIzQzO1x0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuJiM0MztcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuJiM0MztcdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbiYjNDM7XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbiYjNDM7XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuJiM0MztcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4mIzQzO1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbiYjNDM7XHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2MDksNyAmIzQzOzYzNTMsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbiYjNDM7XHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4mIzQzO1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcbiYjNDM7XHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbiYjNDM7XG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICYjNDM7NjQzNiwxMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksXG4mIzQzO1x0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgJiM0Mzs2NDU3LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cnRsX2h3X3Jlc2V0KHRwKTtcbiBcbiYjNDM7XHRydGxfc2V0dXBfcnhfcGFyYW1zKHRwKTtcbiYjNDM7XG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwmIzM0O0NhbiYjMzk7dCBhbGxvY2F0ZSBpbnRlcnJ1cHRcXG5cJiMzNDspO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnhfcmluZ19udW0odHApO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9yc3ModHApO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNnRwLVx1MDAzZXdrLndvcmssIHJ0bF90YXNrKTtcbiBcdGRpc2FibGVfd29yayhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrKTtcbkBAIC01NzE2LDEzICYjNDM7NjQ3NSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNnJ0bDgxNjlfZXRodG9vbF9vcHM7XG4gXG4tXHRuZXRpZl9uYXBpX2FkZChkZXYsIFx1MDAyNnRwLVx1MDAzZW5hcGksIHJ0bDgxNjlfcG9sbCk7XG4tXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbiBcdGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPO1xuIFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4gXG4mIzQzO1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuJiM0MztcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIO1xuJiM0MztcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmVcbiBcdCAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLlxuQEAgLTU3NzgsNiAmIzQzOzY1NDAsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRkZXYtXHUwMDNlbWF4X210dSA9IGp1bWJvX21heDtcbiBcbiYjNDM7XHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCByYywgXCYjMzQ7c2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4gXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWNvdW50ZXJzID0gZG1hbV9hbGxvY19jb2hlcmVudCAoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqdHAtXHUwMDNlY291bnRlcnMpLFxuQEAgLTU3OTIsOSAmIzQzOzY1NTgsMjYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbiYjNDM7XHR0cC1cdTAwM2VyeF9yaW5nID0ga2NhbGxvYyh0cC1cdTAwM2VudW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nKSxcbiYjNDM7XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0cC1cdTAwM2VyeF9yaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXS5zdGF0cy5zeW5jcCk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSxcbiYjNDM7XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSkge1xuJiM0MztcdFx0a2ZyZWUodHAtXHUwMDNlcnhfcmluZyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHI4MTY5X2luaXRfbmFwaSh0cCk7XG4mIzQzO1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uYXBpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7XG4gXHRcdGlmIChydGxfaXNfODEyNSh0cCkpXG5AQCAtNTgwMyw4ICYjNDM7NjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdHRwLVx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xuIFx0fVxuIFxuLVx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxuXCYjMzQ7LFxuLVx0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLVx1MDAzZWlycSk7XG4mIzQzO1x0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXG4mIzQzO1x0XHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVx1MDAzZWlycV9udmVjcyk7XG4gXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O2p1bWJvIGZlYXR1cmVzIFtmcmFtZXM6ICVkIGJ5dGVzLCB0eCBjaGVja3N1bW1pbmc6ICVzXVxcblwmIzM0OyxcbkBAIC01ODIxLDYgJiM0Mzs2NjA1LDExIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfbmFwaTpcbiYjNDM7XHRyODE2OV9mcmVlX25hcGkodHApO1xuJiM0MztcdGtmcmVlKHRwLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayByODE2OSBuZXR3b3JrIGRyaXZlciB0byBhZGQgbXVsdGktcXVldWUvUlNTIGFuZCBNU0ktWCBzdXBwb3J0IGZvciBSVEw4MTI3L1JUTDgxMjUgTklDcy4gVGhlIHI4MTY5IGRyaXZlciBvcGVyYXRlcyBvbiBwaHlzaWNhbCBQQ0llIFJlYWx0ZWsgTklDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBkcml2ZXIgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBrZXJuZWwgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDNmNjllMDZhMDU3MTdiYzZhNjdlZTlhZDViYTdiYTk2OWE0ZGViZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA2OjE4OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwppbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjksNiAmIzQzOzI5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CkBAIC03NCw5ICYjNDM7NzUsMzMgQEAKICNkZWZpbmUgTlVNX1RYX0RFU0MJMjU2CS8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVU1fUlhfREVTQwkyNTYJLyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVMJKE5VTV9UWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBUeERlc2MpKQotI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTCShOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHkKJiM0MzsgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZQomIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMKJiM0MzsgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTCSgoTlVNX1JYX0RFU0MgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpCiAjZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSUwkoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKQogI2RlZmluZSBSODE2OV9UWF9TVEFSVF9USFJTCSgyICogUjgxNjlfVFhfU1RPUF9USFJTKQomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFUwkxNgomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFUwk4CiYjNDM7I2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUwkxCiYjNDM7I2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTCTEKJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDCTMyCiYjNDM7I2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQwkzMAomIzQzOyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFQJMQomIzQzOyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRQk0MAomIzQzOyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTSwlHRU5NQVNLKDE4LCAxNikKJiM0MzsjZGVmaW5lIFJTU19IQVNIX01BU0sJCUdFTk1BU0soMTAsIDgpCiYjNDM7I2RlZmluZSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVMgMTI4CiYjNDM7I2RlZmluZSBSWFNfUlNTX1VEUAkJQklUKDI3KQomIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY0CQlCSVQoMjgpCiYjNDM7I2RlZmluZSBSWFNfUlNTX0lQVjYJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJYU19SU1NfVENQCQlCSVQoMzApCiYjNDM7I2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTSwkoUlhTX1JTU19JUFY0IHwgUlhTX1JTU19JUFY2KQomIzQzOyNkZWZpbmUgUlhTX1JTU19MNF9UWVBFX01BU0sJKFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApCiAKICNkZWZpbmUgT0NQX1NURF9QSFlfQkFTRQkweGE0MDAKIApAQCAtNDQxLDExICYjNDM7NDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMgewogCVR4UG9sbF84MTI1CQk9IDB4OTAsCiAJTEVEU0VMMwkJCT0gMHg5NiwKIAlNQUMwX0JLUAkJPSAweDE5ZTAsCiYjNDM7CVJEU0FSX1ExX0xPVwkJPSAweDQwMDAsCiAJUlNTX0NUUkxfODEyNQkJPSAweDQ1MDAsCiAJUV9OVU1fQ1RSTF84MTI1CQk9IDB4NDgwMCwKIAlFRUVfVFhJRExFX1RJTUVSXzgxMjUJPSAweDYwNDgsCiYjNDM7CUlNUl9DTEVBUl9WRUNfTUFQX1JFRwk9IDB4MGQwMCwKJiM0MzsJSVNSX1ZFQ19NQVBfUkVHCQk9IDB4MGQwNCwKJiM0MzsJSU1SX1NFVF9WRUNfTUFQX1JFRwk9IDB4MGQwYywKIH07CiAKJiM0MzsjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHCTI5CiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjUJMHgyM2YKIAogI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjUJQklUKDIyKQpAQCAtNDc0LDYgJiM0Mzs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHsKIAlSeFJVTlQJPSAoMSAmbHQ7Jmx0OyAyMCksCiAJUnhDUkMJPSAoMSAmbHQ7Jmx0OyAxOSksCiAKJiM0MzsJUlhSVU5UX1JTUwk9ICgxICZsdDsmbHQ7IDIxKSwKJiM0MzsJUlhDUkNfUlNTCT0gKDEgJmx0OyZsdDsgMjApLAomIzQzOwogCS8qIENoaXBDbWRCaXRzICovCiAJU3RvcFJlcQkJPSAweDgwLAogCUNtZFJlc2V0CT0gMHgxMCwKQEAgLTU3Niw2ICYjNDM7NjA5LDI1IEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewogCiAJLyogbWFnaWMgZW5hYmxlIHYyICovCiAJTWFnaWNQYWNrZXRfdjIJPSAoMSAmbHQ7Jmx0OyAxNiksCS8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqLwomIzQzOyNkZWZpbmUJSVNSSU1SX0xJTktDSEcJQklUKDI5KQomIzQzOyNkZWZpbmUJSVNSSU1SX1RPS19RMAlCSVQoOCkKJiM0MzsjZGVmaW5lCUlTUklNUl9ST0tfUTAJQklUKDApCiYjNDM7I2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkwJCTB4ZDgKJiM0MzsjZGVmaW5lIFJTU19LRVlfUkVHCQkJMHg0NjAwCiYjNDM7I2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRwkJMHg0NzAwCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUAkJQklUKDEpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQCQlCSVQoMikKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUAkJQklUKDMpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQCUJJVCg1KQomIzQzOyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjRfU1VQUAkJQklUKDExKQomIzQzOyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjZfU1VQUAkJQklUKDEyKQomIzQzOyNkZWZpbmUJUlhfUkVTX1JTUwkJCUJJVCgyMikKJiM0MzsjZGVmaW5lCVJYX1JVTlRfUlNTCQkJQklUKDIxKQomIzQzOyNkZWZpbmUJUlhfQ1JDX1JTUwkJCUJJVCgyMCkKJiM0MzsjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLCQlHRU5NQVNLKDQsIDIpCiB9OwogCiBlbnVtIHJ0bF9kZXNjX2JpdCB7CkBAIC02MzMsNiAmIzQzOzY4NSwxMSBAQCBlbnVtIHJ0bF9yeF9kZXNjX2JpdCB7CiAjZGVmaW5lIFJ4UHJvdG9JUAkoUElEMSB8IFBJRDApCiAjZGVmaW5lIFJ4UHJvdG9NYXNrCVJ4UHJvdG9JUAogCiYjNDM7I2RlZmluZQlSWF9VRFBUX0RFU0NfUlNTCUJJVCgxOSkKJiM0MzsjZGVmaW5lCVJYX1RDUFRfREVTQ19SU1MJQklUKDE4KQomIzQzOyNkZWZpbmUJUlhfVURQRl9ERVNDX1JTUwlCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KJiM0MzsjZGVmaW5lCVJYX1RDUEZfREVTQ19SU1MJQklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovCiYjNDM7CiAJSVBGYWlsCQk9ICgxICZsdDsmbHQ7IDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovCiAJVURQRmFpbAkJPSAoMSAmbHQ7Jmx0OyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KIAlUQ1BGYWlsCQk9ICgxICZsdDsmbHQ7IDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqLwpAQCAtNjU0LDkgJiM0Mzs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7CiB9OwogCiBzdHJ1Y3QgUnhEZXNjIHsKLQlfX2xlMzIgb3B0czE7Ci0JX19sZTMyIG9wdHMyOwotCV9fbGU2NCBhZGRyOwomIzQzOwl1bmlvbiB7CiYjNDM7CQkvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqLwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlfX2xlMzIgb3B0czE7CiYjNDM7CQkJX19sZTMyIG9wdHMyOwomIzQzOwkJCV9fbGU2NCBhZGRyOwomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCS8qIFJYX0RFU0NfVFlQRV9SU1MgKi8KJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlfX2xlNjQgcnNzX2FkZHI7CiYjNDM7CQkJCXN0cnVjdCB7CiYjNDM7CQkJCQlfX2xlMzIgcnNzX2luZm87CiYjNDM7CQkJCQlfX2xlMzIgcnNzX3Jlc3VsdDsKJiM0MzsJCQkJfSByc3NfZHdvcmQ7CiYjNDM7CQkJfTsKJiM0MzsJCQlfX2xlMzIgcnNzX29wdHMyOwomIzQzOwkJCV9fbGUzMiByc3Nfb3B0czE7CiYjNDM7CQl9OwomIzQzOwl9OwogfTsKIAogc3RydWN0IHJpbmdfaW5mbyB7CkBAIC03MjgsMjcgJiM0Mzs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ4X2Rlc2NfdHlwZSB7CiYjNDM7CVJYX0RFU0NfVFlQRV9ERUZBVUxULAomIzQzOwlSWF9ERVNDX1RZUEVfUlNTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7CiYjNDM7CXUzMiBjdXJfcng7CiYjNDM7CXUzMiBkaXJ0eV9yeDsKJiM0MzsJc3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTsKJiM0MzsJZG1hX2FkZHJfdCByeF9kZXNjX3BoeV9hZGRyW05VTV9SWF9ERVNDXTsKJiM0MzsJZG1hX2FkZHJfdCByeF9waHlfYWRkcjsKJiM0MzsJc3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTsKJiM0MzsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU2NCByeF9lcnJvcnM7CiYjNDM7CQl1NjQgcnhfZHJvcHBlZDsKJiM0MzsJCXU2NCByeF9sZW5ndGhfZXJyb3JzOwomIzQzOwkJdTY0IHJ4X2NyY19lcnJvcnM7CiYjNDM7CQl1NjQgbXVsdGljYXN0OwomIzQzOwkJc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwOwomIzQzOwl9IHN0YXRzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgewomIzQzOwl1OCByc3Nfa2V5W1JUTF9SU1NfS0VZX1NJWkVdOwomIzQzOwl1OCByc3NfaW5kaXJfdGJsW1JUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFU107CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsJLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwotCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCWVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247CiAJZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTsKLQl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CiAJc3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7CS8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqLwotCXN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5OwkvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlkbWFfYWRkcl90IFR4UGh5QWRkcjsKLQlkbWFfYWRkcl90IFJ4UGh5QWRkcjsKLQlzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdOwkvKiBSeCBkYXRhIGJ1ZmZlcnMgKi8KIAlzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107CS8qIFR4IGRhdGEgYnVmZmVycyAqLwomIzQzOwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnJ0bDgxNjlfbmFwaTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZzsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9yeF9yaW5nczsKIAl1MTYgY3BfY21kOwogCXUxNiB0eF9scGlfdGltZXI7CiAJdTMyIGlycV9tYXNrOwotCWludCBpcnE7CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTsKJiM0MzsJdW5zaWduZWQgaW50IGlycV9udmVjczsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7CiAJc3RydWN0IGNsayAqY2xrOwogCiAJc3RydWN0IHsKQEAgLTE1NzgsNiAmIzQzOzE2ODMsMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY0NCwyNiAmIzQzOzE3NTQsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JaWYgKHJ0bF9pc184MTI1KHRwKSkKLQkJUlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJUlRMX1cxNih0cCwgSW50ck1hc2ssIDApOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLSZndDtpcnFfbWFzayk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC0mZ3Q7aXJxX21hc2spOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0xODY3LDkgJiM0MzsxOTg5LDIwIEBAIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxNjlfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJVHhWbGFuVGFnIHwgc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJc3RydWN0IFJ4RGVzYyAqZGVzYywKJiM0MzsJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtvcHRzMik7CiYjNDM7CXUzMiBvcHRzMjsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAKIAlpZiAob3B0czIgJmFtcDsgUnhWbGFuVGFnKQogCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgJmFtcDsgMHhmZmZmKSk7CkBAIC0yNDE2LDM0ICYjNDM7MjU0OSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKLQkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAotCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLAotCS5nZXRfZHJ2aW5mbwkJPSBydGw4MTY5X2dldF9kcnZpbmZvLAotCS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCi0JLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9jb2FsZXNjZQkJPSBydGxfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKLQkuZ2V0X3JlZ3MJCT0gcnRsODE2OV9nZXRfcmVncywKLQkuZ2V0X3dvbAkJPSBydGw4MTY5X2dldF93b2wsCi0JLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAotCS5nZXRfc3RyaW5ncwkJPSBydGw4MTY5X2dldF9zdHJpbmdzLAotCS5nZXRfc3NldF9jb3VudAkJPSBydGw4MTY5X2dldF9zc2V0X2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF90c19pbmZvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sCi0JLm53YXlfcmVzZXQJCT0gcGh5X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCi0JLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCi0JLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAotCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCi0JLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9ldGhfbWFjX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cywKLQkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpCiB7CiAJLyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqLwpAQCAtMjYxOSw5ICYjNDM7MjcyNCwyNiBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJbWVtc2V0KHJpbmctJmd0O3J4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXRwLSZndDtkaXJ0eV90eCA9IHRwLSZndDtjdXJfdHggPSB0cC0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJdHAtJmd0O2RpcnR5X3R4ID0gMDsKJiM0MzsJdHAtJmd0O2N1cl90eCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJcmluZy0mZ3Q7ZGlydHlfcnggPSAwOwomIzQzOwkJcmluZy0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjY4MCw2ICYjNDM7MjgwMiwyOSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cnRsX2NoaXBjbWRfY29uZCwgMTAwLCAxMDApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwomIzQzOwluZXRkZXZfcnNzX2tleV9maWxsKHRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl0cC0mZ3Q7bnVtX3J4X3JpbmdzID0gMTsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzgwOgomIzQzOwkJdHAtJmd0O2h3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMgPSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0cnVjdCBydGxfZncgKnJ0bF9mdzsKQEAgLTI4MDIsOCAmIzQzOzI5NDcsNjIgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICYjNDM7IDEpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTggKnJzc19rZXkgPSB0cC0mZ3Q7cnNzX2RhdGEtJmd0O3Jzc19rZXk7CiYjNDM7CWNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHOwomIzQzOwomIzQzOwkvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqLwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFJUTF9SU1NfS0VZX1NJWkU7IGkgJiM0Mzs9IHNpemVvZih1MzIpKQomIzQzOwkJUlRMX1czMih0cCwgcnNzX2tleV9yZWcgJiM0MzsgaSwgZ2V0X3VuYWxpZ25lZF9sZTMyKHJzc19rZXkgJiM0MzsgaSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCAqaW5kaXJfdGJsID0gdHAtJmd0O3Jzc19kYXRhLSZndDtyc3NfaW5kaXJfdGJsOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJLyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtyc3NfZGF0YS0mZ3Q7aHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSAmIzQzOz0gNCkgewomIzQzOwkJdTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmFtcDtpbmRpcl90YmxbaV0pOwomIzQzOwomIzQzOwkJUlRMX1czMih0cCwgUlNTX0lORElSRUNUSU9OX1RCTF9SRUcgJiM0MzsgaSwgcmV0YSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTMyIHJzc19jdHJsOwomIzQzOwomIzQzOwlyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtJmd0O251bV9yeF9yaW5ncykpOwomIzQzOwomIzQzOwkvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovCiYjNDM7CXJzc19jdHJsIHw9IFJTU19DVFJMX1RDUF9JUFY0X1NVUFAgfAomIzQzOwkJICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfSVBWNl9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfVURQX0lQVjRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDsKJiM0MzsKJiM0MzsJcnNzX2N0cmwgfD0gRklFTERfUFJFUChSU1NfSEFTSF9NQVNLLAomIzQzOwkJCSAgICAgICBpbG9nMih0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMpKTsKJiM0MzsKJiM0MzsJUlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQodHApOwomIzQzOwlydGw4MTY5X3N0b3JlX3JldGEodHApOwomIzQzOwlydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nWzBdOwomIzQzOwogCS8qCiAJICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2gKIAkgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuCkBAIC0yODExLDggJiM0MzszMDEwLDE4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICovCiAJUlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRySGlnaCwgKCh1NjQpIHRwLSZndDtUeFBoeUFkZHIpICZndDsmZ3Q7IDMyKTsKIAlSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC0mZ3Q7VHhQaHlBZGRyKSAmYW1wOyBETUFfQklUX01BU0soMzIpKTsKLQlSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHRwLSZndDtSeFBoeUFkZHIpICZndDsmZ3Q7IDMyKTsKLQlSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtJmd0O1J4UGh5QWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CVJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmd0OyZndDsgMzIpOwomIzQzOwlSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LAomIzQzOwkJKCh1NjQpcmluZy0mZ3Q7cnhfcGh5X2FkZHIpICZhbXA7IERNQV9CSVRfTUFTSygzMikpOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMTsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICYjNDM7IChpIC0gMSkgKiA4OwomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlSVExfVzMyKHRwLCByZHNhcl9yZWcgJiM0MzsgNCwgKCh1NjQpcmluZy0mZ3Q7cnhfcGh5X2FkZHIgJmd0OyZndDsgMzIpKTsKJiM0MzsJCVJUTF9XMzIodHAsIHJkc2FyX3JlZywKJiM0MzsJCQkoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMzg1OCw2ICYjNDM7NDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZCkKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpICZhbXA7IEJJVCgxMyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUxNiByeF9xX251bTsKJiM0MzsJdTE2IHFfY3RybDsKJiM0MzsKJiM0MzsJcnhfcV9udW0gPSBpbG9nMih0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJcV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTsKJiM0MzsJcV9jdHJsICZhbXA7PSB+UlRMX1JYX1FfTlVNX01BU0s7CiYjNDM7CXFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7CiYjNDM7CVJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCB0bXA7CiYjNDM7CiYjNDM7CXRtcCA9IFJUTF9SOCh0cCwgSU5UX0NGRzBfODEyNSk7CiYjNDM7CXRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTsKJiM0MzsJUlRMX1c4KHRwLCBJTlRfQ0ZHMF84MTI1LCB0bXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApOwpAQCAtMzg2Niw2ICYjNDM7NDA5Niw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAwKTsKIAlSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApOwogCiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCXJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTsKJiM0MzsKIAkvKiBkaXNhYmxlIFVQUyAqLwogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTsKIApAQCAtMzg4NSw2ICYjNDM7NDExOCwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlSVExfVzgodHAsIDB4RDgsIFJUTF9SOCh0cCwgMHhEOCkgJmFtcDsgfjB4MDIpOwogCiYjNDM7CS8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyAqLwomIzQzOwlpZiAodHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpIHsKJiM0MzsJCXJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTsKJiM0MzsJCVJUTF9XOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMLAomIzQzOwkJICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTsKJiM0MzsJfQomIzQzOwogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApOwogCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQpAQCAtNDEyMSw2ICYjNDM7NDM2MSwxMiBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpOwogCXJ0bF9zZXRfcnhfbWF4X3NpemUodHApOwogCXJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHApOwomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpCiYjNDM7CQkJcnRsX3NldF9yc3NfY29uZmlnKHRwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTsKJiM0MzsJfQogCXJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTsKIAogCXJ0bF9qdW1ib19jb25maWcodHApOwpAQCAtNDE0OCwxOSAmIzQzOzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya190b19hc2ljKHN0cnVjdCBSeERlc2MgKmRlc2MpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpCiB7Ci0JdTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMxKSAmYW1wOyBSaW5nRW5kOwomIzQzOwl1MzIgZW9yOwogCi0JZGVzYy0mZ3Q7b3B0czIgPSAwOwotCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCi0JZG1hX3dtYigpOwotCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7b3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwlzd2l0Y2ggKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSkgewomIzQzOwljYXNlIFJYX0RFU0NfVFlQRV9SU1M6CiYjNDM7CQllb3IgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CQlkZXNjLSZndDtyc3Nfb3B0czIgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCiYjNDM7CQlkbWFfd21iKCk7CiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O3Jzc19vcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMxKSAmYW1wOyBSaW5nRW5kOwomIzQzOwkJZGVzYy0mZ3Q7b3B0czIgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCiYjNDM7CQlkbWFfd21iKCk7CiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAotCQkJCQkgIHN0cnVjdCBSeERlc2MgKmRlc2MpCiYjNDM7CQkJCQkgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKJiM0MzsJc3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgJiM0MzsgaW5kZXg7CiAJc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7CiAJaW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CkBAIC00MTc3LDU2ICYjNDM7NDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRlc2MtJmd0O2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKLQlydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTsKJiM0MzsJcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nOwomIzQzOwlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpCiYjNDM7CQlkZXNjLSZndDtyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpOwomIzQzOwllbHNlCiYjNDM7CQlkZXNjLSZndDthZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiYjNDM7CXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTsKIAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDICZhbXA7JmFtcDsgdHAtJmd0O1J4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0MgJmFtcDsmYW1wOyByaW5nLSZndDtyeF9kYXRhYnVmZltpXTsgaSYjNDM7JiM0MzspIHsKIAkJZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSwKLQkJCSAgICAgICBsZTY0X3RvX2NwdSh0cC0mZ3Q7UnhEZXNjQXJyYXlbaV0uYWRkciksCiYjNDM7CQkJICAgICAgIHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbaV0sCiAJCQkgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0JCV9fZnJlZV9wYWdlcyh0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpOwotCQl0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0gPSBOVUxMOwotCQl0cC0mZ3Q7UnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7Ci0JCXRwLSZndDtSeERlc2NBcnJheVtpXS5vcHRzMSA9IDA7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0gPSBOVUxMOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpXSA9IDA7CiYjNDM7CQlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpIHsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLnJzc19vcHRzMSA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheVtpXS5vcHRzMSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWRlc2MtJmd0O3Jzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZGVzYy0mZ3Q7b3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7CiYjNDM7CQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcGFnZSAqZGF0YTsKIAotCQlkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCB0cC0mZ3Q7UnhEZXNjQXJyYXkgJiM0MzsgaSk7CiYjNDM7CQlkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTsKIAkJaWYgKCFkYXRhKSB7Ci0JCQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJCQlydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXRwLSZndDtSeF9kYXRhYnVmZltpXSA9IGRhdGE7CiYjNDM7CQlyaW5nLSZndDtyeF9kYXRhYnVmZltpXSA9IGRhdGE7CiAJfQogCiAJLyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi8KLQl0cC0mZ3Q7UnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgJmFtcDtyaW5nLSZndDtyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJCQkJIFI4MTY5X1JYX1JJTkdfQllURVMsCiYjNDM7CQkJCQkJCSAmYW1wO3JpbmctJmd0O3J4X3BoeV9hZGRyLAomIzQzOwkJCQkJCQkgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0mZ3Q7cGNpX2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZzsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlpZiAocmluZy0mZ3Q7cnhfZGVzY19hcnJheSkgewomIzQzOwkJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICBSODE2OV9SWF9SSU5HX0JZVEVTLAomIzQzOwkJCQkJICByaW5nLSZndDtyeF9kZXNjX2FycmF5LAomIzQzOwkJCQkJICByaW5nLSZndDtyeF9waHlfYWRkcik7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwogCXJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7CiAKIAltZW1zZXQodHAtJmd0O3R4X3NrYiwgMCwgc2l6ZW9mKHRwLSZndDt0eF9za2IpKTsKLQltZW1zZXQodHAtJmd0O1J4X2RhdGFidWZmLCAwLCBzaXplb2YodHAtJmd0O1J4X2RhdGFidWZmKSk7CiAKLQlyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCW1lbXNldChyaW5nLSZndDtyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctJmd0O3J4X2RhdGFidWZmKSk7CiYjNDM7CQlyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfY2xlYXI7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2NsZWFyOgomIzQzOwl3aGlsZSAoLS1pICZndDs9IDApCiYjNDM7CQlydGw4MTY5X3J4X2NsZWFyKHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW2ldKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSkKQEAgLTQyNjYsOSAmIzQzOzQ1OTcsMjUgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAluZXRkZXZfcmVzZXRfcXVldWUodHAtJmd0O2Rldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2VuYWJsZSgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTsKIAogCS8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKQEAgLTQzMDMsMTggJiM0Mzs0NjUwLDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWludCBpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbal07CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpOwomIzQzOwkJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLSZndDtyeF9kZXNjX2FycmF5ICYjNDM7IGopOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewogCW5ldGlmX3N0b3BfcXVldWUodHAtJmd0O2Rldik7CiAKIAlydGw4MTY5X2NsZWFudXAodHApOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGkpOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApOwogCi0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCXJ0bF9od19zdGFydCh0cCk7CiB9CiAKQEAgLTQ3NTgsMzAgJiM0Mzs1MTE3LDExMSBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cykKIAlyZXR1cm4gKHN0YXR1cyAmYW1wOyAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTMyIHJzc19oZWFkZXJfaW5mbzsKJiM0MzsJdTMyIGhhc2hfdmFsOwomIzQzOwomIzQzOwlpZiAoISh0cC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYSEFTSCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJzc19oZWFkZXJfaW5mbyA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3Jzc19kd29yZC5yc3NfaW5mbyk7CiYjNDM7CiYjNDM7CWlmICghKHJzc19oZWFkZXJfaW5mbyAmYW1wOyBSWFNfUlNTX0wzX1RZUEVfTUFTSykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnNzX2R3b3JkLnJzc19yZXN1bHQpOwomIzQzOwomIzQzOwlza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCwKJiM0MzsJCSAgICAgKFJYU19SU1NfTDRfVFlQRV9NQVNLICZhbXA7IHJzc19oZWFkZXJfaW5mbykgPwomIzQzOwkJICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIHUzMiBvcHRzMSkKIHsKLQl1MzIgc3RhdHVzID0gb3B0czEgJmFtcDsgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTsKJiM0MzsJYm9vbCBjc3VtX29rID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWlmICgoKG9wdHMxICZhbXA7IFJYX1RDUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9UQ1BGX0RFU0NfUlNTKSkgfHwKJiM0MzsJCSAgICAoKG9wdHMxICZhbXA7IFJYX1VEUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9VRFBGX0RFU0NfUlNTKSkpCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDogewomIzQzOwkJdTMyIHN0YXR1cyA9IG9wdHMxICZhbXA7IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7CiYjNDM7CiYjNDM7CQlpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiAKLQlpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApCiYjNDM7CWlmIChjc3VtX29rKQogCQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCWVsc2UKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KQomIzQzO3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJcmV0dXJuIFJFQURfT05DRShkZXNjLSZndDtyc3Nfb3B0czEpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFJFQURfT05DRShkZXNjLSZndDtvcHRzMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJCXUzMiBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSkgewomIzQzOwljYXNlIFJYX0RFU0NfVFlQRV9SU1M6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJYX1JFU19SU1MpKSB7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwKTsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJYX1JVTlRfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJYX0NSQ19SU1MpCiYjNDM7CQkJCXJpbmctJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJ4UkVTKSkgewomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJaWYgKHN0YXR1cyAmYW1wOyAoUnhSV1QgfCBSeFJVTlQpKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJ4Q1JDKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LAomIzQzOwkJICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7CiAJc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7CiAJaW50IGNvdW50OwogCi0JZm9yIChjb3VudCA9IDA7IGNvdW50ICZsdDsgYnVkZ2V0OyBjb3VudCYjNDM7JiM0MzssIHRwLSZndDtjdXJfcngmIzQzOyYjNDM7KSB7Ci0JCXVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC0mZ3Q7Y3VyX3J4ICUgTlVNX1JYX0RFU0M7Ci0JCXN0cnVjdCBSeERlc2MgKmRlc2MgPSB0cC0mZ3Q7UnhEZXNjQXJyYXkgJiM0MzsgZW50cnk7CiYjNDM7CWZvciAoY291bnQgPSAwOyBjb3VudCAmbHQ7IGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCByaW5nLSZndDtjdXJfcngmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy0mZ3Q7Y3VyX3J4ICUgTlVNX1JYX0RFU0M7CiYjNDM7CQlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy0mZ3Q7cnhfZGVzY19hcnJheSAmIzQzOyBlbnRyeTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJY29uc3Qgdm9pZCAqcnhfYnVmOwogCQlkbWFfYWRkcl90IGFkZHI7CiAJCXUzMiBzdGF0dXM7CiAKLQkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O29wdHMxKSk7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShydGw4MTY5X3J4X2Rlc2Nfb3B0czEodHAsIGRlc2MpKTsKIAkJaWYgKHN0YXR1cyAmYW1wOyBEZXNjT3duKQogCQkJYnJlYWs7CiAKQEAgLTQ3OTEsMjAgJiM0Mzs1MjMxLDI0IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0CiAJCSAqLwogCQlkbWFfcm1iKCk7CiAKLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmYW1wOyBSeFJFUykpIHsKJiM0MzsJCWlmIChydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3IocmluZywgdHAsIHN0YXR1cykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O1J4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XG4mIzM0OywKIAkJCQkJICAgIHN0YXR1cyk7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7Ci0JCQlpZiAoc3RhdHVzICZhbXA7IChSeFJXVCB8IFJ4UlVOVCkpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKLQkJCWlmIChzdGF0dXMgJmFtcDsgUnhDUkMpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJpbmctJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAKIAkJCWlmICghKGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWEFMTCkpCiAJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7Ci0JCQllbHNlIGlmIChzdGF0dXMgJmFtcDsgUnhSV1QgfHwgIShzdGF0dXMgJmFtcDsgKFJ4UlVOVCB8IFJ4Q1JDKSkpCi0JCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkgewomIzQzOwkJCQlpZiAoc3RhdHVzICZhbXA7IFJ4UldUIHx8ICEoc3RhdHVzICZhbXA7IChSeFJVTlQgfCBSeENSQykpKQomIzQzOwkJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJaWYgKCEoc3RhdHVzICZhbXA7IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpCiYjNDM7CQkJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKJiM0MzsJCQl9CiAJCX0KIAogCQlwa3Rfc2l6ZSA9IHN0YXR1cyAmYW1wOyBHRU5NQVNLKDEzLCAwKTsKQEAgLTQ4MTUsMTkgJiM0Mzs1MjU5LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0CiAJCSAqIFRoZXkgYXJlIHNlZW4gYXMgYSBzeW1wdG9tIG9mIG92ZXItbXR1IHNpemVkIGZyYW1lcy4KIAkJICovCiAJCWlmICh1bmxpa2VseShydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHsKLQkJCWRldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7dHAtJmd0O25hcGksIHBrdF9zaXplKTsKJiM0MzsJCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCWFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLSZndDthZGRyKTsKLQkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLSZndDtSeF9kYXRhYnVmZltlbnRyeV0pOwomIzQzOwkJYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbZW50cnldOwomIzQzOwkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctJmd0O3J4X2RhdGFidWZmW2VudHJ5XSk7CiAKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCXByZWZldGNoKHJ4X2J1Zik7CkBAIC00ODM2LDE5ICYjNDM7NTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQlza2ItJmd0O2xlbiA9IHBrdF9zaXplOwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAotCQlydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpOwomIzQzOwkJaWYgKHRwLSZndDtudW1fcnhfcmluZ3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpOwogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7CiAKLQkJaWYgKHNrYi0mZ3Q7cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkKLQkJCWRldi0mZ3Q7c3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOzsKJiM0MzsJCWlmIChza2ItJmd0O3BrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJpbmctJmd0O3N0YXRzLm11bHRpY2FzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQl9CiAKLQkJbmFwaV9ncm9fcmVjZWl2ZSgmYW1wO3RwLSZndDtuYXBpLCBza2IpOwomIzQzOwkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiAJCWRldl9zd19uZXRzdGF0c19yeF9hZGQoZGV2LCBwa3Rfc2l6ZSk7CiByZWxlYXNlX2Rlc2NyaXB0b3I6Ci0JCXJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpOwomIzQzOwkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCWRlc2MtJmd0O3Jzc19hZGRyID0gY3B1X3RvX2xlNjQocmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltlbnRyeV0pOwomIzQzOwkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTQ4NTYsOCAmIzQzOzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXQKIAogc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTsKLQl1MzIgc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApOwomIzQzOwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBkZXZfaW5zdGFuY2U7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwl1MzIgc3RhdHVzOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTsKIAogCWlmICgoc3RhdHVzICZhbXA7IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzICZhbXA7IHRwLSZndDtpcnFfbWFzaykpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTQ4NzMsMTMgJiM0Mzs1MzMyLDExNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlwaHlfbWFjX2ludGVycnVwdCh0cC0mZ3Q7cGh5ZGV2KTsKIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7Ci0JbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKJiM0MzsJbmFwaV9zY2hlZHVsZShuYXBpKTsKIG91dDoKIAlydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9vbmVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaSkKJiM0Mzt7CiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkgewomIzQzOwkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUVVFVUVTKQomIzQzOwkJCXBjaV9mcmVlX2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJCWVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpCiYjNDM7CQkJcGNpX2ZyZWVfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCB0cCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwY2lfZnJlZV9pcnEodHAtJmd0O3BjaV9kZXYsIGksICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQlydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJCSAgICAgIGludCBtZXNzYWdlX2lkKQomIzQzO3sKJiM0MzsJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpCiYjNDM7ewomIzQzOwlSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkJICAgICBpbnQgbWVzc2FnZV9pZCkKJiM0Mzt7CiYjNDM7CVJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CWludCBtZXNzYWdlX2lkOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CW1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaTsKJiM0MzsKJiM0MzsJcnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsJcnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpOwomIzQzOwomIzQzOwluYXBpX3NjaGVkdWxlKG5hcGkpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTsKJiM0MzsKJiM0MzsJcnRsODE2OV9jbGVhcl9od19pc3IodHAsIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKTsKJiM0MzsJcGh5X21hY19pbnRlcnJ1cHQodHAtJmd0O3BoeWRldik7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKJiM0MzsJaW50IGksIHJjOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5hcGkgPSAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV07CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpIHsKJiM0MzsJCQlpZiAoaSAmbHQ7IFI4MTY5X01BWF9RVUVVRVMpCiYjNDM7CQkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLAomIzQzOwkJCQkJCSAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCwKJiM0MzsJCQkJCQkgICAgIE5VTEwsIG5hcGksICYjMzQ7JXMtJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgIGRldi0mZ3Q7bmFtZSwgaSk7CiYjNDM7CQkJZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRykKJiM0MzsJCQkJcmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtJmd0O3BjaV9kZXYsIGksCiYjNDM7CQkJCQkJICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlciwKJiM0MzsJCQkJCQkgICAgIE5VTEwsIHRwLCAmIzM0OyVzLSVkJiMzNDssCiYjNDM7CQkJCQkJICAgICBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLAomIzQzOwkJCQkJICAgICBydGw4MTY5X2ludGVycnVwdCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LAomIzQzOwkJCQkJICAgICBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZnJlZV9pcnE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9pcnE6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCXJ0bDgxNjlfZnJlZV9vbmVfaXJxKHRwLCBpKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CkBAIC00OTE0LDEzICYjNDM7NTQ3NCwxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKLQlpbnQgd29ya19kb25lOwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CWludCB3b3JrX2RvbmUgPSAwOwogCiAJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiAKLQl3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTsKJiM0MzsJLyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi8KJiM0MzsJd29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7CiAKIAlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiAJCXJ0bF9pcnFfZW5hYmxlKHRwKTsKQEAgLTUwMzUsNyAmIzQzOzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwogCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcnRsODE2OV9pbml0X3BoeSh0cCk7Ci0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKIApAQCAtNTA1MSwxOCAmIzQzOzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcnRsODE2OV9kb3duKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0pOwogCi0JZnJlZV9pcnEodHAtJmd0O2lycSwgdHApOwomIzQzOwlydGw4MTY5X2ZyZWVfaXJxKHRwKTsKIAogCXBoeV9kaXNjb25uZWN0KHRwLSZndDtwaHlkZXYpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLSZndDtSeERlc2NBcnJheSwKLQkJCSAgdHAtJmd0O1J4UGh5QWRkcik7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLSZndDtUeERlc2NBcnJheSwKIAkJCSAgdHAtJmd0O1R4UGh5QWRkcik7CiAJdHAtJmd0O1R4RGVzY0FycmF5ID0gTlVMTDsKLQl0cC0mZ3Q7UnhEZXNjQXJyYXkgPSBOVUxMOwomIzQzOwlydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7CiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIApAQCAtNTA3Myw4ICYjNDM7NTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJaW50IG5hcGlfbnVtOwomIzQzOwomIzQzOwluYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKIAotCXJ0bDgxNjlfaW50ZXJydXB0KHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCQlydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLSZndDtwY2lfZGV2LCBpKSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwkJZWxzZQomIzQzOwkJCXJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLSZndDtwY2lfZGV2LCBpKSwKJiM0MzsJCQkJCSAgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJfQogfQogI2VuZGlmCiAKQEAgLTUwODIsNyAmIzQzOzU2NTIsNiBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwpAQCAtNTA5NiwxMCAmIzQzOzU2NjUsOCBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaWYgKCF0cC0mZ3Q7VHhEZXNjQXJyYXkpCiAJCWdvdG8gb3V0OwogCi0JdHAtJmd0O1J4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLAotCQkJCQkgICAgICZhbXA7dHAtJmd0O1J4UGh5QWRkciwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cC0mZ3Q7UnhEZXNjQXJyYXkpCi0JCWdvdG8gZXJyX2ZyZWVfdHhfMDsKJiM0MzsJaWYgKHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyh0cCkgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZnJlZV9yeF8xOwogCiAJcmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApOwogCWlmIChyZXR2YWwgJmx0OyAwKQpAQCAtNTEwNyw4ICYjNDM7NTY3NCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKIAotCWlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7Ci0JcmV0dmFsID0gcmVxdWVzdF9pcnEodHAtJmd0O2lycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtJmd0O25hbWUsIHRwKTsKJiM0MzsJcmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7CiAJaWYgKHJldHZhbCAmbHQ7IDApCiAJCWdvdG8gZXJyX3JlbGVhc2VfZndfMjsKIApAQCAtNTEyNSwxNSAmIzQzOzU2OTEsMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiByZXR2YWw7CiAKIGVycl9mcmVlX2lycToKLQlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9pcnEodHApOwogZXJyX3JlbGVhc2VfZndfMjoKIAlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7Ci0JcnRsODE2OV9yeF9jbGVhcih0cCk7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspCiYjNDM7CQlydGw4MTY5X3J4X2NsZWFyKHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW2ldKTsKIGVycl9mcmVlX3J4XzE6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLSZndDtSeERlc2NBcnJheSwKLQkJCSAgdHAtJmd0O1J4UGh5QWRkcik7Ci0JdHAtJmd0O1J4RGVzY0FycmF5ID0gTlVMTDsKLWVycl9mcmVlX3R4XzA6CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtJmd0O1R4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7VHhQaHlBZGRyKTsKIAl0cC0mZ3Q7VHhEZXNjQXJyYXkgPSBOVUxMOwpAQCAtNTE1Miw2ICYjNDM7NTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCiAJbmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsICZhbXA7ZGV2LSZndDtzdGF0cyk7CiAJZGV2X2ZldGNoX3N3X25ldHN0YXRzKHN0YXRzLCBkZXYtJmd0O3RzdGF0cyk7CiAKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0OwomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJZXJyb3JzID0gcmluZy0mZ3Q7c3RhdHMucnhfZXJyb3JzOwomIzQzOwkJCWRyb3BwZWQgPSByaW5nLSZndDtzdGF0cy5yeF9kcm9wcGVkOwomIzQzOwkJCWxlbmd0aF9lcnJvcnMgPSByaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzOwomIzQzOwkJCWNyY19lcnJvcnMgPSByaW5nLSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzOwomIzQzOwkJCW11bHRpY2FzdCA9IHJpbmctJmd0O3N0YXRzLm11bHRpY2FzdDsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2Vycm9ycyAmIzQzOz0gZXJyb3JzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOz0gbGVuZ3RoX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtyeF9jcmNfZXJyb3JzICYjNDM7PSBjcmNfZXJyb3JzOwomIzQzOwkJc3RhdHMtJmd0O211bHRpY2FzdCAmIzQzOz0gbXVsdGljYXN0OwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBGZXRjaCBhZGRpdGlvbmFsIGNvdW50ZXIgdmFsdWVzIG1pc3NpbmcgaW4gc3RhdHMgY29sbGVjdGVkIGJ5IGRyaXZlcgogCSAqIGZyb20gdGFsbHkgY291bnRlcnMuCkBAIC01Mjc1LDYgJiM0Mzs1ODYwLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpbnQgbmFwaV9udW0gPSBtaW4odHAtJmd0O2lycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgbmFwaV9udW07IGkmIzQzOyYjNDM7KQomIzQzOwkJbmV0aWZfbmFwaV9kZWwoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsKJiM0MzsJa2ZyZWUodHAtJmd0O3J0bDgxNjlfbmFwaSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC01Mjg5LDYgJiM0Mzs1ODg0LDkgQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKIAomIzQzOwlyODE2OV9mcmVlX25hcGkodHApOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnhfcmluZyk7CiYjNDM7CiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CiAKQEAgLTUzMjAsMTUgJiM0Mzs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdHAtJmd0O2lycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZzsKJiM0MzsJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXRwLSZndDtpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwICZsdDsmbHQ7IGk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnOwogCi0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmbHQ7PSBSVExfR0lHQV9NQUNfVkVSXzA2KQotCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikKJiM0MzsJCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJcmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDOwomIzQzOwlyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQlyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7CiYjNDM7CXJldHVybiBSODE2OV9JUlFfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7PSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHsKJiM0MzsJCXVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTsKJiM0MzsKJiM0MzsJCXRwLSZndDtudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSwKJiM0MzsJCQkJCQkJICAgIHRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMpKTsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDs9IDIpCiYjNDM7CQkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUzsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOwlpbnQgbnZlY3M7CiAKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjoKQEAgLTUzNDQsNyAmIzQzOzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLSZndDtwY2lfZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CW52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwKJiM0MzsJCQkJICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQludmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gbnZlY3M7CiYjNDM7CiYjNDM7CXRwLSZndDtpcnFfbnZlY3MgPSBudmVjczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLApAQCAtNTU5OSw2ICYjNDM7NjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwlpbnQgd29ya19kb25lID0gMDsKJiM0MzsJaW50IG1lc3NhZ2VfaWQ7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJbWVzc2FnZV9pZCA9IG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpOwomIzQzOwomIzQzOwlpZiAobWVzc2FnZV9pZCAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQl3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW21lc3NhZ2VfaWRdLAomIzQzOwkJCQkgICAgYnVkZ2V0LCBuYXBpKTsKJiM0MzsKJiM0MzsJaWYgKHdvcmtfZG9uZSAmbHQ7IGJ1ZGdldCAmYW1wOyZhbXA7IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKQomIzQzOwkJcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpOwomIzQzOwomIzQzOwlyZXR1cm4gd29ya19kb25lOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CS8qIEN1cnJlbnRseSByODE2OSBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIFR4IHJpbmcuCiYjNDM7CSAqIFRoZXJlZm9yZSwgd2UgZG9uJiMzOTt0IG5lZWQgYSBwZXItcmluZyBUeCBwcm9jZXNzaW5nIGxvb3AgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJ0bF90eChkZXYsIHRwLCBidWRnZXQpOwomIzQzOwomIzQzOwlpZiAobmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIDApKQomIzQzOwkJcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6CiYjNDM7ICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSkJCTogUnggUXVldWVzCiYjNDM7ICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICYjNDM7IFR4UXMgLSAxKQk6IFR4IFF1ZXVlcwomIzQzOyAqIE5BUEkgaXMgb25seSBhbGxvY2F0ZWQgZm9yIGRhdGEgcGF0aAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUlhfUVVFVUVTKQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7CiYjNDM7CQl9CiYjNDM7CQluZXRpZl9uYXBpX2FkZCh0cC0mZ3Q7ZGV2LCAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWNoLSZndDttYXhfcnggPSB0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzOwomIzQzOwljaC0mZ3Q7bWF4X3R4ID0gMTsKJiM0MzsKJiM0MzsJY2gtJmd0O3J4X2NvdW50ID0gdHAtJmd0O251bV9yeF9yaW5nczsKJiM0MzsJY2gtJmd0O3R4X2NvdW50ID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0gewomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAomIzQzOwkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUywKJiM0MzsJLmdldF9kcnZpbmZvCQk9IHJ0bDgxNjlfZ2V0X2RydmluZm8sCiYjNDM7CS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCiYjNDM7CS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAomIzQzOwkuZ2V0X2NvYWxlc2NlCQk9IHJ0bF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKJiM0MzsJLmdldF9yZWdzCQk9IHJ0bDgxNjlfZ2V0X3JlZ3MsCiYjNDM7CS5nZXRfd29sCQk9IHJ0bDgxNjlfZ2V0X3dvbCwKJiM0MzsJLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAomIzQzOwkuZ2V0X3N0cmluZ3MJCT0gcnRsODE2OV9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAomIzQzOwkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiYjNDM7CS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKJiM0MzsJLmdldF9jaGFubmVscwkJPSBydGw4MTY5X2dldF9jaGFubmVscywKJiM0MzsJLmdldF9saW5rX2tzZXR0aW5ncwk9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKJiM0MzsJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X3JpbmdwYXJhbQkJPSBydGw4MTY5X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCiYjNDM7CS5zZXRfcGF1c2VwYXJhbQkJPSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwOwpAQCAtNTYwOSw3ICYjNDM7NjM1MywxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl1MzIgdHhjb25maWc7CiAJdTMyIHhpZDsKIAotCWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZiAoKnRwKSk7CiYjNDM7CWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnRwKSwKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUywKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01Njg5LDYgJiM0Mzs2NDM2LDEzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O3Jzc19kYXRhKSwKJiM0MzsJCQkJCSAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdHAtJmd0O3Jzc19kYXRhKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiAJdHAtJmd0O2NwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSAmYW1wOyBDUENNRF9NQVNLOwogCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSAmZ3Q7IDQgJmFtcDsmYW1wOyB0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8xOCAmYW1wOyZhbXA7CkBAIC01NzAzLDExICYjNDM7NjQ1NywxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogCXJ0bF9od19yZXNldCh0cCk7CiAKJiM0MzsJcnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7CiYjNDM7CiAJcmMgPSBydGxfYWxsb2NfaXJxKHRwKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgcmMsICYjMzQ7Q2FuJiMzOTt0IGFsbG9jYXRlIGludGVycnVwdFxuJiMzNDspOwogCi0JdHAtJmd0O2lycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApOwomIzQzOwlydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7CiYjNDM7CiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKQomIzQzOwkJcnRsODE2OV9pbml0X3Jzcyh0cCk7CiAKIAlJTklUX1dPUksoJmFtcDt0cC0mZ3Q7d2sud29yaywgcnRsX3Rhc2spOwogCWRpc2FibGVfd29yaygmYW1wO3RwLSZndDt3ay53b3JrKTsKQEAgLTU3MTYsMTMgJiM0Mzs2NDc1LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCiAJZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7cnRsODE2OV9ldGh0b29sX29wczsKIAotCW5ldGlmX25hcGlfYWRkKGRldiwgJmFtcDt0cC0mZ3Q7bmFwaSwgcnRsODE2OV9wb2xsKTsKLQogCWRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYOwogCWRldi0mZ3Q7dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAlkZXYtJmd0O3ByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7CiAKJiM0MzsJaWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgJmFtcDsmYW1wOyB0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkgewomIzQzOwkJZGV2LSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKJiM0MzsJCWRldi0mZ3Q7ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlCiAJICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuCkBAIC01Nzc4LDYgJiM0Mzs2NTQwLDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWlmIChqdW1ib19tYXgpCiAJCWRldi0mZ3Q7bWF4X210dSA9IGp1bWJvX21heDsKIAomIzQzOwlyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtJmd0O2RldiwgMSwgdHAtJmd0O251bV9yeF9yaW5ncyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgcmMsICYjMzQ7c2V0IHR4L3J4IG51bSBmYWlsdXJlXG4mIzM0Oyk7CiYjNDM7CiAJcnRsX3NldF9pcnFfbWFzayh0cCk7CiAKIAl0cC0mZ3Q7Y291bnRlcnMgPSBkbWFtX2FsbG9jX2NvaGVyZW50ICgmYW1wO3BkZXYtJmd0O2Rldiwgc2l6ZW9mKCp0cC0mZ3Q7Y291bnRlcnMpLApAQCAtNTc5Miw5ICYjNDM7NjU1OCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwl0cC0mZ3Q7cnhfcmluZyA9IGtjYWxsb2ModHAtJmd0O251bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcpLAomIzQzOwkJCSAgICAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtyeF9yaW5nKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspCiYjNDM7CQl1NjRfc3RhdHNfaW5pdCgmYW1wO3RwLSZndDtyeF9yaW5nW2ldLnN0YXRzLnN5bmNwKTsKJiM0MzsKJiM0MzsJdHAtJmd0O3J0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtJmd0O2lycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksCiYjNDM7CQkJCSAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtydGw4MTY5X25hcGkpIHsKJiM0MzsJCWtmcmVlKHRwLSZndDtyeF9yaW5nKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXI4MTY5X2luaXRfbmFwaSh0cCk7CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmMpCi0JCXJldHVybiByYzsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmFwaTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkgewogCQlpZiAocnRsX2lzXzgxMjUodHApKQpAQCAtNTgwMyw4ICYjNDM7NjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCQkJdHAtJmd0O2xlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpOwogCX0KIAotCW5ldGRldl9pbmZvKGRldiwgJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXG4mIzM0OywKLQkJICAgIGNoaXAtJmd0O25hbWUsIGRldi0mZ3Q7ZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLSZndDtpcnEpOwomIzQzOwluZXRkZXZfaW5mbyhkZXYsICYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZCAoJWQgdG90YWwpXG4mIzM0OywKJiM0MzsJCSAgICBjaGlwLSZndDtuYW1lLCBkZXYtJmd0O2Rldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLAomIzQzOwkJICAgIHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCB0cC0mZ3Q7aXJxX252ZWNzKTsKIAogCWlmIChqdW1ib19tYXgpCiAJCW5ldGRldl9pbmZvKGRldiwgJiMzNDtqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cbiYjMzQ7LApAQCAtNTgyMSw2ICYjNDM7NjYwNSwxMSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcG1fcnVudGltZV9wdXRfc3luYygmYW1wO3BkZXYtJmd0O2Rldik7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZV9uYXBpOgomIzQzOwlyODE2OV9mcmVlX25hcGkodHApOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnhfcmluZyk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enogYW5kLCBpZiBzbywgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzeW1ib2xzIGFyZSBsaWtlbHkgdG8gYmUgaW1wb3J0YW50LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IGRyaXZlciB3YXMgbW9kaWZpZWQuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgLiBUaGF0JiMzOTtzIHRoZSBSZWFsdGVrIDgxNjksIDgxNjgsIDgxMjUsIG9yIDgxMjcgZXRoZXJuZXQgZHJpdmVyLCByaWdodD8gTm93IHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBkcml2ZXIgZXZlbiBlbXVsYXRlZCBpbiBRRU1VPyBBbmQgaWYgc28gaXMgaXQgd29ydGggYm90aGVyaW5nIHRvIGZ1enouCgpXYWl0IGEgc2Vjb25k4oCmIGluIFFFTVUsIHRoZSBlbXVsYXRlZCBSZWFsdGVrIGlzIGFjdHVhbGx5IHRoZSBydGw4MTM5LCB1c2luZyBgLW5ldCBuaWMsbW9kZWw9cnRsODEzOWAuIE9rYXksIHNvIGAtbmV0IG5pYyxtb2RlbD1ydGw4MTM5YCBpcyBlaXRoZXIgODEzOWNwIG9yIDgxMzkuIElzIHRoZSByODE2OSBvciBydGw4MTY5IGVtdWxhdGVkPyBXYWl0LCBsZXQgbWUgbGlzdCB0aGUgb3RoZXIgb3B0aW9ucyBRRU1VIGdpdmVzIHVzLiBJdCBoYXMgYHJ0bDgxMzlgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBuZTJrX3BjaWAsIGFuZCBgcGNuZXRgLgoKQWxyaWdodCwgSSBzaG91bGQgcmUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzYWlkICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQuLi4mIzM0Oy4gTGV0JiMzOTtzIHNlZTogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIG1lbnRpb25lZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhbmQgdGVhci1kb3duIGNhbGxiYWNrcy4gR290IGl0LiBTbywgaXMgUmVhbHRlayA4MTY5IFBDSSBoYXJkd2FyZSBvciBpcyBpdCBhY2Nlc3NpYmxlPyBRRU1VIG9ubHkgaGFzIHJ0bDgxMzkgKGBody9uZXQvcnRsODEzOS5jYCkuIEJ1dCB3YWl0ISBDYW4gdGhlIHI4MTY5IGRyaXZlciBiaW5kIHRvIHRoZSA4MTM5PyBJIHNob3VsZCBncmVwIGZvciBgcnRsODEzOWAgdnMgYHI4MTY5YCBpbiB0aGUga2VybmVsIG9yIEkgc2hvdWxkIGp1c3QgY2hlY2sgdGhlIFBDSSBJRHMuIEkgbmVlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBiZWZvcmUgSSB3YXN0ZSBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OzgxNjkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjY0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jPTEzNj1lbnVtIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2Mi1cdFR4UG9sbFx0XHQ9IDB4RDksXHQvKiBUZWxsIGNoaXAgdG8gY2hlY2sgVHggZGVzY3JpcHRvcnMgZm9yIHdvcmsgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6MTYzOlx0UnhNYXhTaXplXHQ9IDB4REEsIC8qIE1heCBzaXplIG9mIGFuIFJ4IHBhY2tldCAoODE2OSBvbmx5KSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYy0xNjQtXHRDcENtZFx0XHQ9IDB4RTAsIC8qIEMmIzQzOyBDb21tYW5kIHJlZ2lzdGVyIChDJiM0MzsgbW9kZSBvbmx5KSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODU6XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTMtXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6OTQ6XHQgIFJUTDgxNjkgR2lnYWJpdCBFdGhlcm5ldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTk1LVx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTktXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDA6XHQgIHdpbGwgYmUgY2FsbGVkIHI4MTY5LiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAyOmNvbmZpZyBSODE2OV9MRURTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTklDIExFRHNcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDQ6XHRkZXBlbmRzIG9uIFI4MTY5IFx1MDAyNlx1MDAyNiBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiAhKFI4MTY5PXkgXHUwMDI2XHUwMDI2IExFRFNfQ0xBU1M9bSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZT03PW9iai0kKENPTkZJR184MTM5VE9PKSAmIzQzOz0gODEzOXRvby5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjg6cjgxNjkteSAmIzQzOz0gcjgxNjlfbWFpbi5vIHI4MTY5X2Zpcm13YXJlLm8gcjgxNjlfcGh5X2NvbmZpZy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjk6cjgxNjktJChDT05GSUdfUjgxNjlfTEVEUykgJiM0Mzs9IHI4MTY5X2xlZHMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUjgxNjkpICYjNDM7PSByODE2OS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19SVEFTRSkgJiM0Mzs9IHJ0YXNlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDoyOi8qIHI4MTY5Lmg6IFJlYWxUZWsgODE2OS84MTY4LzgxMDEgZXRoZXJuZXQgZHJpdmVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTMtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg9MTU9ZW51bSBtYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjgwOnN0cnVjdCBydGw4MTY5X3ByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODE6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4Mzp2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4NDp1MTYgcnRsODE2OGhfMl9nZXRfYWRjX2JpYXNfaW9mZnNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODU6dTggcnRsODE2OGRfZWZ1c2VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZ19hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4Njp2b2lkIHI4MTY5X2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmgtODctXHRcdFx0IGVudW0gbWFjX3ZlcnNpb24gdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4OTp2b2lkIHI4MTY5X2dldF9sZWRfbmFtZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC05MC1cdFx0XHRjaGFyICpidWYsIGludCBidWZfbGVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MTppbnQgcnRsODE2OF9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjkyOmludCBydGw4MTY4X2xlZF9tb2RfY3RybChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IG1hc2ssIHUxNiB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjkzOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxNjhfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NDppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTU6aW50IHJ0bDgxMjVfc2V0X2xlZF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaW5kZXgsIHUxNiBtb2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NjpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpydGw4MTI1X2luaXRfbGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTc6dm9pZCByODE2OV9yZW1vdmVfbGVkcyhzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MjovKiByODE2OV9maXJtd2FyZS5jOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jOjE0OiNpbmNsdWRlIFwmIzM0O3I4MTY5X2Zpcm13YXJlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM9ODg9c3RhdGljIGJvb2wgcnRsX2Z3X2RhdGFfb2soc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MTQwOnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMTQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MjovKiByODE2OV9maXJtd2FyZS5oOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjE0OnN0cnVjdCBydGw4MTY5X3ByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTU6dHlwZWRlZiB2b2lkICgqcnRsX2Z3X3dyaXRlX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaDoxNjp0eXBlZGVmIGludCAoKnJ0bF9md19yZWFkX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0xNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg9Mzg9dm9pZCBydGxfZndfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjM5OnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjovKiByODE2OV9sZWRzLmM6IFJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBkcml2ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzojaW5jbHVkZSBcJiMzNDtyODE2OS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjMwOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMzEtXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjM3OiNkZWZpbmUgbGNkZXZfdG9fcjgxNjlfbGRldihsY2RldikgY29udGFpbmVyX29mKGxjZGV2LCBzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2LCBsZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjM5OnN0YXRpYyBib29sIHI4MTY5X3RyaWdnZXJfbW9kZV9pc192YWxpZCh1bnNpZ25lZCBsb25nIGZsYWdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTU0PXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6NTc6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo1ODpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTU5LVx0aW50IHNoaWZ0ID0gbGRldi1cdTAwM2VpbmRleCAqIDQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjYxOlx0aWYgKCFyODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQoZmxhZ3MpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02Mi1cdFx0LyogU3dpdGNoIExFRCBvZmYgdG8gaW5kaWNhdGUgdGhhdCBtb2RlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz03MD1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTcyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjczOlx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6NzQ6XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy03NS1cdGludCBzaGlmdCA9IGxkZXYtXHUwMDNlaW5kZXggKiA0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTkwPXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtOTIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6OTM6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo5NDpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTk1LVx0aW50IHNoaWZ0ID0gbGRldi1cdTAwM2VpbmRleCAqIDQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTIyPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEyMzpcdHI4MTY5X2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMjQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTI1Olx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzMDpzdGF0aWMgdm9pZCBydGw4MTY4X3NldHVwX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEzMS1cdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpbmRleClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEzMi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzM6XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTM0LVx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcdTAwMjZsZGV2LVx1MDAzZWxlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzk6XHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVx1MDAzZW5hbWUsIHNpemVvZihsZGV2LVx1MDAzZW5hbWUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0MC1cdGxlZF9jZGV2LVx1MDAzZW5hbWUgPSBsZGV2LVx1MDAzZW5hbWU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTQ1LVx0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSBydGw4MTY4X2xlZF9od19jb250cm9sX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE0NjpcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHI4MTY5X2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTUyOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxNjhfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE1NDpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNTUtXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xNjc9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNjkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcwOlx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcxOlx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTczOlx0aWYgKCFyODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQoZmxhZ3MpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNzQtXHRcdC8qIFN3aXRjaCBMRUQgb2ZmIHRvIGluZGljYXRlIHRoYXQgbW9kZSBpc24mIzM5O3Qgc3VwcG9ydGVkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTgyPXN0YXRpYyBpbnQgcnRsODEyNV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTg0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE4NTpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE4NjpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE4Ny1cdHUxNiBtb2RlID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0yMDM9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA2Olx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA3Olx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjA4LVx0aW50IG1vZGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjI4OnN0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0dXBfbGVkX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIyOS1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjMxOlx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIzMi1cdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gXHUwMDI2bGRldi1cdTAwM2VsZWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjM3Olx0cjgxNjlfZ2V0X2xlZF9uYW1lKHRwLCBpbmRleCwgbGRldi1cdTAwM2VuYW1lLCBzaXplb2YobGRldi1cdTAwM2VuYW1lKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzgtXHRsZWRfY2Rldi1cdTAwM2VuYW1lID0gbGRldi1cdTAwM2VuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0My1cdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNDQ6XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjI1MDpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpydGw4MTI1X2luaXRfbGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI1MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTI6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjUzLVx0aW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjY1OnZvaWQgcjgxNjlfcmVtb3ZlX2xlZHMoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjcwOlx0Zm9yIChzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsID0gbGVkczsgbC1cdTAwM2VuZGV2OyBsJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI3MS1cdFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXHUwMDI2bC1cdTAwM2VsZWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTItLypcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM6ICogcjgxNjkuYzogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzozNzojaW5jbHVkZSBcJiMzNDtyODE2OS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzozODojaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjczOiNkZWZpbmUgUjgxNjlfUkVHU19TSVpFXHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NzQ6I2RlZmluZSBSODE2OV9SWF9CVUZfU0laRVx0KFNaXzE2SyAtIDEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NS0jZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzYtI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc3OiNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1x0KE5VTV9UWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBUeERlc2MpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NTojZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdCgoTlVNX1JYX0RFU0MgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NjojZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSU1x0KE1BWF9TS0JfRlJBR1MgJiM0MzsgMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3OiNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODojZGVmaW5lIFI4MTY5X01BWF9RVUVVRVNcdDE2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4OTojZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcdDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkwOiNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkxOiNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFU1x0MVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTItI2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzLSNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDojZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUXHQxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NS0jZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjMxLVx0LyogODExMCBmYW1pbHkuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzI6XHR7IDB4ZmM4LCAweDk4MCxcdFJUTF9HSUdBX01BQ19WRVJfMDYsIFwmIzM0O1JUTDgxNjlzYy84MTEwc2NcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzMzpcdHsgMHhmYzgsIDB4MTgwLFx0UlRMX0dJR0FfTUFDX1ZFUl8wNSwgXCYjMzQ7UlRMODE2OXNjLzgxMTBzY1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjM0Olx0eyAweGZjOCwgMHgxMDAsXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcJiMzNDtSVEw4MTY5c2IvODExMHNiXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzUtXHR7IDB4ZmM4LCAweDA0MCxcdFJUTF9HSUdBX01BQ19WRVJfMDMsIFwmIzM0O1JUTDgxMTBzXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzY6XHR7IDB4ZmM4LCAweDAwOCxcdFJUTF9HSUdBX01BQ19WRVJfMDIsIFwmIzM0O1JUTDgxNjlzXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDI1MDIpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjYyLVx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcdDB4ODE2OCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI2MzpcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODE2OSkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI2NC1cdHsgUENJX1ZERVZJQ0UoRExJTkssXHQweDQzMDApIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mjc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjgxPWVudW0gcnRsX3JlZ2lzdGVycyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzQwLVx0UnhEZXNjQWRkckhpZ2hcdD0gMHhlOCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM0MTpcdEVhcmx5VHhUaHJlc1x0PSAweGVjLFx0LyogODE2OS4gVW5pdCBvZiAzMiBieXRlcy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTM0Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00ODc9ZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTUxLVx0Q2xrUmVxRW5cdD0gKDEgXHUwMDNjXHUwMDNjIDcpLFx0LyogQ2xvY2sgUmVxdWVzdCBFbmFibGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU1MjpcdE1TSUVuYWJsZVx0PSAoMSBcdTAwM2NcdTAwM2MgNSksXHQvKiA4MTY5IG9ubHkuIFJlc2VydmVkIGluIHRoZSA4MTY4LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTUzLVx0UENJX0Nsb2NrXzY2TUh6ID0gMHgwMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01NzctXHRNYWNfZGJnb19vZVx0PSAoMSBcdTAwM2NcdTAwM2MgMTQpLFx0Ly8gODE2OCA4MTAxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1Nzg6XHRFbkFuYVBMTFx0PSAoMSBcdTAwM2NcdTAwM2MgMTQpLFx0Ly8gODE2OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTc5LVx0Tm9ybWFsX21vZGVcdD0gKDEgXHUwMDNjXHUwMDNjIDEzKSxcdC8vIHVudXNlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU5NDpcdC8qIHJ0bDgxNjlfUEhZc3RhdHVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01OTUtXHRUQklfRW5hYmxlXHQ9IDB4ODAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjQyPWVudW0gcnRsX3R4X2Rlc2NfYml0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02NTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2NTE6LyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjUyLWVudW0gcnRsX3R4X2Rlc2NfYml0XzAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTczNz1zdHJ1Y3QgcmluZ19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3NDI6c3RydWN0IHJ0bDgxNjlfY291bnRlcnMge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzQzLVx0X19sZTY0XHR0eF9wYWNrZXRzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc4NTpzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc4Ni1cdGJvb2xcdGluaXRlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz04MDY9ZW51bSByeF9kZXNjX3R5cGUge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjgxMTpzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMi1cdHUzMiBjdXJfcng7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODI5OnN0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgzMC1cdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODM1OnN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODM2LVx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NDYtXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg0NzpcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODQ4Olx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0OS1cdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODUzLVx0dW5zaWduZWQgaW50IGh3X3N1cHBfbnVtX3J4X3F1ZXVlcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg1NDpcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg1NS1cdHVuc2lnbmVkIGludCBpcnFfbnZlY3M7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODcxLVx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzI6XHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzM6XHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3NC1cdHUzMiBzYXZlZF93b2xvcHRzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3OTpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg0OnR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg2Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7UmVhbHRlayBhbmQgdGhlIExpbnV4IHI4MTY5IGNyZXcgXHUwMDNjbmV0ZGV2QHZnZXIua2VybmVsLm9yZ1x1MDAzZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODc6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWxUZWsgUlRMLTgxNjkgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODg4LU1PRFVMRV9TT0ZUREVQKFwmIzM0O3ByZTogcmVhbHRla1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9OTE4PU1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTI3QV8xKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkxOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnRwX3RvX2RldihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTI1OnN0YXRpYyB2b2lkIHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTI2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MzA6c3RhdGljIHZvaWQgcnRsX3VubG9ja19jb25maWdfcmVncyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTM1OnN0YXRpYyB2b2lkIHJ0bF9wY2lfY29tbWl0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDE6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWcyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTQyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDk6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWc1KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NTc6c3RhdGljIHZvaWQgcjgxNjlfbW9kX3JlZzhfY29uZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1OC1cdFx0XHRcdHU4IGJpdHMsIGJvb2wgY29uZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NzE6c3RhdGljIGJvb2wgcnRsX2lzXzgxMjUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk3NjpzdGF0aWMgYm9vbCBydGxfaXNfODE2OGV2bF91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTgzOnN0YXRpYyBib29sIHJ0bF9zdXBwb3J0c19lZWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05ODQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk5MDpzdGF0aWMgdm9pZCBydGxfcmVhZF9tYWNfZnJvbV9yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4ICptYWMsIGludCByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05OTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTk5OD1zdHJ1Y3QgcnRsX2NvbmQge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTk5Olx0Ym9vbCAoKmNoZWNrKShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAwMC1cdGNvbnN0IGNoYXIgKm1zZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAwMzpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgKmMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDA0LVx0XHRcdCAgdW5zaWduZWQgbG9uZyB1c2VjcywgaW50IG4sIGJvb2wgaGlnaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAyMDpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0X2hpZ2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDIxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgKmMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwMjc6c3RhdGljIGJvb2wgcnRsX2xvb3Bfd2FpdF9sb3coc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDI4LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBydGxfY29uZCAqYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM0LSNkZWZpbmUgREVDTEFSRV9SVExfQ09ORChuYW1lKVx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwMzU6c3RhdGljIGJvb2wgbmFtZSAjIyBfY2hlY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqKTtcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM2LVx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY29uZCBuYW1lID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA0MS1cdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDQyOnN0YXRpYyBib29sIG5hbWUgIyMgX2NoZWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwNDQ6aW50IHJ0bDgxNjhfbGVkX21vZF9jdHJsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgbWFzaywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDYyOmludCBydGw4MTY4X2dldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwNzg9c3RhdGljIGludCBydGw4MTI1X2dldF9sZWRfcmVnKGludCBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA4NTppbnQgcnRsODEyNV9zZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCwgdTE2IG1vZGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDg2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTEwNjppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExMDcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTIzOnZvaWQgcjgxNjlfZ2V0X2xlZF9uYW1lKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaWR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEyNC1cdFx0XHRjaGFyICpidWYsIGludCBidWZfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTQ1OnN0YXRpYyB2b2lkIHI4MTY4ZnBfYWRqdXN0X29jcF9jbWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiAqY21kLCBpbnQgdHlwZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNTI9REVDTEFSRV9SVExfQ09ORChydGxfZXJpYXJfY29uZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE1NzpzdGF0aWMgdm9pZCBfcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE1OC1cdFx0XHQgICB1MzIgdmFsLCBpbnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE3MjpzdGF0aWMgdm9pZCBydGxfZXJpX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkciwgdTMyIG1hc2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTczLVx0XHRcdCAgdTMyIHZhbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE3ODpzdGF0aWMgdTMyIF9ydGxfZXJpX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCBpbnQgdHlwZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTg5OnN0YXRpYyB1MzIgcnRsX2VyaV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTk0OnN0YXRpYyB2b2lkIHJ0bF93MHcxX2VyaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBwLCB1MzIgbSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjAxOnN0YXRpYyB2b2lkIHJ0bF9lcmlfc2V0X2JpdHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCB1MzIgcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjA2OnN0YXRpYyB2b2lkIHJ0bF9lcmlfY2xlYXJfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIwNy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTIxNj1ERUNMQVJFX1JUTF9DT05EKHJ0bF9vY3BfZ3BoeV9jb25kKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjIxOnN0YXRpYyB2b2lkIHI4MTY4X3BoeV9vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIyMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyMzE6c3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjMyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI0NjpzdGF0aWMgdm9pZCBfX3I4MTY4X21hY19vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNTQ6c3RhdGljIHZvaWQgcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI2MzpzdGF0aWMgdTE2IF9fcjgxNjhfbWFjX29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI2NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNzM6c3RhdGljIHUxNiByODE2OF9tYWNfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjc0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI4NTpzdGF0aWMgdm9pZCByODE2OF9tYWNfb2NwX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTE2IG1hc2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjg2LVx0XHRcdFx0IHUxNiBzZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyOTc6c3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMwNzpzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzA4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMyNTpzdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI2LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBSZWFsdGVrIDgxNjkvODEyNS84MTI3IERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgUmVhbHRlayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIDgxNjksIDgxMjUsIG9yIDgxMjcgdmFyaWFudHMsIGFyZSBlbXVsYXRlZCB3aXRoaW4gUUVNVS4gSWYgdGhleSYjMzk7cmUgbm90LCB0aGVuIGFjY29yZGluZyB0byB0aGUgcnVsZXMsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgUUVNVSYjMzk7cyBzdXBwb3J0ZWQgbmV0d29yayBkZXZpY2VzLiBJIGNhbiBxdWlja2x5IGFzY2VydGFpbiB0aGF0IFFFTVUgZG9lcyBlbXVsYXRlIFJlYWx0ZWsmIzM5O3MgYHJ0bDgxMzlgIChQQ0kgSUQgMTBlYzo4MTM5KSwgd2hpY2ggdXNlcyB0aGUgYDgxMzljcGAgYW5kIGA4MTM5dG9vYCBkcml2ZXJzLiBIb3dldmVyLCBRRU1VJiMzOTtzIGRvY3VtZW50YXRpb24gbGlzdHMgbnVtZXJvdXMgb3RoZXIgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLCBpbmNsdWRpbmcgSW50ZWwmIzM5O3MgZTEwMDAgc2VyaWVzLCB2aXJ0aW8tbmV0LCBhbmQgb3RoZXJzLCBidXQgKm5vdCogUlRMODE2OS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBQQ0kgSURzIG9mIGA4MTM5Y3BgLCBgODEzOXRvb2AsIGFuZCBgcjgxNjlgLiBJIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBmaW5kIHRoYXQgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycyBib3RoIHVzZSBQQ0kgSUQgMHg4MTM5IChmcm9tIFJlYWx0ZWspLCB3aGlsZSB0aGUgYHI4MTY5YCBkcml2ZXIgdXNlcyBhIGRpZmZlcmVudCBzZXQsIGluY2x1ZGluZyB0aGUgY3J1Y2lhbCAweDgxNjksIDB4ODEyNSwgMHg4MTI3IElEcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBQQ0llIE5JQ3MgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBlbXVsYXRlcyBhbiBSVEw4MTY5IG9yIGFueSBvZiB0aGUgb3RoZXIgcmVmZXJlbmNlZCBkZXZpY2VzLiBJIGRlbHZlIGludG8gUUVNVSYjMzk7cyBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGl0cyBuZXR3b3JrIGRldmljZSBlbXVsYXRpb24gKGBody9uZXQvYCksIGFuZCBJIHNlZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMuLi5idXQgSSBkbyBub3Qgc2VlIGBydGw4MTY5YCEgUUVNVSBvbmx5IGhhcyBgcnRsODEzOWAsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0IGRvZXMgbm90IGVtdWxhdGUgdGhlIHRhcmdldGVkIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIFJlYWx0ZWsgODE2OS84MTI1LzgxMjcgZHJpdmVycyBhcmUgbm90IGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4KClNpbmNlIHRoZSBgcjgxNjlgIGRyaXZlciAoYW5kLCBieSBleHRlbnNpb24sIHRoZSBkcml2ZXJzIGZvciA4MTI1IGFuZCA4MTI3KSByZXF1aXJlcyBhICpwaHlzaWNhbCogUENJZSBjYXJkIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEIGNvbWJpbmF0aW9uIHRoYXQgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUsIEkgY29uY2x1ZGUgdGhhdCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHVuZGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgcnVsZSByZWdhcmRpbmcgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIEkgZGV0ZXJtaW5lIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIGVmZm9ydCBpcyBiZXN0IGZvY3VzZWQgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bDgxNjlfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDI1MDIpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mjc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTY2MTU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY2MTYtXHQubmFtZVx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NjYxNzpcdC5pZF90YWJsZVx0PSBydGw4MTY5X3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02NjE4LVx0LnByb2JlXHRcdD0gcnRsX2luaXRfb25lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDYyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBDSSBUYWJsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgYW5kIGNvbnRlbnRzIG9mIHRoZSBgcnRsODE2OV9wY2lfdGJsYCB0YWJsZSB3aXRoaW4gdGhpcyBkcml2ZXIuIFRoaXMgdGFibGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgcHJvcGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0YWJsZSBzdHJ1Y3R1cmVzIHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUmVhbHRlayBSVEw4MTY5IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzLiBXaGF0IFBDSSBJRHMgZG9lcyBpdCByZWNvZ25pemU/IFdoYXQgdmVuZG9yIElEcyBhcmUgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBxdWlya3Mgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGRlZmluZWQgZm9yIHBhcnRpY3VsYXIgcmV2aXNpb25zIG9yIG1hbnVmYWN0dXJlcnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGVudHJpZXMgZGVmaW5pbmcgZGV2aWNlLXNwZWNpZmljIFBDSSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGFueSB1bmlxdWUgc2V0dXAgcHJvY2VkdXJlcy4gSXQgaXMgdGltZSB0byBkZXRlcm1pbmUgdGhlIGRldGFpbHMgb2YgdGhlc2UgcGFyYW1ldGVycywgc28gSSBrbm93IEkgdW5kZXJzdGFuZCB0aGVtIGFuZCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBkcml2ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0YWJsZSBlbnRyaWVzIGFuZCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHJlYWRpbmcgYW5kIG1hcHBpbmcgb3V0IHdoYXQgSSBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUyOlx0XG4gMjUzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxNjlfcGNpX3RibFtdID0ge1xuIDI1NDpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHgyNTAyKSB9LFxuIDI1NTpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHgyNjAwKSB9LFxuIDI1NjpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTI5KSB9LFxuIDI1NzpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTM2KSwgLmRyaXZlcl9kYXRhID0gUlRMX0NGR19OT19HQklUIH0sXG4gMjU4Olx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjEpIH0sXG4gMjU5Olx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjIpIH0sXG4gMjYwOlx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjcpIH0sXG4gMjYxOlx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjgpIH0sXG4gMjYyOlx0XHR7IFBDSV9WREVWSUNFKE5DVUJFLFx0MHg4MTY4KSB9LFxuIDI2MzpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTY5KSB9LFxuIDI2NDpcdFx0eyBQQ0lfVkRFVklDRShETElOSyxcdDB4NDMwMCkgfSxcbiAyNjU6XHRcdHsgUENJX1ZERVZJQ0UoRExJTkssXHQweDQzMDIpIH0sXG4gMjY2Olx0XHR7IFBDSV9WREVWSUNFKEFULFx0MHhjMTA3KSB9LFxuIDI2NzpcdFx0eyBQQ0lfVkRFVklDRShVU1IsXHQweDAxMTYpIH0sXG4gMjY4Olx0XHR7IFBDSV9WREVWSUNFX1NVQihMSU5LU1lTLCAweDEwMzIsIFBDSV9BTllfSUQsIDB4MDAyNCkgfSxcbiAyNjk6XHRcdHsgUENJX0RFVklDRV9TVUIoMHgwMDAxLCAweDgxNjgsIFBDSV9BTllfSUQsIDB4MjQxMCkgfSxcbiAyNzA6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNSkgfSxcbiAyNzE6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNikgfSxcbiAyNzI6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNykgfSxcbiAyNzM6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4MzAwMCkgfSxcbiAyNzQ6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4NTAwMCkgfSxcbiAyNzU6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4MGUxMCkgfSxcbiAyNzY6XHRcdHsgfVxuIDI3NzpcdH07XG4gMjc4Olx0XG4gMjc5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxNjlfcGNpX3RibCk7XG4gMjgwOlx0XG4gMjgxOlx0ZW51bSBydGxfcmVnaXN0ZXJzIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxMQoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFuYWx5emVkIHRoaXMgc2l0dWF0aW9uIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gbXkgY29uY2x1c2lvbi4gVGhlIGRldmljZSBJRCBgMHg4MTM5YCBpcyBkZWZpbml0ZWx5ICpub3QqIHJlbGF0ZWQgdG8gdGhlIGByODE2OWAgZHJpdmVyLCB3aGljaCBoYW5kbGVzIFJlYWx0ZWsgUENJZSBldGhlcm5ldCBkZXZpY2VzIGxpa2UgdGhlIDgxNjksIDgxNjgsIDgxMjUsIGFuZCA4MTI3LiBUaGUga2lja2VyIGhlcmUgaXMgdGhhdCAqbm9uZSogb2YgdGhvc2UgYXJlIGFjdHVhbGx5IGVtdWxhdGVkIGluIHRoZSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyB3ZSYjMzk7cmUgdXNpbmcgZm9yIGZ1enppbmcsIGxpa2UgUUVNVSBvciBHQ0UuCgpJJiMzOTt2ZSBjb25zaWRlcmVkIHRoYXQgc29tZSAqc3BlY2lmaWMqIHNjZW5hcmlvcyAqY291bGQqIHRyaWdnZXIgdGhpcywgYnV0IHJlYWxpemVkIHRoZXkmIzM5O3JlIGltcG9zc2libGU6IEkmIzM5O20gcmVmZXJyaW5nIHRvIHRoaW5ncyBsaWtlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIHNldHVwcyBsaWtlIFVTQiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0uIEFsc28sIGNvZGUgcGF0aHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzLCB3aGljaCwgYWdhaW4sIHdlICpkb24mIzM5O3QqIGhhdmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgIGluIHRoaXMgY2FzZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyB0aGUgUmVhbHRlayBgcjgxNjlgIGRyaXZlciwgYW5kIHRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRzIG11bHRpLXF1ZXVlL1JTUyBzdXBwb3J0IGZvciB0aGUgUlRMODEyNyBoYXJkd2FyZS4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgUmVhbHRlayBQQ0llIE5JQyBoYXJkd2FyZSBvciBhdCBsZWFzdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSBJRHMuIFNpbmNlIHdlIGNhbiYjMzk7dCByZWxpYWJseSB0cmlnZ2VyIHRoZSB0YXJnZXRlZCBjb2RlIHBhdGhzIGluIG91ciB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcywgaXQmIzM5O3Mgbm90IHdvcnRoIHNwZW5kaW5nIHRoZSBlZmZvcnQgb24uCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHJpZ2h0OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBzZXQgdG8gYGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gCiogICBgUmVhc29uaW5nYDogSSBoYXZlIHRoZSBjb25jaXNlIGV4cGxhbmF0aW9uIGhlcmUsIGFsbCBnb29kLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIGNvcnJlY3Q6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGwKKiAgIGBGb2N1c1N5bWJvbHNgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGwKKiAgIGBSZWFzb25pbmdgOiBBIHN0cmluZwoqICAgYFdvcnRoRnV6emluZ2A6IEEgYm9vbGVhbgoKWWVwLCBmb3JtYXQgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjA2OTcxMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMxODg5ODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjA2OTcxNTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMzMTA0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkM2Y2OWUwNmEwNTcxN2JjNmE2N2VlOWFkNWJhN2JhOTY5YTRkZWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA2OjE4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjksNiArMjksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXHUwMDNlXFxuQEAgLTc0LDkgKzc1LDMzIEBAXFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcXHQyNTZcXHQvKiBOdW1iZXIgb2YgVHggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBOVU1fUlhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBSeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXFxuLSNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG4rXFxuKy8qXFxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcXG4rICogZmV0Y2ggb25lIG1vcmUgZGVzY3JpcHRvciBldmVuIGFmdGVyIGhpdHRpbmcgdGhlIFJpbmdFbmQgbWFyay4gV2VcXG4rICogYWxsb2NhdGUgdGhpcyBleHRyYSBkdW1teSBzcGFjZSBhcyBwYWRkaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kc1xcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXFxuKyAqL1xcbisjZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXFxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXFx0KE1BWF9TS0JfRlJBR1MgKyAxKVxcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcXHQoMiAqIFI4MTY5X1RYX1NUT1BfVEhSUylcXG4rI2RlZmluZSBSODE2OV9NQVhfUVVFVUVTXFx0MTZcXG4rI2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTXFx0OFxcbisjZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXFx0MVxcbisjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcXHQxXFxuKyNkZWZpbmUgUjgxMjdfTUFYX05VTV9JUlFWRUNcXHQzMlxcbisjZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXFx0MzBcXG4rI2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFxcdDFcXG4rI2RlZmluZSBSVExfUlNTX0tFWV9TSVpFXFx0NDBcXG4rI2RlZmluZSBSU1NfQ1BVX05VTV9NQVNLXFx0R0VOTUFTSygxOCwgMTYpXFxuKyNkZWZpbmUgUlNTX0hBU0hfTUFTS1xcdFxcdEdFTk1BU0soMTAsIDgpXFxuKyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOFxcbisjZGVmaW5lIFJYU19SU1NfVURQXFx0XFx0QklUKDI3KVxcbisjZGVmaW5lIFJYU19SU1NfSVBWNFxcdFxcdEJJVCgyOClcXG4rI2RlZmluZSBSWFNfUlNTX0lQVjZcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlhTX1JTU19UQ1BcXHRcXHRCSVQoMzApXFxuKyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcXHQoUlhTX1JTU19JUFY0IHwgUlhTX1JTU19JUFY2KVxcbisjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLXFx0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXFxuIFxcbiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0VcXHQweGE0MDBcXG4gXFxuQEAgLTQ0MSwxMSArNDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xcbiBcXHRUeFBvbGxfODEyNVxcdFxcdD0gMHg5MCxcXG4gXFx0TEVEU0VMM1xcdFxcdFxcdD0gMHg5NixcXG4gXFx0TUFDMF9CS1BcXHRcXHQ9IDB4MTllMCxcXG4rXFx0UkRTQVJfUTFfTE9XXFx0XFx0PSAweDQwMDAsXFxuIFxcdFJTU19DVFJMXzgxMjVcXHRcXHQ9IDB4NDUwMCxcXG4gXFx0UV9OVU1fQ1RSTF84MTI1XFx0XFx0PSAweDQ4MDAsXFxuIFxcdEVFRV9UWElETEVfVElNRVJfODEyNVxcdD0gMHg2MDQ4LFxcbitcXHRJTVJfQ0xFQVJfVkVDX01BUF9SRUdcXHQ9IDB4MGQwMCxcXG4rXFx0SVNSX1ZFQ19NQVBfUkVHXFx0XFx0PSAweDBkMDQsXFxuK1xcdElNUl9TRVRfVkVDX01BUF9SRUdcXHQ9IDB4MGQwYyxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEdcXHQyOVxcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcXHQweDIzZlxcbiBcXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcXHRCSVQoMjIpXFxuQEAgLTQ3NCw2ICs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcXG4gXFx0UnhSVU5UXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuIFxcdFJ4Q1JDXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxOSksXFxuIFxcbitcXHRSWFJVTlRfUlNTXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyMSksXFxuK1xcdFJYQ1JDX1JTU1xcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMjApLFxcbitcXG4gXFx0LyogQ2hpcENtZEJpdHMgKi9cXG4gXFx0U3RvcFJlcVxcdFxcdD0gMHg4MCxcXG4gXFx0Q21kUmVzZXRcXHQ9IDB4MTAsXFxuQEAgLTU3Niw2ICs2MDksMjUgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XFxuIFxcbiBcXHQvKiBtYWdpYyBlbmFibGUgdjIgKi9cXG4gXFx0TWFnaWNQYWNrZXRfdjJcXHQ9ICgxIFxcdTAwM2NcXHUwMDNjIDE2KSxcXHQvKiBXYWtlIHVwIHdoZW4gcmVjZWl2ZXMgYSBNYWdpYyBQYWNrZXQgKi9cXG4rI2RlZmluZVxcdElTUklNUl9MSU5LQ0hHXFx0QklUKDI5KVxcbisjZGVmaW5lXFx0SVNSSU1SX1RPS19RMFxcdEJJVCg4KVxcbisjZGVmaW5lXFx0SVNSSU1SX1JPS19RMFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfQ1RSTFxcdFxcdDB4ZDhcXG4rI2RlZmluZSBSU1NfS0VZX1JFR1xcdFxcdFxcdDB4NDYwMFxcbisjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXFx0XFx0MHg0NzAwXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUFxcdEJJVCg1KVxcbisjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY0X1NVUFBcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjZfU1VQUFxcdFxcdEJJVCgxMilcXG4rI2RlZmluZVxcdFJYX1JFU19SU1NcXHRcXHRcXHRCSVQoMjIpXFxuKyNkZWZpbmVcXHRSWF9SVU5UX1JTU1xcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZVxcdFJYX0NSQ19SU1NcXHRcXHRcXHRCSVQoMjApXFxuKyNkZWZpbmUgUlRMX1JYX1FfTlVNX01BU0tcXHRcXHRHRU5NQVNLKDQsIDIpXFxuIH07XFxuIFxcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XFxuQEAgLTYzMyw2ICs2ODUsMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xcbiAjZGVmaW5lIFJ4UHJvdG9JUFxcdChQSUQxIHwgUElEMClcXG4gI2RlZmluZSBSeFByb3RvTWFza1xcdFJ4UHJvdG9JUFxcbiBcXG4rI2RlZmluZVxcdFJYX1VEUFRfREVTQ19SU1NcXHRCSVQoMTkpXFxuKyNkZWZpbmVcXHRSWF9UQ1BUX0RFU0NfUlNTXFx0QklUKDE4KVxcbisjZGVmaW5lXFx0UlhfVURQRl9ERVNDX1JTU1xcdEJJVCgxNikgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbisjZGVmaW5lXFx0UlhfVENQRl9ERVNDX1JTU1xcdEJJVCgxNSkgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbitcXG4gXFx0SVBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksIC8qIElQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbiBcXHRVRFBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cXG4gXFx0VENQRmFpbFxcdFxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpLCAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXFxuQEAgLTY1NCw5ICs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgUnhEZXNjIHtcXG4tXFx0X19sZTMyIG9wdHMxO1xcbi1cXHRfX2xlMzIgb3B0czI7XFxuLVxcdF9fbGU2NCBhZGRyO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9ERUZBVUxUICovXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdF9fbGUzMiBvcHRzMTtcXG4rXFx0XFx0XFx0X19sZTMyIG9wdHMyO1xcbitcXHRcXHRcXHRfX2xlNjQgYWRkcjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRfX2xlNjQgcnNzX2FkZHI7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdFxcdFxcdF9fbGUzMiByc3NfaW5mbztcXG4rXFx0XFx0XFx0XFx0XFx0X19sZTMyIHJzc19yZXN1bHQ7XFxuK1xcdFxcdFxcdFxcdH0gcnNzX2R3b3JkO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMyO1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMxO1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gc3RydWN0IHJpbmdfaW5mbyB7XFxuQEAgLTcyOCwyNyArODAzLDU3IEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSByeF9kZXNjX3R5cGUge1xcbitcXHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcXG4rXFx0UlhfREVTQ19UWVBFX1JTUyxcXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbitcXHR1MzIgY3VyX3J4O1xcbitcXHR1MzIgZGlydHlfcng7XFxuK1xcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XFxuK1xcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XFxuK1xcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XFxuK1xcdHN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XFxuK1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1NjQgcnhfZXJyb3JzO1xcbitcXHRcXHR1NjQgcnhfZHJvcHBlZDtcXG4rXFx0XFx0dTY0IHJ4X2xlbmd0aF9lcnJvcnM7XFxuK1xcdFxcdHU2NCByeF9jcmNfZXJyb3JzO1xcbitcXHRcXHR1NjQgbXVsdGljYXN0O1xcbitcXHRcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XFxuK1xcdH0gc3RhdHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XFxuK1xcdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XFxuK1xcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcXG4rXFx0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XFx0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbi1cXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gXFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcXG4gXFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcXG4tXFx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xcbiBcXHR1MzIgZGlydHlfdHg7XFxuIFxcdHN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5O1xcdC8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqL1xcbi1cXHRzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTtcXHQvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi9cXG4gXFx0ZG1hX2FkZHJfdCBUeFBoeUFkZHI7XFxuLVxcdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1xcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xcbiBcXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XFx0LyogVHggZGF0YSBidWZmZXJzICovXFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyeF9yaW5nO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzO1xcbiBcXHR1MTYgY3BfY21kO1xcbiBcXHR1MTYgdHhfbHBpX3RpbWVyO1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuLVxcdGludCBpcnE7XFxuK1xcdHVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcXG4rXFx0dW5zaWduZWQgaW50IGlycV9udmVjcztcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFxuIFxcdHN0cnVjdCB7XFxuQEAgLTE1NzgsNiArMTY4MywxMSBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHJ0bF9od19zdXBwb3J0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRyZXR1cm4gdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7XFxuK31cXG4rXFxuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG5AQCAtMTY0NCwyNiArMTc1NCwzOCBAQCBzdGF0aWMgdTMyIHJ0bF9nZXRfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgYml0cyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSW50clN0YXR1c184MTI1LCBiaXRzKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50clN0YXR1cywgYml0cyk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIDB4ZmZmZmZmZmYpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRSVExfVzE2KHRwLCBJbnRyTWFzaywgMCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG4tXFx0XFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC1cXHUwMDNlaXJxX21hc2spO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuQEAgLTE4NjcsOSArMTk4OSwyMCBAQCBzdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3R4X3ZsYW5fdGFnKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFR4VmxhblRhZyB8IHN3YWIxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpIDogMHgwMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgUnhEZXNjICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgUnhEZXNjICpkZXNjLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHUzMiBvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMyKTtcXG4rXFx0dTMyIG9wdHMyO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJzc19vcHRzMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChvcHRzMiBcXHUwMDI2IFJ4VmxhblRhZylcXG4gXFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgc3dhYjE2KG9wdHMyIFxcdTAwMjYgMHhmZmZmKSk7XFxuQEAgLTI0MTYsMzQgKzI1NDksNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbi1cXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcXG4tXFx0LmdldF9kcnZpbmZvXFx0XFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxcbi1cXHQuZ2V0X3JlZ3NfbGVuXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcXG4tXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbi1cXHQuZ2V0X2NvYWxlc2NlXFx0XFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxcbi1cXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSBydGxfc2V0X2NvYWxlc2NlLFxcbi1cXHQuZ2V0X3JlZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXFxuLVxcdC5nZXRfd29sXFx0XFx0PSBydGw4MTY5X2dldF93b2wsXFxuLVxcdC5zZXRfd29sXFx0XFx0PSBydGw4MTY5X3NldF93b2wsXFxuLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcXG4tXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxcbi1cXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXFxuLVxcdC5nZXRfZWVlXFx0XFx0PSBydGw4MTY5X2dldF9lZWUsXFxuLVxcdC5zZXRfZWVlXFx0XFx0PSBydGw4MTY5X3NldF9lZWUsXFxuLVxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcXG4tXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXFxuLVxcdC5nZXRfcmluZ3BhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXFxuLVxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxcbi1cXHQuZ2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXFxuLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcXG4tXFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxcbi1cXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcXG4tfTtcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcXG4ge1xcbiBcXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXFxuQEAgLTI2MTksOSArMjcyNCwyNiBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHR0cC1cXHUwMDNlZGlydHlfdHggPSB0cC1cXHUwMDNlY3VyX3R4ID0gdHAtXFx1MDAzZWN1cl9yeCA9IDA7XFxuK1xcdHRwLVxcdTAwM2VkaXJ0eV90eCA9IDA7XFxuK1xcdHRwLVxcdTAwM2VjdXJfdHggPSAwO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdHJpbmctXFx1MDAzZWRpcnR5X3J4ID0gMDtcXG4rXFx0XFx0cmluZy1cXHUwMDNlY3VyX3J4ID0gMDtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0yNjgwLDYgKzI4MDIsMjkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxcbitcXHRcXHR0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFxuK1xcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vyc3Nfa2V5LCBSVExfUlNTX0tFWV9TSVpFKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX3NldHVwX3J4X3BhcmFtcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR0cC1cXHUwMDNlbnVtX3J4X3JpbmdzID0gMTtcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG4rXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzgwOlxcbitcXHRcXHR0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfTUFYX1JYX1FVRVVFUztcXG4rXFx0XFx0dHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHR0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xcbkBAIC0yODAyLDggKzI5NDcsNjIgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSArIDEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggKnJzc19rZXkgPSB0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19rZXk7XFxuK1xcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xcbitcXG4rXFx0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBSVExfUlNTX0tFWV9TSVpFOyBpICs9IHNpemVvZih1MzIpKVxcbitcXHRcXHRSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyArIGksIGdldF91bmFsaWduZWRfbGUzMihyc3Nfa2V5ICsgaSkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggKmluZGlyX3RibCA9IHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlcnNzX2luZGlyX3RibDtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpICs9IDQpIHtcXG4rXFx0XFx0dTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoXFx1MDAyNmluZGlyX3RibFtpXSk7XFxuK1xcbitcXHRcXHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyArIGksIHJldGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR1MzIgcnNzX2N0cmw7XFxuK1xcbitcXHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXFx1MDAzZW51bV9yeF9yaW5ncykpO1xcbitcXG4rXFx0LyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqL1xcbitcXHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8XFxuK1xcdFxcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxcbitcXHRcXHQgICAgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUCB8XFxuK1xcdFxcdCAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX1VEUF9JUFY0X1NVUFAgfFxcbitcXHRcXHQgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDtcXG4rXFxuK1xcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgIGlsb2cyKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xcbitcXG4rXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yZXRhKHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcXG4gXFx0ICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLlxcbkBAIC0yODExLDggKzMwMTAsMTggQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICovXFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cXHUwMDNlVHhQaHlBZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckxvdywgKCh1NjQpIHRwLVxcdTAwM2VUeFBoeUFkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuLVxcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbi1cXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuK1xcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csXFxuK1xcdFxcdCgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyArIChpIC0gMSkgKiA4O1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0UlRMX1czMih0cCwgcmRzYXJfcmVnICsgNCwgKCh1NjQpcmluZy1cXHUwMDNlcnhfcGh5X2FkZHIgXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0XFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxcbitcXHRcXHRcXHQoKHU2NClyaW5nLVxcdTAwM2VyeF9waHlfYWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuQEAgLTM4NTgsNiArNDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcXG4gXFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhlMDBlKSBcXHUwMDI2IEJJVCgxMyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHUxNiByeF9xX251bTtcXG4rXFx0dTE2IHFfY3RybDtcXG4rXFxuK1xcdHJ4X3FfbnVtID0gaWxvZzIodHAtXFx1MDAzZW51bV9yeF9yaW5ncyk7XFxuK1xcdHFfY3RybCA9IFJUTF9SMTYodHAsIFFfTlVNX0NUUkxfODEyNSk7XFxuK1xcdHFfY3RybCBcXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XFxuK1xcdHFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7XFxuK1xcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggdG1wO1xcbitcXG4rXFx0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcXG4rXFx0dG1wIHw9IElOVF9DRkcwX0VOQUJMRV84MTI1O1xcbitcXHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xcbkBAIC0zODY2LDYgKzQwOTYsOSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xcbiBcXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xcbiBcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZyh0cCk7XFxuK1xcbiBcXHQvKiBkaXNhYmxlIFVQUyAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XFxuIFxcbkBAIC0zODg1LDYgKzQxMTgsMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQgICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuIFxcdFxcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcXHUwMDI2IH4weDAyKTtcXG4gXFxuK1xcdC8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xcbitcXHRcXHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcXG4rXFx0XFx0ICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XFxuIFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbkBAIC00MTIxLDYgKzQzNjEsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7XFxuIFxcdHJ0bF9zZXRfcnhfbWF4X3NpemUodHApO1xcbiBcXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJ0bF9zZXRfcnNzX2NvbmZpZyh0cCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XFxuK1xcdH1cXG4gXFx0cnRsX2xvY2tfY29uZmlnX3JlZ3ModHApO1xcbiBcXG4gXFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XFxuQEAgLTQxNDgsMTkgKzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgUnhEZXNjICpkZXNjKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4ge1xcbi1cXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0dTMyIGVvcjtcXG4gXFxuLVxcdGRlc2MtXFx1MDAzZW9wdHMyID0gMDtcXG4tXFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cXG4tXFx0ZG1hX3dtYigpO1xcbi1cXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3Nfb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX29wdHMyID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuK1xcdFxcdGRtYV93bWIoKTtcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlb3B0czIgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cXG4rXFx0XFx0ZG1hX3dtYigpO1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCB1bnNpZ25lZCBpbnQgaW5kZXgpXFxuIHtcXG4rXFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBpbmRleDtcXG4gXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuIFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZCk7XFxuIFxcdGRtYV9hZGRyX3QgbWFwcGluZztcXG5AQCAtNDE3Nyw1NiArNDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRkZXNjLVxcdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuLVxcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xcbitcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7XFxuK1xcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkZXNjLVxcdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuK1xcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcXG4gXFxuIFxcdHJldHVybiBkYXRhO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0MgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5VTV9SWF9ERVNDIFxcdTAwMjZcXHUwMDI2IHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpKyspIHtcXG4gXFx0XFx0ZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSxcXG4tXFx0XFx0XFx0ICAgICAgIGxlNjRfdG9fY3B1KHRwLVxcdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcXG4rXFx0XFx0XFx0ICAgICAgIHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBSODE2OV9SWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG4tXFx0XFx0X19mcmVlX3BhZ2VzKHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuLVxcdFxcdHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSA9IE5VTEw7XFxuLVxcdFxcdHRwLVxcdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyID0gMDtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcXG4rXFx0XFx0X19mcmVlX3BhZ2VzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0cmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19vcHRzMSA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ub3B0czEgPSAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGRlc2MtXFx1MDAzZW9wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqZGF0YTtcXG4gXFxuLVxcdFxcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGkpO1xcbitcXHRcXHRkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTtcXG4gXFx0XFx0aWYgKCFkYXRhKSB7XFxuLVxcdFxcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbitcXHRcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4tXFx0XFx0dHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcXG4rXFx0XFx0cmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xcbi1cXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcXG4rXFx0cnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cmluZy1cXHUwMDNlcnhfcGh5X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcdFxcdGlmIChyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5KSB7XFxuK1xcdFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5LFxcbitcXHRcXHRcXHRcXHRcXHQgIHJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbiBcXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcXG4rXFx0cnRsODE2OV9yeF9kZXNjX2luaXQodHApO1xcbiBcXG4gXFx0bWVtc2V0KHRwLVxcdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cXHUwMDNldHhfc2tiKSk7XFxuLVxcdG1lbXNldCh0cC1cXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cXHUwMDNlUnhfZGF0YWJ1ZmYpKTtcXG4gXFxuLVxcdHJldHVybiBydGw4MTY5X3J4X2ZpbGwodHApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRtZW1zZXQocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZikpO1xcbitcXHRcXHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfY2xlYXI7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfY2xlYXI6XFxuK1xcdHdoaWxlICgtLWkgXFx1MDAzZT0gMClcXG4rXFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcXG5AQCAtNDI2Niw5ICs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aW50IG5hcGlfbnVtID0gbWluKHRwLVxcdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBuYXBpX251bTsgaSsrKVxcbitcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCBuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbmFwaV9udW07IGkrKylcXG4rXFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcXG4gXFxuIFxcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cXG4gXFx0c3luY2hyb25pemVfbmV0KCk7XFxuQEAgLTQzMDMsMTggKzQ2NTAsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRpbnQgaTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGogPSAwOyBqIFxcdTAwM2MgTlVNX1JYX0RFU0M7IGorKykge1xcbitcXHRcXHRcXHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltqXTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtqXS5yc3NfYWRkciA9IGNwdV90b19sZTY0KHBoeV9hZGRyKTtcXG4rXFx0XFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuIFxcdG5ldGlmX3N0b3BfcXVldWUodHAtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRydGw4MTY5X2NsZWFudXAodHApO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5VTV9SWF9ERVNDOyBpKyspXFxuLVxcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGkpO1xcbitcXHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xcbiBcXG4tXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XFxuIFxcdHJ0bF9od19zdGFydCh0cCk7XFxuIH1cXG4gXFxuQEAgLTQ3NTgsMzAgKzUxMTcsMTExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJ0bDgxNjlfZnJhZ21lbnRlZF9mcmFtZSh1MzIgc3RhdHVzKVxcbiBcXHRyZXR1cm4gKHN0YXR1cyBcXHUwMDI2IChGaXJzdEZyYWcgfCBMYXN0RnJhZykpICE9IChGaXJzdEZyYWcgfCBMYXN0RnJhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9wdHMxKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHUzMiByc3NfaGVhZGVyX2luZm87XFxuK1xcdHUzMiBoYXNoX3ZhbDtcXG4rXFxuK1xcdGlmICghKHRwLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9SWEhBU0gpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyc3NfaGVhZGVyX2luZm8gPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xcbitcXG4rXFx0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFxcdTAwMjYgUlhTX1JTU19MM19UWVBFX01BU0spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRoYXNoX3ZhbCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJzc19kd29yZC5yc3NfcmVzdWx0KTtcXG4rXFxuK1xcdHNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLFxcbitcXHRcXHQgICAgIChSWFNfUlNTX0w0X1RZUEVfTUFTSyBcXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xcbitcXHRcXHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHMxKVxcbiB7XFxuLVxcdHUzMiBzdGF0dXMgPSBvcHRzMSBcXHUwMDI2IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7XFxuK1xcdGJvb2wgY3N1bV9vayA9IGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRpZiAoKChvcHRzMSBcXHUwMDI2IFJYX1RDUFRfREVTQ19SU1MpIFxcdTAwMjZcXHUwMDI2ICEob3B0czEgXFx1MDAyNiBSWF9UQ1BGX0RFU0NfUlNTKSkgfHxcXG4rXFx0XFx0ICAgICgob3B0czEgXFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcXHUwMDI2XFx1MDAyNiAhKG9wdHMxIFxcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxcbitcXHRcXHRcXHRjc3VtX29rID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6IHtcXG4rXFx0XFx0dTMyIHN0YXR1cyA9IG9wdHMxIFxcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcXG4rXFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0XFx0XFx0Y3N1bV9vayA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0aWYgKGNzdW1fb2spXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxcbitzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVxcdTAwM2VvcHRzMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHN0YXR1cyBcXHUwMDI2IFJYX1JFU19SU1MpKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJYX1JVTlRfUlNTKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9DUkNfUlNTKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwMjYgUnhSRVMpKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuK1xcdFxcdFxcdFxcdHJpbmctXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJ4Q1JDKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LFxcbitcXHRcXHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4tXFx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFxcdTAwM2MgYnVkZ2V0OyBjb3VudCsrLCB0cC1cXHUwMDNlY3VyX3J4KyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHRwLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4tXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGVudHJ5O1xcbitcXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHJpbmctXFx1MDAzZWN1cl9yeCsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4rXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBlbnRyeTtcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0XFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xcbiBcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlb3B0czEpKTtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XFxuIFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBEZXNjT3duKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ3OTEsMjAgKzUyMzEsMjQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRtYV9ybWIoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihyaW5nLCB0cCwgc3RhdHVzKSkge1xcbiBcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbiBcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXR1cyk7XFxuLVxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuLVxcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJ4Q1JDKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4gXFxuIFxcdFxcdFxcdGlmICghKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcXG4gXFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XFxuLVxcdFxcdFxcdGVsc2UgaWYgKHN0YXR1cyBcXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFxcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkge1xcbitcXHRcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGlmICghKHN0YXR1cyBcXHUwMDI2IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBrdF9zaXplID0gc3RhdHVzIFxcdTAwMjYgR0VOTUFTSygxMywgMCk7XFxuQEAgLTQ4MTUsMTkgKzUyNTksMjMgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICogVGhleSBhcmUgc2VlbiBhcyBhIHN5bXB0b20gb2Ygb3Zlci1tdHUgc2l6ZWQgZnJhbWVzLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJ0bDgxNjlfZnJhZ21lbnRlZF9mcmFtZShzdGF0dXMpKSkge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcXG4tXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuIFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRza2IgPSBuYXBpX2FsbG9jX3NrYihcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHBrdF9zaXplKTtcXG4rXFx0XFx0c2tiID0gbmFwaV9hbGxvY19za2IobmFwaSwgcGt0X3NpemUpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXNrYikpIHtcXG4tXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuK1xcdFxcdGFkZHIgPSByaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XTtcXG4rXFx0XFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuIFxcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFx0XFx0cHJlZmV0Y2gocnhfYnVmKTtcXG5AQCAtNDgzNiwxOSArNTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRza2ItXFx1MDAzZWxlbiA9IHBrdF9zaXplO1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xcbitcXHRcXHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcXG4rXFx0XFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcXG4gXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpXFxuLVxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpIHtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5tdWx0aWNhc3QrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHNrYik7XFxuK1xcdFxcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcXG4gXFxuIFxcdFxcdGRldl9zd19uZXRzdGF0c19yeF9hZGQoZGV2LCBwa3Rfc2l6ZSk7XFxuIHJlbGVhc2VfZGVzY3JpcHRvcjpcXG4tXFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7XFxuK1xcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00ODU2LDggKzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuIHtcXG4tXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XFxuLVxcdHUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KG5hcGktXFx1MDAzZWRldik7XFxuK1xcdHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcXG4gXFxuIFxcdGlmICgoc3RhdHVzIFxcdTAwMjYgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgXFx1MDAyNiB0cC1cXHUwMDNlaXJxX21hc2spKVxcbiBcXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuQEAgLTQ4NzMsMTMgKzUzMzIsMTE0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuIFxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG4gXFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcXG4tXFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2dHAtXFx1MDAzZW5hcGkpO1xcbitcXHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xcbiBvdXQ6XFxuIFxcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfb25lX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGkpXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGlmIChpIFxcdTAwM2MgUjgxNjlfTUFYX1FVRVVFUylcXG4rXFx0XFx0XFx0cGNpX2ZyZWVfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLCBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdFxcdGVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpXFxuK1xcdFxcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgdHApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwY2lfZnJlZV9pcnEodHAtXFx1MDAzZXBjaV9kZXYsIGksIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZWlycV9udmVjczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG1lc3NhZ2VfaWQpXFxuK3tcXG4rXFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXFxuK3tcXG4rXFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XFxuK1xcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcXG4rXFxuK1xcdG5hcGlfc2NoZWR1bGUobmFwaSk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XFxuK1xcbitcXHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xcbitcXHRwaHlfbWFjX2ludGVycnVwdCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcXG4rXFx0aW50IGksIHJjO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRuYXBpID0gXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV07XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXFxuK1xcdFxcdFxcdFxcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0X21zaXgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCwgbmFwaSwgXFxcIiVzLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZW5hbWUsIGkpO1xcbitcXHRcXHRcXHRlbHNlIGlmIChpID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKVxcbitcXHRcXHRcXHRcXHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCB0cCwgXFxcIiVzLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZW5hbWUsIGkpO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydGw4MTY5X2ludGVycnVwdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCBuYXBpLCBcXFwiJXMtJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Z290byBmcmVlX2lycTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfaXJxOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHJ0bDgxNjlfZnJlZV9vbmVfaXJxKHRwLCBpKTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPVxcbkBAIC00OTE0LDEzICs1NDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4ge1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVxcdTAwM2VkZXY7XFxuLVxcdGludCB3b3JrX2RvbmU7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cXHUwMDNlZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXFx1MDAzZWRldjtcXG4rXFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuIFxcbiBcXHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcXG4gXFxuLVxcdHdvcmtfZG9uZSA9IHJ0bF9yeChkZXYsIHRwLCBidWRnZXQpO1xcbitcXHQvKiBydGw4MTY5X3BvbGwoKSBpcyB1c2VkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBSWCByaW5nLiAqL1xcbitcXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdLCBidWRnZXQsIG5hcGkpO1xcbiBcXG4gXFx0aWYgKHdvcmtfZG9uZSBcXHUwMDNjIGJ1ZGdldCBcXHUwMDI2XFx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcXG4gXFx0XFx0cnRsX2lycV9lbmFibGUodHApO1xcbkBAIC01MDM1LDcgKzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XFxuLVxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xcbiBcXHRlbmFibGVfd29yayhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmspO1xcbiBcXHRydGxfcmVzZXRfd29yayh0cCk7XFxuIFxcbkBAIC01MDUxLDE4ICs1NjEyLDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xcbiBcXHRydGw4MTY5X2Rvd24odHApO1xcbi1cXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcbi1cXHRmcmVlX2lycSh0cC1cXHUwMDNlaXJxLCB0cCk7XFxuK1xcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xcbiBcXG4gXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbi1cXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlUnhEZXNjQXJyYXksXFxuLVxcdFxcdFxcdCAgdHAtXFx1MDAzZVJ4UGh5QWRkcik7XFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VUeERlc2NBcnJheSxcXG4gXFx0XFx0XFx0ICB0cC1cXHUwMDNlVHhQaHlBZGRyKTtcXG4gXFx0dHAtXFx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXG4gXFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTUwNzMsOCArNTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRpbnQgbmFwaV9udW07XFxuK1xcbitcXHRuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4gXFxuLVxcdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBuYXBpX251bTsgaSsrKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9pbnRlcnJ1cHRfbXNpeChwY2lfaXJxX3ZlY3Rvcih0cC1cXHUwMDNlcGNpX2RldiwgaSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXFx1MDAzZXBjaV9kZXYsIGkpLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFx0fVxcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtNTA4Miw3ICs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4tXFx0dW5zaWduZWQgbG9uZyBpcnFmbGFncztcXG4gXFx0aW50IHJldHZhbCA9IC1FTk9NRU07XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbkBAIC01MDk2LDEwICs1NjY1LDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRpZiAoIXRwLVxcdTAwM2VUeERlc2NBcnJheSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHAtXFx1MDAzZVJ4UGh5QWRkciwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghdHAtXFx1MDAzZVJ4RGVzY0FycmF5KVxcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3R4XzA7XFxuK1xcdGlmIChydGw4MTY5X2FsbG9jX3J4X2Rlc2ModHApIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9yeF8xO1xcbiBcXG4gXFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG5AQCAtNTEwNyw4ICs1Njc0LDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xcbiBcXG4tXFx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcXG4tXFx0cmV0dmFsID0gcmVxdWVzdF9pcnEodHAtXFx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXFx1MDAzZW5hbWUsIHRwKTtcXG4rXFx0cmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7XFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XFxuIFxcbkBAIC01MTI1LDE1ICs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIGVycl9mcmVlX2lycTpcXG4tXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcXG4gZXJyX3JlbGVhc2VfZndfMjpcXG4gXFx0cnRsX3JlbGVhc2VfZmlybXdhcmUodHApO1xcbi1cXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIGVycl9mcmVlX3J4XzE6XFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4tXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4tZXJyX2ZyZWVfdHhfMDpcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuQEAgLTUxNTIsNiArNTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuIFxcdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcXHUwMDI2ZGV2LVxcdTAwM2VzdGF0cyk7XFxuIFxcdGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdGF0cywgZGV2LVxcdTAwM2V0c3RhdHMpO1xcbiBcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0dTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0O1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdGVycm9ycyA9IHJpbmctXFx1MDAzZXN0YXRzLnJ4X2Vycm9ycztcXG4rXFx0XFx0XFx0ZHJvcHBlZCA9IHJpbmctXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQ7XFxuK1xcdFxcdFxcdGxlbmd0aF9lcnJvcnMgPSByaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzO1xcbitcXHRcXHRcXHRjcmNfZXJyb3JzID0gcmluZy1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycztcXG4rXFx0XFx0XFx0bXVsdGljYXN0ID0gcmluZy1cXHUwMDNlc3RhdHMubXVsdGljYXN0O1xcbitcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Vycm9ycyArPSBlcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9kcm9wcGVkICs9IGRyb3BwZWQ7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzICs9IGxlbmd0aF9lcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9jcmNfZXJyb3JzICs9IGNyY19lcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VtdWx0aWNhc3QgKz0gbXVsdGljYXN0O1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGZXRjaCBhZGRpdGlvbmFsIGNvdW50ZXIgdmFsdWVzIG1pc3NpbmcgaW4gc3RhdHMgY29sbGVjdGVkIGJ5IGRyaXZlclxcbiBcXHQgKiBmcm9tIHRhbGx5IGNvdW50ZXJzLlxcbkBAIC01Mjc1LDYgKzU4NjAsMTYgQEAgc3RhdGljIHZvaWQgcnRsX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCBuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbmFwaV9udW07IGkrKylcXG4rXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXG4rXFx0a2ZyZWUodHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbkBAIC01Mjg5LDYgKzU4ODQsOSBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVxcdTAwM2VkZXYpO1xcbiBcXG4rXFx0cjgxNjlfZnJlZV9uYXBpKHRwKTtcXG4rXFx0a2ZyZWUodHAtXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4gXFx0aWYgKHRwLVxcdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XFxuIFxcbkBAIC01MzIwLDE1ICs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfc2V0X2lycV9tYXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XFxuK1xcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcXHUwMDNjXFx1MDAzYyBpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xcbiBcXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxcbi1cXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0cmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDO1xcbitcXHRyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XFxuK1xcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZT0gZ2V0X21pbl9pcnFfbnZlY3ModHApKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcXG4rXFxuK1xcdFxcdHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMpKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZT0gMilcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUztcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4gXFx0dW5zaWduZWQgaW50IGZsYWdzO1xcbitcXHRpbnQgbnZlY3M7XFxuIFxcbiBcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMDIgLi4uIFJUTF9HSUdBX01BQ19WRVJfMDY6XFxuQEAgLTUzNDQsNyArNTk3NiwxOCBAQCBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLVxcdTAwM2VwY2lfZGV2LCAxLCAxLCBmbGFncyk7XFxuK1xcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XFxuK1xcbitcXHRpZiAobnZlY3MgXFx1MDAzYyAwKVxcbitcXHRcXHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7XFxuK1xcbitcXHRpZiAobnZlY3MgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbnZlY3M7XFxuK1xcbitcXHR0cC1cXHUwMDNlaXJxX252ZWNzID0gbnZlY3M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuQEAgLTU1OTksNiArNjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuK1xcdGludCBtZXNzYWdlX2lkO1xcbitcXG4rXFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVxcdTAwM2VydGw4MTY5X25hcGk7XFxuK1xcbitcXHRpZiAobWVzc2FnZV9pZCBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpXFxuK1xcdFxcdHdvcmtfZG9uZSArPSBydGxfcngoZGV2LCB0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW21lc3NhZ2VfaWRdLFxcbitcXHRcXHRcXHRcXHQgICAgYnVkZ2V0LCBuYXBpKTtcXG4rXFxuK1xcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQgXFx1MDAyNlxcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXFxuK1xcdFxcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcXG4rXFxuK1xcdHJldHVybiB3b3JrX2RvbmU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xcbitcXG4rXFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0LyogQ3VycmVudGx5IHI4MTY5IG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgVHggcmluZy5cXG4rXFx0ICogVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIGEgcGVyLXJpbmcgVHggcHJvY2Vzc2luZyBsb29wIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcXG4rXFxuK1xcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXFxuK1xcdFxcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJUTDgxMjcgTVNJLVggdmVjdG9yIGxheW91dDpcXG4rICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSlcXHRcXHQ6IFJ4IFF1ZXVlc1xcbisgKiBWZWN0b3JzIFJ4UXMgLi4gKFJ4UXMgKyBUeFFzIC0gMSlcXHQ6IFR4IFF1ZXVlc1xcbisgKiBOQVBJIGlzIG9ubHkgYWxsb2NhdGVkIGZvciBkYXRhIHBhdGhcXG4rICovXFxuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpbnQgbmFwaV9udW0gPSBtaW4odHAtXFx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5hcGlfbnVtOyBpKyspIHtcXG4rXFx0XFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XFxuK1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTKVxcbitcXHRcXHRcXHRcXHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4O1xcbitcXHRcXHR9XFxuK1xcdFxcdG5ldGlmX25hcGlfYWRkKHRwLVxcdTAwM2VkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VtYXhfcnggPSB0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRjaC1cXHUwMDNlbWF4X3R4ID0gMTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VyeF9jb3VudCA9IHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7XFxuK1xcdGNoLVxcdTAwM2V0eF9jb3VudCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4rXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4rXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXFxuK1xcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcXG4rXFx0LmdldF9yZWdzX2xlblxcdFxcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXFxuK1xcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4rXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gcnRsX2dldF9jb2FsZXNjZSxcXG4rXFx0LnNldF9jb2FsZXNjZVxcdFxcdD0gcnRsX3NldF9jb2FsZXNjZSxcXG4rXFx0LmdldF9yZWdzXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzLFxcbitcXHQuZ2V0X3dvbFxcdFxcdD0gcnRsODE2OV9nZXRfd29sLFxcbitcXHQuc2V0X3dvbFxcdFxcdD0gcnRsODE2OV9zZXRfd29sLFxcbitcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuK1xcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbitcXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbitcXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbitcXHQuZ2V0X2NoYW5uZWxzXFx0XFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcXG4rXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcXG4rXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXFxuK1xcdC5nZXRfcGF1c2VwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcXG4rXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxcbitcXHQuZ2V0X2V0aF9tYWNfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX2N0cmxfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbit9O1xcbitcXG4gc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKmNoaXA7XFxuQEAgLTU2MDksNyArNjM1MywxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0dTMyIHR4Y29uZmlnO1xcbiBcXHR1MzIgeGlkO1xcbiBcXG4tXFx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YgKCp0cCkpO1xcbitcXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XFxuK1xcbiBcXHRpZiAoIWRldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC01Njg5LDYgKzY0MzYsMTMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG4gXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XFxuK1xcdFxcdHRwLVxcdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwLVxcdTAwM2Vyc3NfZGF0YSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCF0cC1cXHUwMDNlcnNzX2RhdGEpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHR0cC1cXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFxcdTAwMjYgQ1BDTURfTUFTSztcXG4gXFxuIFxcdGlmIChzaXplb2YoZG1hX2FkZHJfdCkgXFx1MDAzZSA0IFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFxcdTAwMjZcXHUwMDI2XFxuQEAgLTU3MDMsMTEgKzY0NTcsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBcXHRydGxfaHdfcmVzZXQodHApO1xcbiBcXG4rXFx0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XFxuK1xcbiBcXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByYywgXFxcIkNhbid0IGFsbG9jYXRlIGludGVycnVwdFxcXFxuXFxcIik7XFxuIFxcbi1cXHR0cC1cXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XFxuK1xcdHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHRwKTtcXG4rXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKVxcbitcXHRcXHRydGw4MTY5X2luaXRfcnNzKHRwKTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmssIHJ0bF90YXNrKTtcXG4gXFx0ZGlzYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuQEAgLTU3MTYsMTMgKzY0NzUsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNnJ0bDgxNjlfZXRodG9vbF9vcHM7XFxuIFxcbi1cXHRuZXRpZl9uYXBpX2FkZChkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSwgcnRsODE2OV9wb2xsKTtcXG4tXFxuIFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XFxuIFxcdGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcXG4gXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbiBcXG4rXFx0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmVcXG4gXFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXFxuQEAgLTU3NzgsNiArNjU0MCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0aWYgKGp1bWJvX21heClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0ganVtYm9fbWF4O1xcbiBcXG4rXFx0cmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLVxcdTAwM2VkZXYsIDEsIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByYywgXFxcInNldCB0eC9yeCBudW0gZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcbiBcXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHAtXFx1MDAzZWNvdW50ZXJzKSxcXG5AQCAtNTc5Miw5ICs2NTU4LDI2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdHRwLVxcdTAwM2VyeF9yaW5nID0ga2NhbGxvYyh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHJ0bDgxNjlfcnhfcmluZyksXFxuK1xcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VyeF9yaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0uc3RhdHMuc3luY3ApO1xcbitcXG4rXFx0dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXFx1MDAzZWlycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksXFxuK1xcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VydGw4MTY5X25hcGkpIHtcXG4rXFx0XFx0a2ZyZWUodHAtXFx1MDAzZXJ4X3JpbmcpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cjgxNjlfaW5pdF9uYXBpKHRwKTtcXG4rXFxuIFxcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuIFxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25hcGk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgwMyw4ICs2NTg2LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdHRwLVxcdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcXG4gXFx0fVxcbiBcXG4tXFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiJXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgIGNoaXAtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLVxcdTAwM2VpcnEpO1xcbitcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXFxcblxcXCIsXFxuK1xcdFxcdCAgICBjaGlwLVxcdTAwM2VuYW1lLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxcbitcXHRcXHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVxcdTAwM2VpcnFfbnZlY3MpO1xcbiBcXG4gXFx0aWYgKGp1bWJvX21heClcXG4gXFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwianVtYm8gZmVhdHVyZXMgW2ZyYW1lczogJWQgYnl0ZXMsIHR4IGNoZWNrc3VtbWluZzogJXNdXFxcXG5cXFwiLFxcbkBAIC01ODIxLDYgKzY2MDUsMTEgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX25hcGk6XFxuK1xcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XFxuK1xcdGtmcmVlKHRwLVxcdTAwM2VyeF9yaW5nKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxODo0NS40NjM4MzI3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE5MjQ3NjE0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzZjY5ZTA2YTA1NzE3YmM2YTY3ZWU5YWQ1YmE3YmE5NjlhNGRlYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNjoxODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmE3NmZiZjFlNTBkMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yOSw2ICsyOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbkBAIC03NCw5ICs3NSwzMyBAQFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcbi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcbitcbisvKlxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxuKyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXG4rICovXG4rI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcdChNQVhfU0tCX0ZSQUdTICsgMSlcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxuKyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFU1x0MTZcbisjZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcdDhcbisjZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXHQxXG4rI2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXHQxXG4rI2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbisjZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXHQzMFxuKyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcdDFcbisjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4rI2RlZmluZSBSU1NfQ1BVX05VTV9NQVNLXHRHRU5NQVNLKDE4LCAxNilcbisjZGVmaW5lIFJTU19IQVNIX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbisjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcbisjZGVmaW5lIFJYU19SU1NfVURQXHRcdEJJVCgyNylcbisjZGVmaW5lIFJYU19SU1NfSVBWNFx0XHRCSVQoMjgpXG4rI2RlZmluZSBSWFNfUlNTX0lQVjZcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlhTX1JTU19UQ1BcdFx0QklUKDMwKVxuKyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcdChSWFNfUlNTX0lQVjQgfCBSWFNfUlNTX0lQVjYpXG4rI2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1x0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXG4gXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXHQweGE0MDBcbiBcbkBAIC00NDEsMTEgKzQ2NiwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHtcbiBcdFR4UG9sbF84MTI1XHRcdD0gMHg5MCxcbiBcdExFRFNFTDNcdFx0XHQ9IDB4OTYsXG4gXHRNQUMwX0JLUFx0XHQ9IDB4MTllMCxcbitcdFJEU0FSX1ExX0xPV1x0XHQ9IDB4NDAwMCxcbiBcdFJTU19DVFJMXzgxMjVcdFx0PSAweDQ1MDAsXG4gXHRRX05VTV9DVFJMXzgxMjVcdFx0PSAweDQ4MDAsXG4gXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcdD0gMHg2MDQ4LFxuK1x0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXHQ9IDB4MGQwMCxcbitcdElTUl9WRUNfTUFQX1JFR1x0XHQ9IDB4MGQwNCxcbitcdElNUl9TRVRfVkVDX01BUF9SRUdcdD0gMHgwZDBjLFxuIH07XG4gXG4rI2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIR1x0MjlcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcdDB4MjNmXG4gXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcdEJJVCgyMilcbkBAIC00NzQsNiArNTA0LDkgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4gXHRSeFJVTlRcdD0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFJ4Q1JDXHQ9ICgxIFx1MDAzY1x1MDAzYyAxOSksXG4gXG4rXHRSWFJVTlRfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4rXHRSWENSQ19SU1NcdD0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbitcbiBcdC8qIENoaXBDbWRCaXRzICovXG4gXHRTdG9wUmVxXHRcdD0gMHg4MCxcbiBcdENtZFJlc2V0XHQ9IDB4MTAsXG5AQCAtNTc2LDYgKzYwOSwyNSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuKyNkZWZpbmVcdElTUklNUl9MSU5LQ0hHXHRCSVQoMjkpXG4rI2RlZmluZVx0SVNSSU1SX1RPS19RMFx0QklUKDgpXG4rI2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkxcdFx0MHhkOFxuKyNkZWZpbmUgUlNTX0tFWV9SRUdcdFx0XHQweDQ2MDBcbisjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjRfU1VQUFx0XHRCSVQoMClcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTXHRcdEJJVCgxKVxuKyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFx0XHRCSVQoMilcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUFx0XHRCSVQoMylcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4rI2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUFx0QklUKDUpXG4rI2RlZmluZSBSU1NfQ1RSTF9VRFBfSVBWNF9TVVBQXHRcdEJJVCgxMSlcbisjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY2X1NVUFBcdFx0QklUKDEyKVxuKyNkZWZpbmVcdFJYX1JFU19SU1NcdFx0XHRCSVQoMjIpXG4rI2RlZmluZVx0UlhfUlVOVF9SU1NcdFx0XHRCSVQoMjEpXG4rI2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbisjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLXHRcdEdFTk1BU0soNCwgMilcbiB9O1xuIFxuIGVudW0gcnRsX2Rlc2NfYml0IHtcbkBAIC02MzMsNiArNjg1LDExIEBAIGVudW0gcnRsX3J4X2Rlc2NfYml0IHtcbiAjZGVmaW5lIFJ4UHJvdG9JUFx0KFBJRDEgfCBQSUQwKVxuICNkZWZpbmUgUnhQcm90b01hc2tcdFJ4UHJvdG9JUFxuIFxuKyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbisjZGVmaW5lXHRSWF9UQ1BUX0RFU0NfUlNTXHRCSVQoMTgpXG4rI2RlZmluZVx0UlhfVURQRl9ERVNDX1JTU1x0QklUKDE2KSAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rI2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rXG4gXHRJUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTYpLCAvKiBJUCBjaGVja3N1bSBmYWlsZWQgKi9cbiBcdFVEUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTUpLCAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRUQ1BGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuQEAgLTY1NCw5ICs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7XG4gfTtcbiBcbiBzdHJ1Y3QgUnhEZXNjIHtcbi1cdF9fbGUzMiBvcHRzMTtcbi1cdF9fbGUzMiBvcHRzMjtcbi1cdF9fbGU2NCBhZGRyO1xuK1x0dW5pb24ge1xuK1x0XHQvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqL1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdF9fbGUzMiBvcHRzMTtcbitcdFx0XHRfX2xlMzIgb3B0czI7XG4rXHRcdFx0X19sZTY0IGFkZHI7XG4rXHRcdH07XG4rXG4rXHRcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cbitcdFx0c3RydWN0IHtcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRfX2xlNjQgcnNzX2FkZHI7XG4rXHRcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0XHRfX2xlMzIgcnNzX2luZm87XG4rXHRcdFx0XHRcdF9fbGUzMiByc3NfcmVzdWx0O1xuK1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4rXHRcdFx0fTtcbitcdFx0XHRfX2xlMzIgcnNzX29wdHMyO1xuK1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4rXHRcdH07XG4rXHR9O1xuIH07XG4gXG4gc3RydWN0IHJpbmdfaW5mbyB7XG5AQCAtNzI4LDI3ICs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSByeF9kZXNjX3R5cGUge1xuK1x0UlhfREVTQ19UWVBFX0RFRkFVTFQsXG4rXHRSWF9ERVNDX1RZUEVfUlNTLFxuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4rXHR1MzIgY3VyX3J4O1xuK1x0dTMyIGRpcnR5X3J4O1xuK1x0c3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTtcbitcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XG4rXHRkbWFfYWRkcl90IHJ4X3BoeV9hZGRyO1xuK1x0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcbitcbitcdHN0cnVjdCB7XG4rXHRcdHU2NCByeF9lcnJvcnM7XG4rXHRcdHU2NCByeF9kcm9wcGVkO1xuK1x0XHR1NjQgcnhfbGVuZ3RoX2Vycm9ycztcbitcdFx0dTY0IHJ4X2NyY19lcnJvcnM7XG4rXHRcdHU2NCBtdWx0aWNhc3Q7XG4rXHRcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbitcdH0gc3RhdHM7XG4rfTtcbitcbitzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XG4rXHR1OCByc3Nfa2V5W1JUTF9SU1NfS0VZX1NJWkVdO1xuK1x0dTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdO1xuK1x0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuLVx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xuIFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcbi1cdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG4gXHRzdHJ1Y3QgVHhEZXNjICpUeERlc2NBcnJheTtcdC8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqL1xuLVx0c3RydWN0IFJ4RGVzYyAqUnhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi9cbiBcdGRtYV9hZGRyX3QgVHhQaHlBZGRyO1xuLVx0ZG1hX2FkZHJfdCBSeFBoeUFkZHI7XG4tXHRzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1x0LyogUnggZGF0YSBidWZmZXJzICovXG4gXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZztcbitcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4rXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgKnJzc19kYXRhO1xuK1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbitcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgKzE2ODMsMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICsxNzU0LDM4IEBAIHN0YXRpYyB1MzIgcnRsX2dldF9ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4tXHRlbHNlXG4rXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4rXHRcdFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0xODY3LDkgKzE5ODksMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcbitcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHR1MzIgb3B0czI7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCArMjU0OSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuLVx0LmdldF9kcnZpbmZvXHRcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcbi1cdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbi1cdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4tXHQuZ2V0X2NvYWxlc2NlXHRcdD0gcnRsX2dldF9jb2FsZXNjZSxcbi1cdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuLVx0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbi1cdC5nZXRfd29sXHRcdD0gcnRsODE2OV9nZXRfd29sLFxuLVx0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4tXHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuLVx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbi1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbi1cdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuLVx0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4tXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbi1cdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQuZ2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxuLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcbi1cdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuLVx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcbi19O1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcbiB7XG4gXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXG5AQCAtMjYxOSw5ICsyNzI0LDI2IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4rXG4rXHRcdG1lbXNldChyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlZGlydHlfdHggPSB0cC1cdTAwM2VjdXJfdHggPSB0cC1cdTAwM2VjdXJfcnggPSAwO1xuK1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuK1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0cmluZy1cdTAwM2VkaXJ0eV9yeCA9IDA7XG4rXHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgKzI4MDIsMjkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxuK1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbitcbitcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gMTtcbitcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbitcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcbitcdFx0dHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfTUFYX1JYX1FVRVVFUztcbitcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcnRsX2Z3ICpydGxfZnc7XG5AQCAtMjgwMiw4ICsyOTQ3LDYyIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICsgMSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcnNzX2tleShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1OCAqcnNzX2tleSA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19rZXk7XG4rXHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcbitcbitcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUlRMX1JTU19LRVlfU0laRTsgaSArPSBzaXplb2YodTMyKSlcbitcdFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgKyBpLCBnZXRfdW5hbGlnbmVkX2xlMzIocnNzX2tleSArIGkpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHU4ICppbmRpcl90YmwgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSArPSA0KSB7XG4rXHRcdHUzMiByZXRhID0gZ2V0X3VuYWxpZ25lZF9sZTMyKFx1MDAyNmluZGlyX3RibFtpXSk7XG4rXG4rXHRcdFJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICsgaSwgcmV0YSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1MzIgcnNzX2N0cmw7XG4rXG4rXHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXHUwMDNlbnVtX3J4X3JpbmdzKSk7XG4rXG4rXHQvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovXG4rXHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8XG4rXHRcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxuK1x0XHQgICAgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUCB8XG4rXHRcdCAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX1VEUF9JUFY0X1NVUFAgfFxuK1x0XHQgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDtcbitcbitcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbitcdFx0XHQgICAgICAgaWxvZzIodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xuK1xuK1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbitcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4rXHRydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nWzBdO1xuK1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICszMDEwLDE4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4rXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LFxuK1x0XHQoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4rXG4rXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyArIChpIC0gMSkgKiA4O1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnICsgNCwgKCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkciBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxuK1x0XHRcdCgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTM4NTgsNiArNDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHUxNiByeF9xX251bTtcbitcdHUxNiBxX2N0cmw7XG4rXG4rXHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRxX2N0cmwgPSBSVExfUjE2KHRwLCBRX05VTV9DVFJMXzgxMjUpO1xuK1x0cV9jdHJsIFx1MDAyNj0gflJUTF9SWF9RX05VTV9NQVNLO1xuK1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbitcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggdG1wO1xuK1xuK1x0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcbitcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbitcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICs0MDk2LDkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XG4gXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xuIFxuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuK1xuIFx0LyogZGlzYWJsZSBVUFMgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcbiBcbkBAIC0zODg1LDYgKzQxMTgsMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4gXHRcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcdTAwMjYgfjB4MDIpO1xuIFxuK1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzICovXG4rXHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKSB7XG4rXHRcdHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTtcbitcdFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXG4rXHRcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XG4rXHR9XG4rXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xuIFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbkBAIC00MTIxLDYgKzQzNjEsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xuIFx0cnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7XG4gXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcbitcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbitcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbitcdFx0XHRydGxfc2V0X3Jzc19jb25maWcodHApO1xuK1x0XHRlbHNlXG4rXHRcdFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XG4rXHR9XG4gXHRydGxfbG9ja19jb25maWdfcmVncyh0cCk7XG4gXG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbkBAIC00MTQ4LDE5ICs0Mzk0LDMyIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya190b19hc2ljKHN0cnVjdCBSeERlc2MgKmRlc2MpXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4ge1xuLVx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0dTMyIGVvcjtcbiBcbi1cdGRlc2MtXHUwMDNlb3B0czIgPSAwO1xuLVx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbi1cdGRtYV93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czIgPSBjcHVfdG9fbGUzMigwKTtcbitcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbitcdFx0ZG1hX3dtYigpO1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMiA9IGNwdV90b19sZTMyKDApO1xuK1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuK1x0XHRkbWFfd21iKCk7XG4rXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleClcbiB7XG4rXHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICsgaW5kZXg7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZCk7XG4gXHRkbWFfYWRkcl90IG1hcHBpbmc7XG5AQCAtNDE3Nyw1NiArNDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4tXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcbitcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xuK1x0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXG4rXHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbitcdGVsc2VcbitcdFx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4rXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XG4gXG4gXHRyZXR1cm4gZGF0YTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdCAgICAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VSeF9kYXRhYnVmZltpXTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOVU1fUlhfREVTQyBcdTAwMjZcdTAwMjYgcmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXTsgaSsrKSB7XG4gXHRcdGRtYV91bm1hcF9wYWdlKHRwX3RvX2Rldih0cCksXG4tXHRcdFx0ICAgICAgIGxlNjRfdG9fY3B1KHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIpLFxuK1x0XHRcdCAgICAgICByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0sXG4gXHRcdFx0ICAgICAgIFI4MTY5X1JYX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuLVx0XHRfX2ZyZWVfcGFnZXModHAtXHUwMDNlUnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xuLVx0XHR0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSA9IE5VTEw7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIgPSAwO1xuLVx0XHR0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5vcHRzMSA9IDA7XG4rXHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IE5VTEw7XG4rXHRcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSA9IDA7XG4rXHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcbitcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4gXHR9XG4gXG4gXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsIFx1MDAyNnJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtOVU1fUlhfREVTQyAtIDFdKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuK1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRpZiAocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4rXHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksXG4rXHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9waHlfYWRkcik7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdGludCBpLCByZXQ7XG4rXG4gXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcbiBcbiBcdG1lbXNldCh0cC1cdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cdTAwM2V0eF9za2IpKTtcbi1cdG1lbXNldCh0cC1cdTAwM2VSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLVx1MDAzZVJ4X2RhdGFidWZmKSk7XG4gXG4tXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1xuK1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbitcdFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9jbGVhcjtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK2Vycl9jbGVhcjpcbitcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdW5tYXBfdHhfc2tiKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1bnNpZ25lZCBpbnQgZW50cnkpXG5AQCAtNDI2Niw5ICs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggKzQ2NTAsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRpbnQgaTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcbitcdFx0XHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2pdO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpO1xuK1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcbitcdFx0fVxuK1x0fVxuK31cbiBcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKylcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19yZXNldCh0cCk7XG4gXG4tXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0cnRsX2h3X3N0YXJ0KHRwKTtcbiB9XG4gXG5AQCAtNDc1OCwzMCArNTExNywxMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBSeERlc2MgKmRlc2MsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHUzMiByc3NfaGVhZGVyX2luZm87XG4rXHR1MzIgaGFzaF92YWw7XG4rXG4rXHRpZiAoISh0cC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xuK1xuK1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4rXHRcdHJldHVybjtcbitcbitcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4rXG4rXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbitcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuK1x0XHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICB1MzIgb3B0czEpXG4ge1xuLVx0dTMyIHN0YXR1cyA9IG9wdHMxIFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xuK1x0Ym9vbCBjc3VtX29rID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4rXHRcdCAgICAoKG9wdHMxIFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxuK1x0XHRcdGNzdW1fb2sgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6IHtcbitcdFx0dTMyIHN0YXR1cyA9IG9wdHMxIFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xuK1xuK1x0XHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4rXHRcdFx0Y3N1bV9vayA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0fVxuIFxuLVx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuK1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuK3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3Ioc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyxcbitcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHRcdHUzMiBzdGF0dXMpXG4re1xuK1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuK1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSWF9SRVNfUlNTKSkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUlhfUlVOVF9SU1MpXG4rXHRcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSWF9DUkNfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4rXHRcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeENSQylcbitcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIGludCBidWRnZXQsXG4rXHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHRwLVx1MDAzZWN1cl9yeCsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICsgZW50cnk7XG4rXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQrKywgcmluZy1cdTAwM2VjdXJfcngrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbitcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSArIGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDI2IERlc2NPd24pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDc5MSwyMCArNTIzMSwyNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihyaW5nLCB0cCwgc3RhdHVzKSkge1xuIFx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwiUnggRVJST1IuIHN0YXR1cyA9ICUwOHhcXG5cIixcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cyk7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXG4gXHRcdFx0aWYgKCEoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcbiBcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuLVx0XHRcdGVsc2UgaWYgKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKVxuLVx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4rXG4rXHRcdFx0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKSB7XG4rXHRcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXG4rXHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRpZiAoIShzdGF0dXMgXHUwMDI2IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpXG4rXHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRwa3Rfc2l6ZSA9IHN0YXR1cyBcdTAwMjYgR0VOTUFTSygxMywgMCk7XG5AQCAtNDgxNSwxOSArNTI1OSwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKiBUaGV5IGFyZSBzZWVuIGFzIGEgc3ltcHRvbSBvZiBvdmVyLW10dSBzaXplZCBmcmFtZXMuXG4gXHRcdCAqL1xuIFx0XHRpZiAodW5saWtlbHkocnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHN0YXR1cykpKSB7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbi1cdFx0c2tiID0gbmFwaV9hbGxvY19za2IoXHUwMDI2dHAtXHUwMDNlbmFwaSwgcGt0X3NpemUpO1xuK1x0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCBwa3Rfc2l6ZSk7XG4gXHRcdGlmICh1bmxpa2VseSghc2tiKSkge1xuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbitcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRhZGRyID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2VhZGRyKTtcbi1cdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLVx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XG4rXHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuK1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICs1Mjg0LDI2IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBwa3Rfc2l6ZTtcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4rXHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuK1x0XHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIFxuLVx0XHRydGw4MTY5X3J4X3ZsYW5fdGFnKGRlc2MsIHNrYik7XG4rXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4tXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XG4rXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3QrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbitcdFx0fVxuIFxuLVx0XHRuYXBpX2dyb19yZWNlaXZlKFx1MDAyNnRwLVx1MDAzZW5hcGksIHNrYik7XG4rXHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiBcbiBcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcbiByZWxlYXNlX2Rlc2NyaXB0b3I6XG4tXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuK1x0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbitcdFx0XHRkZXNjLVx1MDAzZXJzc19hZGRyID0gY3B1X3RvX2xlNjQocmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7XG4rXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcdH1cbiBcbiBcdHJldHVybiBjb3VudDtcbkBAIC00ODU2LDggKzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuLVx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuK1x0dTMyIHN0YXR1cztcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuK1x0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuIFxuIFx0aWYgKChzdGF0dXMgXHUwMDI2IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzIFx1MDAyNiB0cC1cdTAwM2VpcnFfbWFzaykpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbkBAIC00ODczLDEzICs1MzMyLDExNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbi1cdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuIG91dDpcbiBcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfb25lX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGkpXG4re1xuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuK1x0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1FVRVVFUylcbitcdFx0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdFx0ZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRylcbitcdFx0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgdHApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSsrKVxuK1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdFx0ICAgICAgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdFx0ICAgICBpbnQgbWVzc2FnZV9pZClcbit7XG4rXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4re1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHRpbnQgbWVzc2FnZV9pZDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuK1xuK1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbitcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcbitcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4rXG4rXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rfVxuK1xuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XG4rXG4rXHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xuK1x0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4rXHRpbnQgaSwgcmM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkrKykge1xuK1x0XHRuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4rXHRcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXG4rXHRcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuK1x0XHRcdFx0XHRcdCAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCxcbitcdFx0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbitcdFx0XHRlbHNlIGlmIChpID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKVxuK1x0XHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSxcbitcdFx0XHRcdFx0XHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0X290aGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgTlVMTCwgdHAsIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuK1x0XHRcdFx0XHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0LFxuK1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0ICAgICBkZXYtXHUwMDNlbmFtZSwgaSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGdvdG8gZnJlZV9pcnE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2lycTpcbitcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyArNTQ3NCwxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVx1MDAzZWRldjtcbi1cdGludCB3b3JrX2RvbmU7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuIFxuIFx0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4gXG4tXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTtcbitcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXG4rXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgKzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRydGw4MTY5X25hcGlfZW5hYmxlKHRwKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuIFxuQEAgLTUwNTEsMTggKzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBcbiBcdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVx1MDAzZVR4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlVHhQaHlBZGRyKTtcbiBcdHRwLVx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbitcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcbiBcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTUwNzMsOCArNTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgdm9pZCBydGw4MTY5X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRpbnQgbmFwaV9udW07XG4rXG4rXHRuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuIFxuLVx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKykge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4rXHRcdFx0XHRcdCAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdH1cbiB9XG4gI2VuZGlmXG4gXG5AQCAtNTA4Miw3ICs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2Rldjtcbi1cdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmV0dmFsID0gLUVOT01FTTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuQEAgLTUwOTYsMTAgKzU2NjUsOCBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAoIXRwLVx1MDAzZVR4RGVzY0FycmF5KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuLVx0XHRcdFx0XHQgICAgIFx1MDAyNnRwLVx1MDAzZVJ4UGh5QWRkciwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXRwLVx1MDAzZVJ4RGVzY0FycmF5KVxuLVx0XHRnb3RvIGVycl9mcmVlX3R4XzA7XG4rXHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfZnJlZV9yeF8xO1xuIFxuIFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbkBAIC01MTA3LDggKzU2NzQsNyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRydGxfcmVxdWVzdF9maXJtd2FyZSh0cCk7XG4gXG4tXHRpcnFmbGFncyA9IHBjaV9kZXZfbXNpX2VuYWJsZWQocGRldikgPyBJUlFGX05PX1RIUkVBRCA6IElSUUZfU0hBUkVEO1xuLVx0cmV0dmFsID0gcmVxdWVzdF9pcnEodHAtXHUwMDNlaXJxLCBydGw4MTY5X2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi1cdTAwM2VuYW1lLCB0cCk7XG4rXHRyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbkBAIC01MTI1LDE1ICs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByZXR2YWw7XG4gXG4gZXJyX2ZyZWVfaXJxOlxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBlcnJfcmVsZWFzZV9md18yOlxuIFx0cnRsX3JlbGVhc2VfZmlybXdhcmUodHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0pO1xuIGVycl9mcmVlX3J4XzE6XG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBOVUxMO1xuLWVycl9mcmVlX3R4XzA6XG4rXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuQEAgLTUxNTIsNiArNTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdGF0cywgXHUwMDI2ZGV2LVx1MDAzZXN0YXRzKTtcbiBcdGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdGF0cywgZGV2LVx1MDAzZXRzdGF0cyk7XG4gXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0dTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0O1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0XHRkbyB7XG4rXHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0ZXJyb3JzID0gcmluZy1cdTAwM2VzdGF0cy5yeF9lcnJvcnM7XG4rXHRcdFx0ZHJvcHBlZCA9IHJpbmctXHUwMDNlc3RhdHMucnhfZHJvcHBlZDtcbitcdFx0XHRsZW5ndGhfZXJyb3JzID0gcmluZy1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzO1xuK1x0XHRcdGNyY19lcnJvcnMgPSByaW5nLVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnM7XG4rXHRcdFx0bXVsdGljYXN0ID0gcmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3Q7XG4rXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwLCBzdGFydCkpO1xuK1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgKz0gZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkICs9IGRyb3BwZWQ7XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKz0gbGVuZ3RoX2Vycm9ycztcbitcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArPSBjcmNfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgKz0gbXVsdGljYXN0O1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIEZldGNoIGFkZGl0aW9uYWwgY291bnRlciB2YWx1ZXMgbWlzc2luZyBpbiBzdGF0cyBjb2xsZWN0ZWQgYnkgZHJpdmVyXG4gXHQgKiBmcm9tIHRhbGx5IGNvdW50ZXJzLlxuQEAgLTUyNzUsNiArNTg2MCwxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcbitcdGtmcmVlKHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiArNTg4NCw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXHUwMDNlZGV2KTtcbiBcbitcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XG4rXHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbitcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG4gXG5AQCAtNTMyMCwxNSArNTkxOCw0OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFxuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuK1x0XHR0cC1cdTAwM2VpcnFfbWFzayA9IElTUklNUl9MSU5LQ0hHIHwgSVNSSU1SX1RPS19RMDtcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxuK1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IElTUklNUl9ST0tfUTAgXHUwMDNjXHUwMDNjIGk7XG4rXHR9IGVsc2Uge1xuK1x0XHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4gXG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxuLVx0XHR0cC1cdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxuK1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZ2V0X21heF9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdHJldHVybiBSODEyN19NQVhfTlVNX0lSUVZFQztcbitcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcbit9XG4rXG4rc3RhdGljIGludCBnZXRfbWluX2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0cmV0dXJuIFI4MTI3X01JTl9OVU1fSVJRVkVDO1xuK1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZT0gZ2V0X21pbl9pcnFfbnZlY3ModHApKSB7XG4rXHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbitcbitcdFx0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gcm91bmRkb3duX3Bvd19vZl90d28obWluKHJzc19xdWV1ZV9udW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlPSAyKVxuK1x0XHRcdHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUztcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbitcdGludCBudmVjcztcbiBcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcbkBAIC01MzQ0LDcgKzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuK1x0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgZ2V0X21pbl9pcnFfbnZlY3ModHApLFxuK1x0XHRcdFx0ICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XG4rXG4rXHRpZiAobnZlY3MgXHUwMDNjIDApXG4rXHRcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcbitcbitcdGlmIChudmVjcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG52ZWNzO1xuK1xuK1x0dHAtXHUwMDNlaXJxX252ZWNzID0gbnZlY3M7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5AQCAtNTU5OSw2ICs2MjQyLDEwNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuK1x0aW50IG1lc3NhZ2VfaWQ7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbitcbitcdGlmIChtZXNzYWdlX2lkIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4rXHRcdHdvcmtfZG9uZSArPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1ttZXNzYWdlX2lkXSxcbitcdFx0XHRcdCAgICBidWRnZXQsIG5hcGkpO1xuK1xuK1x0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpO1xuK1xuK1x0cmV0dXJuIHdvcmtfZG9uZTtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHQvKiBDdXJyZW50bHkgcjgxNjkgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBUeCByaW5nLlxuK1x0ICogVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIGEgcGVyLXJpbmcgVHggcHJvY2Vzc2luZyBsb29wIGhlcmUuXG4rXHQgKi9cbitcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuK1xuK1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGkpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4rICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSlcdFx0OiBSeCBRdWV1ZXNcbisgKiBWZWN0b3JzIFJ4UXMgLi4gKFJ4UXMgKyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4rICogTkFQSSBpcyBvbmx5IGFsbG9jYXRlZCBmb3IgZGF0YSBwYXRoXG4rICovXG4rc3RhdGljIHZvaWQgcjgxNjlfaW5pdF9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGludCBuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5hcGlfbnVtOyBpKyspIHtcbitcdFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbitcdFx0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7XG4rXHRcdH1cbitcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4rXHRjaC1cdTAwM2VtYXhfdHggPSAxO1xuK1xuK1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4rXHRjaC1cdTAwM2V0eF9jb3VudCA9IDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbitcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4rXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbitcdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4rXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXG4rXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuK1x0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4rXHQuc2V0X2NvYWxlc2NlXHRcdD0gcnRsX3NldF9jb2FsZXNjZSxcbitcdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4rXHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbitcdC5zZXRfd29sXHRcdD0gcnRsODE2OV9zZXRfd29sLFxuK1x0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbitcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4rXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4rXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbitcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuK1x0LmdldF9jaGFubmVsc1x0XHQ9IHJ0bDgxNjlfZ2V0X2NoYW5uZWxzLFxuK1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4rXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbitcdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXG4rXHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4rfTtcbitcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjA5LDcgKzYzNTMsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbitcdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwKSxcbitcdFx0XHRcdCAgICAgIFI4MTY5X01BWF9UWF9RVUVVRVMsXG4rXHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbitcbiBcdGlmICghZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC01Njg5LDYgKzY0MzYsMTMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbiBcbitcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZXJzc19kYXRhKSxcbitcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgKzY0NTcsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRydGxfaHdfcmVzZXQodHApO1xuIFxuK1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4rXG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCIpO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4rXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XG4rXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbitcdFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2dHAtXHUwMDNld2sud29yaywgcnRsX3Rhc2spO1xuIFx0ZGlzYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuQEAgLTU3MTYsMTMgKzY0NzUsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuK1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuK1x0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XG4rXHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZVxuIFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXG5AQCAtNTc3OCw2ICs2NTQwLDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4rXHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwic2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCIpO1xuK1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgKzY1NTgsMjYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdHRwLVx1MDAzZXJ4X3JpbmcgPSBrY2FsbG9jKHRwLVx1MDAzZW51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcpLFxuK1x0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0cC1cdTAwM2VyeF9yaW5nKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKylcbitcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXS5zdGF0cy5zeW5jcCk7XG4rXG4rXHR0cC1cdTAwM2VydGw4MTY5X25hcGkgPSBrY2FsbG9jKHRwLVx1MDAzZWlycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksXG4rXHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbitcdGlmICghdHAtXHUwMDNlcnRsODE2OV9uYXBpKSB7XG4rXHRcdGtmcmVlKHRwLVx1MDAzZXJ4X3JpbmcpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHI4MTY5X2luaXRfbmFwaSh0cCk7XG4rXG4gXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuIFx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MDMsOCArNjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdHRwLVx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xuIFx0fVxuIFxuLVx0bmV0ZGV2X2luZm8oZGV2LCBcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWRcXG5cIixcbi1cdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLCB0cC1cdTAwM2VpcnEpO1xuK1x0bmV0ZGV2X2luZm8oZGV2LCBcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWQgKCVkIHRvdGFsKVxcblwiLFxuK1x0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXG4rXHRcdCAgICBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgdHAtXHUwMDNlaXJxX252ZWNzKTtcbiBcbiBcdGlmIChqdW1ib19tYXgpXG4gXHRcdG5ldGRldl9pbmZvKGRldiwgXCJqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXG5cIixcbkBAIC01ODIxLDYgKzY2MDUsMTEgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfbmFwaTpcbitcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XG4rXHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjQ2MzgzNDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3NTAxODI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6eiBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIHN5bWJvbHMgYXJlIGxpa2VseSB0byBiZSBpbXBvcnRhbnQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgZHJpdmVyIHdhcyBtb2RpZmllZC4gQWgsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY2AuIFRoYXQncyB0aGUgUmVhbHRlayA4MTY5LCA4MTY4LCA4MTI1LCBvciA4MTI3IGV0aGVybmV0IGRyaXZlciwgcmlnaHQ/IE5vdyB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gZW11bGF0ZWQgaW4gUUVNVT8gQW5kIGlmIHNvIGlzIGl0IHdvcnRoIGJvdGhlcmluZyB0byBmdXp6LlxuXG5XYWl0IGEgc2Vjb25k4oCmIGluIFFFTVUsIHRoZSBlbXVsYXRlZCBSZWFsdGVrIGlzIGFjdHVhbGx5IHRoZSBydGw4MTM5LCB1c2luZyBgLW5ldCBuaWMsbW9kZWw9cnRsODEzOWAuIE9rYXksIHNvIGAtbmV0IG5pYyxtb2RlbD1ydGw4MTM5YCBpcyBlaXRoZXIgODEzOWNwIG9yIDgxMzkuIElzIHRoZSByODE2OSBvciBydGw4MTY5IGVtdWxhdGVkPyBXYWl0LCBsZXQgbWUgbGlzdCB0aGUgb3RoZXIgb3B0aW9ucyBRRU1VIGdpdmVzIHVzLiBJdCBoYXMgYHJ0bDgxMzlgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBuZTJrX3BjaWAsIGFuZCBgcGNuZXRgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCByZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IHNhaWQgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdC4uLlwiLiBMZXQncyBzZWU6IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBtZW50aW9uZWQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgYW5kIHRlYXItZG93biBjYWxsYmFja3MuIEdvdCBpdC4gU28sIGlzIFJlYWx0ZWsgODE2OSBQQ0kgaGFyZHdhcmUgb3IgaXMgaXQgYWNjZXNzaWJsZT8gUUVNVSBvbmx5IGhhcyBydGw4MTM5IChgaHcvbmV0L3J0bDgxMzkuY2ApLiBCdXQgd2FpdCEgQ2FuIHRoZSByODE2OSBkcml2ZXIgYmluZCB0byB0aGUgODEzOT8gSSBzaG91bGQgZ3JlcCBmb3IgYHJ0bDgxMzlgIHZzIGByODE2OWAgaW4gdGhlIGtlcm5lbCBvciBJIHNob3VsZCBqdXN0IGNoZWNrIHRoZSBQQ0kgSURzLiBJIG5lZWQgdG8gbWFrZSBhIHNvbGlkIGFzc2Vzc21lbnQgYmVmb3JlIEkgd2FzdGUgbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxODo0OS43Mzg4NTU4OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0Mzg1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiODE2OVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjY2NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz0xMzY9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2Mi1cXHRUeFBvbGxcXHRcXHQ9IDB4RDksXFx0LyogVGVsbCBjaGlwIHRvIGNoZWNrIFR4IGRlc2NyaXB0b3JzIGZvciB3b3JrICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYzoxNjM6XFx0UnhNYXhTaXplXFx0PSAweERBLCAvKiBNYXggc2l6ZSBvZiBhbiBSeCBwYWNrZXQgKDgxNjkgb25seSkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2NC1cXHRDcENtZFxcdFxcdD0gMHhFMCwgLyogQysgQ29tbWFuZCByZWdpc3RlciAoQysgbW9kZSBvbmx5KSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTc0PWNvbmZpZyA4MTM5X09MRF9SWF9SRVNFVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo4NDpjb25maWcgUjgxNjlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODU6XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04Ni1cXHRkZXBlbmRzIG9uIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTkzLVxcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6OTQ6XFx0ICBSVEw4MTY5IEdpZ2FiaXQgRXRoZXJuZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTUtXFx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAwOlxcdCAgd2lsbCBiZSBjYWxsZWQgcjgxNjkuICBUaGlzIGlzIHJlY29tbWVuZGVkLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMjpjb25maWcgUjgxNjlfTEVEU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDQ6XFx0ZGVwZW5kcyBvbiBSODE2OSBcXHUwMDI2XFx1MDAyNiBMRURTX1RSSUdHRVJfTkVUREVWXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwNTpcXHRkZXBlbmRzIG9uICEoUjgxNjk9eSBcXHUwMDI2XFx1MDAyNiBMRURTX0NMQVNTPW0pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTEwNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHXzgxMzlUT08pICs9IDgxMzl0b28ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6ODpyODE2OS15ICs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6OTpyODE2OS0kKENPTkZJR19SODE2OV9MRURTKSArPSByODE2OV9sZWRzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19SODE2OSkgKz0gcjgxNjkub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6MjovKiByODE2OS5oOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmgtMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oPTE1PWVudW0gbWFjX3ZlcnNpb24ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4MDpzdHJ1Y3QgcnRsODE2OV9wcml2YXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4MTpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODM6dm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjg0OnUxNiBydGw4MTY4aF8yX2dldF9hZGNfYmlhc19pb2Zmc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODU6dTggcnRsODE2OGRfZWZ1c2VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODY6dm9pZCByODE2OV9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Ny1cXHRcXHRcXHQgZW51bSBtYWNfdmVyc2lvbiB2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODk6dm9pZCByODE2OV9nZXRfbGVkX25hbWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTkwLVxcdFxcdFxcdGNoYXIgKmJ1ZiwgaW50IGJ1Zl9sZW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MTppbnQgcnRsODE2OF9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MjppbnQgcnRsODE2OF9sZWRfbW9kX2N0cmwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBtYXNrLCB1MTYgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTM6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODE2OF9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NDppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjk1OmludCBydGw4MTI1X3NldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGluZGV4LCB1MTYgbW9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjk2OnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxMjVfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTc6dm9pZCByODE2OV9yZW1vdmVfbGVkcyhzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MjovKiByODE2OV9maXJtd2FyZS5jOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYzoxNDojaW5jbHVkZSBcXFwicjgxNjlfZmlybXdhcmUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM9ODg9c3RhdGljIGJvb2wgcnRsX2Z3X2RhdGFfb2soc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MTQwOnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTE0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjI6LyogcjgxNjlfZmlybXdhcmUuaDogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0xMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTQ6c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTU6dHlwZWRlZiB2b2lkICgqcnRsX2Z3X3dyaXRlX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTY6dHlwZWRlZiBpbnQgKCpydGxfZndfcmVhZF90KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oPTM4PXZvaWQgcnRsX2Z3X3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6Mzk6dm9pZCBydGxfZndfd3JpdGVfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGxfZncgKnJ0bF9mdyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyOi8qIHI4MTY5X2xlZHMuYzogUmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzojaW5jbHVkZSBcXFwicjgxNjkuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjMwOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTMxLVxcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6Mzc6I2RlZmluZSBsY2Rldl90b19yODE2OV9sZGV2KGxjZGV2KSBjb250YWluZXJfb2YobGNkZXYsIHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYsIGxlZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzozOTpzdGF0aWMgYm9vbCByODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQodW5zaWduZWQgbG9uZyBmbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy00MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz01ND1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjU3OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo1ODpcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTU5LVxcdGludCBzaGlmdCA9IGxkZXYtXFx1MDAzZWluZGV4ICogNDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo2MTpcXHRpZiAoIXI4MTY5X3RyaWdnZXJfbW9kZV9pc192YWxpZChmbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02Mi1cXHRcXHQvKiBTd2l0Y2ggTEVEIG9mZiB0byBpbmRpY2F0ZSB0aGF0IG1vZGUgaXNuJ3Qgc3VwcG9ydGVkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz03MD1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNzIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjczOlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo3NDpcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTc1LVxcdGludCBzaGlmdCA9IGxkZXYtXFx1MDAzZWluZGV4ICogNDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTkwPXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy05Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6OTM6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjk0OlxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtOTUtXFx0aW50IHNoaWZ0ID0gbGRldi1cXHUwMDNlaW5kZXggKiA0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTIyPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMjM6XFx0cjgxNjlfbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMjQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEyNTpcXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzMDpzdGF0aWMgdm9pZCBydGw4MTY4X3NldHVwX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTMyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzM6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzQtXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcXHUwMDI2bGRldi1cXHUwMDNlbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzOTpcXHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVxcdTAwM2VuYW1lLCBzaXplb2YobGRldi1cXHUwMDNlbmFtZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0MC1cXHRsZWRfY2Rldi1cXHUwMDNlbmFtZSA9IGxkZXYtXFx1MDAzZW5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNDUtXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTQ2OlxcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNTI6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODE2OF9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNTQ6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNTUtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xNjc9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE2OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcwOlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNzE6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTczOlxcdGlmICghcjgxNjlfdHJpZ2dlcl9tb2RlX2lzX3ZhbGlkKGZsYWdzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE3NC1cXHRcXHQvKiBTd2l0Y2ggTEVEIG9mZiB0byBpbmRpY2F0ZSB0aGF0IG1vZGUgaXNuJ3Qgc3VwcG9ydGVkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xODI9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE4NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTg1OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxODY6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xODctXFx0dTE2IG1vZGUgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MjAzPXN0YXRpYyBpbnQgcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIwNjpcXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA3OlxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjA4LVxcdGludCBtb2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIyODpzdGF0aWMgdm9pZCBydGw4MTI1X3NldHVwX2xlZF9sZGV2KHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyMzE6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzItXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcXHUwMDI2bGRldi1cXHUwMDNlbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIzNzpcXHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVxcdTAwM2VuYW1lLCBzaXplb2YobGRldi1cXHUwMDNlbmFtZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIzOC1cXHRsZWRfY2Rldi1cXHUwMDNlbmFtZSA9IGxkZXYtXFx1MDAzZW5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNDMtXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjQ0OlxcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTA6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODEyNV9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjUxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTI6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNTMtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjY1OnZvaWQgcjgxNjlfcmVtb3ZlX2xlZHMoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjI3MDpcXHRmb3IgKHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmwgPSBsZWRzOyBsLVxcdTAwM2VuZGV2OyBsKyspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjcxLVxcdFxcdGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKFxcdTAwMjZsLVxcdTAwM2VsZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMi0vKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM6ICogcjgxNjkuYzogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mzc6I2luY2x1ZGUgXFxcInI4MTY5LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mzg6I2luY2x1ZGUgXFxcInI4MTY5X2Zpcm13YXJlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3MzojZGVmaW5lIFI4MTY5X1JFR1NfU0laRVxcdFxcdDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc0OiNkZWZpbmUgUjgxNjlfUlhfQlVGX1NJWkVcXHQoU1pfMTZLIC0gMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NS0jZGVmaW5lIE5VTV9UWF9ERVNDXFx0MjU2XFx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzYtI2RlZmluZSBOVU1fUlhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBSeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc3OiNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1xcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg1OiNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdCgoTlVNX1JYX0RFU0MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NjojZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSU1xcdChNQVhfU0tCX0ZSQUdTICsgMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzojZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcXHQoMiAqIFI4MTY5X1RYX1NUT1BfVEhSUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODojZGVmaW5lIFI4MTY5X01BWF9RVUVVRVNcXHQxNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg5OiNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1xcdDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MDojZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXFx0MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkxOiNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFU1xcdDFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05Mi0jZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXFx0MzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05My0jZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXFx0MzBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDojZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUXFx0MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1LSNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVxcdDQwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIzMS1cXHQvKiA4MTEwIGZhbWlseS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzI6XFx0eyAweGZjOCwgMHg5ODAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wNiwgXFxcIlJUTDgxNjlzYy84MTEwc2NcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjMzOlxcdHsgMHhmYzgsIDB4MTgwLFxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFxcXCJSVEw4MTY5c2MvODExMHNjXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzNDpcXHR7IDB4ZmM4LCAweDEwMCxcXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcXFwiUlRMODE2OXNiLzgxMTBzYlxcXCIgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzUtXFx0eyAweGZjOCwgMHgwNDAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wMywgXFxcIlJUTDgxMTBzXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzNjpcXHR7IDB4ZmM4LCAweDAwOCxcXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcXFwiUlRMODE2OXNcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjM3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjU0LVxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDI1MDIpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNjItXFx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcXHQweDgxNjgpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjYzOlxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxNjkpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjY0LVxcdHsgUENJX1ZERVZJQ0UoRExJTkssXFx0MHg0MzAwKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI3OTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsODE2OV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjgxPWVudW0gcnRsX3JlZ2lzdGVycyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0zNDAtXFx0UnhEZXNjQWRkckhpZ2hcXHQ9IDB4ZTgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MzQxOlxcdEVhcmx5VHhUaHJlc1xcdD0gMHhlYyxcXHQvKiA4MTY5LiBVbml0IG9mIDMyIGJ5dGVzLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTM0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTQ4Nz1lbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU1MS1cXHRDbGtSZXFFblxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgNyksXFx0LyogQ2xvY2sgUmVxdWVzdCBFbmFibGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1NTI6XFx0TVNJRW5hYmxlXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyA1KSxcXHQvKiA4MTY5IG9ubHkuIFJlc2VydmVkIGluIHRoZSA4MTY4LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU1My1cXHRQQ0lfQ2xvY2tfNjZNSHogPSAweDAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTc3LVxcdE1hY19kYmdvX29lXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNCksXFx0Ly8gODE2OCA4MTAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTc4OlxcdEVuQW5hUExMXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNCksXFx0Ly8gODE2OVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU3OS1cXHROb3JtYWxfbW9kZVxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTMpLFxcdC8vIHVudXNlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU5NDpcXHQvKiBydGw4MTY5X1BIWXN0YXR1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU5NS1cXHRUQklfRW5hYmxlXFx0PSAweDgwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjQyPWVudW0gcnRsX3R4X2Rlc2NfYml0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2NTE6LyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY1Mi1lbnVtIHJ0bF90eF9kZXNjX2JpdF8wIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTczNz1zdHJ1Y3QgcmluZ19pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3NDI6c3RydWN0IHJ0bDgxNjlfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc0My1cXHRfX2xlNjRcXHR0eF9wYWNrZXRzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc4NTpzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03ODYtXFx0Ym9vbFxcdGluaXRlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTgwNj1lbnVtIHJ4X2Rlc2NfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODExOnN0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMi1cXHR1MzIgY3VyX3J4O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjgyOTpzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODMwLVxcdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODM1OnN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgzNi1cXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0Ni1cXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XFx0LyogVHggZGF0YSBidWZmZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODQ3OlxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg0ODpcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyeF9yaW5nO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0OS1cXHR1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODUzLVxcdHVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODU0OlxcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NTUtXFx0dW5zaWduZWQgaW50IGlycV9udmVjcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3MS1cXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzI6XFx0c3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3MzpcXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NzQtXFx0dTMyIHNhdmVkX3dvbG9wdHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODc5OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg4NDp0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg2Ok1PRFVMRV9BVVRIT1IoXFxcIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IFxcdTAwM2NuZXRkZXZAdmdlci5rZXJuZWwub3JnXFx1MDAzZVxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg4NzpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWxUZWsgUlRMLTgxNjkgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODgtTU9EVUxFX1NPRlRERVAoXFxcInByZTogcmVhbHRla1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9OTE4PU1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTI3QV8xKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdHBfdG9fZGV2KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTI1OnN0YXRpYyB2b2lkIHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTMwOnN0YXRpYyB2b2lkIHJ0bF91bmxvY2tfY29uZmlnX3JlZ3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MzU6c3RhdGljIHZvaWQgcnRsX3BjaV9jb21taXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk0MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDE6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWcyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTQ5OnN0YXRpYyB2b2lkIHJ0bF9tb2RfY29uZmlnNShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTggY2xlYXIsIHU4IHNldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk1NzpzdGF0aWMgdm9pZCByODE2OV9tb2RfcmVnOF9jb25kKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1OC1cXHRcXHRcXHRcXHR1OCBiaXRzLCBib29sIGNvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTcxOnN0YXRpYyBib29sIHJ0bF9pc184MTI1KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTc2OnN0YXRpYyBib29sIHJ0bF9pc184MTY4ZXZsX3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTgzOnN0YXRpYyBib29sIHJ0bF9zdXBwb3J0c19lZWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5OTA6c3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2Zyb21fcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCAqbWFjLCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz05OTg9c3RydWN0IHJ0bF9jb25kIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5OTk6XFx0Ym9vbCAoKmNoZWNrKShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMDAtXFx0Y29uc3QgY2hhciAqbXNnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDAzOnN0YXRpYyBib29sIHJ0bF9sb29wX3dhaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGNvbnN0IHN0cnVjdCBydGxfY29uZCAqYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDA0LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB1c2VjcywgaW50IG4sIGJvb2wgaGlnaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAyMDpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0X2hpZ2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyMS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0bF9jb25kICpjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDI3OnN0YXRpYyBib29sIHJ0bF9sb29wX3dhaXRfbG93KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMjgtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHJ0bF9jb25kICpjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAzNC0jZGVmaW5lIERFQ0xBUkVfUlRMX0NPTkQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAzNTpzdGF0aWMgYm9vbCBuYW1lICMjIF9jaGVjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgbmFtZSA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDQyOnN0YXRpYyBib29sIG5hbWUgIyMgX2NoZWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA0NDppbnQgcnRsODE2OF9sZWRfbW9kX2N0cmwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBtYXNrLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDYyOmludCBydGw4MTY4X2dldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwNzg9c3RhdGljIGludCBydGw4MTI1X2dldF9sZWRfcmVnKGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA4NTppbnQgcnRsODEyNV9zZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCwgdTE2IG1vZGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExMDY6aW50IHJ0bDgxMjVfZ2V0X2xlZF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExMjM6dm9pZCByODE2OV9nZXRfbGVkX25hbWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEyNC1cXHRcXHRcXHRjaGFyICpidWYsIGludCBidWZfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTQ1OnN0YXRpYyB2b2lkIHI4MTY4ZnBfYWRqdXN0X29jcF9jbWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiAqY21kLCBpbnQgdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNTI9REVDTEFSRV9SVExfQ09ORChydGxfZXJpYXJfY29uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE1NzpzdGF0aWMgdm9pZCBfcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNTgtXFx0XFx0XFx0ICAgdTMyIHZhbCwgaW50IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExNzI6c3RhdGljIHZvaWQgcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzMtXFx0XFx0XFx0ICB1MzIgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTc4OnN0YXRpYyB1MzIgX3J0bF9lcmlfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIGludCB0eXBlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTg5OnN0YXRpYyB1MzIgcnRsX2VyaV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE5NDpzdGF0aWMgdm9pZCBydGxfdzB3MV9lcmkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCB1MzIgcCwgdTMyIG0pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyMDE6c3RhdGljIHZvaWQgcnRsX2VyaV9zZXRfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjA2OnN0YXRpYyB2b2lkIHJ0bF9lcmlfY2xlYXJfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDcte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTIxNj1ERUNMQVJFX1JUTF9DT05EKHJ0bF9vY3BfZ3BoeV9jb25kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjIxOnN0YXRpYyB2b2lkIHI4MTY4X3BoeV9vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjMxOnN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjQ2OnN0YXRpYyB2b2lkIF9fcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNTQ6c3RhdGljIHZvaWQgcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNjM6c3RhdGljIHUxNiBfX3I4MTY4X21hY19vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI3MzpzdGF0aWMgdTE2IHI4MTY4X21hY19vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI4NTpzdGF0aWMgdm9pZCByODE2OF9tYWNfb2NwX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTE2IG1hc2ssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI4Ni1cXHRcXHRcXHRcXHQgdTE2IHNldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI5NzpzdGF0aWMgdm9pZCByODEyN19zZnBfc2RzX3BoeV9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMwNzpzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTMwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEzMjU6c3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEzMjYte1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ5Ljc4OTI5OTMyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMjMyMjM2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBSZWFsdGVrIDgxNjkvODEyNS84MTI3IERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBSZWFsdGVrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgODE2OSwgODEyNSwgb3IgODEyNyB2YXJpYW50cywgYXJlIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJZiB0aGV5J3JlIG5vdCwgdGhlbiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBub3Qgd29ydGggZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgUUVNVSdzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMuIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIHRoYXQgUUVNVSBkb2VzIGVtdWxhdGUgUmVhbHRlaydzIGBydGw4MTM5YCAoUENJIElEIDEwZWM6ODEzOSksIHdoaWNoIHVzZXMgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycy4gSG93ZXZlciwgUUVNVSdzIGRvY3VtZW50YXRpb24gbGlzdHMgbnVtZXJvdXMgb3RoZXIgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLCBpbmNsdWRpbmcgSW50ZWwncyBlMTAwMCBzZXJpZXMsIHZpcnRpby1uZXQsIGFuZCBvdGhlcnMsIGJ1dCAqbm90KiBSVEw4MTY5LlxuXG5UbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBQQ0kgSURzIG9mIGA4MTM5Y3BgLCBgODEzOXRvb2AsIGFuZCBgcjgxNjlgLiBJIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBmaW5kIHRoYXQgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycyBib3RoIHVzZSBQQ0kgSUQgMHg4MTM5IChmcm9tIFJlYWx0ZWspLCB3aGlsZSB0aGUgYHI4MTY5YCBkcml2ZXIgdXNlcyBhIGRpZmZlcmVudCBzZXQsIGluY2x1ZGluZyB0aGUgY3J1Y2lhbCAweDgxNjksIDB4ODEyNSwgMHg4MTI3IElEcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBQQ0llIE5JQ3MgSSdtIGNvbmNlcm5lZCB3aXRoLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgZW11bGF0ZXMgYW4gUlRMODE2OSBvciBhbnkgb2YgdGhlIG90aGVyIHJlZmVyZW5jZWQgZGV2aWNlcy4gSSBkZWx2ZSBpbnRvIFFFTVUncyBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGl0cyBuZXR3b3JrIGRldmljZSBlbXVsYXRpb24gKGBody9uZXQvYCksIGFuZCBJIHNlZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMuLi5idXQgSSBkbyBub3Qgc2VlIGBydGw4MTY5YCEgUUVNVSBvbmx5IGhhcyBgcnRsODEzOWAsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0IGRvZXMgbm90IGVtdWxhdGUgdGhlIHRhcmdldGVkIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIFJlYWx0ZWsgODE2OS84MTI1LzgxMjcgZHJpdmVycyBhcmUgbm90IGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC5cblxuU2luY2UgdGhlIGByODE2OWAgZHJpdmVyIChhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGRyaXZlcnMgZm9yIDgxMjUgYW5kIDgxMjcpIHJlcXVpcmVzIGEgKnBoeXNpY2FsKiBQQ0llIGNhcmQgd2l0aCBhIHNwZWNpZmljIHZlbmRvci9kZXZpY2UgSUQgY29tYmluYXRpb24gdGhhdCBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSwgSSBjb25jbHVkZSB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgdW5kZXIgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHJ1bGUgcmVnYXJkaW5nIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJIGRldGVybWluZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgZnV6emluZyBlZmZvcnQgaXMgYmVzdCBmb2N1c2VkIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjU4LjgxMjUyNTUyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRla1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0yNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHJ0bF9jaGlwX2luZm9zX2V4dGVuZGVkW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjUzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTY5X3BjaV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4MjUwMikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyNzk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxNjlfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjYxNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY2MTYtXFx0Lm5hbWVcXHRcXHQ9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjY2MTc6XFx0LmlkX3RhYmxlXFx0PSBydGw4MTY5X3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjYxOC1cXHQucHJvYmVcXHRcXHQ9IHJ0bF9pbml0X29uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDY6MTg6NTguODYyNTA2Mzc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxNzA2MjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBDSSBUYWJsZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIGFuZCBjb250ZW50cyBvZiB0aGUgYHJ0bDgxNjlfcGNpX3RibGAgdGFibGUgd2l0aGluIHRoaXMgZHJpdmVyLiBUaGlzIHRhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHByb3BlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgdGFibGUgc3RydWN0dXJlcyB0aGUgZHJpdmVyJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUmVhbHRlayBSVEw4MTY5IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzLiBXaGF0IFBDSSBJRHMgZG9lcyBpdCByZWNvZ25pemU/IFdoYXQgdmVuZG9yIElEcyBhcmUgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBxdWlya3Mgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGRlZmluZWQgZm9yIHBhcnRpY3VsYXIgcmV2aXNpb25zIG9yIG1hbnVmYWN0dXJlcnM/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgZW50cmllcyBkZWZpbmluZyBkZXZpY2Utc3BlY2lmaWMgUENJIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgYW55IHVuaXF1ZSBzZXR1cCBwcm9jZWR1cmVzLiBJdCBpcyB0aW1lIHRvIGRldGVybWluZSB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYXJhbWV0ZXJzLCBzbyBJIGtub3cgSSB1bmRlcnN0YW5kIHRoZW0gYW5kIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIGRyaXZlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHRhYmxlIGVudHJpZXMgYW5kIHRoZSBhY3R1YWwgaGFyZHdhcmUuIEknbSBnb2luZyB0byBzdGFydCByZWFkaW5nIGFuZCBtYXBwaW5nIG91dCB3aGF0IEkgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE5OjAxLjQ3OTU3MTE2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XFxuIDI1NDpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHgyNTAyKSB9LFxcbiAyNTU6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4MjYwMCkgfSxcXG4gMjU2OlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxMjkpIH0sXFxuIDI1NzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTM2KSwgLmRyaXZlcl9kYXRhID0gUlRMX0NGR19OT19HQklUIH0sXFxuIDI1ODpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTYxKSB9LFxcbiAyNTk6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4ODE2MikgfSxcXG4gMjYwOlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxNjcpIH0sXFxuIDI2MTpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTY4KSB9LFxcbiAyNjI6XFx0XFx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcXHQweDgxNjgpIH0sXFxuIDI2MzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTY5KSB9LFxcbiAyNjQ6XFx0XFx0eyBQQ0lfVkRFVklDRShETElOSyxcXHQweDQzMDApIH0sXFxuIDI2NTpcXHRcXHR7IFBDSV9WREVWSUNFKERMSU5LLFxcdDB4NDMwMikgfSxcXG4gMjY2OlxcdFxcdHsgUENJX1ZERVZJQ0UoQVQsXFx0MHhjMTA3KSB9LFxcbiAyNjc6XFx0XFx0eyBQQ0lfVkRFVklDRShVU1IsXFx0MHgwMTE2KSB9LFxcbiAyNjg6XFx0XFx0eyBQQ0lfVkRFVklDRV9TVUIoTElOS1NZUywgMHgxMDMyLCBQQ0lfQU5ZX0lELCAweDAwMjQpIH0sXFxuIDI2OTpcXHRcXHR7IFBDSV9ERVZJQ0VfU1VCKDB4MDAwMSwgMHg4MTY4LCBQQ0lfQU5ZX0lELCAweDI0MTApIH0sXFxuIDI3MDpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTI1KSB9LFxcbiAyNzE6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4ODEyNikgfSxcXG4gMjcyOlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxMjcpIH0sXFxuIDI3MzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHgzMDAwKSB9LFxcbiAyNzQ6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4NTAwMCkgfSxcXG4gMjc1OlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDBlMTApIH0sXFxuIDI3NjpcXHRcXHR7IH1cXG4gMjc3OlxcdH07XFxuIDI3ODpcXHRcXG4gMjc5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRlbnVtIHJ0bF9yZWdpc3RlcnMge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxOTowMS40Nzk5NjQ1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTA4NTk5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYW5hbHl6ZWQgdGhpcyBzaXR1YXRpb24gYW5kIEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIFRoZSBkZXZpY2UgSUQgYDB4ODEzOWAgaXMgZGVmaW5pdGVseSAqbm90KiByZWxhdGVkIHRvIHRoZSBgcjgxNjlgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyBSZWFsdGVrIFBDSWUgZXRoZXJuZXQgZGV2aWNlcyBsaWtlIHRoZSA4MTY5LCA4MTY4LCA4MTI1LCBhbmQgODEyNy4gVGhlIGtpY2tlciBoZXJlIGlzIHRoYXQgKm5vbmUqIG9mIHRob3NlIGFyZSBhY3R1YWxseSBlbXVsYXRlZCBpbiB0aGUgdHlwaWNhbCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgd2UncmUgdXNpbmcgZm9yIGZ1enppbmcsIGxpa2UgUUVNVSBvciBHQ0UuXG5cbkkndmUgY29uc2lkZXJlZCB0aGF0IHNvbWUgKnNwZWNpZmljKiBzY2VuYXJpb3MgKmNvdWxkKiB0cmlnZ2VyIHRoaXMsIGJ1dCByZWFsaXplZCB0aGV5J3JlIGltcG9zc2libGU6IEknbSByZWZlcnJpbmcgdG8gdGhpbmdzIGxpa2Ugc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgc2V0dXBzIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbS4gQWxzbywgY29kZSBwYXRocyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMsIHdoaWNoLCBhZ2Fpbiwgd2UgKmRvbid0KiBoYXZlIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgIGluIHRoaXMgY2FzZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyB0aGUgUmVhbHRlayBgcjgxNjlgIGRyaXZlciwgYW5kIHRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRzIG11bHRpLXF1ZXVlL1JTUyBzdXBwb3J0IGZvciB0aGUgUlRMODEyNyBoYXJkd2FyZS4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgUmVhbHRlayBQQ0llIE5JQyBoYXJkd2FyZSBvciBhdCBsZWFzdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSBJRHMuIFNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IHRyaWdnZXIgdGhlIHRhcmdldGVkIGNvZGUgcGF0aHMgaW4gb3VyIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLCBpdCdzIG5vdCB3b3J0aCBzcGVuZGluZyB0aGUgZWZmb3J0IG9uLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgcmlnaHQ6XG5cbiogICBgV29ydGhGdXp6aW5nYDogc2V0IHRvIGBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzYDogc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3QsIGBbXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gXG4qICAgYFJlYXNvbmluZ2A6IEkgaGF2ZSB0aGUgY29uY2lzZSBleHBsYW5hdGlvbiBoZXJlLCBhbGwgZ29vZC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIGNvcnJlY3Q6XG5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgbnVsbFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGxcbiogICBgUmVhc29uaW5nYDogQSBzdHJpbmdcbiogICBgV29ydGhGdXp6aW5nYDogQSBib29sZWFuXG5cblllcCwgZm9ybWF0IGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUxMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxOTowNy4zODg1Njc2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE5OjA3LjM4ODU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow52d95[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 05:57:11 +0000 UTC FinishedAt: 2026-08-31 06:19:09 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzZjY5ZTA2YTA1NzE3YmM2YTY3ZWU5YWQ1YmE3YmE5NjlhNGRlYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNjoxODo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjksNiAmIzQzOzI5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbkBAIC03NCw5ICYjNDM7NzUsMzMgQEBcbiAjZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuICNkZWZpbmUgTlVNX1JYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBSODE2OV9UWF9SSU5HX0JZVEVTXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXG4tI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBXb3JrYXJvdW5kIGZvciB0aGUgaGFyZHdhcmUgRE1BIHByZWZldGNoZXIuIFRoZSBIL1cgbWlnaHQgYWdncmVzc2l2ZWx5XG4mIzQzOyAqIGZldGNoIG9uZSBtb3JlIGRlc2NyaXB0b3IgZXZlbiBhZnRlciBoaXR0aW5nIHRoZSBSaW5nRW5kIG1hcmsuIFdlXG4mIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbiYjNDM7ICogYWNjZXNzIGFuZCBwb3RlbnRpYWwgSU9NTVUgZmF1bHRzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBSeERlc2MpKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXHQoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKVxuICNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG4mIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFU1x0MTZcbiYjNDM7I2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTXHQ4XG4mIzQzOyNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbiYjNDM7I2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXHQxXG4mIzQzOyNkZWZpbmUgUjgxMjdfTUFYX05VTV9JUlFWRUNcdDMyXG4mIzQzOyNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG4mIzQzOyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcdDFcbiYjNDM7I2RlZmluZSBSVExfUlNTX0tFWV9TSVpFXHQ0MFxuJiM0MzsjZGVmaW5lIFJTU19DUFVfTlVNX01BU0tcdEdFTk1BU0soMTgsIDE2KVxuJiM0MzsjZGVmaW5lIFJTU19IQVNIX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbiYjNDM7I2RlZmluZSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVMgMTI4XG4mIzQzOyNkZWZpbmUgUlhTX1JTU19VRFBcdFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lIFJYU19SU1NfSVBWNFx0XHRCSVQoMjgpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY2XHRcdEJJVCgyOSlcbiYjNDM7I2RlZmluZSBSWFNfUlNTX1RDUFx0XHRCSVQoMzApXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcdChSWFNfUlNTX0lQVjQgfCBSWFNfUlNTX0lQVjYpXG4mIzQzOyNkZWZpbmUgUlhTX1JTU19MNF9UWVBFX01BU0tcdChSWFNfUlNTX1RDUCB8IFJYU19SU1NfVURQKVxuIFxuICNkZWZpbmUgT0NQX1NURF9QSFlfQkFTRVx0MHhhNDAwXG4gXG5AQCAtNDQxLDExICYjNDM7NDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xuIFx0VHhQb2xsXzgxMjVcdFx0PSAweDkwLFxuIFx0TEVEU0VMM1x0XHRcdD0gMHg5NixcbiBcdE1BQzBfQktQXHRcdD0gMHgxOWUwLFxuJiM0MztcdFJEU0FSX1ExX0xPV1x0XHQ9IDB4NDAwMCxcbiBcdFJTU19DVFJMXzgxMjVcdFx0PSAweDQ1MDAsXG4gXHRRX05VTV9DVFJMXzgxMjVcdFx0PSAweDQ4MDAsXG4gXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcdD0gMHg2MDQ4LFxuJiM0MztcdElNUl9DTEVBUl9WRUNfTUFQX1JFR1x0PSAweDBkMDAsXG4mIzQzO1x0SVNSX1ZFQ19NQVBfUkVHXHRcdD0gMHgwZDA0LFxuJiM0MztcdElNUl9TRVRfVkVDX01BUF9SRUdcdD0gMHgwZDBjLFxuIH07XG4gXG4mIzQzOyNkZWZpbmUgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEdcdDI5XG4gI2RlZmluZSBMRURTRUxfTUFTS184MTI1XHQweDIzZlxuIFxuICNkZWZpbmUgUlhfVkxBTl9JTk5FUl84MTI1XHRCSVQoMjIpXG5AQCAtNDc0LDYgJiM0Mzs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcdFJ4UlVOVFx0PSAoMSBcdTAwM2NcdTAwM2MgMjApLFxuIFx0UnhDUkNcdD0gKDEgXHUwMDNjXHUwMDNjIDE5KSxcbiBcbiYjNDM7XHRSWFJVTlRfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4mIzQzO1x0UlhDUkNfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMCksXG4mIzQzO1xuIFx0LyogQ2hpcENtZEJpdHMgKi9cbiBcdFN0b3BSZXFcdFx0PSAweDgwLFxuIFx0Q21kUmVzZXRcdD0gMHgxMCxcbkBAIC01NzYsNiAmIzQzOzYwOSwyNSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuJiM0MzsjZGVmaW5lXHRJU1JJTVJfTElOS0NIR1x0QklUKDI5KVxuJiM0MzsjZGVmaW5lXHRJU1JJTVJfVE9LX1EwXHRCSVQoOClcbiYjNDM7I2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9DVFJMXHRcdDB4ZDhcbiYjNDM7I2RlZmluZSBSU1NfS0VZX1JFR1x0XHRcdDB4NDYwMFxuJiM0MzsjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY0X1NVUFBcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMX0RFU0NfVFlQRV9SU1NcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X1NVUFBcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfSVBWNl9TVVBQXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfRVhUX1NVUFBcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY0X1NVUFBcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY2X1NVUFBcdFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lXHRSWF9SRVNfUlNTXHRcdFx0QklUKDIyKVxuJiM0MzsjZGVmaW5lXHRSWF9SVU5UX1JTU1x0XHRcdEJJVCgyMSlcbiYjNDM7I2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBSVExfUlhfUV9OVU1fTUFTS1x0XHRHRU5NQVNLKDQsIDIpXG4gfTtcbiBcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XG5AQCAtNjMzLDYgJiM0Mzs2ODUsMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xuICNkZWZpbmUgUnhQcm90b0lQXHQoUElEMSB8IFBJRDApXG4gI2RlZmluZSBSeFByb3RvTWFza1x0UnhQcm90b0lQXG4gXG4mIzQzOyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbiYjNDM7I2RlZmluZVx0UlhfVENQVF9ERVNDX1JTU1x0QklUKDE4KVxuJiM0MzsjZGVmaW5lXHRSWF9VRFBGX0RFU0NfUlNTXHRCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbiYjNDM7I2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4mIzQzO1xuIFx0SVBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRVRFBGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE1KSwgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuIFx0VENQRmFpbFx0XHQ9ICgxIFx1MDAzY1x1MDAzYyAxNCksIC8qIFRDUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cbkBAIC02NTQsOSAmIzQzOzcxMSwyNyBAQCBzdHJ1Y3QgVHhEZXNjIHtcbiB9O1xuIFxuIHN0cnVjdCBSeERlc2Mge1xuLVx0X19sZTMyIG9wdHMxO1xuLVx0X19sZTMyIG9wdHMyO1xuLVx0X19sZTY0IGFkZHI7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX0RFRkFVTFQgKi9cbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdF9fbGUzMiBvcHRzMTtcbiYjNDM7XHRcdFx0X19sZTMyIG9wdHMyO1xuJiM0MztcdFx0XHRfX2xlNjQgYWRkcjtcbiYjNDM7XHRcdH07XG4mIzQzO1xuJiM0MztcdFx0LyogUlhfREVTQ19UWVBFX1JTUyAqL1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dW5pb24ge1xuJiM0MztcdFx0XHRcdF9fbGU2NCByc3NfYWRkcjtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19pbmZvO1xuJiM0MztcdFx0XHRcdFx0X19sZTMyIHJzc19yZXN1bHQ7XG4mIzQzO1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4mIzQzO1x0XHRcdH07XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czI7XG4mIzQzO1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4mIzQzO1x0XHR9O1xuJiM0MztcdH07XG4gfTtcbiBcbiBzdHJ1Y3QgcmluZ19pbmZvIHtcbkBAIC03MjgsMjcgJiM0Mzs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4mIzQzO2VudW0gcnhfZGVzY190eXBlIHtcbiYjNDM7XHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRSWF9ERVNDX1RZUEVfUlNTLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4mIzQzO1x0dTMyIGN1cl9yeDtcbiYjNDM7XHR1MzIgZGlydHlfcng7XG4mIzQzO1x0c3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTtcbiYjNDM7XHRkbWFfYWRkcl90IHJ4X2Rlc2NfcGh5X2FkZHJbTlVNX1JYX0RFU0NdO1xuJiM0MztcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHtcbiYjNDM7XHRcdHU2NCByeF9lcnJvcnM7XG4mIzQzO1x0XHR1NjQgcnhfZHJvcHBlZDtcbiYjNDM7XHRcdHU2NCByeF9sZW5ndGhfZXJyb3JzO1xuJiM0MztcdFx0dTY0IHJ4X2NyY19lcnJvcnM7XG4mIzQzO1x0XHR1NjQgbXVsdGljYXN0O1xuJiM0MztcdFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuJiM0MztcdH0gc3RhdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XG4mIzQzO1x0dTggcnNzX2tleVtSVExfUlNTX0tFWV9TSVpFXTtcbiYjNDM7XHR1OCByc3NfaW5kaXJfdGJsW1JUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFU107XG4mIzQzO1x0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4tXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuLVx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBkaXJ0eV90eDtcbiBcdHN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5O1x0LyogMjU2LWFsaWduZWQgVHggZGVzY3JpcHRvciByaW5nICovXG4tXHRzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTtcdC8qIDI1Ni1hbGlnbmVkIFJ4IGRlc2NyaXB0b3IgcmluZyAqL1xuIFx0ZG1hX2FkZHJfdCBUeFBoeUFkZHI7XG4tXHRkbWFfYWRkcl90IFJ4UGh5QWRkcjtcbi1cdHN0cnVjdCBwYWdlICpSeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XHQvKiBSeCBkYXRhIGJ1ZmZlcnMgKi9cbiBcdHN0cnVjdCByaW5nX2luZm8gdHhfc2tiW05VTV9UWF9ERVNDXTtcdC8qIFR4IGRhdGEgYnVmZmVycyAqL1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJ4X3Jpbmc7XG4mIzQzO1x0dW5zaWduZWQgaW50IG51bV9yeF9yaW5ncztcbiBcdHUxNiBjcF9jbWQ7XG4gXHR1MTYgdHhfbHBpX3RpbWVyO1xuIFx0dTMyIGlycV9tYXNrO1xuLVx0aW50IGlycTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaXJxX252ZWNzO1xuJiM0MztcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgJiM0MzsxNjgzLDExIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICYjNDM7MTc1NCwzOCBAQCBzdGF0aWMgdTMyIHJ0bF9nZXRfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9hY2tfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgYml0cylcbiB7XG4tXHRpZiAocnRsX2lzXzgxMjUodHApKVxuLVx0XHRSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgYml0cyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0UlRMX1cxNih0cCwgSW50clN0YXR1cywgYml0cyk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7XG4tXHRlbHNlXG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0UlRMX1cxNih0cCwgSW50ck1hc2ssIDApO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMTg2Nyw5ICYjNDM7MTk4OSwyMCBAQCBzdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3R4X3ZsYW5fdGFnKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFR4VmxhblRhZyB8IHN3YWIxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpIDogMHgwMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgUnhEZXNjICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBSeERlc2MgKmRlc2MsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHR1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMyKTtcbiYjNDM7XHR1MzIgb3B0czI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMyKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCAmIzQzOzI1NDksNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbi1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbi1cdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4tXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXG4tXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuLVx0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4tXHQuc2V0X2NvYWxlc2NlXHRcdD0gcnRsX3NldF9jb2FsZXNjZSxcbi1cdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4tXHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbi1cdC5zZXRfd29sXHRcdD0gcnRsODE2OV9zZXRfd29sLFxuLVx0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbi1cdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4tXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbi1cdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4tXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbi1cdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuLVx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4tXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuLVx0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbi1cdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXG4tXHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcbi1cdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4tfTtcbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpXG4ge1xuIFx0LyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqL1xuQEAgLTI2MTksOSAmIzQzOzI3MjQsMjYgQEAgc3RhdGljIHZvaWQgcnRsX2luaXRfcnhjZmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LCAweDAsIFI4MTY5X1JYX1JJTkdfQllURVMpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHRwLVx1MDAzZWRpcnR5X3R4ID0gdHAtXHUwMDNlY3VyX3R4ID0gdHAtXHUwMDNlY3VyX3J4ID0gMDtcbiYjNDM7XHR0cC1cdTAwM2VkaXJ0eV90eCA9IDA7XG4mIzQzO1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdHJpbmctXHUwMDNlZGlydHlfcnggPSAwO1xuJiM0MztcdFx0cmluZy1cdTAwM2VjdXJfcnggPSAwO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgJiM0MzsyODAyLDI5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZydGxfY2hpcGNtZF9jb25kLCAxMDAsIDEwMCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZWh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSAxO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiYjNDM7XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfODA6XG4mIzQzO1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9NQVhfUlhfUVVFVUVTO1xuJiM0MztcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0cnVjdCBydGxfZncgKnJ0bF9mdztcbkBAIC0yODAyLDggJiM0MzsyOTQ3LDYyIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICYjNDM7IDEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggKnJzc19rZXkgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3Nfa2V5O1xuJiM0MztcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xuJiM0MztcbiYjNDM7XHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBSVExfUlNTX0tFWV9TSVpFOyBpICYjNDM7PSBzaXplb2YodTMyKSlcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJzc19rZXlfcmVnICYjNDM7IGksIGdldF91bmFsaWduZWRfbGUzMihyc3Nfa2V5ICYjNDM7IGkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggKmluZGlyX3RibCA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19pbmRpcl90Ymw7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSAmIzQzOz0gNCkge1xuJiM0MztcdFx0dTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoXHUwMDI2aW5kaXJfdGJsW2ldKTtcbiYjNDM7XG4mIzQzO1x0XHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyAmIzQzOyBpLCByZXRhKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUzMiByc3NfY3RybDtcbiYjNDM7XG4mIzQzO1x0cnNzX2N0cmwgPSBGSUVMRF9QUkVQKFJTU19DUFVfTlVNX01BU0ssIGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncykpO1xuJiM0MztcbiYjNDM7XHQvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovXG4mIzQzO1x0cnNzX2N0cmwgfD0gUlNTX0NUUkxfVENQX0lQVjRfU1VQUCB8XG4mIzQzO1x0XHQgICAgUlNTX0NUUkxfSVBWNF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX0lQVjZfRVhUX1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X1NVUFAgfFxuJiM0MztcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9VRFBfSVBWNF9TVVBQIHxcbiYjNDM7XHRcdCAgICBSU1NfQ1RSTF9VRFBfSVBWNl9TVVBQO1xuJiM0MztcbiYjNDM7XHRyc3NfY3RybCB8PSBGSUVMRF9QUkVQKFJTU19IQVNIX01BU0ssXG4mIzQzO1x0XHRcdCAgICAgICBpbG9nMih0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzKSk7XG4mIzQzO1xuJiM0MztcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIHJzc19jdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX3NldF9yc3NfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbiYjNDM7XHRydGw4MTY5X3N0b3JlX3JldGEodHApO1xuJiM0MztcdHJ0bDgxNjlfc3RvcmVfcnNzX2tleSh0cCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbMF07XG4mIzQzO1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICYjNDM7MzAxMCwxOCBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICovXG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlVHhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuIFx0UlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRyTG93LCAoKHU2NCkgdHAtXHUwMDNlVHhQaHlBZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4tXHRSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csICgodTY0KSB0cC1cdTAwM2VSeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDNlXHUwMDNlIDMyKTtcbiYjNDM7XHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LFxuJiM0MztcdFx0KCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyAmIzQzOyAoaSAtIDEpICogODtcbiYjNDM7XHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFJUTF9XMzIodHAsIHJkc2FyX3JlZyAmIzQzOyA0LCAoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxuJiM0MztcdFx0XHQoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5AQCAtMzg1OCw2ICYjNDM7NDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHUxNiByeF9xX251bTtcbiYjNDM7XHR1MTYgcV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4mIzQzO1x0cV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTtcbiYjNDM7XHRxX2N0cmwgXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XG4mIzQzO1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIHFfY3RybCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0dTggdG1wO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBSVExfUjgodHAsIElOVF9DRkcwXzgxMjUpO1xuJiM0MztcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbiYjNDM7XHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICYjNDM7NDA5Niw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xuIFx0UlRMX1cxNih0cCwgUV9OVU1fQ1RSTF84MTI1LCAwKTtcbiBcbiYjNDM7XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuJiM0MztcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuJiM0MztcbiBcdC8qIGRpc2FibGUgVVBTICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XG4gXG5AQCAtMzg4NSw2ICYjNDM7NDExOCwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0UlRMX1c4KHRwLCAweEQ4LCBSVExfUjgodHAsIDB4RDgpIFx1MDAyNiB+MHgwMik7XG4gXG4mIzQzO1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzICovXG4mIzQzO1x0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuJiM0MztcdFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xuJiM0MztcdFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXG4mIzQzO1x0XHQgICAgICAgUlRMX1I4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwpIHwgUlRMX0RFU0NfVFlQRV9SU1MpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xuIFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbkBAIC00MTIxLDYgJiM0Mzs0MzYxLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHRwLCB0cnVlKTtcbiBcdHJ0bF9zZXRfcnhfbWF4X3NpemUodHApO1xuIFx0cnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyh0cCk7XG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0cnRsX3NldF9yc3NfY29uZmlnKHRwKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XG4mIzQzO1x0fVxuIFx0cnRsX2xvY2tfY29uZmlnX3JlZ3ModHApO1xuIFxuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG5AQCAtNDE0OCwxOSAmIzQzOzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4ge1xuLVx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuJiM0MztcdHUzMiBlb3I7XG4gXG4tXHRkZXNjLVx1MDAzZW9wdHMyID0gMDtcbi1cdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXG4tXHRkbWFfd21iKCk7XG4tXHRXUklURV9PTkNFKGRlc2MtXHUwMDNlb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19vcHRzMSkgXHUwMDI2IFJpbmdFbmQ7XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMiA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRcdGRtYV93bWIoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuJiM0MztcdFx0ZGVzYy1cdTAwM2VvcHRzMiA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbiYjNDM7XHRcdGRtYV93bWIoKTtcbiYjNDM7XHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleClcbiB7XG4mIzQzO1x0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSAmIzQzOyBpbmRleDtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTtcbiBcdGRtYV9hZGRyX3QgbWFwcGluZztcbkBAIC00MTc3LDU2ICYjNDM7NDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4tXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcbiYjNDM7XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaW5kZXhdID0gbWFwcGluZztcbiYjNDM7XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRkZXNjLVx1MDAzZWFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbiYjNDM7XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XG4gXG4gXHRyZXR1cm4gZGF0YTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0MgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiByaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykge1xuIFx0XHRkbWFfdW5tYXBfcGFnZSh0cF90b19kZXYodHApLFxuLVx0XHRcdCAgICAgICBsZTY0X3RvX2NwdSh0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcbiYjNDM7XHRcdFx0ICAgICAgIHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSxcbiBcdFx0XHQgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4tXHRcdF9fZnJlZV9wYWdlcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gTlVMTDtcbi1cdFx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xuJiM0MztcdFx0cmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3NfYWRkciA9IDA7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtpXS5yc3Nfb3B0czEgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLmFkZHIgPSAwO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ub3B0czEgPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRkZXNjLVx1MDAzZXJzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRkZXNjLVx1MDAzZW9wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcbiB7XG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgJiM0MzsgaSk7XG4mIzQzO1x0XHRkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTtcbiBcdFx0aWYgKCFkYXRhKSB7XG4tXHRcdFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcbiYjNDM7XHRcdHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xuIFx0fVxuIFxuIFx0LyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi9cbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5W05VTV9SWF9ERVNDIC0gMV0ub3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4mIzQzO1x0cnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgXHUwMDI2cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IFx1MDAyNnJpbmctXHUwMDNlcnhfcGh5X2FkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuJiM0MztcdFx0aWYgKHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSkge1xuJiM0MztcdFx0XHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcbiYjNDM7XHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5LFxuJiM0MztcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBydGw4MTY5X2luaXRfcmluZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4gXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7XG4gXG4gXHRtZW1zZXQodHAtXHUwMDNldHhfc2tiLCAwLCBzaXplb2YodHAtXHUwMDNldHhfc2tiKSk7XG4tXHRtZW1zZXQodHAtXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cdTAwM2VSeF9kYXRhYnVmZikpO1xuIFxuLVx0cmV0dXJuIHJ0bDgxNjlfcnhfZmlsbCh0cCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVx1MDAzZXJ4X2RhdGFidWZmKSk7XG4mIzQzO1x0XHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfY2xlYXI7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2NsZWFyOlxuJiM0MztcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcbkBAIC00MjY2LDkgJiM0Mzs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuYXBpX2Rpc2FibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGludCBuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggJiM0Mzs0NjUwLDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGludCBpO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBqID0gMDsgaiBcdTAwM2MgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGRtYV9hZGRyX3QgcGh5X2FkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbal07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbiYjNDM7XHRcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbal0ucnNzX2FkZHIgPSBjcHVfdG9fbGU2NChwaHlfYWRkcik7XG4mIzQzO1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgJiM0Mzsgaik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkmIzQzOyYjNDM7KVxuLVx0XHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBpKTtcbiYjNDM7XHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xuIFxuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XG4gXHRydGxfaHdfc3RhcnQodHApO1xuIH1cbiBcbkBAIC00NzU4LDMwICYjNDM7NTExNywxMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2hhc2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IFJ4RGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJzc19oZWFkZXJfaW5mbztcbiYjNDM7XHR1MzIgaGFzaF92YWw7XG4mIzQzO1xuJiM0MztcdGlmICghKHRwLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWEhBU0gpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyc3NfaGVhZGVyX2luZm8gPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZXJzc19kd29yZC5yc3NfaW5mbyk7XG4mIzQzO1xuJiM0MztcdGlmICghKHJzc19oZWFkZXJfaW5mbyBcdTAwMjYgUlhTX1JTU19MM19UWVBFX01BU0spKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRoYXNoX3ZhbCA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX2R3b3JkLnJzc19yZXN1bHQpO1xuJiM0MztcbiYjNDM7XHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbiYjNDM7XHRcdCAgICAgKFJYU19SU1NfTDRfVFlQRV9NQVNLIFx1MDAyNiByc3NfaGVhZGVyX2luZm8pID9cbiYjNDM7XHRcdCAgICAgUEtUX0hBU0hfVFlQRV9MNCA6IFBLVF9IQVNIX1RZUEVfTDMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHMxKVxuIHtcbi1cdHUzMiBzdGF0dXMgPSBvcHRzMSBcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcbiYjNDM7XHRib29sIGNzdW1fb2sgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4mIzQzO1x0XHQgICAgKChvcHRzMSBcdTAwMjYgUlhfVURQVF9ERVNDX1JTUykgXHUwMDI2XHUwMDI2ICEob3B0czEgXHUwMDI2IFJYX1VEUEZfREVTQ19SU1MpKSlcbiYjNDM7XHRcdFx0Y3N1bV9vayA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OiB7XG4mIzQzO1x0XHR1MzIgc3RhdHVzID0gb3B0czEgXHUwMDI2IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuJiM0MztcdFx0XHRjc3VtX29rID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHR9XG4gXG4tXHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4mIzQzO1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuJiM0MztzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4mIzQzO1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxKTtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4mIzQzO1x0XHRcdFx0XHR1MzIgc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuJiM0MztcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJYX1JFU19SU1MpKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX1JVTlRfUlNTKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJYX0NSQ19SU1MpXG4mIzQzO1x0XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGlmICh1bmxpa2VseShzdGF0dXMgXHUwMDI2IFJ4UkVTKSkge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuJiM0MztcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdCAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZywgaW50IGJ1ZGdldCxcbiYjNDM7XHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50JiM0MzsmIzQzOywgdHAtXHUwMDNlY3VyX3J4JiM0MzsmIzQzOykge1xuLVx0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gdHAtXHUwMDNlY3VyX3J4ICUgTlVNX1JYX0RFU0M7XG4tXHRcdHN0cnVjdCBSeERlc2MgKmRlc2MgPSB0cC1cdTAwM2VSeERlc2NBcnJheSAmIzQzOyBlbnRyeTtcbiYjNDM7XHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCByaW5nLVx1MDAzZWN1cl9yeCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVx1MDAzZWN1cl9yeCAlIE5VTV9SWF9ERVNDO1xuJiM0MztcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSAmIzQzOyBlbnRyeTtcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xuIFx0XHRkbWFfYWRkcl90IGFkZHI7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXG4tXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW9wdHMxKSk7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShydGw4MTY5X3J4X2Rlc2Nfb3B0czEodHAsIGRlc2MpKTtcbiBcdFx0aWYgKHN0YXR1cyBcdTAwMjYgRGVzY093bilcbiBcdFx0XHRicmVhaztcbiBcbkBAIC00NzkxLDIwICYjNDM7NTIzMSwyNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbiYjNDM7XHRcdGlmIChydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3IocmluZywgdHAsIHN0YXR1cykpIHtcbiBcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuIFx0XHRcdFx0bmV0ZGV2X3dhcm4oZGV2LCBcJiMzNDtSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cyk7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7XG4tXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgKFJ4UldUIHwgUnhSVU5UKSlcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOztcbi1cdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeENSQylcbi1cdFx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcbiBcdFx0XHRpZiAoIShkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhBTEwpKVxuIFx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4tXHRcdFx0ZWxzZSBpZiAoc3RhdHVzIFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXG4tXHRcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkge1xuJiM0MztcdFx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGlmICghKHN0YXR1cyBcdTAwMjYgKFJYUlVOVF9SU1MgfCBSWENSQ19SU1MpKSlcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0cGt0X3NpemUgPSBzdGF0dXMgXHUwMDI2IEdFTk1BU0soMTMsIDApO1xuQEAgLTQ4MTUsMTkgJiM0Mzs1MjU5LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdCAqIFRoZXkgYXJlIHNlZW4gYXMgYSBzeW1wdG9tIG9mIG92ZXItbXR1IHNpemVkIGZyYW1lcy5cbiBcdFx0ICovXG4gXHRcdGlmICh1bmxpa2VseShydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHtcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihcdTAwMjZ0cC1cdTAwM2VuYXBpLCBwa3Rfc2l6ZSk7XG4mIzQzO1x0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCBwa3Rfc2l6ZSk7XG4gXHRcdGlmICh1bmxpa2VseSghc2tiKSkge1xuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbi1cdFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXHUwMDNlYWRkcik7XG4tXHRcdHJ4X2J1ZiA9IHBhZ2VfYWRkcmVzcyh0cC1cdTAwM2VSeF9kYXRhYnVmZltlbnRyeV0pO1xuJiM0MztcdFx0YWRkciA9IHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltlbnRyeV07XG4mIzQzO1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICYjNDM7NTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHRza2ItXHUwMDNlbGVuID0gcGt0X3NpemU7XG4gXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGQsIGFkZHIsIHBrdF9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuIFxuLVx0XHRydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbiYjNDM7XHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuJiM0MztcdFx0cnRsODE2OV9yeF9jc3VtKHRwLCBza2IsIHN0YXR1cyk7XG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbiBcbi1cdFx0cnRsODE2OV9yeF92bGFuX3RhZyhkZXNjLCBza2IpO1xuJiM0MztcdFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcbiBcbi1cdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKVxuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5tdWx0aWNhc3QmIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2Vwa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlc3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2dHAtXHUwMDNlbmFwaSwgc2tiKTtcbiYjNDM7XHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiBcbiBcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcbiByZWxlYXNlX2Rlc2NyaXB0b3I6XG4tXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXG4mIzQzO1x0XHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldKTtcbiYjNDM7XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcdH1cbiBcbiBcdHJldHVybiBjb3VudDtcbkBAIC00ODU2LDggJiM0Mzs1MzExLDEyIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXG4gc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTtcbi1cdHUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XG4mIzQzO1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuJiM0MztcdHUzMiBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbiBcbiBcdGlmICgoc3RhdHVzIFx1MDAyNiAweGZmZmYpID09IDB4ZmZmZiB8fCAhKHN0YXR1cyBcdTAwMjYgdHAtXHUwMDNlaXJxX21hc2spKVxuIFx0XHRyZXR1cm4gSVJRX05PTkU7XG5AQCAtNDg3MywxMyAmIzQzOzUzMzIsMTE0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuLVx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbiYjNDM7XHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuIG91dDpcbiBcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX29uZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXG4mIzQzO1x0XHRcdHBjaV9mcmVlX2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcdFx0ZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRylcbiYjNDM7XHRcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIHRwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGludCBtZXNzYWdlX2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4mIzQzO3tcbiYjNDM7XHRSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnQgbWVzc2FnZV9pZClcbiYjNDM7e1xuJiM0MztcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4mIzQzO1x0aW50IG1lc3NhZ2VfaWQ7XG4mIzQzO1xuJiM0MztcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbiYjNDM7XG4mIzQzO1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbiYjNDM7XHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgbWVzc2FnZV9pZCk7XG4mIzQzO1xuJiM0MztcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0X290aGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuJiM0MztcbiYjNDM7XHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xuJiM0MztcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcbiYjNDM7XHRpbnQgaSwgcmM7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG5hcGkgPSBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV07XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBSODE2OV9NQVhfUVVFVUVTKVxuJiM0MztcdFx0XHRcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBOVUxMLCBuYXBpLCBcJiMzNDslcy0lZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkZXYtXHUwMDNlbmFtZSwgaSk7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpXG4mIzQzO1x0XHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBOVUxMLCB0cCwgXCYjMzQ7JXMtJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgZGV2LVx1MDAzZW5hbWUsIGkpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBydGw4MTY5X2ludGVycnVwdCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgTlVMTCwgbmFwaSwgXCYjMzQ7JXMtJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocmMpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9pcnE7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9pcnE6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApXG4mIzQzO1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyAmIzQzOzU0NzQsMTQgQEAgc3RhdGljIHZvaWQgcnRsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiB7XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcbi1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4tXHRpbnQgd29ya19kb25lO1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRpbnQgd29ya19kb25lID0gMDtcbiBcbiBcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuIFxuLVx0d29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsIGJ1ZGdldCk7XG4mIzQzO1x0LyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi9cbiYjNDM7XHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgJiM0Mzs1NTk2LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4gXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4gXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbi1cdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuJiM0MztcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG5AQCAtNTA1MSwxOCAmIzQzOzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldKTtcbiBcbi1cdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xuIFxuIFx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBOVUxMO1xuJiM0MztcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcbiBcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTUwNzMsOCAmIzQzOzU2MzMsMTggQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGludCBuYXBpX251bTtcbiYjNDM7XG4mIzQzO1x0bmFwaV9udW0gPSBtaW4odHAtXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcbiBcbi1cdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVx1MDAzZWlycSwgdHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4mIzQzO1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4mIzQzO1x0fVxuIH1cbiAjZW5kaWZcbiBcbkBAIC01MDgyLDcgJiM0Mzs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2Rldjtcbi1cdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmV0dmFsID0gLUVOT01FTTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuQEAgLTUwOTYsMTAgJiM0Mzs1NjY1LDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKCF0cC1cdTAwM2VUeERlc2NBcnJheSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcbi1cdFx0XHRcdFx0ICAgICBcdTAwMjZ0cC1cdTAwM2VSeFBoeUFkZHIsIEdGUF9LRVJORUwpO1xuLVx0aWYgKCF0cC1cdTAwM2VSeERlc2NBcnJheSlcbi1cdFx0Z290byBlcnJfZnJlZV90eF8wO1xuJiM0MztcdGlmIChydGw4MTY5X2FsbG9jX3J4X2Rlc2ModHApIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9yeF8xO1xuIFxuIFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbkBAIC01MTA3LDggJiM0Mzs1Njc0LDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xuIFxuLVx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcbi1cdHJldHZhbCA9IHJlcXVlc3RfaXJxKHRwLVx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXHUwMDNlbmFtZSwgdHApO1xuJiM0MztcdHJldHZhbCA9IHJ0bDgxNjlfcmVxdWVzdF9pcnEodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuQEAgLTUxMjUsMTUgJiM0Mzs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByZXR2YWw7XG4gXG4gZXJyX2ZyZWVfaXJxOlxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4mIzQzO1x0cnRsODE2OV9mcmVlX2lycSh0cCk7XG4gZXJyX3JlbGVhc2VfZndfMjpcbiBcdHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTtcbi1cdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXSk7XG4gZXJyX2ZyZWVfcnhfMTpcbi1cdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbi1cdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG4tXHR0cC1cdTAwM2VSeERlc2NBcnJheSA9IE5VTEw7XG4tZXJyX2ZyZWVfdHhfMDpcbiYjNDM7XHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuQEAgLTUxNTIsNiAmIzQzOzU3MTYsMjcgQEAgcnRsODE2OV9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0YXRzKVxuIFx0bmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsIFx1MDAyNmRldi1cdTAwM2VzdGF0cyk7XG4gXHRkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RhdHMsIGRldi1cdTAwM2V0c3RhdHMpO1xuIFxuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1NjQgZXJyb3JzLCBkcm9wcGVkLCBsZW5ndGhfZXJyb3JzLCBjcmNfZXJyb3JzLCBtdWx0aWNhc3Q7XG4mIzQzO1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBzdGFydDtcbiYjNDM7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRlcnJvcnMgPSByaW5nLVx1MDAzZXN0YXRzLnJ4X2Vycm9ycztcbiYjNDM7XHRcdFx0ZHJvcHBlZCA9IHJpbmctXHUwMDNlc3RhdHMucnhfZHJvcHBlZDtcbiYjNDM7XHRcdFx0bGVuZ3RoX2Vycm9ycyA9IHJpbmctXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycztcbiYjNDM7XHRcdFx0Y3JjX2Vycm9ycyA9IHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycztcbiYjNDM7XHRcdFx0bXVsdGljYXN0ID0gcmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3Q7XG4mIzQzO1x0XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCwgc3RhcnQpKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgJiM0Mzs9IGVycm9ycztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZXJ4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VyeF9sZW5ndGhfZXJyb3JzICYjNDM7PSBsZW5ndGhfZXJyb3JzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyAmIzQzOz0gY3JjX2Vycm9ycztcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW11bHRpY2FzdCAmIzQzOz0gbXVsdGljYXN0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogRmV0Y2ggYWRkaXRpb25hbCBjb3VudGVyIHZhbHVlcyBtaXNzaW5nIGluIHN0YXRzIGNvbGxlY3RlZCBieSBkcml2ZXJcbiBcdCAqIGZyb20gdGFsbHkgY291bnRlcnMuXG5AQCAtNTI3NSw2ICYjNDM7NTg2MCwxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuJiM0MztcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VydGw4MTY5X25hcGkpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiAmIzQzOzU4ODQsOSBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4gXG4mIzQzO1x0cjgxNjlfZnJlZV9uYXBpKHRwKTtcbiYjNDM7XHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbiYjNDM7XG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuIFxuQEAgLTUzMjAsMTUgJiM0Mzs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXG4gc3RhdGljIHZvaWQgcnRsX3NldF9pcnFfbWFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcdTAwM2NcdTAwM2MgaTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuIFxuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNilcbi1cdFx0dHAtXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpXG4mIzQzO1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUFYX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGdldF9taW5faXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XG4mIzQzO1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlPSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbiYjNDM7XG4mIzQzO1x0XHR0cC1cdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZT0gMilcbiYjNDM7XHRcdFx0dHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfUlNTO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHR1bnNpZ25lZCBpbnQgZmxhZ3M7XG4mIzQzO1x0aW50IG52ZWNzO1xuIFxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzAyIC4uLiBSVExfR0lHQV9NQUNfVkVSXzA2OlxuQEAgLTUzNDQsNyAmIzQzOzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSxcbiYjNDM7XHRcdFx0XHQgICAgICBnZXRfbWF4X2lycV9udmVjcyh0cCksIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG52ZWNzIFx1MDAzYyAwKVxuJiM0MztcdFx0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwgMSwgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAobnZlY3MgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gbnZlY3M7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZWlycV9udmVjcyA9IG52ZWNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5AQCAtNTU5OSw2ICYjNDM7NjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuJiM0MztcdGludCB3b3JrX2RvbmUgPSAwO1xuJiM0MztcdGludCBtZXNzYWdlX2lkO1xuJiM0MztcbiYjNDM7XHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0bWVzc2FnZV9pZCA9IG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGk7XG4mIzQzO1xuJiM0MztcdGlmIChtZXNzYWdlX2lkIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4mIzQzO1x0XHR3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW21lc3NhZ2VfaWRdLFxuJiM0MztcdFx0XHRcdCAgICBidWRnZXQsIG5hcGkpO1xuJiM0MztcbiYjNDM7XHRpZiAod29ya19kb25lIFx1MDAzYyBidWRnZXQgXHUwMDI2XHUwMDI2IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKVxuJiM0MztcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gd29ya19kb25lO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbiYjNDM7XG4mIzQzO1x0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHQvKiBDdXJyZW50bHkgcjgxNjkgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBUeCByaW5nLlxuJiM0MztcdCAqIFRoZXJlZm9yZSwgd2UgZG9uJiMzOTt0IG5lZWQgYSBwZXItcmluZyBUeCBwcm9jZXNzaW5nIGxvb3AgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4mIzQzOyAqIFZlY3RvcnMgMCAuLiAoUnhRcyAtIDEpXHRcdDogUnggUXVldWVzXG4mIzQzOyAqIFZlY3RvcnMgUnhRcyAuLiAoUnhRcyAmIzQzOyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4mIzQzOyAqIE5BUEkgaXMgb25seSBhbGxvY2F0ZWQgZm9yIGRhdGEgcGF0aFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcjgxNjlfaW5pdF9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9SWF9RVUVVRVMpXG4mIzQzO1x0XHRcdFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3J4O1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9nZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4mIzQzO1x0Y2gtXHUwMDNlbWF4X3R4ID0gMTtcbiYjNDM7XG4mIzQzO1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4mIzQzO1x0Y2gtXHUwMDNldHhfY291bnQgPSAxO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4mIzQzO1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbiYjNDM7XHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbiYjNDM7XHQuZ2V0X2RydmluZm9cdFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxuJiM0MztcdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbiYjNDM7XHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuJiM0MztcdC5nZXRfY29hbGVzY2VcdFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxuJiM0MztcdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuJiM0MztcdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4mIzQzO1x0LmdldF93b2xcdFx0PSBydGw4MTY5X2dldF93b2wsXG4mIzQzO1x0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4mIzQzO1x0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuJiM0MztcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4mIzQzO1x0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuJiM0MztcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuJiM0MztcdC5nZXRfY2hhbm5lbHNcdFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcbiYjNDM7XHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbiYjNDM7XHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuJiM0MztcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4mIzQzO1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbiYjNDM7XHQuc2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2MDksNyAmIzQzOzYzNTMsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbiYjNDM7XHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cCksXG4mIzQzO1x0XHRcdFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcbiYjNDM7XHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbiYjNDM7XG4gXHRpZiAoIWRldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNTY4OSw2ICYjNDM7NjQzNiwxMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuIFxuJiM0MztcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4mIzQzO1x0XHR0cC1cdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCp0cC1cdTAwM2Vyc3NfZGF0YSksXG4mIzQzO1x0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgJiM0Mzs2NDU3LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cnRsX2h3X3Jlc2V0KHRwKTtcbiBcbiYjNDM7XHRydGxfc2V0dXBfcnhfcGFyYW1zKHRwKTtcbiYjNDM7XG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwmIzM0O0NhbiYjMzk7dCBhbGxvY2F0ZSBpbnRlcnJ1cHRcXG5cJiMzNDspO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4mIzQzO1x0cnRsODE2OV9zZXRfcnhfcmluZ19udW0odHApO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9yc3ModHApO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNnRwLVx1MDAzZXdrLndvcmssIHJ0bF90YXNrKTtcbiBcdGRpc2FibGVfd29yayhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrKTtcbkBAIC01NzE2LDEzICYjNDM7NjQ3NSwxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdGRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNnJ0bDgxNjlfZXRodG9vbF9vcHM7XG4gXG4tXHRuZXRpZl9uYXBpX2FkZChkZXYsIFx1MDAyNnRwLVx1MDAzZW5hcGksIHJ0bDgxNjlfcG9sbCk7XG4tXG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XG4gXHRcdFx0ICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFggfCBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbiBcdGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPO1xuIFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XG4gXG4mIzQzO1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuJiM0MztcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIO1xuJiM0MztcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfUlhIQVNIO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmVcbiBcdCAqIEludGVycnVwdHMgc3RvcCBmbG93aW5nIG9uIGhpZ2ggbG9hZCBvbiA4MTEwU0NkIGNvbnRyb2xsZXJzLlxuQEAgLTU3NzgsNiAmIzQzOzY1NDAsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRkZXYtXHUwMDNlbWF4X210dSA9IGp1bWJvX21heDtcbiBcbiYjNDM7XHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCByYywgXCYjMzQ7c2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4gXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWNvdW50ZXJzID0gZG1hbV9hbGxvY19jb2hlcmVudCAoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqdHAtXHUwMDNlY291bnRlcnMpLFxuQEAgLTU3OTIsOSAmIzQzOzY1NTgsMjYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbiYjNDM7XHR0cC1cdTAwM2VyeF9yaW5nID0ga2NhbGxvYyh0cC1cdTAwM2VudW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nKSxcbiYjNDM7XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCF0cC1cdTAwM2VyeF9yaW5nKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXS5zdGF0cy5zeW5jcCk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXHUwMDNlaXJxX252ZWNzLCBzaXplb2Yoc3RydWN0IG5hcGlfc3RydWN0KSxcbiYjNDM7XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXJ0bDgxNjlfbmFwaSkge1xuJiM0MztcdFx0a2ZyZWUodHAtXHUwMDNlcnhfcmluZyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHI4MTY5X2luaXRfbmFwaSh0cCk7XG4mIzQzO1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbiBcdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uYXBpO1xuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7XG4gXHRcdGlmIChydGxfaXNfODEyNSh0cCkpXG5AQCAtNTgwMyw4ICYjNDM7NjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdHRwLVx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xuIFx0fVxuIFxuLVx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXFxuXCYjMzQ7LFxuLVx0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLVx1MDAzZWlycSk7XG4mIzQzO1x0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXG4mIzQzO1x0XHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVx1MDAzZWlycV9udmVjcyk7XG4gXG4gXHRpZiAoanVtYm9fbWF4KVxuIFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O2p1bWJvIGZlYXR1cmVzIFtmcmFtZXM6ICVkIGJ5dGVzLCB0eCBjaGVja3N1bW1pbmc6ICVzXVxcblwmIzM0OyxcbkBAIC01ODIxLDYgJiM0Mzs2NjA1LDExIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfbmFwaTpcbiYjNDM7XHRyODE2OV9mcmVlX25hcGkodHApO1xuJiM0MztcdGtmcmVlKHRwLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgUmVhbHRlayByODE2OSBuZXR3b3JrIGRyaXZlciB0byBhZGQgbXVsdGktcXVldWUvUlNTIGFuZCBNU0ktWCBzdXBwb3J0IGZvciBSVEw4MTI3L1JUTDgxMjUgTklDcy4gVGhlIHI4MTY5IGRyaXZlciBvcGVyYXRlcyBvbiBwaHlzaWNhbCBQQ0llIFJlYWx0ZWsgTklDcyBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBkcml2ZXIgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBrZXJuZWwgZnV6emluZyBzZXR1cHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDNmNjllMDZhMDU3MTdiYzZhNjdlZTlhZDViYTdiYTk2OWE0ZGViZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA2OjE4OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwppbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjksNiAmIzQzOzI5LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CkBAIC03NCw5ICYjNDM7NzUsMzMgQEAKICNkZWZpbmUgTlVNX1RYX0RFU0MJMjU2CS8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVU1fUlhfREVTQwkyNTYJLyogTnVtYmVyIG9mIFJ4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVMJKE5VTV9UWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBUeERlc2MpKQotI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTCShOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSkKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHkKJiM0MzsgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZQomIzQzOyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMKJiM0MzsgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTCSgoTlVNX1JYX0RFU0MgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpCiAjZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSUwkoTUFYX1NLQl9GUkFHUyAmIzQzOyAxKQogI2RlZmluZSBSODE2OV9UWF9TVEFSVF9USFJTCSgyICogUjgxNjlfVFhfU1RPUF9USFJTKQomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFUwkxNgomIzQzOyNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFUwk4CiYjNDM7I2RlZmluZSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUwkxCiYjNDM7I2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTCTEKJiM0MzsjZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDCTMyCiYjNDM7I2RlZmluZSBSODEyN19NSU5fTlVNX0lSUVZFQwkzMAomIzQzOyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFQJMQomIzQzOyNkZWZpbmUgUlRMX1JTU19LRVlfU0laRQk0MAomIzQzOyNkZWZpbmUgUlNTX0NQVV9OVU1fTUFTSwlHRU5NQVNLKDE4LCAxNikKJiM0MzsjZGVmaW5lIFJTU19IQVNIX01BU0sJCUdFTk1BU0soMTAsIDgpCiYjNDM7I2RlZmluZSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVMgMTI4CiYjNDM7I2RlZmluZSBSWFNfUlNTX1VEUAkJQklUKDI3KQomIzQzOyNkZWZpbmUgUlhTX1JTU19JUFY0CQlCSVQoMjgpCiYjNDM7I2RlZmluZSBSWFNfUlNTX0lQVjYJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIFJYU19SU1NfVENQCQlCSVQoMzApCiYjNDM7I2RlZmluZSBSWFNfUlNTX0wzX1RZUEVfTUFTSwkoUlhTX1JTU19JUFY0IHwgUlhTX1JTU19JUFY2KQomIzQzOyNkZWZpbmUgUlhTX1JTU19MNF9UWVBFX01BU0sJKFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApCiAKICNkZWZpbmUgT0NQX1NURF9QSFlfQkFTRQkweGE0MDAKIApAQCAtNDQxLDExICYjNDM7NDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMgewogCVR4UG9sbF84MTI1CQk9IDB4OTAsCiAJTEVEU0VMMwkJCT0gMHg5NiwKIAlNQUMwX0JLUAkJPSAweDE5ZTAsCiYjNDM7CVJEU0FSX1ExX0xPVwkJPSAweDQwMDAsCiAJUlNTX0NUUkxfODEyNQkJPSAweDQ1MDAsCiAJUV9OVU1fQ1RSTF84MTI1CQk9IDB4NDgwMCwKIAlFRUVfVFhJRExFX1RJTUVSXzgxMjUJPSAweDYwNDgsCiYjNDM7CUlNUl9DTEVBUl9WRUNfTUFQX1JFRwk9IDB4MGQwMCwKJiM0MzsJSVNSX1ZFQ19NQVBfUkVHCQk9IDB4MGQwNCwKJiM0MzsJSU1SX1NFVF9WRUNfTUFQX1JFRwk9IDB4MGQwYywKIH07CiAKJiM0MzsjZGVmaW5lIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHCTI5CiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjUJMHgyM2YKIAogI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjUJQklUKDIyKQpAQCAtNDc0LDYgJiM0Mzs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHsKIAlSeFJVTlQJPSAoMSAmbHQ7Jmx0OyAyMCksCiAJUnhDUkMJPSAoMSAmbHQ7Jmx0OyAxOSksCiAKJiM0MzsJUlhSVU5UX1JTUwk9ICgxICZsdDsmbHQ7IDIxKSwKJiM0MzsJUlhDUkNfUlNTCT0gKDEgJmx0OyZsdDsgMjApLAomIzQzOwogCS8qIENoaXBDbWRCaXRzICovCiAJU3RvcFJlcQkJPSAweDgwLAogCUNtZFJlc2V0CT0gMHgxMCwKQEAgLTU3Niw2ICYjNDM7NjA5LDI1IEBAIGVudW0gcnRsX3JlZ2lzdGVyX2NvbnRlbnQgewogCiAJLyogbWFnaWMgZW5hYmxlIHYyICovCiAJTWFnaWNQYWNrZXRfdjIJPSAoMSAmbHQ7Jmx0OyAxNiksCS8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqLwomIzQzOyNkZWZpbmUJSVNSSU1SX0xJTktDSEcJQklUKDI5KQomIzQzOyNkZWZpbmUJSVNSSU1SX1RPS19RMAlCSVQoOCkKJiM0MzsjZGVmaW5lCUlTUklNUl9ST0tfUTAJQklUKDApCiYjNDM7I2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkwJCTB4ZDgKJiM0MzsjZGVmaW5lIFJTU19LRVlfUkVHCQkJMHg0NjAwCiYjNDM7I2RlZmluZSBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRwkJMHg0NzAwCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjRfU1VQUAkJQklUKDEpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQCQlCSVQoMikKJiM0MzsjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUAkJQklUKDMpCiYjNDM7I2RlZmluZSBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQCUJJVCg1KQomIzQzOyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjRfU1VQUAkJQklUKDExKQomIzQzOyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjZfU1VQUAkJQklUKDEyKQomIzQzOyNkZWZpbmUJUlhfUkVTX1JTUwkJCUJJVCgyMikKJiM0MzsjZGVmaW5lCVJYX1JVTlRfUlNTCQkJQklUKDIxKQomIzQzOyNkZWZpbmUJUlhfQ1JDX1JTUwkJCUJJVCgyMCkKJiM0MzsjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLCQlHRU5NQVNLKDQsIDIpCiB9OwogCiBlbnVtIHJ0bF9kZXNjX2JpdCB7CkBAIC02MzMsNiAmIzQzOzY4NSwxMSBAQCBlbnVtIHJ0bF9yeF9kZXNjX2JpdCB7CiAjZGVmaW5lIFJ4UHJvdG9JUAkoUElEMSB8IFBJRDApCiAjZGVmaW5lIFJ4UHJvdG9NYXNrCVJ4UHJvdG9JUAogCiYjNDM7I2RlZmluZQlSWF9VRFBUX0RFU0NfUlNTCUJJVCgxOSkKJiM0MzsjZGVmaW5lCVJYX1RDUFRfREVTQ19SU1MJQklUKDE4KQomIzQzOyNkZWZpbmUJUlhfVURQRl9ERVNDX1JTUwlCSVQoMTYpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KJiM0MzsjZGVmaW5lCVJYX1RDUEZfREVTQ19SU1MJQklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovCiYjNDM7CiAJSVBGYWlsCQk9ICgxICZsdDsmbHQ7IDE2KSwgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovCiAJVURQRmFpbAkJPSAoMSAmbHQ7Jmx0OyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8KIAlUQ1BGYWlsCQk9ICgxICZsdDsmbHQ7IDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqLwpAQCAtNjU0LDkgJiM0Mzs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7CiB9OwogCiBzdHJ1Y3QgUnhEZXNjIHsKLQlfX2xlMzIgb3B0czE7Ci0JX19sZTMyIG9wdHMyOwotCV9fbGU2NCBhZGRyOwomIzQzOwl1bmlvbiB7CiYjNDM7CQkvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqLwomIzQzOwkJc3RydWN0IHsKJiM0MzsJCQlfX2xlMzIgb3B0czE7CiYjNDM7CQkJX19sZTMyIG9wdHMyOwomIzQzOwkJCV9fbGU2NCBhZGRyOwomIzQzOwkJfTsKJiM0MzsKJiM0MzsJCS8qIFJYX0RFU0NfVFlQRV9SU1MgKi8KJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdW5pb24gewomIzQzOwkJCQlfX2xlNjQgcnNzX2FkZHI7CiYjNDM7CQkJCXN0cnVjdCB7CiYjNDM7CQkJCQlfX2xlMzIgcnNzX2luZm87CiYjNDM7CQkJCQlfX2xlMzIgcnNzX3Jlc3VsdDsKJiM0MzsJCQkJfSByc3NfZHdvcmQ7CiYjNDM7CQkJfTsKJiM0MzsJCQlfX2xlMzIgcnNzX29wdHMyOwomIzQzOwkJCV9fbGUzMiByc3Nfb3B0czE7CiYjNDM7CQl9OwomIzQzOwl9OwogfTsKIAogc3RydWN0IHJpbmdfaW5mbyB7CkBAIC03MjgsMjcgJiM0Mzs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ4X2Rlc2NfdHlwZSB7CiYjNDM7CVJYX0RFU0NfVFlQRV9ERUZBVUxULAomIzQzOwlSWF9ERVNDX1RZUEVfUlNTLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7CiYjNDM7CXUzMiBjdXJfcng7CiYjNDM7CXUzMiBkaXJ0eV9yeDsKJiM0MzsJc3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTsKJiM0MzsJZG1hX2FkZHJfdCByeF9kZXNjX3BoeV9hZGRyW05VTV9SWF9ERVNDXTsKJiM0MzsJZG1hX2FkZHJfdCByeF9waHlfYWRkcjsKJiM0MzsJc3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTsKJiM0MzsKJiM0MzsJc3RydWN0IHsKJiM0MzsJCXU2NCByeF9lcnJvcnM7CiYjNDM7CQl1NjQgcnhfZHJvcHBlZDsKJiM0MzsJCXU2NCByeF9sZW5ndGhfZXJyb3JzOwomIzQzOwkJdTY0IHJ4X2NyY19lcnJvcnM7CiYjNDM7CQl1NjQgbXVsdGljYXN0OwomIzQzOwkJc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwOwomIzQzOwl9IHN0YXRzOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgewomIzQzOwl1OCByc3Nfa2V5W1JUTF9SU1NfS0VZX1NJWkVdOwomIzQzOwl1OCByc3NfaW5kaXJfdGJsW1JUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFU107CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsJLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwotCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCWVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247CiAJZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTsKLQl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CiAJc3RydWN0IFR4RGVzYyAqVHhEZXNjQXJyYXk7CS8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqLwotCXN0cnVjdCBSeERlc2MgKlJ4RGVzY0FycmF5OwkvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi8KIAlkbWFfYWRkcl90IFR4UGh5QWRkcjsKLQlkbWFfYWRkcl90IFJ4UGh5QWRkcjsKLQlzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdOwkvKiBSeCBkYXRhIGJ1ZmZlcnMgKi8KIAlzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107CS8qIFR4IGRhdGEgYnVmZmVycyAqLwomIzQzOwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKnJ0bDgxNjlfbmFwaTsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZzsKJiM0MzsJdW5zaWduZWQgaW50IG51bV9yeF9yaW5nczsKIAl1MTYgY3BfY21kOwogCXUxNiB0eF9scGlfdGltZXI7CiAJdTMyIGlycV9tYXNrOwotCWludCBpcnE7CiYjNDM7CXVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTsKJiM0MzsJdW5zaWduZWQgaW50IGlycV9udmVjczsKJiM0MzsJZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7CiAJc3RydWN0IGNsayAqY2xrOwogCiAJc3RydWN0IHsKQEAgLTE1NzgsNiAmIzQzOzE2ODMsMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBydGxfaHdfc3VwcG9ydF9yc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY0NCwyNiAmIzQzOzE3NTQsMzggQEAgc3RhdGljIHUzMiBydGxfZ2V0X2V2ZW50cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyU3RhdHVzXzgxMjUsIGJpdHMpOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfaXJxX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JaWYgKHJ0bF9pc184MTI1KHRwKSkKLQkJUlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgMCk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCAweGZmZmZmZmZmKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTsKJiM0MzsJfSBlbHNlIHsKIAkJUlRMX1cxNih0cCwgSW50ck1hc2ssIDApOwomIzQzOwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9pcnFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWlmIChydGxfaXNfODEyNSh0cCkpCi0JCVJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLSZndDtpcnFfbWFzayk7Ci0JZWxzZQomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpCiYjNDM7CQkJUlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC0mZ3Q7aXJxX21hc2spOwomIzQzOwl9IGVsc2UgewogCQlSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtJmd0O2lycV9tYXNrKTsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0xODY3LDkgJiM0MzsxOTg5LDIwIEBAIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxNjlfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJVHhWbGFuVGFnIHwgc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJc3RydWN0IFJ4RGVzYyAqZGVzYywKJiM0MzsJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtvcHRzMik7CiYjNDM7CXUzMiBvcHRzMjsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMyKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAKIAlpZiAob3B0czIgJmFtcDsgUnhWbGFuVGFnKQogCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLCBzd2FiMTYob3B0czIgJmFtcDsgMHhmZmZmKSk7CkBAIC0yNDE2LDM0ICYjNDM7MjU0OSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKLQkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAotCQkJCSAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLAotCS5nZXRfZHJ2aW5mbwkJPSBydGw4MTY5X2dldF9kcnZpbmZvLAotCS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCi0JLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCi0JLmdldF9jb2FsZXNjZQkJPSBydGxfZ2V0X2NvYWxlc2NlLAotCS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKLQkuZ2V0X3JlZ3MJCT0gcnRsODE2OV9nZXRfcmVncywKLQkuZ2V0X3dvbAkJPSBydGw4MTY5X2dldF93b2wsCi0JLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAotCS5nZXRfc3RyaW5ncwkJPSBydGw4MTY5X2dldF9zdHJpbmdzLAotCS5nZXRfc3NldF9jb3VudAkJPSBydGw4MTY5X2dldF9zc2V0X2NvdW50LAotCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF90c19pbmZvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sCi0JLm53YXlfcmVzZXQJCT0gcGh5X2V0aHRvb2xfbndheV9yZXNldCwKLQkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCi0JLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCi0JLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAotCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKLQkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCi0JLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCi0JLnNldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9ldGhfbWFjX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cywKLQkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKnJ0bDgxNjlfZ2V0X2NoaXBfdmVyc2lvbih1MzIgeGlkLCBib29sIGdtaWkpCiB7CiAJLyogQ2hpcHMgY29tYmluaW5nIGEgMUdicHMgTUFDIHdpdGggYSAxMDBNYnBzIFBIWSAqLwpAQCAtMjYxOSw5ICYjNDM7MjcyNCwyNiBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJbWVtc2V0KHJpbmctJmd0O3J4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXRwLSZndDtkaXJ0eV90eCA9IHRwLSZndDtjdXJfdHggPSB0cC0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJdHAtJmd0O2RpcnR5X3R4ID0gMDsKJiM0MzsJdHAtJmd0O2N1cl90eCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwomIzQzOwkJcmluZy0mZ3Q7ZGlydHlfcnggPSAwOwomIzQzOwkJcmluZy0mZ3Q7Y3VyX3J4ID0gMDsKJiM0MzsJfQogfQogCiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjY4MCw2ICYjNDM7MjgwMiwyOSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cnRsX2NoaXBjbWRfY29uZCwgMTAwLCAxMDApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O3Jzc19kYXRhLSZndDtod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2luZGlyX3RibFtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHRwLSZndDtudW1fcnhfcmluZ3MpOwomIzQzOwomIzQzOwluZXRkZXZfcnNzX2tleV9maWxsKHRwLSZndDtyc3NfZGF0YS0mZ3Q7cnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl0cC0mZ3Q7bnVtX3J4X3JpbmdzID0gMTsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzgwOgomIzQzOwkJdHAtJmd0O2h3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X01BWF9SWF9RVUVVRVM7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMgPSBSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0cnVjdCBydGxfZncgKnJ0bF9mdzsKQEAgLTI4MDIsOCAmIzQzOzI5NDcsNjIgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICYjNDM7IDEpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yc3Nfa2V5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTggKnJzc19rZXkgPSB0cC0mZ3Q7cnNzX2RhdGEtJmd0O3Jzc19rZXk7CiYjNDM7CWNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHOwomIzQzOwomIzQzOwkvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqLwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IFJUTF9SU1NfS0VZX1NJWkU7IGkgJiM0Mzs9IHNpemVvZih1MzIpKQomIzQzOwkJUlRMX1czMih0cCwgcnNzX2tleV9yZWcgJiM0MzsgaSwgZ2V0X3VuYWxpZ25lZF9sZTMyKHJzc19rZXkgJiM0MzsgaSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCAqaW5kaXJfdGJsID0gdHAtJmd0O3Jzc19kYXRhLSZndDtyc3NfaW5kaXJfdGJsOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJLyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtyc3NfZGF0YS0mZ3Q7aHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSAmIzQzOz0gNCkgewomIzQzOwkJdTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmFtcDtpbmRpcl90YmxbaV0pOwomIzQzOwomIzQzOwkJUlRMX1czMih0cCwgUlNTX0lORElSRUNUSU9OX1RCTF9SRUcgJiM0MzsgaSwgcmV0YSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdTMyIHJzc19jdHJsOwomIzQzOwomIzQzOwlyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtJmd0O251bV9yeF9yaW5ncykpOwomIzQzOwomIzQzOwkvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovCiYjNDM7CXJzc19jdHJsIHw9IFJTU19DVFJMX1RDUF9JUFY0X1NVUFAgfAomIzQzOwkJICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfSVBWNl9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9JUFY2X0VYVF9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHwKJiM0MzsJCSAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfVURQX0lQVjRfU1VQUCB8CiYjNDM7CQkgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDsKJiM0MzsKJiM0MzsJcnNzX2N0cmwgfD0gRklFTERfUFJFUChSU1NfSEFTSF9NQVNLLAomIzQzOwkJCSAgICAgICBpbG9nMih0cC0mZ3Q7cnNzX2RhdGEtJmd0O2h3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXMpKTsKJiM0MzsKJiM0MzsJUlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlydGw4MTY5X3NldF9yc3NfaGFzaF9vcHQodHApOwomIzQzOwlydGw4MTY5X3N0b3JlX3JldGEodHApOwomIzQzOwlydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nWzBdOwomIzQzOwogCS8qCiAJICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2gKIAkgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuCkBAIC0yODExLDggJiM0MzszMDEwLDE4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICovCiAJUlRMX1czMih0cCwgVHhEZXNjU3RhcnRBZGRySGlnaCwgKCh1NjQpIHRwLSZndDtUeFBoeUFkZHIpICZndDsmZ3Q7IDMyKTsKIAlSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC0mZ3Q7VHhQaHlBZGRyKSAmYW1wOyBETUFfQklUX01BU0soMzIpKTsKLQlSVExfVzMyKHRwLCBSeERlc2NBZGRySGlnaCwgKCh1NjQpIHRwLSZndDtSeFBoeUFkZHIpICZndDsmZ3Q7IDMyKTsKLQlSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtJmd0O1J4UGh5QWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CVJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmd0OyZndDsgMzIpOwomIzQzOwlSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LAomIzQzOwkJKCh1NjQpcmluZy0mZ3Q7cnhfcGh5X2FkZHIpICZhbXA7IERNQV9CSVRfTUFTSygzMikpOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMTsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgcmRzYXJfcmVnID0gUkRTQVJfUTFfTE9XICYjNDM7IChpIC0gMSkgKiA4OwomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CiYjNDM7CQlSVExfVzMyKHRwLCByZHNhcl9yZWcgJiM0MzsgNCwgKCh1NjQpcmluZy0mZ3Q7cnhfcGh5X2FkZHIgJmd0OyZndDsgMzIpKTsKJiM0MzsJCVJUTF9XMzIodHAsIHJkc2FyX3JlZywKJiM0MzsJCQkoKHU2NClyaW5nLSZndDtyeF9waHlfYWRkcikgJmFtcDsgRE1BX0JJVF9NQVNLKDMyKSk7CiYjNDM7CX0KIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMzg1OCw2ICYjNDM7NDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZCkKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGUwMGUpICZhbXA7IEJJVCgxMyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTI1X3NldF9yeF9xX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXUxNiByeF9xX251bTsKJiM0MzsJdTE2IHFfY3RybDsKJiM0MzsKJiM0MzsJcnhfcV9udW0gPSBpbG9nMih0cC0mZ3Q7bnVtX3J4X3JpbmdzKTsKJiM0MzsJcV9jdHJsID0gUlRMX1IxNih0cCwgUV9OVU1fQ1RSTF84MTI1KTsKJiM0MzsJcV9jdHJsICZhbXA7PSB+UlRMX1JYX1FfTlVNX01BU0s7CiYjNDM7CXFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7CiYjNDM7CVJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1OCB0bXA7CiYjNDM7CiYjNDM7CXRtcCA9IFJUTF9SOCh0cCwgSU5UX0NGRzBfODEyNSk7CiYjNDM7CXRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTsKJiM0MzsJUlRMX1c4KHRwLCBJTlRfQ0ZHMF84MTI1LCB0bXApOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApOwpAQCAtMzg2Niw2ICYjNDM7NDA5Niw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAwKTsKIAlSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApOwogCiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCXJ0bDgxNjlfaHdfZW5hYmxlX3ZlY19tYXBwaW5nKHRwKTsKJiM0MzsKIAkvKiBkaXNhYmxlIFVQUyAqLwogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTsKIApAQCAtMzg4NSw2ICYjNDM7NDExOCwxMyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQogCQlSVExfVzgodHAsIDB4RDgsIFJUTF9SOCh0cCwgMHhEOCkgJmFtcDsgfjB4MDIpOwogCiYjNDM7CS8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyAqLwomIzQzOwlpZiAodHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpIHsKJiM0MzsJCXJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTsKJiM0MzsJCVJUTF9XOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMLAomIzQzOwkJICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTsKJiM0MzsJfQomIzQzOwogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApOwogCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQpAQCAtNDEyMSw2ICYjNDM7NDM2MSwxMiBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpOwogCXJ0bF9zZXRfcnhfbWF4X3NpemUodHApOwogCXJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnModHApOwomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQlpZiAodHAtJmd0O251bV9yeF9yaW5ncyAmZ3Q7IDEpCiYjNDM7CQkJcnRsX3NldF9yc3NfY29uZmlnKHRwKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlSVExfVzMyKHRwLCBSU1NfQ1RSTF84MTI1LCAweDAwKTsKJiM0MzsJfQogCXJ0bF9sb2NrX2NvbmZpZ19yZWdzKHRwKTsKIAogCXJ0bF9qdW1ib19jb25maWcodHApOwpAQCAtNDE0OCwxOSAmIzQzOzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya190b19hc2ljKHN0cnVjdCBSeERlc2MgKmRlc2MpCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpCiB7Ci0JdTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMxKSAmYW1wOyBSaW5nRW5kOwomIzQzOwl1MzIgZW9yOwogCi0JZGVzYy0mZ3Q7b3B0czIgPSAwOwotCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCi0JZG1hX3dtYigpOwotCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7b3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwlzd2l0Y2ggKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSkgewomIzQzOwljYXNlIFJYX0RFU0NfVFlQRV9SU1M6CiYjNDM7CQllb3IgPSBsZTMyX3RvX2NwdShkZXNjLSZndDtyc3Nfb3B0czEpICZhbXA7IFJpbmdFbmQ7CiYjNDM7CQlkZXNjLSZndDtyc3Nfb3B0czIgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCiYjNDM7CQlkbWFfd21iKCk7CiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O3Jzc19vcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWVvciA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O29wdHMxKSAmYW1wOyBSaW5nRW5kOwomIzQzOwkJZGVzYy0mZ3Q7b3B0czIgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovCiYjNDM7CQlkbWFfd21iKCk7CiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqcnRsODE2OV9hbGxvY19yeF9kYXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAotCQkJCQkgIHN0cnVjdCBSeERlc2MgKmRlc2MpCiYjNDM7CQkJCQkgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleCkKIHsKJiM0MzsJc3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctJmd0O3J4X2Rlc2NfYXJyYXkgJiM0MzsgaW5kZXg7CiAJc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7CiAJaW50IG5vZGUgPSBkZXZfdG9fbm9kZShkKTsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CkBAIC00MTc3LDU2ICYjNDM7NDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRlc2MtJmd0O2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKLQlydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTsKJiM0MzsJcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nOwomIzQzOwlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpCiYjNDM7CQlkZXNjLSZndDtyc3NfYWRkciA9IGNwdV90b19sZTY0KG1hcHBpbmcpOwomIzQzOwllbHNlCiYjNDM7CQlkZXNjLSZndDthZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiYjNDM7CXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTsKIAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJICAgICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDICZhbXA7JmFtcDsgdHAtJmd0O1J4X2RhdGFidWZmW2ldOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgTlVNX1JYX0RFU0MgJmFtcDsmYW1wOyByaW5nLSZndDtyeF9kYXRhYnVmZltpXTsgaSYjNDM7JiM0MzspIHsKIAkJZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSwKLQkJCSAgICAgICBsZTY0X3RvX2NwdSh0cC0mZ3Q7UnhEZXNjQXJyYXlbaV0uYWRkciksCiYjNDM7CQkJICAgICAgIHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbaV0sCiAJCQkgICAgICAgUjgxNjlfUlhfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0JCV9fZnJlZV9wYWdlcyh0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpOwotCQl0cC0mZ3Q7UnhfZGF0YWJ1ZmZbaV0gPSBOVUxMOwotCQl0cC0mZ3Q7UnhEZXNjQXJyYXlbaV0uYWRkciA9IDA7Ci0JCXRwLSZndDtSeERlc2NBcnJheVtpXS5vcHRzMSA9IDA7CiYjNDM7CQlfX2ZyZWVfcGFnZXMocmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGF0YWJ1ZmZbaV0gPSBOVUxMOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltpXSA9IDA7CiYjNDM7CQlpZiAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpIHsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDsKJiM0MzsJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2ldLnJzc19vcHRzMSA9IDA7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJpbmctJmd0O3J4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheVtpXS5vcHRzMSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWRlc2MtJmd0O3Jzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJZGVzYy0mZ3Q7b3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7CiYjNDM7CQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcGFnZSAqZGF0YTsKIAotCQlkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCB0cC0mZ3Q7UnhEZXNjQXJyYXkgJiM0MzsgaSk7CiYjNDM7CQlkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTsKIAkJaWYgKCFkYXRhKSB7Ci0JCQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJCQlydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXRwLSZndDtSeF9kYXRhYnVmZltpXSA9IGRhdGE7CiYjNDM7CQlyaW5nLSZndDtyeF9kYXRhYnVmZltpXSA9IGRhdGE7CiAJfQogCiAJLyogbWFyayBhcyBsYXN0IGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi8KLQl0cC0mZ3Q7UnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTsKJiM0MzsJcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgJmFtcDtyaW5nLSZndDtyeF9kZXNjX2FycmF5W05VTV9SWF9ERVNDIC0gMV0pOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmc7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJpbmcgPSAmYW1wO3RwLSZndDtyeF9yaW5nW2ldOwomIzQzOwkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheSA9IGRtYV9hbGxvY19jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwKJiM0MzsJCQkJCQkJIFI4MTY5X1JYX1JJTkdfQllURVMsCiYjNDM7CQkJCQkJCSAmYW1wO3JpbmctJmd0O3J4X3BoeV9hZGRyLAomIzQzOwkJCQkJCQkgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXJpbmctJmd0O3J4X2Rlc2NfYXJyYXkpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0mZ3Q7cGNpX2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZzsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQlpZiAocmluZy0mZ3Q7cnhfZGVzY19hcnJheSkgewomIzQzOwkJCWRtYV9mcmVlX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJICBSODE2OV9SWF9SSU5HX0JZVEVTLAomIzQzOwkJCQkJICByaW5nLSZndDtyeF9kZXNjX2FycmF5LAomIzQzOwkJCQkJICByaW5nLSZndDtyeF9waHlfYWRkcik7CiYjNDM7CQkJcmluZy0mZ3Q7cnhfZGVzY19hcnJheSA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewomIzQzOwlpbnQgaSwgcmV0OwomIzQzOwogCXJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXModHApOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfaW5pdCh0cCk7CiAKIAltZW1zZXQodHAtJmd0O3R4X3NrYiwgMCwgc2l6ZW9mKHRwLSZndDt0eF9za2IpKTsKLQltZW1zZXQodHAtJmd0O1J4X2RhdGFidWZmLCAwLCBzaXplb2YodHAtJmd0O1J4X2RhdGFidWZmKSk7CiAKLQlyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCW1lbXNldChyaW5nLSZndDtyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctJmd0O3J4X2RhdGFidWZmKSk7CiYjNDM7CQlyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfY2xlYXI7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2NsZWFyOgomIzQzOwl3aGlsZSAoLS1pICZndDs9IDApCiYjNDM7CQlydGw4MTY5X3J4X2NsZWFyKHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW2ldKTsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSkKQEAgLTQyNjYsOSAmIzQzOzQ1OTcsMjUgQEAgc3RhdGljIHZvaWQgcnRsODE2OV90eF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAluZXRkZXZfcmVzZXRfcXVldWUodHAtJmd0O2Rldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspCiYjNDM7CQluYXBpX2VuYWJsZSgmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQluYXBpX2Rpc2FibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTsKIAogCS8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi8KIAlzeW5jaHJvbml6ZV9uZXQoKTsKQEAgLTQzMDMsMTggJiM0Mzs0NjUwLDMwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfY2xlYW51cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9yeF9kZXNjX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCWludCBpOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gJmFtcDt0cC0mZ3Q7cnhfcmluZ1tpXTsKJiM0MzsKJiM0MzsJCWZvciAoaW50IGogPSAwOyBqICZsdDsgTlVNX1JYX0RFU0M7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJZG1hX2FkZHJfdCBwaHlfYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbal07CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpOwomIzQzOwkJCXJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLSZndDtyeF9kZXNjX2FycmF5ICYjNDM7IGopOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewogCW5ldGlmX3N0b3BfcXVldWUodHAtJmd0O2Rldik7CiAKIAlydGw4MTY5X2NsZWFudXAodHApOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5VTV9SWF9ERVNDOyBpJiM0MzsmIzQzOykKLQkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAtJmd0O1J4RGVzY0FycmF5ICYjNDM7IGkpOwomIzQzOwlydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApOwogCi0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCXJ0bF9od19zdGFydCh0cCk7CiB9CiAKQEAgLTQ3NTgsMzAgJiM0Mzs1MTE3LDExMSBAQCBzdGF0aWMgaW5saW5lIGludCBydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUodTMyIHN0YXR1cykKIAlyZXR1cm4gKHN0YXR1cyAmYW1wOyAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBvcHRzMSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLAomIzQzOwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJdTMyIHJzc19oZWFkZXJfaW5mbzsKJiM0MzsJdTMyIGhhc2hfdmFsOwomIzQzOwomIzQzOwlpZiAoISh0cC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX1JYSEFTSCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJzc19oZWFkZXJfaW5mbyA9IGxlMzJfdG9fY3B1KGRlc2MtJmd0O3Jzc19kd29yZC5yc3NfaW5mbyk7CiYjNDM7CiYjNDM7CWlmICghKHJzc19oZWFkZXJfaW5mbyAmYW1wOyBSWFNfUlNTX0wzX1RZUEVfTUFTSykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy0mZ3Q7cnNzX2R3b3JkLnJzc19yZXN1bHQpOwomIzQzOwomIzQzOwlza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCwKJiM0MzsJCSAgICAgKFJYU19SU1NfTDRfVFlQRV9NQVNLICZhbXA7IHJzc19oZWFkZXJfaW5mbykgPwomIzQzOwkJICAgICBQS1RfSEFTSF9UWVBFX0w0IDogUEtUX0hBU0hfVFlQRV9MMyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIHUzMiBvcHRzMSkKIHsKLQl1MzIgc3RhdHVzID0gb3B0czEgJmFtcDsgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTsKJiM0MzsJYm9vbCBjc3VtX29rID0gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O2luaXRfcnhfZGVzY190eXBlKSB7CiYjNDM7CWNhc2UgUlhfREVTQ19UWVBFX1JTUzoKJiM0MzsJCWlmICgoKG9wdHMxICZhbXA7IFJYX1RDUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9UQ1BGX0RFU0NfUlNTKSkgfHwKJiM0MzsJCSAgICAoKG9wdHMxICZhbXA7IFJYX1VEUFRfREVTQ19SU1MpICZhbXA7JmFtcDsgIShvcHRzMSAmYW1wOyBSWF9VRFBGX0RFU0NfUlNTKSkpCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDogewomIzQzOwkJdTMyIHN0YXR1cyA9IG9wdHMxICZhbXA7IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7CiYjNDM7CiYjNDM7CQlpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApCiYjNDM7CQkJY3N1bV9vayA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwl9CiAKLQlpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApCiYjNDM7CWlmIChjc3VtX29rKQogCQlza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCWVsc2UKIAkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KQomIzQzO3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKQomIzQzO3sKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7aW5pdF9yeF9kZXNjX3R5cGUpIHsKJiM0MzsJY2FzZSBSWF9ERVNDX1RZUEVfUlNTOgomIzQzOwkJcmV0dXJuIFJFQURfT05DRShkZXNjLSZndDtyc3Nfb3B0czEpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFJFQURfT05DRShkZXNjLSZndDtvcHRzMSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsCiYjNDM7CQkJCQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJCXUzMiBzdGF0dXMpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSkgewomIzQzOwljYXNlIFJYX0RFU0NfVFlQRV9SU1M6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJYX1JFU19SU1MpKSB7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwKTsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJYX1JVTlRfUlNTKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJYX0NSQ19SU1MpCiYjNDM7CQkJCXJpbmctJmd0O3N0YXRzLnJ4X2NyY19lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlpZiAodW5saWtlbHkoc3RhdHVzICZhbXA7IFJ4UkVTKSkgewomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJaWYgKHN0YXR1cyAmYW1wOyAoUnhSV1QgfCBSeFJVTlQpKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQlpZiAoc3RhdHVzICZhbXA7IFJ4Q1JDKQomIzQzOwkJCQlyaW5nLSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwKTsKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LAomIzQzOwkJICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7CiAJc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7CiAJaW50IGNvdW50OwogCi0JZm9yIChjb3VudCA9IDA7IGNvdW50ICZsdDsgYnVkZ2V0OyBjb3VudCYjNDM7JiM0MzssIHRwLSZndDtjdXJfcngmIzQzOyYjNDM7KSB7Ci0JCXVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC0mZ3Q7Y3VyX3J4ICUgTlVNX1JYX0RFU0M7Ci0JCXN0cnVjdCBSeERlc2MgKmRlc2MgPSB0cC0mZ3Q7UnhEZXNjQXJyYXkgJiM0MzsgZW50cnk7CiYjNDM7CWZvciAoY291bnQgPSAwOyBjb3VudCAmbHQ7IGJ1ZGdldDsgY291bnQmIzQzOyYjNDM7LCByaW5nLSZndDtjdXJfcngmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy0mZ3Q7Y3VyX3J4ICUgTlVNX1JYX0RFU0M7CiYjNDM7CQlzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy0mZ3Q7cnhfZGVzY19hcnJheSAmIzQzOyBlbnRyeTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJY29uc3Qgdm9pZCAqcnhfYnVmOwogCQlkbWFfYWRkcl90IGFkZHI7CiAJCXUzMiBzdGF0dXM7CiAKLQkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O29wdHMxKSk7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShydGw4MTY5X3J4X2Rlc2Nfb3B0czEodHAsIGRlc2MpKTsKIAkJaWYgKHN0YXR1cyAmYW1wOyBEZXNjT3duKQogCQkJYnJlYWs7CiAKQEAgLTQ3OTEsMjAgJiM0Mzs1MjMxLDI0IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0CiAJCSAqLwogCQlkbWFfcm1iKCk7CiAKLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmYW1wOyBSeFJFUykpIHsKJiM0MzsJCWlmIChydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3IocmluZywgdHAsIHN0YXR1cykpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJbmV0ZGV2X3dhcm4oZGV2LCAmIzM0O1J4IEVSUk9SLiBzdGF0dXMgPSAlMDh4XG4mIzM0OywKIAkJCQkJICAgIHN0YXR1cyk7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7Ci0JCQlpZiAoc3RhdHVzICZhbXA7IChSeFJXVCB8IFJ4UlVOVCkpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzJiM0MzsmIzQzOzsKLQkJCWlmIChzdGF0dXMgJmFtcDsgUnhDUkMpCi0JCQkJZGV2LSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJpbmctJmd0O3N0YXRzLnJ4X2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAKIAkJCWlmICghKGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWEFMTCkpCiAJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7Ci0JCQllbHNlIGlmIChzdGF0dXMgJmFtcDsgUnhSV1QgfHwgIShzdGF0dXMgJmFtcDsgKFJ4UlVOVCB8IFJ4Q1JDKSkpCi0JCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkgewomIzQzOwkJCQlpZiAoc3RhdHVzICZhbXA7IFJ4UldUIHx8ICEoc3RhdHVzICZhbXA7IChSeFJVTlQgfCBSeENSQykpKQomIzQzOwkJCQkJZ290byByZWxlYXNlX2Rlc2NyaXB0b3I7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJaWYgKCEoc3RhdHVzICZhbXA7IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpCiYjNDM7CQkJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKJiM0MzsJCQl9CiAJCX0KIAogCQlwa3Rfc2l6ZSA9IHN0YXR1cyAmYW1wOyBHRU5NQVNLKDEzLCAwKTsKQEAgLTQ4MTUsMTkgJiM0Mzs1MjU5LDIzIEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0CiAJCSAqIFRoZXkgYXJlIHNlZW4gYXMgYSBzeW1wdG9tIG9mIG92ZXItbXR1IHNpemVkIGZyYW1lcy4KIAkJICovCiAJCWlmICh1bmxpa2VseShydGw4MTY5X2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHsKLQkJCWRldi0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7dHAtJmd0O25hcGksIHBrdF9zaXplKTsKJiM0MzsJCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKG5hcGksIHBrdF9zaXplKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCQlkZXYtJmd0O3N0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJcmluZy0mZ3Q7c3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiAJCQlnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjsKIAkJfQogCi0JCWFkZHIgPSBsZTY0X3RvX2NwdShkZXNjLSZndDthZGRyKTsKLQkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLSZndDtSeF9kYXRhYnVmZltlbnRyeV0pOwomIzQzOwkJYWRkciA9IHJpbmctJmd0O3J4X2Rlc2NfcGh5X2FkZHJbZW50cnldOwomIzQzOwkJcnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctJmd0O3J4X2RhdGFidWZmW2VudHJ5XSk7CiAKIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7CiAJCXByZWZldGNoKHJ4X2J1Zik7CkBAIC00ODM2LDE5ICYjNDM7NTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldAogCQlza2ItJmd0O2xlbiA9IHBrdF9zaXplOwogCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAotCQlydGw4MTY5X3J4X2NzdW0oc2tiLCBzdGF0dXMpOwomIzQzOwkJaWYgKHRwLSZndDtudW1fcnhfcmluZ3MgJmd0OyAxKQomIzQzOwkJCXJ0bDgxNjlfcnhfaGFzaCh0cCwgZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfY3N1bSh0cCwgc2tiLCBzdGF0dXMpOwogCQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCXJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTsKJiM0MzsJCXJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7CiAKLQkJaWYgKHNrYi0mZ3Q7cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkKLQkJCWRldi0mZ3Q7c3RhdHMubXVsdGljYXN0JiM0MzsmIzQzOzsKJiM0MzsJCWlmIChza2ItJmd0O3BrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmluZy0mZ3Q7c3RhdHMuc3luY3ApOwomIzQzOwkJCXJpbmctJmd0O3N0YXRzLm11bHRpY2FzdCYjNDM7JiM0Mzs7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQl9CiAKLQkJbmFwaV9ncm9fcmVjZWl2ZSgmYW1wO3RwLSZndDtuYXBpLCBza2IpOwomIzQzOwkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiAJCWRldl9zd19uZXRzdGF0c19yeF9hZGQoZGV2LCBwa3Rfc2l6ZSk7CiByZWxlYXNlX2Rlc2NyaXB0b3I6Ci0JCXJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpOwomIzQzOwkJaWYgKHRwLSZndDtpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKQomIzQzOwkJCWRlc2MtJmd0O3Jzc19hZGRyID0gY3B1X3RvX2xlNjQocmluZy0mZ3Q7cnhfZGVzY19waHlfYWRkcltlbnRyeV0pOwomIzQzOwkJcnRsODE2OV9tYXJrX3RvX2FzaWModHAsIGRlc2MpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTQ4NTYsOCAmIzQzOzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXQKIAogc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTsKLQl1MzIgc3RhdHVzID0gcnRsX2dldF9ldmVudHModHApOwomIzQzOwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBkZXZfaW5zdGFuY2U7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwl1MzIgc3RhdHVzOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTsKIAogCWlmICgoc3RhdHVzICZhbXA7IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzICZhbXA7IHRwLSZndDtpcnFfbWFzaykpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTQ4NzMsMTMgJiM0Mzs1MzMyLDExNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlwaHlfbWFjX2ludGVycnVwdCh0cC0mZ3Q7cGh5ZGV2KTsKIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7Ci0JbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKJiM0MzsJbmFwaV9zY2hlZHVsZShuYXBpKTsKIG91dDoKIAlydGxfYWNrX2V2ZW50cyh0cCwgc3RhdHVzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9vbmVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaSkKJiM0Mzt7CiYjNDM7CWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkgewomIzQzOwkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUVVFVUVTKQomIzQzOwkJCXBjaV9mcmVlX2lycSh0cC0mZ3Q7cGNpX2RldiwgaSwgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJCWVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpCiYjNDM7CQkJcGNpX2ZyZWVfaXJxKHRwLSZndDtwY2lfZGV2LCBpLCB0cCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwY2lfZnJlZV9pcnEodHAtJmd0O3BjaV9kZXYsIGksICZhbXA7dHAtJmd0O3J0bDgxNjlfbmFwaVtpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspCiYjNDM7CQlydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKJiM0MzsJCQkJCSAgICAgIGludCBtZXNzYWdlX2lkKQomIzQzO3sKJiM0MzsJUlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpCiYjNDM7ewomIzQzOwlSVExfVzMyKHRwLCBJU1JfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAomIzQzOwkJCQkJICAgICBpbnQgbWVzc2FnZV9pZCkKJiM0Mzt7CiYjNDM7CVJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIEJJVChtZXNzYWdlX2lkKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktJmd0O2RldjsKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7CiYjNDM7CWludCBtZXNzYWdlX2lkOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CW1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtJmd0O3J0bDgxNjlfbmFwaTsKJiM0MzsKJiM0MzsJcnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTsKJiM0MzsJcnRsODE2OV9jbGVhcl9od19pc3IodHAsIG1lc3NhZ2VfaWQpOwomIzQzOwomIzQzOwluYXBpX3NjaGVkdWxlKG5hcGkpOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGRldl9pbnN0YW5jZTsKJiM0MzsKJiM0MzsJcnRsODE2OV9jbGVhcl9od19pc3IodHAsIE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKTsKJiM0MzsJcGh5X21hY19pbnRlcnJ1cHQodHAtJmd0O3BoeWRldik7CiYjNDM7CXJldHVybiBJUlFfSEFORExFRDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKJiM0MzsJaW50IGksIHJjOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdHAtJmd0O2lycV9udmVjczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW5hcGkgPSAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV07CiYjNDM7CQlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7IDEpIHsKJiM0MzsJCQlpZiAoaSAmbHQ7IFI4MTY5X01BWF9RVUVVRVMpCiYjNDM7CQkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLAomIzQzOwkJCQkJCSAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCwKJiM0MzsJCQkJCQkgICAgIE5VTEwsIG5hcGksICYjMzQ7JXMtJWQmIzM0OywKJiM0MzsJCQkJCQkgICAgIGRldi0mZ3Q7bmFtZSwgaSk7CiYjNDM7CQkJZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRykKJiM0MzsJCQkJcmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtJmd0O3BjaV9kZXYsIGksCiYjNDM7CQkJCQkJICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlciwKJiM0MzsJCQkJCQkgICAgIE5VTEwsIHRwLCAmIzM0OyVzLSVkJiMzNDssCiYjNDM7CQkJCQkJICAgICBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLSZndDtwY2lfZGV2LCBpLAomIzQzOwkJCQkJICAgICBydGw4MTY5X2ludGVycnVwdCwKJiM0MzsJCQkJCSAgICAgTlVMTCwgbmFwaSwgJiMzNDslcy0lZCYjMzQ7LAomIzQzOwkJCQkJICAgICBkZXYtJmd0O25hbWUsIGkpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gZnJlZV9pcnE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9pcnE6CiYjNDM7CXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCXJ0bDgxNjlfZnJlZV9vbmVfaXJxKHRwLCBpKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9CkBAIC00OTE0LDEzICYjNDM7NTQ3NCwxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKLQlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtJmd0O2RldjsKLQlpbnQgd29ya19kb25lOwomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktJmd0O2Rldik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CWludCB3b3JrX2RvbmUgPSAwOwogCiAJcnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7CiAKLQl3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTsKJiM0MzsJLyogcnRsODE2OV9wb2xsKCkgaXMgdXNlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzaW5nbGUgUlggcmluZy4gKi8KJiM0MzsJd29ya19kb25lID0gcnRsX3J4KGRldiwgdHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbMF0sIGJ1ZGdldCwgbmFwaSk7CiAKIAlpZiAod29ya19kb25lICZsdDsgYnVkZ2V0ICZhbXA7JmFtcDsgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpCiAJCXJ0bF9pcnFfZW5hYmxlKHRwKTsKQEAgLTUwMzUsNyAmIzQzOzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwogCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcnRsODE2OV9pbml0X3BoeSh0cCk7Ci0JbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiYjNDM7CXJ0bDgxNjlfbmFwaV9lbmFibGUodHApOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKIApAQCAtNTA1MSwxOCAmIzQzOzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJcnRsODE2OV9kb3duKHRwKTsKLQlydGw4MTY5X3J4X2NsZWFyKHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXJ0bDgxNjlfcnhfY2xlYXIodHAsICZhbXA7dHAtJmd0O3J4X3JpbmdbaV0pOwogCi0JZnJlZV9pcnEodHAtJmd0O2lycSwgdHApOwomIzQzOwlydGw4MTY5X2ZyZWVfaXJxKHRwKTsKIAogCXBoeV9kaXNjb25uZWN0KHRwLSZndDtwaHlkZXYpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLSZndDtSeERlc2NBcnJheSwKLQkJCSAgdHAtJmd0O1J4UGh5QWRkcik7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLSZndDtUeERlc2NBcnJheSwKIAkJCSAgdHAtJmd0O1R4UGh5QWRkcik7CiAJdHAtJmd0O1R4RGVzY0FycmF5ID0gTlVMTDsKLQl0cC0mZ3Q7UnhEZXNjQXJyYXkgPSBOVUxMOwomIzQzOwlydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7CiAKIAlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIApAQCAtNTA3Myw4ICYjNDM7NTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJaW50IG5hcGlfbnVtOwomIzQzOwomIzQzOwluYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKIAotCXJ0bDgxNjlfaW50ZXJydXB0KHRwLSZndDtpcnEsIHRwKTsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0cC0mZ3Q7aXJxX252ZWNzICZndDsgMSkKJiM0MzsJCQlydGw4MTY5X2ludGVycnVwdF9tc2l4KHBjaV9pcnFfdmVjdG9yKHRwLSZndDtwY2lfZGV2LCBpKSwKJiM0MzsJCQkJCSAgICAgICAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0pOwomIzQzOwkJZWxzZQomIzQzOwkJCXJ0bDgxNjlfaW50ZXJydXB0KHBjaV9pcnFfdmVjdG9yKHRwLSZndDtwY2lfZGV2LCBpKSwKJiM0MzsJCQkJCSAgJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsJfQogfQogI2VuZGlmCiAKQEAgLTUwODIsNyAmIzQzOzU2NTIsNiBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwpAQCAtNTA5NiwxMCAmIzQzOzU2NjUsOCBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaWYgKCF0cC0mZ3Q7VHhEZXNjQXJyYXkpCiAJCWdvdG8gb3V0OwogCi0JdHAtJmd0O1J4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZhbXA7cGRldi0mZ3Q7ZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLAotCQkJCQkgICAgICZhbXA7dHAtJmd0O1J4UGh5QWRkciwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cC0mZ3Q7UnhEZXNjQXJyYXkpCi0JCWdvdG8gZXJyX2ZyZWVfdHhfMDsKJiM0MzsJaWYgKHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyh0cCkgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZnJlZV9yeF8xOwogCiAJcmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApOwogCWlmIChyZXR2YWwgJmx0OyAwKQpAQCAtNTEwNyw4ICYjNDM7NTY3NCw3IEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKIAotCWlycWZsYWdzID0gcGNpX2Rldl9tc2lfZW5hYmxlZChwZGV2KSA/IElSUUZfTk9fVEhSRUFEIDogSVJRRl9TSEFSRUQ7Ci0JcmV0dmFsID0gcmVxdWVzdF9pcnEodHAtJmd0O2lycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtJmd0O25hbWUsIHRwKTsKJiM0MzsJcmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7CiAJaWYgKHJldHZhbCAmbHQ7IDApCiAJCWdvdG8gZXJyX3JlbGVhc2VfZndfMjsKIApAQCAtNTEyNSwxNSAmIzQzOzU2OTEsMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiByZXR2YWw7CiAKIGVycl9mcmVlX2lycToKLQlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiYjNDM7CXJ0bDgxNjlfZnJlZV9pcnEodHApOwogZXJyX3JlbGVhc2VfZndfMjoKIAlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7Ci0JcnRsODE2OV9yeF9jbGVhcih0cCk7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspCiYjNDM7CQlydGw4MTY5X3J4X2NsZWFyKHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW2ldKTsKIGVycl9mcmVlX3J4XzE6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJmFtcDtwZGV2LSZndDtkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLSZndDtSeERlc2NBcnJheSwKLQkJCSAgdHAtJmd0O1J4UGh5QWRkcik7Ci0JdHAtJmd0O1J4RGVzY0FycmF5ID0gTlVMTDsKLWVycl9mcmVlX3R4XzA6CiYjNDM7CXJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTsKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtJmd0O1R4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7VHhQaHlBZGRyKTsKIAl0cC0mZ3Q7VHhEZXNjQXJyYXkgPSBOVUxMOwpAQCAtNTE1Miw2ICYjNDM7NTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCiAJbmV0ZGV2X3N0YXRzX3RvX3N0YXRzNjQoc3RhdHMsICZhbXA7ZGV2LSZndDtzdGF0cyk7CiAJZGV2X2ZldGNoX3N3X25ldHN0YXRzKHN0YXRzLCBkZXYtJmd0O3RzdGF0cyk7CiAKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB0cC0mZ3Q7bnVtX3J4X3JpbmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0OwomIzQzOwkJc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9ICZhbXA7dHAtJmd0O3J4X3JpbmdbaV07CiYjNDM7CQl1bnNpZ25lZCBpbnQgc3RhcnQ7CiYjNDM7CiYjNDM7CQlkbyB7CiYjNDM7CQkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDtyaW5nLSZndDtzdGF0cy5zeW5jcCk7CiYjNDM7CQkJZXJyb3JzID0gcmluZy0mZ3Q7c3RhdHMucnhfZXJyb3JzOwomIzQzOwkJCWRyb3BwZWQgPSByaW5nLSZndDtzdGF0cy5yeF9kcm9wcGVkOwomIzQzOwkJCWxlbmd0aF9lcnJvcnMgPSByaW5nLSZndDtzdGF0cy5yeF9sZW5ndGhfZXJyb3JzOwomIzQzOwkJCWNyY19lcnJvcnMgPSByaW5nLSZndDtzdGF0cy5yeF9jcmNfZXJyb3JzOwomIzQzOwkJCW11bHRpY2FzdCA9IHJpbmctJmd0O3N0YXRzLm11bHRpY2FzdDsKJiM0MzsJCX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3JpbmctJmd0O3N0YXRzLnN5bmNwLCBzdGFydCkpOwomIzQzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2Vycm9ycyAmIzQzOz0gZXJyb3JzOwomIzQzOwkJc3RhdHMtJmd0O3J4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7CiYjNDM7CQlzdGF0cy0mZ3Q7cnhfbGVuZ3RoX2Vycm9ycyAmIzQzOz0gbGVuZ3RoX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtyeF9jcmNfZXJyb3JzICYjNDM7PSBjcmNfZXJyb3JzOwomIzQzOwkJc3RhdHMtJmd0O211bHRpY2FzdCAmIzQzOz0gbXVsdGljYXN0OwomIzQzOwl9CiYjNDM7CiAJLyoKIAkgKiBGZXRjaCBhZGRpdGlvbmFsIGNvdW50ZXIgdmFsdWVzIG1pc3NpbmcgaW4gc3RhdHMgY29sbGVjdGVkIGJ5IGRyaXZlcgogCSAqIGZyb20gdGFsbHkgY291bnRlcnMuCkBAIC01Mjc1LDYgJiM0Mzs1ODYwLDE2IEBAIHN0YXRpYyB2b2lkIHJ0bF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpbnQgbmFwaV9udW0gPSBtaW4odHAtJmd0O2lycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgbmFwaV9udW07IGkmIzQzOyYjNDM7KQomIzQzOwkJbmV0aWZfbmFwaV9kZWwoJmFtcDt0cC0mZ3Q7cnRsODE2OV9uYXBpW2ldKTsKJiM0MzsKJiM0MzsJa2ZyZWUodHAtJmd0O3J0bDgxNjlfbmFwaSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC01Mjg5LDYgJiM0Mzs1ODg0LDkgQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKIAomIzQzOwlyODE2OV9mcmVlX25hcGkodHApOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnhfcmluZyk7CiYjNDM7CiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CiAKQEAgLTUzMjAsMTUgJiM0Mzs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdHAtJmd0O2lycV9tYXNrID0gUnhPSyB8IFJ4RXJyIHwgVHhPSyB8IFR4RXJyIHwgTGlua0NoZzsKJiM0MzsJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3M7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXRwLSZndDtpcnFfbWFzayB8PSBJU1JJTVJfUk9LX1EwICZsdDsmbHQ7IGk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0cC0mZ3Q7aXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnOwogCi0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmbHQ7PSBSVExfR0lHQV9NQUNfVkVSXzA2KQotCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikKJiM0MzsJCQl0cC0mZ3Q7aXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJcmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDOwomIzQzOwlyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQlyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7CiYjNDM7CXJldHVybiBSODE2OV9JUlFfREVGQVVMVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAodHAtJmd0O2lycV9udmVjcyAmZ3Q7PSBnZXRfbWluX2lycV9udmVjcyh0cCkpIHsKJiM0MzsJCXVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTsKJiM0MzsKJiM0MzsJCXRwLSZndDtudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSwKJiM0MzsJCQkJCQkJICAgIHRwLSZndDtod19zdXBwX251bV9yeF9xdWV1ZXMpKTsKJiM0MzsJCWlmICh0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDs9IDIpCiYjNDM7CQkJdHAtJmd0O2luaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUzsKJiM0MzsJfQogfQogCiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtJmd0O3BjaV9kZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOwlpbnQgbnZlY3M7CiAKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjoKQEAgLTUzNDQsNyAmIzQzOzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLSZndDtwY2lfZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CW52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSwKJiM0MzsJCQkJICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQludmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChudmVjcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gbnZlY3M7CiYjNDM7CiYjNDM7CXRwLSZndDtpcnFfbnZlY3MgPSBudmVjczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLApAQCAtNTU5OSw2ICYjNDM7NjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwlpbnQgd29ya19kb25lID0gMDsKJiM0MzsJaW50IG1lc3NhZ2VfaWQ7CiYjNDM7CiYjNDM7CXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJbWVzc2FnZV9pZCA9IG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpOwomIzQzOwomIzQzOwlpZiAobWVzc2FnZV9pZCAmbHQ7IHRwLSZndDtudW1fcnhfcmluZ3MpCiYjNDM7CQl3b3JrX2RvbmUgJiM0Mzs9IHJ0bF9yeChkZXYsIHRwLCAmYW1wO3RwLSZndDtyeF9yaW5nW21lc3NhZ2VfaWRdLAomIzQzOwkJCQkgICAgYnVkZ2V0LCBuYXBpKTsKJiM0MzsKJiM0MzsJaWYgKHdvcmtfZG9uZSAmbHQ7IGJ1ZGdldCAmYW1wOyZhbXA7IG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCB3b3JrX2RvbmUpKQomIzQzOwkJcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpOwomIzQzOwomIzQzOwlyZXR1cm4gd29ya19kb25lOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3R4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwOwomIzQzOwomIzQzOwl0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CS8qIEN1cnJlbnRseSByODE2OSBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIFR4IHJpbmcuCiYjNDM7CSAqIFRoZXJlZm9yZSwgd2UgZG9uJiMzOTt0IG5lZWQgYSBwZXItcmluZyBUeCBwcm9jZXNzaW5nIGxvb3AgaGVyZS4KJiM0MzsJICovCiYjNDM7CXJ0bF90eChkZXYsIHRwLCBidWRnZXQpOwomIzQzOwomIzQzOwlpZiAobmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIDApKQomIzQzOwkJcnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC0mZ3Q7cnRsODE2OV9uYXBpKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6CiYjNDM7ICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSkJCTogUnggUXVldWVzCiYjNDM7ICogVmVjdG9ycyBSeFFzIC4uIChSeFFzICYjNDM7IFR4UXMgLSAxKQk6IFR4IFF1ZXVlcwomIzQzOyAqIE5BUEkgaXMgb25seSBhbGxvY2F0ZWQgZm9yIGRhdGEgcGF0aAomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCBuYXBpX251bSA9IG1pbih0cC0mZ3Q7aXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTsKJiM0MzsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBuYXBpX251bTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCAoKnBvbGxfZm4pKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpID0gcnRsODE2OV9wb2xsOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDtpcnFfbnZlY3MgJmd0OyAxKSB7CiYjNDM7CQkJaWYgKGkgJmx0OyBSODE2OV9NQVhfUlhfUVVFVUVTKQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7CiYjNDM7CQl9CiYjNDM7CQluZXRpZl9uYXBpX2FkZCh0cC0mZ3Q7ZGV2LCAmYW1wO3RwLSZndDtydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgZXRodG9vbF9jaGFubmVscyAqY2gpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWNoLSZndDttYXhfcnggPSB0cC0mZ3Q7aHdfc3VwcF9udW1fcnhfcXVldWVzOwomIzQzOwljaC0mZ3Q7bWF4X3R4ID0gMTsKJiM0MzsKJiM0MzsJY2gtJmd0O3J4X2NvdW50ID0gdHAtJmd0O251bV9yeF9yaW5nczsKJiM0MzsJY2gtJmd0O3R4X2NvdW50ID0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0gewomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfAomIzQzOwkJCQkgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUywKJiM0MzsJLmdldF9kcnZpbmZvCQk9IHJ0bDgxNjlfZ2V0X2RydmluZm8sCiYjNDM7CS5nZXRfcmVnc19sZW4JCT0gcnRsODE2OV9nZXRfcmVnc19sZW4sCiYjNDM7CS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAomIzQzOwkuZ2V0X2NvYWxlc2NlCQk9IHJ0bF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gcnRsX3NldF9jb2FsZXNjZSwKJiM0MzsJLmdldF9yZWdzCQk9IHJ0bDgxNjlfZ2V0X3JlZ3MsCiYjNDM7CS5nZXRfd29sCQk9IHJ0bDgxNjlfZ2V0X3dvbCwKJiM0MzsJLnNldF93b2wJCT0gcnRsODE2OV9zZXRfd29sLAomIzQzOwkuZ2V0X3N0cmluZ3MJCT0gcnRsODE2OV9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cwk9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAomIzQzOwkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiYjNDM7CS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKJiM0MzsJLmdldF9jaGFubmVscwkJPSBydGw4MTY5X2dldF9jaGFubmVscywKJiM0MzsJLmdldF9saW5rX2tzZXR0aW5ncwk9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKJiM0MzsJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X3JpbmdwYXJhbQkJPSBydGw4MTY5X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9wYXVzZXBhcmFtCQk9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sCiYjNDM7CS5zZXRfcGF1c2VwYXJhbQkJPSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLAomIzQzOwkuZ2V0X2V0aF9jdHJsX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwOwpAQCAtNTYwOSw3ICYjNDM7NjM1MywxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAl1MzIgdHhjb25maWc7CiAJdTMyIHhpZDsKIAotCWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZiAoKnRwKSk7CiYjNDM7CWRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKCZhbXA7cGRldi0mZ3Q7ZGV2LCBzaXplb2YoKnRwKSwKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUywKJiM0MzsJCQkJICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7CiYjNDM7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01Njg5LDYgJiM0Mzs2NDM2LDEzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwogCiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7CiYjNDM7CQl0cC0mZ3Q7cnNzX2RhdGEgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqdHAtJmd0O3Jzc19kYXRhKSwKJiM0MzsJCQkJCSAgICBHRlBfS0VSTkVMKTsKJiM0MzsJCWlmICghdHAtJmd0O3Jzc19kYXRhKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiAJdHAtJmd0O2NwX2NtZCA9IFJUTF9SMTYodHAsIENQbHVzQ21kKSAmYW1wOyBDUENNRF9NQVNLOwogCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSAmZ3Q7IDQgJmFtcDsmYW1wOyB0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8xOCAmYW1wOyZhbXA7CkBAIC01NzAzLDExICYjNDM7NjQ1NywxNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAogCXJ0bF9od19yZXNldCh0cCk7CiAKJiM0MzsJcnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7CiYjNDM7CiAJcmMgPSBydGxfYWxsb2NfaXJxKHRwKTsKIAlpZiAocmMgJmx0OyAwKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgcmMsICYjMzQ7Q2FuJiMzOTt0IGFsbG9jYXRlIGludGVycnVwdFxuJiMzNDspOwogCi0JdHAtJmd0O2lycSA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApOwomIzQzOwlydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7CiYjNDM7CiYjNDM7CWlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKQomIzQzOwkJcnRsODE2OV9pbml0X3Jzcyh0cCk7CiAKIAlJTklUX1dPUksoJmFtcDt0cC0mZ3Q7d2sud29yaywgcnRsX3Rhc2spOwogCWRpc2FibGVfd29yaygmYW1wO3RwLSZndDt3ay53b3JrKTsKQEAgLTU3MTYsMTMgJiM0Mzs2NDc1LDE2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCiAJZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7cnRsODE2OV9ldGh0b29sX29wczsKIAotCW5ldGlmX25hcGlfYWRkKGRldiwgJmFtcDt0cC0mZ3Q7bmFwaSwgcnRsODE2OV9wb2xsKTsKLQogCWRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYOwogCWRldi0mZ3Q7dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAlkZXYtJmd0O3ByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7CiAKJiM0MzsJaWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgJmFtcDsmYW1wOyB0cC0mZ3Q7bnVtX3J4X3JpbmdzICZndDsgMSkgewomIzQzOwkJZGV2LSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDsKJiM0MzsJCWRldi0mZ3Q7ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7CiYjNDM7CX0KJiM0MzsKIAkvKgogCSAqIFByZXRlbmQgd2UgYXJlIHVzaW5nIFZMQU5zOyBUaGlzIGJ5cGFzc2VzIGEgbmFzdHkgYnVnIHdoZXJlCiAJICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuCkBAIC01Nzc4LDYgJiM0Mzs2NTQwLDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWlmIChqdW1ib19tYXgpCiAJCWRldi0mZ3Q7bWF4X210dSA9IGp1bWJvX21heDsKIAomIzQzOwlyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtJmd0O2RldiwgMSwgdHAtJmd0O251bV9yeF9yaW5ncyk7CiYjNDM7CWlmIChyYyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZSgmYW1wO3BkZXYtJmd0O2RldiwgcmMsICYjMzQ7c2V0IHR4L3J4IG51bSBmYWlsdXJlXG4mIzM0Oyk7CiYjNDM7CiAJcnRsX3NldF9pcnFfbWFzayh0cCk7CiAKIAl0cC0mZ3Q7Y291bnRlcnMgPSBkbWFtX2FsbG9jX2NvaGVyZW50ICgmYW1wO3BkZXYtJmd0O2Rldiwgc2l6ZW9mKCp0cC0mZ3Q7Y291bnRlcnMpLApAQCAtNTc5Miw5ICYjNDM7NjU1OCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwl0cC0mZ3Q7cnhfcmluZyA9IGtjYWxsb2ModHAtJmd0O251bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcpLAomIzQzOwkJCSAgICAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtyeF9yaW5nKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdHAtJmd0O251bV9yeF9yaW5nczsgaSYjNDM7JiM0MzspCiYjNDM7CQl1NjRfc3RhdHNfaW5pdCgmYW1wO3RwLSZndDtyeF9yaW5nW2ldLnN0YXRzLnN5bmNwKTsKJiM0MzsKJiM0MzsJdHAtJmd0O3J0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtJmd0O2lycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksCiYjNDM7CQkJCSAgIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXRwLSZndDtydGw4MTY5X25hcGkpIHsKJiM0MzsJCWtmcmVlKHRwLSZndDtyeF9yaW5nKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXI4MTY5X2luaXRfbmFwaSh0cCk7CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmMpCi0JCXJldHVybiByYzsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmFwaTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkgewogCQlpZiAocnRsX2lzXzgxMjUodHApKQpAQCAtNTgwMyw4ICYjNDM7NjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCQkJdHAtJmd0O2xlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpOwogCX0KIAotCW5ldGRldl9pbmZvKGRldiwgJiMzNDslcywgJXBNLCAlc1hJRCAleCwgSVJRICVkXG4mIzM0OywKLQkJICAgIGNoaXAtJmd0O25hbWUsIGRldi0mZ3Q7ZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLSZndDtpcnEpOwomIzQzOwluZXRkZXZfaW5mbyhkZXYsICYjMzQ7JXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZCAoJWQgdG90YWwpXG4mIzM0OywKJiM0MzsJCSAgICBjaGlwLSZndDtuYW1lLCBkZXYtJmd0O2Rldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLAomIzQzOwkJICAgIHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCB0cC0mZ3Q7aXJxX252ZWNzKTsKIAogCWlmIChqdW1ib19tYXgpCiAJCW5ldGRldl9pbmZvKGRldiwgJiMzNDtqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cbiYjMzQ7LApAQCAtNTgyMSw2ICYjNDM7NjYwNSwxMSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcG1fcnVudGltZV9wdXRfc3luYygmYW1wO3BkZXYtJmd0O2Rldik7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZV9uYXBpOgomIzQzOwlyODE2OV9mcmVlX25hcGkodHApOwomIzQzOwlrZnJlZSh0cC0mZ3Q7cnhfcmluZyk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enogYW5kLCBpZiBzbywgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzeW1ib2xzIGFyZSBsaWtlbHkgdG8gYmUgaW1wb3J0YW50LiBGaXJzdCwgSSBuZWVkIHRvIHNlZSB3aGF0IGRyaXZlciB3YXMgbW9kaWZpZWQuIEFoLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgLiBUaGF0JiMzOTtzIHRoZSBSZWFsdGVrIDgxNjksIDgxNjgsIDgxMjUsIG9yIDgxMjcgZXRoZXJuZXQgZHJpdmVyLCByaWdodD8gTm93IHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBkcml2ZXIgZXZlbiBlbXVsYXRlZCBpbiBRRU1VPyBBbmQgaWYgc28gaXMgaXQgd29ydGggYm90aGVyaW5nIHRvIGZ1enouCgpXYWl0IGEgc2Vjb25k4oCmIGluIFFFTVUsIHRoZSBlbXVsYXRlZCBSZWFsdGVrIGlzIGFjdHVhbGx5IHRoZSBydGw4MTM5LCB1c2luZyBgLW5ldCBuaWMsbW9kZWw9cnRsODEzOWAuIE9rYXksIHNvIGAtbmV0IG5pYyxtb2RlbD1ydGw4MTM5YCBpcyBlaXRoZXIgODEzOWNwIG9yIDgxMzkuIElzIHRoZSByODE2OSBvciBydGw4MTY5IGVtdWxhdGVkPyBXYWl0LCBsZXQgbWUgbGlzdCB0aGUgb3RoZXIgb3B0aW9ucyBRRU1VIGdpdmVzIHVzLiBJdCBoYXMgYHJ0bDgxMzlgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBuZTJrX3BjaWAsIGFuZCBgcGNuZXRgLgoKQWxyaWdodCwgSSBzaG91bGQgcmUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gVGhleSBzYWlkICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHRoYXQuLi4mIzM0Oy4gTGV0JiMzOTtzIHNlZTogY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIG1lbnRpb25lZCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhbmQgdGVhci1kb3duIGNhbGxiYWNrcy4gR290IGl0LiBTbywgaXMgUmVhbHRlayA4MTY5IFBDSSBoYXJkd2FyZSBvciBpcyBpdCBhY2Nlc3NpYmxlPyBRRU1VIG9ubHkgaGFzIHJ0bDgxMzkgKGBody9uZXQvcnRsODEzOS5jYCkuIEJ1dCB3YWl0ISBDYW4gdGhlIHI4MTY5IGRyaXZlciBiaW5kIHRvIHRoZSA4MTM5PyBJIHNob3VsZCBncmVwIGZvciBgcnRsODEzOWAgdnMgYHI4MTY5YCBpbiB0aGUga2VybmVsIG9yIEkgc2hvdWxkIGp1c3QgY2hlY2sgdGhlIFBDSSBJRHMuIEkgbmVlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBiZWZvcmUgSSB3YXN0ZSBteSB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OzgxNjkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAyNjY0IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jPTEzNj1lbnVtIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2Mi1cdFR4UG9sbFx0XHQ9IDB4RDksXHQvKiBUZWxsIGNoaXAgdG8gY2hlY2sgVHggZGVzY3JpcHRvcnMgZm9yIHdvcmsgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOWNwLmM6MTYzOlx0UnhNYXhTaXplXHQ9IDB4REEsIC8qIE1heCBzaXplIG9mIGFuIFJ4IHBhY2tldCAoODE2OSBvbmx5KSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYy0xNjQtXHRDcENtZFx0XHQ9IDB4RTAsIC8qIEMmIzQzOyBDb21tYW5kIHJlZ2lzdGVyIChDJiM0MzsgbW9kZSBvbmx5KSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODU6XHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg2LVx0ZGVwZW5kcyBvbiBQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTMtXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6OTQ6XHQgIFJUTDgxNjkgR2lnYWJpdCBFdGhlcm5ldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTk1LVx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTktXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDA6XHQgIHdpbGwgYmUgY2FsbGVkIHI4MTY5LiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAyOmNvbmZpZyBSODE2OV9MRURTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTklDIExFRHNcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDQ6XHRkZXBlbmRzIG9uIFI4MTY5IFx1MDAyNlx1MDAyNiBMRURTX1RSSUdHRVJfTkVUREVWXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTA1Olx0ZGVwZW5kcyBvbiAhKFI4MTY5PXkgXHUwMDI2XHUwMDI2IExFRFNfQ0xBU1M9bSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDYtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZT03PW9iai0kKENPTkZJR184MTM5VE9PKSAmIzQzOz0gODEzOXRvby5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjg6cjgxNjkteSAmIzQzOz0gcjgxNjlfbWFpbi5vIHI4MTY5X2Zpcm13YXJlLm8gcjgxNjlfcGh5X2NvbmZpZy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjk6cjgxNjktJChDT05GSUdfUjgxNjlfTEVEUykgJiM0Mzs9IHI4MTY5X2xlZHMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfUjgxNjkpICYjNDM7PSByODE2OS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlLTExLW9iai0kKENPTkZJR19SVEFTRSkgJiM0Mzs9IHJ0YXNlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDoyOi8qIHI4MTY5Lmg6IFJlYWxUZWsgODE2OS84MTY4LzgxMDEgZXRoZXJuZXQgZHJpdmVyLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTMtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg9MTU9ZW51bSBtYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjgwOnN0cnVjdCBydGw4MTY5X3ByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODE6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4Mzp2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4NDp1MTYgcnRsODE2OGhfMl9nZXRfYWRjX2JpYXNfaW9mZnNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODU6dTggcnRsODE2OGRfZWZ1c2VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZ19hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4Njp2b2lkIHI4MTY5X2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmgtODctXHRcdFx0IGVudW0gbWFjX3ZlcnNpb24gdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4OTp2b2lkIHI4MTY5X2dldF9sZWRfbmFtZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC05MC1cdFx0XHRjaGFyICpidWYsIGludCBidWZfbGVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MTppbnQgcnRsODE2OF9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjkyOmludCBydGw4MTY4X2xlZF9tb2RfY3RybChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IG1hc2ssIHUxNiB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjkzOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxNjhfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NDppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTU6aW50IHJ0bDgxMjVfc2V0X2xlZF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaW5kZXgsIHUxNiBtb2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NjpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpydGw4MTI1X2luaXRfbGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTc6dm9pZCByODE2OV9yZW1vdmVfbGVkcyhzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MjovKiByODE2OV9maXJtd2FyZS5jOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jOjE0OiNpbmNsdWRlIFwmIzM0O3I4MTY5X2Zpcm13YXJlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM9ODg9c3RhdGljIGJvb2wgcnRsX2Z3X2RhdGFfb2soc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MTQwOnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMTQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MjovKiByODE2OV9maXJtd2FyZS5oOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjE0OnN0cnVjdCBydGw4MTY5X3ByaXZhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTU6dHlwZWRlZiB2b2lkICgqcnRsX2Z3X3dyaXRlX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaDoxNjp0eXBlZGVmIGludCAoKnJ0bF9md19yZWFkX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0xNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg9Mzg9dm9pZCBydGxfZndfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjM5OnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjovKiByODE2OV9sZWRzLmM6IFJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBkcml2ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zLSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzojaW5jbHVkZSBcJiMzNDtyODE2OS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjMwOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMzEtXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjM3OiNkZWZpbmUgbGNkZXZfdG9fcjgxNjlfbGRldihsY2RldikgY29udGFpbmVyX29mKGxjZGV2LCBzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2LCBsZWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjM5OnN0YXRpYyBib29sIHI4MTY5X3RyaWdnZXJfbW9kZV9pc192YWxpZCh1bnNpZ25lZCBsb25nIGZsYWdzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTU0PXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6NTc6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo1ODpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTU5LVx0aW50IHNoaWZ0ID0gbGRldi1cdTAwM2VpbmRleCAqIDQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjYxOlx0aWYgKCFyODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQoZmxhZ3MpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02Mi1cdFx0LyogU3dpdGNoIExFRCBvZmYgdG8gaW5kaWNhdGUgdGhhdCBtb2RlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz03MD1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTcyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjczOlx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6NzQ6XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXHUwMDNlbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy03NS1cdGludCBzaGlmdCA9IGxkZXYtXHUwMDNlaW5kZXggKiA0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTkwPXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtOTIte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6OTM6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo5NDpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTk1LVx0aW50IHNoaWZ0ID0gbGRldi1cdTAwM2VpbmRleCAqIDQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTIyPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEyMzpcdHI4MTY5X2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMjQte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTI1Olx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzMDpzdGF0aWMgdm9pZCBydGw4MTY4X3NldHVwX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEzMS1cdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBpbmRleClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTEzMi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzM6XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTM0LVx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcdTAwMjZsZGV2LVx1MDAzZWxlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzk6XHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVx1MDAzZW5hbWUsIHNpemVvZihsZGV2LVx1MDAzZW5hbWUpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0MC1cdGxlZF9jZGV2LVx1MDAzZW5hbWUgPSBsZGV2LVx1MDAzZW5hbWU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTQ1LVx0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSBydGw4MTY4X2xlZF9od19jb250cm9sX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE0NjpcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHI4MTY5X2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNDctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTUyOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxNjhfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE1NDpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNTUtXHRpbnQgaTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xNjc9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNjkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcwOlx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcxOlx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTczOlx0aWYgKCFyODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQoZmxhZ3MpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNzQtXHRcdC8qIFN3aXRjaCBMRUQgb2ZmIHRvIGluZGljYXRlIHRoYXQgbW9kZSBpc24mIzM5O3Qgc3VwcG9ydGVkICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTgyPXN0YXRpYyBpbnQgcnRsODEyNV9sZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTg0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE4NTpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjE4NjpcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE4Ny1cdHUxNiBtb2RlID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0yMDM9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA2Olx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA3Olx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVx1MDAzZW5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjA4LVx0aW50IG1vZGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjI4OnN0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0dXBfbGVkX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIyOS1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjMxOlx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIzMi1cdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gXHUwMDI2bGRldi1cdTAwM2VsZWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjM3Olx0cjgxNjlfZ2V0X2xlZF9uYW1lKHRwLCBpbmRleCwgbGRldi1cdTAwM2VuYW1lLCBzaXplb2YobGRldi1cdTAwM2VuYW1lKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzgtXHRsZWRfY2Rldi1cdTAwM2VuYW1lID0gbGRldi1cdTAwM2VuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0My1cdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNDQ6XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjQ1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjI1MDpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpydGw4MTI1X2luaXRfbGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI1MS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTI6XHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjUzLVx0aW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjY1OnZvaWQgcjgxNjlfcmVtb3ZlX2xlZHMoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjcwOlx0Zm9yIChzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsID0gbGVkczsgbC1cdTAwM2VuZGV2OyBsJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI3MS1cdFx0bGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoXHUwMDI2bC1cdTAwM2VsZWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTItLypcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM6ICogcjgxNjkuYzogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzozNzojaW5jbHVkZSBcJiMzNDtyODE2OS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzozODojaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0zOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjczOiNkZWZpbmUgUjgxNjlfUkVHU19TSVpFXHRcdDI1NlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NzQ6I2RlZmluZSBSODE2OV9SWF9CVUZfU0laRVx0KFNaXzE2SyAtIDEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NS0jZGVmaW5lIE5VTV9UWF9ERVNDXHQyNTZcdC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzYtI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc3OiNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1x0KE5VTV9UWF9ERVNDICogc2l6ZW9mKHN0cnVjdCBUeERlc2MpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODQtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NTojZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdCgoTlVNX1JYX0RFU0MgJiM0MzsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NjojZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSU1x0KE1BWF9TS0JfRlJBR1MgJiM0MzsgMSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3OiNkZWZpbmUgUjgxNjlfVFhfU1RBUlRfVEhSU1x0KDIgKiBSODE2OV9UWF9TVE9QX1RIUlMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODojZGVmaW5lIFI4MTY5X01BWF9RVUVVRVNcdDE2XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4OTojZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcdDhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkwOiNkZWZpbmUgUjgxNjlfREVGQVVMVF9SWF9RVUVVRVNcdDFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkxOiNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFU1x0MVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTItI2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzLSNkZWZpbmUgUjgxMjdfTUlOX05VTV9JUlFWRUNcdDMwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDojZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUXHQxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NS0jZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjMxLVx0LyogODExMCBmYW1pbHkuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzI6XHR7IDB4ZmM4LCAweDk4MCxcdFJUTF9HSUdBX01BQ19WRVJfMDYsIFwmIzM0O1JUTDgxNjlzYy84MTEwc2NcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzMzpcdHsgMHhmYzgsIDB4MTgwLFx0UlRMX0dJR0FfTUFDX1ZFUl8wNSwgXCYjMzQ7UlRMODE2OXNjLzgxMTBzY1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjM0Olx0eyAweGZjOCwgMHgxMDAsXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcJiMzNDtSVEw4MTY5c2IvODExMHNiXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzUtXHR7IDB4ZmM4LCAweDA0MCxcdFJUTF9HSUdBX01BQ19WRVJfMDMsIFwmIzM0O1JUTDgxMTBzXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzY6XHR7IDB4ZmM4LCAweDAwOCxcdFJUTF9HSUdBX01BQ19WRVJfMDIsIFwmIzM0O1JUTDgxNjlzXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDI1MDIpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjYyLVx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcdDB4ODE2OCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI2MzpcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODE2OSkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI2NC1cdHsgUENJX1ZERVZJQ0UoRExJTkssXHQweDQzMDApIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mjc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjgxPWVudW0gcnRsX3JlZ2lzdGVycyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzQwLVx0UnhEZXNjQWRkckhpZ2hcdD0gMHhlOCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM0MTpcdEVhcmx5VHhUaHJlc1x0PSAweGVjLFx0LyogODE2OS4gVW5pdCBvZiAzMiBieXRlcy4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTM0Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00ODc9ZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTUxLVx0Q2xrUmVxRW5cdD0gKDEgXHUwMDNjXHUwMDNjIDcpLFx0LyogQ2xvY2sgUmVxdWVzdCBFbmFibGUgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU1MjpcdE1TSUVuYWJsZVx0PSAoMSBcdTAwM2NcdTAwM2MgNSksXHQvKiA4MTY5IG9ubHkuIFJlc2VydmVkIGluIHRoZSA4MTY4LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTUzLVx0UENJX0Nsb2NrXzY2TUh6ID0gMHgwMSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01NzctXHRNYWNfZGJnb19vZVx0PSAoMSBcdTAwM2NcdTAwM2MgMTQpLFx0Ly8gODE2OCA4MTAxXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1Nzg6XHRFbkFuYVBMTFx0PSAoMSBcdTAwM2NcdTAwM2MgMTQpLFx0Ly8gODE2OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTc5LVx0Tm9ybWFsX21vZGVcdD0gKDEgXHUwMDNjXHUwMDNjIDEzKSxcdC8vIHVudXNlZFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU5My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU5NDpcdC8qIHJ0bDgxNjlfUEhZc3RhdHVzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01OTUtXHRUQklfRW5hYmxlXHQ9IDB4ODAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjQyPWVudW0gcnRsX3R4X2Rlc2NfYml0IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02NTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2NTE6LyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjUyLWVudW0gcnRsX3R4X2Rlc2NfYml0XzAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTczNz1zdHJ1Y3QgcmluZ19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3NDI6c3RydWN0IHJ0bDgxNjlfY291bnRlcnMge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzQzLVx0X19sZTY0XHR0eF9wYWNrZXRzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc4NTpzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc4Ni1cdGJvb2xcdGluaXRlZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz04MDY9ZW51bSByeF9kZXNjX3R5cGUge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjgxMTpzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMi1cdHUzMiBjdXJfcng7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODI5OnN0cnVjdCBydGw4MTY5X3Jzc19kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgzMC1cdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODM1OnN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODM2LVx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NDYtXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg0NzpcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODQ4Olx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0OS1cdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODUzLVx0dW5zaWduZWQgaW50IGh3X3N1cHBfbnVtX3J4X3F1ZXVlcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg1NDpcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg1NS1cdHVuc2lnbmVkIGludCBpcnFfbnZlY3M7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODcxLVx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzI6XHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzM6XHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3NC1cdHUzMiBzYXZlZF93b2xvcHRzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3OTpcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg0OnR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODg1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg2Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7UmVhbHRlayBhbmQgdGhlIExpbnV4IHI4MTY5IGNyZXcgXHUwMDNjbmV0ZGV2QHZnZXIua2VybmVsLm9yZ1x1MDAzZVwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODc6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1JlYWxUZWsgUlRMLTgxNjkgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODg4LU1PRFVMRV9TT0ZUREVQKFwmIzM0O3ByZTogcmVhbHRla1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9OTE4PU1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTI3QV8xKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkxOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnRwX3RvX2RldihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTI1OnN0YXRpYyB2b2lkIHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTI2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MzA6c3RhdGljIHZvaWQgcnRsX3VubG9ja19jb25maWdfcmVncyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTM1OnN0YXRpYyB2b2lkIHJ0bF9wY2lfY29tbWl0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDE6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWcyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTQyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDk6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWc1KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NTc6c3RhdGljIHZvaWQgcjgxNjlfbW9kX3JlZzhfY29uZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1OC1cdFx0XHRcdHU4IGJpdHMsIGJvb2wgY29uZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NzE6c3RhdGljIGJvb2wgcnRsX2lzXzgxMjUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk3NjpzdGF0aWMgYm9vbCBydGxfaXNfODE2OGV2bF91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTgzOnN0YXRpYyBib29sIHJ0bF9zdXBwb3J0c19lZWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05ODQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk5MDpzdGF0aWMgdm9pZCBydGxfcmVhZF9tYWNfZnJvbV9yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4ICptYWMsIGludCByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05OTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTk5OD1zdHJ1Y3QgcnRsX2NvbmQge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTk5Olx0Ym9vbCAoKmNoZWNrKShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAwMC1cdGNvbnN0IGNoYXIgKm1zZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAwMzpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgKmMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDA0LVx0XHRcdCAgdW5zaWduZWQgbG9uZyB1c2VjcywgaW50IG4sIGJvb2wgaGlnaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAyMDpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0X2hpZ2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDIxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgKmMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwMjc6c3RhdGljIGJvb2wgcnRsX2xvb3Bfd2FpdF9sb3coc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDI4LVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBydGxfY29uZCAqYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM0LSNkZWZpbmUgREVDTEFSRV9SVExfQ09ORChuYW1lKVx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwMzU6c3RhdGljIGJvb2wgbmFtZSAjIyBfY2hlY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqKTtcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM2LVx0XHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY29uZCBuYW1lID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA0MS1cdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDQyOnN0YXRpYyBib29sIG5hbWUgIyMgX2NoZWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA0My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEwNDQ6aW50IHJ0bDgxNjhfbGVkX21vZF9jdHJsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgbWFzaywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDYyOmludCBydGw4MTY4X2dldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwNzg9c3RhdGljIGludCBydGw4MTI1X2dldF9sZWRfcmVnKGludCBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA4NTppbnQgcnRsODEyNV9zZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCwgdTE2IG1vZGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDg2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTA1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTEwNjppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExMDcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTIzOnZvaWQgcjgxNjlfZ2V0X2xlZF9uYW1lKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaWR4LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEyNC1cdFx0XHRjaGFyICpidWYsIGludCBidWZfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTQ1OnN0YXRpYyB2b2lkIHI4MTY4ZnBfYWRqdXN0X29jcF9jbWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiAqY21kLCBpbnQgdHlwZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNDYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNTI9REVDTEFSRV9SVExfQ09ORChydGxfZXJpYXJfY29uZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE1NzpzdGF0aWMgdm9pZCBfcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE1OC1cdFx0XHQgICB1MzIgdmFsLCBpbnQgdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE3MjpzdGF0aWMgdm9pZCBydGxfZXJpX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkciwgdTMyIG1hc2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTczLVx0XHRcdCAgdTMyIHZhbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE3ODpzdGF0aWMgdTMyIF9ydGxfZXJpX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCBpbnQgdHlwZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTg5OnN0YXRpYyB1MzIgcnRsX2VyaV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkcilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTk0OnN0YXRpYyB2b2lkIHJ0bF93MHcxX2VyaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBwLCB1MzIgbSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjAxOnN0YXRpYyB2b2lkIHJ0bF9lcmlfc2V0X2JpdHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCB1MzIgcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjA2OnN0YXRpYyB2b2lkIHJ0bF9lcmlfY2xlYXJfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIwNy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTIxNj1ERUNMQVJFX1JUTF9DT05EKHJ0bF9vY3BfZ3BoeV9jb25kKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjIxOnN0YXRpYyB2b2lkIHI4MTY4X3BoeV9vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIyMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIzMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyMzE6c3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjMyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI0NjpzdGF0aWMgdm9pZCBfX3I4MTY4X21hY19vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNTQ6c3RhdGljIHZvaWQgcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI2MzpzdGF0aWMgdTE2IF9fcjgxNjhfbWFjX29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI2NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNzM6c3RhdGljIHUxNiByODE2OF9tYWNfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjc0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI4NTpzdGF0aWMgdm9pZCByODE2OF9tYWNfb2NwX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTE2IG1hc2ssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjg2LVx0XHRcdFx0IHUxNiBzZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyOTc6c3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMwNzpzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzA4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMyNTpzdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI2LXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDI0NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBSZWFsdGVrIDgxNjkvODEyNS84MTI3IERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgdGhlc2UgUmVhbHRlayBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIDgxNjksIDgxMjUsIG9yIDgxMjcgdmFyaWFudHMsIGFyZSBlbXVsYXRlZCB3aXRoaW4gUUVNVS4gSWYgdGhleSYjMzk7cmUgbm90LCB0aGVuIGFjY29yZGluZyB0byB0aGUgcnVsZXMsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgUUVNVSYjMzk7cyBzdXBwb3J0ZWQgbmV0d29yayBkZXZpY2VzLiBJIGNhbiBxdWlja2x5IGFzY2VydGFpbiB0aGF0IFFFTVUgZG9lcyBlbXVsYXRlIFJlYWx0ZWsmIzM5O3MgYHJ0bDgxMzlgIChQQ0kgSUQgMTBlYzo4MTM5KSwgd2hpY2ggdXNlcyB0aGUgYDgxMzljcGAgYW5kIGA4MTM5dG9vYCBkcml2ZXJzLiBIb3dldmVyLCBRRU1VJiMzOTtzIGRvY3VtZW50YXRpb24gbGlzdHMgbnVtZXJvdXMgb3RoZXIgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLCBpbmNsdWRpbmcgSW50ZWwmIzM5O3MgZTEwMDAgc2VyaWVzLCB2aXJ0aW8tbmV0LCBhbmQgb3RoZXJzLCBidXQgKm5vdCogUlRMODE2OS4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBQQ0kgSURzIG9mIGA4MTM5Y3BgLCBgODEzOXRvb2AsIGFuZCBgcjgxNjlgLiBJIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBmaW5kIHRoYXQgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycyBib3RoIHVzZSBQQ0kgSUQgMHg4MTM5IChmcm9tIFJlYWx0ZWspLCB3aGlsZSB0aGUgYHI4MTY5YCBkcml2ZXIgdXNlcyBhIGRpZmZlcmVudCBzZXQsIGluY2x1ZGluZyB0aGUgY3J1Y2lhbCAweDgxNjksIDB4ODEyNSwgMHg4MTI3IElEcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBQQ0llIE5JQ3MgSSYjMzk7bSBjb25jZXJuZWQgd2l0aC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBlbXVsYXRlcyBhbiBSVEw4MTY5IG9yIGFueSBvZiB0aGUgb3RoZXIgcmVmZXJlbmNlZCBkZXZpY2VzLiBJIGRlbHZlIGludG8gUUVNVSYjMzk7cyBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGl0cyBuZXR3b3JrIGRldmljZSBlbXVsYXRpb24gKGBody9uZXQvYCksIGFuZCBJIHNlZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMuLi5idXQgSSBkbyBub3Qgc2VlIGBydGw4MTY5YCEgUUVNVSBvbmx5IGhhcyBgcnRsODEzOWAsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0IGRvZXMgbm90IGVtdWxhdGUgdGhlIHRhcmdldGVkIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIFJlYWx0ZWsgODE2OS84MTI1LzgxMjcgZHJpdmVycyBhcmUgbm90IGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC4KClNpbmNlIHRoZSBgcjgxNjlgIGRyaXZlciAoYW5kLCBieSBleHRlbnNpb24sIHRoZSBkcml2ZXJzIGZvciA4MTI1IGFuZCA4MTI3KSByZXF1aXJlcyBhICpwaHlzaWNhbCogUENJZSBjYXJkIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IvZGV2aWNlIElEIGNvbWJpbmF0aW9uIHRoYXQgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUsIEkgY29uY2x1ZGUgdGhhdCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbmhlcmVudGx5IHVucmVhY2hhYmxlIHVuZGVyIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLgoKVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgcnVsZSByZWdhcmRpbmcgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIEkgZGV0ZXJtaW5lIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIGVmZm9ydCBpcyBiZXN0IGZvY3VzZWQgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bDgxNjlfcGNpX3RibCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDI1MDIpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mjc5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTY2MTU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY2MTYtXHQubmFtZVx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NjYxNzpcdC5pZF90YWJsZVx0PSBydGw4MTY5X3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy02NjE4LVx0LnByb2JlXHRcdD0gcnRsX2luaXRfb25lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDYyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBDSSBUYWJsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgIGZpbGUgYWdhaW4uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgYW5kIGNvbnRlbnRzIG9mIHRoZSBgcnRsODE2OV9wY2lfdGJsYCB0YWJsZSB3aXRoaW4gdGhpcyBkcml2ZXIuIFRoaXMgdGFibGUgaXMgYWJzb2x1dGVseSBjcml0aWNhbCBmb3IgcHJvcGVyIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyB0YWJsZSBzdHJ1Y3R1cmVzIHRoZSBkcml2ZXImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUmVhbHRlayBSVEw4MTY5IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzLiBXaGF0IFBDSSBJRHMgZG9lcyBpdCByZWNvZ25pemU/IFdoYXQgdmVuZG9yIElEcyBhcmUgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBxdWlya3Mgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGRlZmluZWQgZm9yIHBhcnRpY3VsYXIgcmV2aXNpb25zIG9yIG1hbnVmYWN0dXJlcnM/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIGVudHJpZXMgZGVmaW5pbmcgZGV2aWNlLXNwZWNpZmljIFBDSSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGFueSB1bmlxdWUgc2V0dXAgcHJvY2VkdXJlcy4gSXQgaXMgdGltZSB0byBkZXRlcm1pbmUgdGhlIGRldGFpbHMgb2YgdGhlc2UgcGFyYW1ldGVycywgc28gSSBrbm93IEkgdW5kZXJzdGFuZCB0aGVtIGFuZCB0aGUgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBkcml2ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0YWJsZSBlbnRyaWVzIGFuZCB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHJlYWRpbmcgYW5kIG1hcHBpbmcgb3V0IHdoYXQgSSBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUyOlx0XG4gMjUzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxNjlfcGNpX3RibFtdID0ge1xuIDI1NDpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHgyNTAyKSB9LFxuIDI1NTpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHgyNjAwKSB9LFxuIDI1NjpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTI5KSB9LFxuIDI1NzpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTM2KSwgLmRyaXZlcl9kYXRhID0gUlRMX0NGR19OT19HQklUIH0sXG4gMjU4Olx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjEpIH0sXG4gMjU5Olx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjIpIH0sXG4gMjYwOlx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjcpIH0sXG4gMjYxOlx0XHR7IFBDSV9WREVWSUNFKFJFQUxURUssXHQweDgxNjgpIH0sXG4gMjYyOlx0XHR7IFBDSV9WREVWSUNFKE5DVUJFLFx0MHg4MTY4KSB9LFxuIDI2MzpcdFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFx0MHg4MTY5KSB9LFxuIDI2NDpcdFx0eyBQQ0lfVkRFVklDRShETElOSyxcdDB4NDMwMCkgfSxcbiAyNjU6XHRcdHsgUENJX1ZERVZJQ0UoRExJTkssXHQweDQzMDIpIH0sXG4gMjY2Olx0XHR7IFBDSV9WREVWSUNFKEFULFx0MHhjMTA3KSB9LFxuIDI2NzpcdFx0eyBQQ0lfVkRFVklDRShVU1IsXHQweDAxMTYpIH0sXG4gMjY4Olx0XHR7IFBDSV9WREVWSUNFX1NVQihMSU5LU1lTLCAweDEwMzIsIFBDSV9BTllfSUQsIDB4MDAyNCkgfSxcbiAyNjk6XHRcdHsgUENJX0RFVklDRV9TVUIoMHgwMDAxLCAweDgxNjgsIFBDSV9BTllfSUQsIDB4MjQxMCkgfSxcbiAyNzA6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNSkgfSxcbiAyNzE6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNikgfSxcbiAyNzI6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4ODEyNykgfSxcbiAyNzM6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4MzAwMCkgfSxcbiAyNzQ6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4NTAwMCkgfSxcbiAyNzU6XHRcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcdDB4MGUxMCkgfSxcbiAyNzY6XHRcdHsgfVxuIDI3NzpcdH07XG4gMjc4Olx0XG4gMjc5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxNjlfcGNpX3RibCk7XG4gMjgwOlx0XG4gMjgxOlx0ZW51bSBydGxfcmVnaXN0ZXJzIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUxMQoJCQkJCQkJb3V0cHV0OiAxMjEKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFuYWx5emVkIHRoaXMgc2l0dWF0aW9uIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaW4gbXkgY29uY2x1c2lvbi4gVGhlIGRldmljZSBJRCBgMHg4MTM5YCBpcyBkZWZpbml0ZWx5ICpub3QqIHJlbGF0ZWQgdG8gdGhlIGByODE2OWAgZHJpdmVyLCB3aGljaCBoYW5kbGVzIFJlYWx0ZWsgUENJZSBldGhlcm5ldCBkZXZpY2VzIGxpa2UgdGhlIDgxNjksIDgxNjgsIDgxMjUsIGFuZCA4MTI3LiBUaGUga2lja2VyIGhlcmUgaXMgdGhhdCAqbm9uZSogb2YgdGhvc2UgYXJlIGFjdHVhbGx5IGVtdWxhdGVkIGluIHRoZSB0eXBpY2FsIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyB3ZSYjMzk7cmUgdXNpbmcgZm9yIGZ1enppbmcsIGxpa2UgUUVNVSBvciBHQ0UuCgpJJiMzOTt2ZSBjb25zaWRlcmVkIHRoYXQgc29tZSAqc3BlY2lmaWMqIHNjZW5hcmlvcyAqY291bGQqIHRyaWdnZXIgdGhpcywgYnV0IHJlYWxpemVkIHRoZXkmIzM5O3JlIGltcG9zc2libGU6IEkmIzM5O20gcmVmZXJyaW5nIHRvIHRoaW5ncyBsaWtlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIHNldHVwcyBsaWtlIFVTQiBnYWRnZXQgb3IgbWFjODAyMTFfaHdzaW0uIEFsc28sIGNvZGUgcGF0aHMgdGhhdCBhcmUgc3BlY2lmaWNhbGx5IGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzICh0aGluayBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIGNhcmRzLCB3aGljaCwgYWdhaW4sIHdlICpkb24mIzM5O3QqIGhhdmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgIGluIHRoaXMgY2FzZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyB0aGUgUmVhbHRlayBgcjgxNjlgIGRyaXZlciwgYW5kIHRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRzIG11bHRpLXF1ZXVlL1JTUyBzdXBwb3J0IGZvciB0aGUgUlRMODEyNyBoYXJkd2FyZS4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgUmVhbHRlayBQQ0llIE5JQyBoYXJkd2FyZSBvciBhdCBsZWFzdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSBJRHMuIFNpbmNlIHdlIGNhbiYjMzk7dCByZWxpYWJseSB0cmlnZ2VyIHRoZSB0YXJnZXRlZCBjb2RlIHBhdGhzIGluIG91ciB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcywgaXQmIzM5O3Mgbm90IHdvcnRoIHNwZW5kaW5nIHRoZSBlZmZvcnQgb24uCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHJpZ2h0OgoKKiAgIGBXb3J0aEZ1enppbmdgOiBzZXQgdG8gYGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gCiogICBgUmVhc29uaW5nYDogSSBoYXZlIHRoZSBjb25jaXNlIGV4cGxhbmF0aW9uIGhlcmUsIGFsbCBnb29kLgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIGNvcnJlY3Q6CgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGwKKiAgIGBGb2N1c1N5bWJvbHNgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGwKKiAgIGBSZWFzb25pbmdgOiBBIHN0cmluZwoqICAgYFdvcnRoRnV6emluZ2A6IEEgYm9vbGVhbgoKWWVwLCBmb3JtYXQgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA2OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJlYWx0ZWsgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gYWRkIG11bHRpLXF1ZXVlL1JTUyBhbmQgTVNJLVggc3VwcG9ydCBmb3IgUlRMODEyNy9SVEw4MTI1IE5JQ3MuIFRoZSByODE2OSBkcml2ZXIgb3BlcmF0ZXMgb24gcGh5c2ljYWwgUENJZSBSZWFsdGVrIE5JQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgZHJpdmVyIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQga2VybmVsIGZ1enppbmcgc2V0dXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDY6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjA2OTcxMDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMxODg5ODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjA2OTcxNTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTMzMTA0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkM2Y2OWUwNmEwNTcxN2JjNmE2N2VlOWFkNWJhN2JhOTY5YTRkZWJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDA2OjE4OjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5hNzZmYmYxZTUwZDExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjksNiArMjksNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXHUwMDNlXFxuQEAgLTc0LDkgKzc1LDMzIEBAXFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcXHQyNTZcXHQvKiBOdW1iZXIgb2YgVHggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cXG4gI2RlZmluZSBOVU1fUlhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBSeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcXHQoTlVNX1RYX0RFU0MgKiBzaXplb2Yoc3RydWN0IFR4RGVzYykpXFxuLSNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG4rXFxuKy8qXFxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcXG4rICogZmV0Y2ggb25lIG1vcmUgZGVzY3JpcHRvciBldmVuIGFmdGVyIGhpdHRpbmcgdGhlIFJpbmdFbmQgbWFyay4gV2VcXG4rICogYWxsb2NhdGUgdGhpcyBleHRyYSBkdW1teSBzcGFjZSBhcyBwYWRkaW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kc1xcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXFxuKyAqL1xcbisjZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXFxuICNkZWZpbmUgUjgxNjlfVFhfU1RPUF9USFJTXFx0KE1BWF9TS0JfRlJBR1MgKyAxKVxcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcXHQoMiAqIFI4MTY5X1RYX1NUT1BfVEhSUylcXG4rI2RlZmluZSBSODE2OV9NQVhfUVVFVUVTXFx0MTZcXG4rI2RlZmluZSBSODE2OV9NQVhfUlhfUVVFVUVTXFx0OFxcbisjZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXFx0MVxcbisjZGVmaW5lIFI4MTY5X01BWF9UWF9RVUVVRVNcXHQxXFxuKyNkZWZpbmUgUjgxMjdfTUFYX05VTV9JUlFWRUNcXHQzMlxcbisjZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXFx0MzBcXG4rI2RlZmluZSBSODE2OV9JUlFfREVGQVVMVFxcdDFcXG4rI2RlZmluZSBSVExfUlNTX0tFWV9TSVpFXFx0NDBcXG4rI2RlZmluZSBSU1NfQ1BVX05VTV9NQVNLXFx0R0VOTUFTSygxOCwgMTYpXFxuKyNkZWZpbmUgUlNTX0hBU0hfTUFTS1xcdFxcdEdFTk1BU0soMTAsIDgpXFxuKyNkZWZpbmUgUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTIDEyOFxcbisjZGVmaW5lIFJYU19SU1NfVURQXFx0XFx0QklUKDI3KVxcbisjZGVmaW5lIFJYU19SU1NfSVBWNFxcdFxcdEJJVCgyOClcXG4rI2RlZmluZSBSWFNfUlNTX0lQVjZcXHRcXHRCSVQoMjkpXFxuKyNkZWZpbmUgUlhTX1JTU19UQ1BcXHRcXHRCSVQoMzApXFxuKyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcXHQoUlhTX1JTU19JUFY0IHwgUlhTX1JTU19JUFY2KVxcbisjZGVmaW5lIFJYU19SU1NfTDRfVFlQRV9NQVNLXFx0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXFxuIFxcbiAjZGVmaW5lIE9DUF9TVERfUEhZX0JBU0VcXHQweGE0MDBcXG4gXFxuQEAgLTQ0MSwxMSArNDY2LDE2IEBAIGVudW0gcnRsODEyNV9yZWdpc3RlcnMge1xcbiBcXHRUeFBvbGxfODEyNVxcdFxcdD0gMHg5MCxcXG4gXFx0TEVEU0VMM1xcdFxcdFxcdD0gMHg5NixcXG4gXFx0TUFDMF9CS1BcXHRcXHQ9IDB4MTllMCxcXG4rXFx0UkRTQVJfUTFfTE9XXFx0XFx0PSAweDQwMDAsXFxuIFxcdFJTU19DVFJMXzgxMjVcXHRcXHQ9IDB4NDUwMCxcXG4gXFx0UV9OVU1fQ1RSTF84MTI1XFx0XFx0PSAweDQ4MDAsXFxuIFxcdEVFRV9UWElETEVfVElNRVJfODEyNVxcdD0gMHg2MDQ4LFxcbitcXHRJTVJfQ0xFQVJfVkVDX01BUF9SRUdcXHQ9IDB4MGQwMCxcXG4rXFx0SVNSX1ZFQ19NQVBfUkVHXFx0XFx0PSAweDBkMDQsXFxuK1xcdElNUl9TRVRfVkVDX01BUF9SRUdcXHQ9IDB4MGQwYyxcXG4gfTtcXG4gXFxuKyNkZWZpbmUgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEdcXHQyOVxcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcXHQweDIzZlxcbiBcXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcXHRCSVQoMjIpXFxuQEAgLTQ3NCw2ICs1MDQsOSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcXG4gXFx0UnhSVU5UXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyMCksXFxuIFxcdFJ4Q1JDXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxOSksXFxuIFxcbitcXHRSWFJVTlRfUlNTXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyMSksXFxuK1xcdFJYQ1JDX1JTU1xcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMjApLFxcbitcXG4gXFx0LyogQ2hpcENtZEJpdHMgKi9cXG4gXFx0U3RvcFJlcVxcdFxcdD0gMHg4MCxcXG4gXFx0Q21kUmVzZXRcXHQ9IDB4MTAsXFxuQEAgLTU3Niw2ICs2MDksMjUgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XFxuIFxcbiBcXHQvKiBtYWdpYyBlbmFibGUgdjIgKi9cXG4gXFx0TWFnaWNQYWNrZXRfdjJcXHQ9ICgxIFxcdTAwM2NcXHUwMDNjIDE2KSxcXHQvKiBXYWtlIHVwIHdoZW4gcmVjZWl2ZXMgYSBNYWdpYyBQYWNrZXQgKi9cXG4rI2RlZmluZVxcdElTUklNUl9MSU5LQ0hHXFx0QklUKDI5KVxcbisjZGVmaW5lXFx0SVNSSU1SX1RPS19RMFxcdEJJVCg4KVxcbisjZGVmaW5lXFx0SVNSSU1SX1JPS19RMFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfQ1RSTFxcdFxcdDB4ZDhcXG4rI2RlZmluZSBSU1NfS0VZX1JFR1xcdFxcdFxcdDB4NDYwMFxcbisjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXFx0XFx0MHg0NzAwXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjRfU1VQUFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFxcdFxcdEJJVCgyKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcXHRcXHRCSVQoNClcXG4rI2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUFxcdEJJVCg1KVxcbisjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY0X1NVUFBcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgUlNTX0NUUkxfVURQX0lQVjZfU1VQUFxcdFxcdEJJVCgxMilcXG4rI2RlZmluZVxcdFJYX1JFU19SU1NcXHRcXHRcXHRCSVQoMjIpXFxuKyNkZWZpbmVcXHRSWF9SVU5UX1JTU1xcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZVxcdFJYX0NSQ19SU1NcXHRcXHRcXHRCSVQoMjApXFxuKyNkZWZpbmUgUlRMX1JYX1FfTlVNX01BU0tcXHRcXHRHRU5NQVNLKDQsIDIpXFxuIH07XFxuIFxcbiBlbnVtIHJ0bF9kZXNjX2JpdCB7XFxuQEAgLTYzMyw2ICs2ODUsMTEgQEAgZW51bSBydGxfcnhfZGVzY19iaXQge1xcbiAjZGVmaW5lIFJ4UHJvdG9JUFxcdChQSUQxIHwgUElEMClcXG4gI2RlZmluZSBSeFByb3RvTWFza1xcdFJ4UHJvdG9JUFxcbiBcXG4rI2RlZmluZVxcdFJYX1VEUFRfREVTQ19SU1NcXHRCSVQoMTkpXFxuKyNkZWZpbmVcXHRSWF9UQ1BUX0RFU0NfUlNTXFx0QklUKDE4KVxcbisjZGVmaW5lXFx0UlhfVURQRl9ERVNDX1JTU1xcdEJJVCgxNikgLyogVURQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbisjZGVmaW5lXFx0UlhfVENQRl9ERVNDX1JTU1xcdEJJVCgxNSkgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbitcXG4gXFx0SVBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNiksIC8qIElQIGNoZWNrc3VtIGZhaWxlZCAqL1xcbiBcXHRVRFBGYWlsXFx0XFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNSksIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi9cXG4gXFx0VENQRmFpbFxcdFxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTQpLCAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXFxuQEAgLTY1NCw5ICs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgUnhEZXNjIHtcXG4tXFx0X19sZTMyIG9wdHMxO1xcbi1cXHRfX2xlMzIgb3B0czI7XFxuLVxcdF9fbGU2NCBhZGRyO1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9ERUZBVUxUICovXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdF9fbGUzMiBvcHRzMTtcXG4rXFx0XFx0XFx0X19sZTMyIG9wdHMyO1xcbitcXHRcXHRcXHRfX2xlNjQgYWRkcjtcXG4rXFx0XFx0fTtcXG4rXFxuK1xcdFxcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dW5pb24ge1xcbitcXHRcXHRcXHRcXHRfX2xlNjQgcnNzX2FkZHI7XFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdFxcdFxcdF9fbGUzMiByc3NfaW5mbztcXG4rXFx0XFx0XFx0XFx0XFx0X19sZTMyIHJzc19yZXN1bHQ7XFxuK1xcdFxcdFxcdFxcdH0gcnNzX2R3b3JkO1xcbitcXHRcXHRcXHR9O1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMyO1xcbitcXHRcXHRcXHRfX2xlMzIgcnNzX29wdHMxO1xcbitcXHRcXHR9O1xcbitcXHR9O1xcbiB9O1xcbiBcXG4gc3RydWN0IHJpbmdfaW5mbyB7XFxuQEAgLTcyOCwyNyArODAzLDU3IEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSByeF9kZXNjX3R5cGUge1xcbitcXHRSWF9ERVNDX1RZUEVfREVGQVVMVCxcXG4rXFx0UlhfREVTQ19UWVBFX1JTUyxcXG4rfTtcXG4rXFxuK3N0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbitcXHR1MzIgY3VyX3J4O1xcbitcXHR1MzIgZGlydHlfcng7XFxuK1xcdHN0cnVjdCBSeERlc2MgKnJ4X2Rlc2NfYXJyYXk7XFxuK1xcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XFxuK1xcdGRtYV9hZGRyX3QgcnhfcGh5X2FkZHI7XFxuK1xcdHN0cnVjdCBwYWdlICpyeF9kYXRhYnVmZltOVU1fUlhfREVTQ107XFxuK1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1NjQgcnhfZXJyb3JzO1xcbitcXHRcXHR1NjQgcnhfZHJvcHBlZDtcXG4rXFx0XFx0dTY0IHJ4X2xlbmd0aF9lcnJvcnM7XFxuK1xcdFxcdHU2NCByeF9jcmNfZXJyb3JzO1xcbitcXHRcXHR1NjQgbXVsdGljYXN0O1xcbitcXHRcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XFxuK1xcdH0gc3RhdHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XFxuK1xcdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XFxuK1xcdHU4IHJzc19pbmRpcl90YmxbUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTXTtcXG4rXFx0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XFx0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbi1cXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcXG4gXFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcXG4gXFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcXG4tXFx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xcbiBcXHR1MzIgZGlydHlfdHg7XFxuIFxcdHN0cnVjdCBUeERlc2MgKlR4RGVzY0FycmF5O1xcdC8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqL1xcbi1cXHRzdHJ1Y3QgUnhEZXNjICpSeERlc2NBcnJheTtcXHQvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi9cXG4gXFx0ZG1hX2FkZHJfdCBUeFBoeUFkZHI7XFxuLVxcdGRtYV9hZGRyX3QgUnhQaHlBZGRyO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1xcdC8qIFJ4IGRhdGEgYnVmZmVycyAqL1xcbiBcXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XFx0LyogVHggZGF0YSBidWZmZXJzICovXFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyeF9yaW5nO1xcbitcXHR1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzO1xcbiBcXHR1MTYgY3BfY21kO1xcbiBcXHR1MTYgdHhfbHBpX3RpbWVyO1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuLVxcdGludCBpcnE7XFxuK1xcdHVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcXG4rXFx0dW5zaWduZWQgaW50IGlycV9udmVjcztcXG4rXFx0ZW51bSByeF9kZXNjX3R5cGUgaW5pdF9yeF9kZXNjX3R5cGU7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFxuIFxcdHN0cnVjdCB7XFxuQEAgLTE1NzgsNiArMTY4MywxMSBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHJ0bF9od19zdXBwb3J0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRyZXR1cm4gdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODA7XFxuK31cXG4rXFxuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG5AQCAtMTY0NCwyNiArMTc1NCwzOCBAQCBzdGF0aWMgdTMyIHJ0bF9nZXRfZXZlbnRzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIElTUl9WRUNfTUFQX1JFRywgYml0cyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSW50clN0YXR1c184MTI1LCBiaXRzKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0UlRMX1cxNih0cCwgSW50clN0YXR1cywgYml0cyk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpXFxuLVxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJTVJfQ0xFQVJfVkVDX01BUF9SRUcsIDB4ZmZmZmZmZmYpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRSVExfVzE2KHRwLCBJbnRyTWFzaywgMCk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG4tXFx0XFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4tXFx0ZWxzZVxcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgSU1SX1NFVF9WRUNfTUFQX1JFRywgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCB0cC1cXHUwMDNlaXJxX21hc2spO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRSVExfVzE2KHRwLCBJbnRyTWFzaywgdHAtXFx1MDAzZWlycV9tYXNrKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuQEAgLTE4NjcsOSArMTk4OSwyMCBAQCBzdGF0aWMgaW5saW5lIHUzMiBydGw4MTY5X3R4X3ZsYW5fdGFnKHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFR4VmxhblRhZyB8IHN3YWIxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpIDogMHgwMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF92bGFuX3RhZyhzdHJ1Y3QgUnhEZXNjICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgUnhEZXNjICpkZXNjLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHUzMiBvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMyKTtcXG4rXFx0dTMyIG9wdHMyO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJzc19vcHRzMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZW9wdHMyKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChvcHRzMiBcXHUwMDI2IFJ4VmxhblRhZylcXG4gXFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSwgc3dhYjE2KG9wdHMyIFxcdTAwMjYgMHhmZmZmKSk7XFxuQEAgLTI0MTYsMzQgKzI1NDksNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbi1cXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcXG4tXFx0LmdldF9kcnZpbmZvXFx0XFx0PSBydGw4MTY5X2dldF9kcnZpbmZvLFxcbi1cXHQuZ2V0X3JlZ3NfbGVuXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcXG4tXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbi1cXHQuZ2V0X2NvYWxlc2NlXFx0XFx0PSBydGxfZ2V0X2NvYWxlc2NlLFxcbi1cXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSBydGxfc2V0X2NvYWxlc2NlLFxcbi1cXHQuZ2V0X3JlZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXFxuLVxcdC5nZXRfd29sXFx0XFx0PSBydGw4MTY5X2dldF93b2wsXFxuLVxcdC5zZXRfd29sXFx0XFx0PSBydGw4MTY5X3NldF93b2wsXFxuLVxcdC5nZXRfc3RyaW5nc1xcdFxcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcXG4tXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxcbi1cXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXFxuLVxcdC5nZXRfZWVlXFx0XFx0PSBydGw4MTY5X2dldF9lZWUsXFxuLVxcdC5zZXRfZWVlXFx0XFx0PSBydGw4MTY5X3NldF9lZWUsXFxuLVxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcXG4tXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXFxuLVxcdC5nZXRfcmluZ3BhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXFxuLVxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxcbi1cXHQuZ2V0X3BhdXNlcGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0sXFxuLVxcdC5zZXRfcGF1c2VwYXJhbVxcdFxcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcXG4tXFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxcbi1cXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcXG4tfTtcXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcXG4ge1xcbiBcXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXFxuQEAgLTI2MTksOSArMjcyNCwyNiBAQCBzdGF0aWMgdm9pZCBydGxfaW5pdF9yeGNmZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0bWVtc2V0KHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHR0cC1cXHUwMDNlZGlydHlfdHggPSB0cC1cXHUwMDNlY3VyX3R4ID0gdHAtXFx1MDAzZWN1cl9yeCA9IDA7XFxuK1xcdHRwLVxcdTAwM2VkaXJ0eV90eCA9IDA7XFxuK1xcdHRwLVxcdTAwM2VjdXJfdHggPSAwO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdHJpbmctXFx1MDAzZWRpcnR5X3J4ID0gMDtcXG4rXFx0XFx0cmluZy1cXHUwMDNlY3VyX3J4ID0gMDtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbkBAIC0yNjgwLDYgKzI4MDIsMjkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxcbitcXHRcXHR0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19pbmRpcl90YmxbaV0gPSBldGh0b29sX3J4ZmhfaW5kaXJfZGVmYXVsdChpLCB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzKTtcXG4rXFxuK1xcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vyc3Nfa2V5LCBSVExfUlNTX0tFWV9TSVpFKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX3NldHVwX3J4X3BhcmFtcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR0cC1cXHUwMDNlbnVtX3J4X3JpbmdzID0gMTtcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG4rXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzgwOlxcbitcXHRcXHR0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfTUFYX1JYX1FVRVVFUztcXG4rXFx0XFx0dHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzID0gUlRMX01BWF9JTkRJUkVDVElPTl9UQUJMRV9FTlRSSUVTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0dHAtXFx1MDAzZWh3X3N1cHBfbnVtX3J4X3F1ZXVlcyA9IFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHR0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPSBSWF9ERVNDX1RZUEVfREVGQVVMVDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RydWN0IHJ0bF9mdyAqcnRsX2Z3O1xcbkBAIC0yODAyLDggKzI5NDcsNjIgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tYXhfc2l6ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1cxNih0cCwgUnhNYXhTaXplLCBSODE2OV9SWF9CVUZfU0laRSArIDEpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3Jzc19rZXkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggKnJzc19rZXkgPSB0cC1cXHUwMDNlcnNzX2RhdGEtXFx1MDAzZXJzc19rZXk7XFxuK1xcdGNvbnN0IHUxNiByc3Nfa2V5X3JlZyA9IFJTU19LRVlfUkVHO1xcbitcXG4rXFx0LyogV3JpdGUgcmVkaXJlY3Rpb24gdGFibGUgdG8gSFcgKi9cXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBSVExfUlNTX0tFWV9TSVpFOyBpICs9IHNpemVvZih1MzIpKVxcbitcXHRcXHRSVExfVzMyKHRwLCByc3Nfa2V5X3JlZyArIGksIGdldF91bmFsaWduZWRfbGUzMihyc3Nfa2V5ICsgaSkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3N0b3JlX3JldGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggKmluZGlyX3RibCA9IHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlcnNzX2luZGlyX3RibDtcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZXJzc19kYXRhLVxcdTAwM2Vod19zdXBwX2luZGlyX3RibF9lbnRyaWVzOyBpICs9IDQpIHtcXG4rXFx0XFx0dTMyIHJldGEgPSBnZXRfdW5hbGlnbmVkX2xlMzIoXFx1MDAyNmluZGlyX3RibFtpXSk7XFxuK1xcbitcXHRcXHRSVExfVzMyKHRwLCBSU1NfSU5ESVJFQ1RJT05fVEJMX1JFRyArIGksIHJldGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHR1MzIgcnNzX2N0cmw7XFxuK1xcbitcXHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXFx1MDAzZW51bV9yeF9yaW5ncykpO1xcbitcXG4rXFx0LyogUGVyZm9ybSBoYXNoIG9uIHRoZXNlIHBhY2tldCB0eXBlcyAqL1xcbitcXHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8XFxuK1xcdFxcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxcbitcXHRcXHQgICAgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUCB8XFxuK1xcdFxcdCAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcXG4rXFx0XFx0ICAgIFJTU19DVFJMX1VEUF9JUFY0X1NVUFAgfFxcbitcXHRcXHQgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDtcXG4rXFxuK1xcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcXG4rXFx0XFx0XFx0ICAgICAgIGlsb2cyKHRwLVxcdTAwM2Vyc3NfZGF0YS1cXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xcbitcXG4rXFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yZXRhKHRwKTtcXG4rXFx0cnRsODE2OV9zdG9yZV9yc3Nfa2V5KHRwKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdO1xcbitcXG4gXFx0LypcXG4gXFx0ICogTWFnaWMgc3BlbGw6IHNvbWUgaW9wM3h4IEFSTSBib2FyZCBuZWVkcyB0aGUgVHhEZXNjQWRkckhpZ2hcXG4gXFx0ICogcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBiZWZvcmUgVHhEZXNjQWRkckxvdyB0byB3b3JrLlxcbkBAIC0yODExLDggKzMwMTAsMTggQEAgc3RhdGljIHZvaWQgcnRsX3NldF9yeF90eF9kZXNjX3JlZ2lzdGVycyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICovXFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cXHUwMDNlVHhQaHlBZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuIFxcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckxvdywgKCh1NjQpIHRwLVxcdTAwM2VUeFBoeUFkZHIpIFxcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XFxuLVxcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAzZVxcdTAwM2UgMzIpO1xcbi1cXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LCAoKHU2NCkgdHAtXFx1MDAzZVJ4UGh5QWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDNlXFx1MDAzZSAzMik7XFxuK1xcdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJMb3csXFxuK1xcdFxcdCgodTY0KXJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKSBcXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDE7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyArIChpIC0gMSkgKiA4O1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXG4rXFx0XFx0UlRMX1czMih0cCwgcmRzYXJfcmVnICsgNCwgKCh1NjQpcmluZy1cXHUwMDNlcnhfcGh5X2FkZHIgXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0XFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxcbitcXHRcXHRcXHQoKHU2NClyaW5nLVxcdTAwM2VyeF9waHlfYWRkcikgXFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuQEAgLTM4NTgsNiArNDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcXG4gXFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhlMDBlKSBcXHUwMDI2IEJJVCgxMyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHUxNiByeF9xX251bTtcXG4rXFx0dTE2IHFfY3RybDtcXG4rXFxuK1xcdHJ4X3FfbnVtID0gaWxvZzIodHAtXFx1MDAzZW51bV9yeF9yaW5ncyk7XFxuK1xcdHFfY3RybCA9IFJUTF9SMTYodHAsIFFfTlVNX0NUUkxfODEyNSk7XFxuK1xcdHFfY3RybCBcXHUwMDI2PSB+UlRMX1JYX1FfTlVNX01BU0s7XFxuK1xcdHFfY3RybCB8PSBGSUVMRF9QUkVQKFJUTF9SWF9RX05VTV9NQVNLLCByeF9xX251bSk7XFxuK1xcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dTggdG1wO1xcbitcXG4rXFx0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcXG4rXFx0dG1wIHw9IElOVF9DRkcwX0VOQUJMRV84MTI1O1xcbitcXHRSVExfVzgodHAsIElOVF9DRkcwXzgxMjUsIHRtcCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTI1X2NvbW1vbihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xcbkBAIC0zODY2LDYgKzQwOTYsOSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEyNV9jb21tb24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMzIodHAsIFJTU19DVFJMXzgxMjUsIDApO1xcbiBcXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xcbiBcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKVxcbitcXHRcXHRydGw4MTY5X2h3X2VuYWJsZV92ZWNfbWFwcGluZyh0cCk7XFxuK1xcbiBcXHQvKiBkaXNhYmxlIFVQUyAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDBhLCAweDAwMTAsIDB4MDAwMCk7XFxuIFxcbkBAIC0zODg1LDYgKzQxMTgsMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQgICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuIFxcdFxcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcXHUwMDI2IH4weDAyKTtcXG4gXFxuK1xcdC8qIGVuYWJsZSByeCBkZXNjcmlwdG9yIHR5cGUgdjQgYW5kIHNldCBxdWV1ZSBudW0gZm9yIHJzcyAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0cnRsODEyNV9zZXRfcnhfcV9udW0odHApO1xcbitcXHRcXHRSVExfVzgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCxcXG4rXFx0XFx0ICAgICAgIFJUTF9SOCh0cCwgUlRMX0RFU0NfVFlQRV9DVFJMKSB8IFJUTF9ERVNDX1RZUEVfUlNTKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlNjE0LCAweDBmMDAsIDB4MGYwMCk7XFxuIFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbkBAIC00MTIxLDYgKzQzNjEsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZSh0cCwgdHJ1ZSk7XFxuIFxcdHJ0bF9zZXRfcnhfbWF4X3NpemUodHApO1xcbiBcXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpXFxuK1xcdFxcdFxcdHJ0bF9zZXRfcnNzX2NvbmZpZyh0cCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XFxuK1xcdH1cXG4gXFx0cnRsX2xvY2tfY29uZmlnX3JlZ3ModHApO1xcbiBcXG4gXFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XFxuQEAgLTQxNDgsMTkgKzQzOTQsMzIgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgUnhEZXNjICpkZXNjKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfdG9fYXNpYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4ge1xcbi1cXHR1MzIgZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0dTMyIGVvcjtcXG4gXFxuLVxcdGRlc2MtXFx1MDAzZW9wdHMyID0gMDtcXG4tXFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cXG4tXFx0ZG1hX3dtYigpO1xcbi1cXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3Nfb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX29wdHMyID0gY3B1X3RvX2xlMzIoMCk7XFxuK1xcdFxcdC8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIHJlbGVhc2luZyBkZXNjcmlwdG9yICovXFxuK1xcdFxcdGRtYV93bWIoKTtcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2Vyc3Nfb3B0czEsIGNwdV90b19sZTMyKERlc2NPd24gfCBlb3IgfCBSODE2OV9SWF9CVUZfU0laRSkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZW9yID0gbGUzMl90b19jcHUoZGVzYy1cXHUwMDNlb3B0czEpIFxcdTAwMjYgUmluZ0VuZDtcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlb3B0czIgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cXG4rXFx0XFx0ZG1hX3dtYigpO1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZW9wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCB1bnNpZ25lZCBpbnQgaW5kZXgpXFxuIHtcXG4rXFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBpbmRleDtcXG4gXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuIFxcdGludCBub2RlID0gZGV2X3RvX25vZGUoZCk7XFxuIFxcdGRtYV9hZGRyX3QgbWFwcGluZztcXG5AQCAtNDE3Nyw1NiArNDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHR9XFxuIFxcbi1cXHRkZXNjLVxcdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuLVxcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xcbitcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2luZGV4XSA9IG1hcHBpbmc7XFxuK1xcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0ZGVzYy1cXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkZXNjLVxcdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XFxuK1xcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcXG4gXFxuIFxcdHJldHVybiBkYXRhO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0MgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5VTV9SWF9ERVNDIFxcdTAwMjZcXHUwMDI2IHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldOyBpKyspIHtcXG4gXFx0XFx0ZG1hX3VubWFwX3BhZ2UodHBfdG9fZGV2KHRwKSxcXG4tXFx0XFx0XFx0ICAgICAgIGxlNjRfdG9fY3B1KHRwLVxcdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyKSxcXG4rXFx0XFx0XFx0ICAgICAgIHJpbmctXFx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0sXFxuIFxcdFxcdFxcdCAgICAgICBSODE2OV9SWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG4tXFx0XFx0X19mcmVlX3BhZ2VzKHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSwgZ2V0X29yZGVyKFI4MTY5X1JYX0JVRl9TSVpFKSk7XFxuLVxcdFxcdHRwLVxcdTAwM2VSeF9kYXRhYnVmZltpXSA9IE5VTEw7XFxuLVxcdFxcdHRwLVxcdTAwM2VSeERlc2NBcnJheVtpXS5hZGRyID0gMDtcXG4tXFx0XFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5W2ldLm9wdHMxID0gMDtcXG4rXFx0XFx0X19mcmVlX3BhZ2VzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcXG4rXFx0XFx0cmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBOVUxMO1xcbitcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2ldID0gMDtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX2FkZHIgPSAwO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19vcHRzMSA9IDA7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XFxuK1xcdFxcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ub3B0czEgPSAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdGRlc2MtXFx1MDAzZXJzc19vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGRlc2MtXFx1MDAzZW9wdHMxIHw9IGNwdV90b19sZTMyKFJpbmdFbmQpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bDgxNjlfcnhfZmlsbChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIGludCBydGw4MTY5X3J4X2ZpbGwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgcGFnZSAqZGF0YTtcXG4gXFxuLVxcdFxcdGRhdGEgPSBydGw4MTY5X2FsbG9jX3J4X2RhdGEodHAsIHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGkpO1xcbitcXHRcXHRkYXRhID0gcnRsODE2OV9hbGxvY19yeF9kYXRhKHRwLCByaW5nLCBpKTtcXG4gXFx0XFx0aWYgKCFkYXRhKSB7XFxuLVxcdFxcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbitcXHRcXHRcXHRydGw4MTY5X3J4X2NsZWFyKHRwLCByaW5nKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdH1cXG4tXFx0XFx0dHAtXFx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcXG4rXFx0XFx0cmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmZbaV0gPSBkYXRhO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xcbi1cXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcXG4rXFx0cnRsODE2OV9tYXJrX2FzX2xhc3RfZGVzY3JpcHRvcih0cCwgXFx1MDAyNnJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXlbTlVNX1JYX0RFU0MgLSAxXSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2FsbG9jX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcdFxcdHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFI4MTY5X1JYX1JJTkdfQllURVMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cmluZy1cXHUwMDNlcnhfcGh5X2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9mcmVlX3J4X2Rlc2Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZztcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcdFxcdGlmIChyaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5KSB7XFxuK1xcdFxcdFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4rXFx0XFx0XFx0XFx0XFx0ICByaW5nLVxcdTAwM2VyeF9kZXNjX2FycmF5LFxcbitcXHRcXHRcXHRcXHRcXHQgIHJpbmctXFx1MDAzZXJ4X3BoeV9hZGRyKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbiBcXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcXG4rXFx0cnRsODE2OV9yeF9kZXNjX2luaXQodHApO1xcbiBcXG4gXFx0bWVtc2V0KHRwLVxcdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cXHUwMDNldHhfc2tiKSk7XFxuLVxcdG1lbXNldCh0cC1cXHUwMDNlUnhfZGF0YWJ1ZmYsIDAsIHNpemVvZih0cC1cXHUwMDNlUnhfZGF0YWJ1ZmYpKTtcXG4gXFxuLVxcdHJldHVybiBydGw4MTY5X3J4X2ZpbGwodHApO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV07XFxuK1xcbitcXHRcXHRtZW1zZXQocmluZy1cXHUwMDNlcnhfZGF0YWJ1ZmYsIDAsIHNpemVvZihyaW5nLVxcdTAwM2VyeF9kYXRhYnVmZikpO1xcbitcXHRcXHRyZXQgPSBydGw4MTY5X3J4X2ZpbGwodHAsIHJpbmcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfY2xlYXI7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfY2xlYXI6XFxuK1xcdHdoaWxlICgtLWkgXFx1MDAzZT0gMClcXG4rXFx0XFx0cnRsODE2OV9yeF9jbGVhcih0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV91bm1hcF90eF9za2Ioc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHVuc2lnbmVkIGludCBlbnRyeSlcXG5AQCAtNDI2Niw5ICs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdG5ldGRldl9yZXNldF9xdWV1ZSh0cC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aW50IG5hcGlfbnVtID0gbWluKHRwLVxcdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBuYXBpX251bTsgaSsrKVxcbitcXHRcXHRuYXBpX2Rpc2FibGUoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X25hcGlfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCBuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbmFwaV9udW07IGkrKylcXG4rXFx0XFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFudXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcXG4gXFxuIFxcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cXG4gXFx0c3luY2hyb25pemVfbmV0KCk7XFxuQEAgLTQzMDMsMTggKzQ2NTAsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX3Jlc2V0X3dvcmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRpbnQgaTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXTtcXG4rXFxuK1xcdFxcdGZvciAoaW50IGogPSAwOyBqIFxcdTAwM2MgTlVNX1JYX0RFU0M7IGorKykge1xcbitcXHRcXHRcXHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cXHUwMDNlcnhfZGVzY19waHlfYWRkcltqXTtcXG4rXFxuK1xcdFxcdFxcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0XFx0XFx0cmluZy1cXHUwMDNlcnhfZGVzY19hcnJheVtqXS5yc3NfYWRkciA9IGNwdV90b19sZTY0KHBoeV9hZGRyKTtcXG4rXFx0XFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAsIHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuIFxcdG5ldGlmX3N0b3BfcXVldWUodHAtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRydGw4MTY5X2NsZWFudXAodHApO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5VTV9SWF9ERVNDOyBpKyspXFxuLVxcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGkpO1xcbitcXHRydGw4MTY5X3J4X2Rlc2NfcmVzZXQodHApO1xcbiBcXG4tXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4rXFx0cnRsODE2OV9uYXBpX2VuYWJsZSh0cCk7XFxuIFxcdHJ0bF9od19zdGFydCh0cCk7XFxuIH1cXG4gXFxuQEAgLTQ3NTgsMzAgKzUxMTcsMTExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHJ0bDgxNjlfZnJhZ21lbnRlZF9mcmFtZSh1MzIgc3RhdHVzKVxcbiBcXHRyZXR1cm4gKHN0YXR1cyBcXHUwMDI2IChGaXJzdEZyYWcgfCBMYXN0RnJhZykpICE9IChGaXJzdEZyYWcgfCBMYXN0RnJhZyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTY5X3J4X2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9wdHMxKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODE2OV9yeF9oYXNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgUnhEZXNjICpkZXNjLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHUzMiByc3NfaGVhZGVyX2luZm87XFxuK1xcdHUzMiBoYXNoX3ZhbDtcXG4rXFxuK1xcdGlmICghKHRwLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9SWEhBU0gpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyc3NfaGVhZGVyX2luZm8gPSBsZTMyX3RvX2NwdShkZXNjLVxcdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xcbitcXG4rXFx0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFxcdTAwMjYgUlhTX1JTU19MM19UWVBFX01BU0spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRoYXNoX3ZhbCA9IGxlMzJfdG9fY3B1KGRlc2MtXFx1MDAzZXJzc19kd29yZC5yc3NfcmVzdWx0KTtcXG4rXFxuK1xcdHNrYl9zZXRfaGFzaChza2IsIGhhc2hfdmFsLFxcbitcXHRcXHQgICAgIChSWFNfUlNTX0w0X1RZUEVfTUFTSyBcXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xcbitcXHRcXHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHMxKVxcbiB7XFxuLVxcdHUzMiBzdGF0dXMgPSBvcHRzMSBcXHUwMDI2IChSeFByb3RvTWFzayB8IFJ4Q1NGYWlsTWFzayk7XFxuK1xcdGJvb2wgY3N1bV9vayA9IGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcXG4rXFx0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxcbitcXHRcXHRpZiAoKChvcHRzMSBcXHUwMDI2IFJYX1RDUFRfREVTQ19SU1MpIFxcdTAwMjZcXHUwMDI2ICEob3B0czEgXFx1MDAyNiBSWF9UQ1BGX0RFU0NfUlNTKSkgfHxcXG4rXFx0XFx0ICAgICgob3B0czEgXFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcXHUwMDI2XFx1MDAyNiAhKG9wdHMxIFxcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxcbitcXHRcXHRcXHRjc3VtX29rID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6IHtcXG4rXFx0XFx0dTMyIHN0YXR1cyA9IG9wdHMxIFxcdTAwMjYgKFJ4UHJvdG9NYXNrIHwgUnhDU0ZhaWxNYXNrKTtcXG4rXFxuK1xcdFxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0XFx0XFx0Y3N1bV9vayA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChzdGF0dXMgPT0gUnhQcm90b1RDUCB8fCBzdGF0dXMgPT0gUnhQcm90b1VEUClcXG4rXFx0aWYgKGNzdW1fb2spXFxuIFxcdFxcdHNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxcbitzdGF0aWMgX19sZTMyIHJ0bDgxNjlfcnhfZGVzY19vcHRzMShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgc3RydWN0IFJ4RGVzYyAqZGVzYylcXG4re1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xcbitcXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XFxuK1xcdFxcdHJldHVybiBSRUFEX09OQ0UoZGVzYy1cXHUwMDNlcnNzX29wdHMxKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVxcdTAwM2VvcHRzMSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgcnRsODE2OV9jaGVja19yeF9kZXNjX2Vycm9yKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbitcXHRcXHRcXHRcXHRcXHR1MzIgc3RhdHVzKVxcbit7XFxuK1xcdHN3aXRjaCAodHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XFxuK1xcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHN0YXR1cyBcXHUwMDI2IFJYX1JFU19SU1MpKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJYX1JVTlRfUlNTKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBSWF9DUkNfUlNTKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRpZiAodW5saWtlbHkoc3RhdHVzIFxcdTAwMjYgUnhSRVMpKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXFxuK1xcdFxcdFxcdFxcdHJpbmctXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4rXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJ4Q1JDKVxcbitcXHRcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0ICBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nLCBpbnQgYnVkZ2V0LFxcbitcXHRcXHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4tXFx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFxcdTAwM2MgYnVkZ2V0OyBjb3VudCsrLCB0cC1cXHUwMDNlY3VyX3J4KyspIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHBrdF9zaXplLCBlbnRyeSA9IHRwLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4tXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVxcdTAwM2VSeERlc2NBcnJheSArIGVudHJ5O1xcbitcXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHJpbmctXFx1MDAzZWN1cl9yeCsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSByaW5nLVxcdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcXG4rXFx0XFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXFx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBlbnRyeTtcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0XFx0Y29uc3Qgdm9pZCAqcnhfYnVmO1xcbiBcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdFxcdHUzMiBzdGF0dXM7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlb3B0czEpKTtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XFxuIFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiBEZXNjT3duKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuQEAgLTQ3OTEsMjAgKzUyMzEsMjQgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGRtYV9ybWIoKTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShzdGF0dXMgXFx1MDAyNiBSeFJFUykpIHtcXG4rXFx0XFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihyaW5nLCB0cCwgc3RhdHVzKSkge1xcbiBcXHRcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbiBcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihkZXYsIFxcXCJSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXR1cyk7XFxuLVxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XFxuLVxcdFxcdFxcdGlmIChzdGF0dXMgXFx1MDAyNiAoUnhSV1QgfCBSeFJVTlQpKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcXG4tXFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IFJ4Q1JDKVxcbi1cXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4gXFxuIFxcdFxcdFxcdGlmICghKGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcXG4gXFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XFxuLVxcdFxcdFxcdGVsc2UgaWYgKHN0YXR1cyBcXHUwMDI2IFJ4UldUIHx8ICEoc3RhdHVzIFxcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfREVGQVVMVCkge1xcbitcXHRcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXFx1MDAyNiAoUnhSVU5UIHwgUnhDUkMpKSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGlmICghKHN0YXR1cyBcXHUwMDI2IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBrdF9zaXplID0gc3RhdHVzIFxcdTAwMjYgR0VOTUFTSygxMywgMCk7XFxuQEAgLTQ4MTUsMTkgKzUyNTksMjMgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFx0XFx0ICogVGhleSBhcmUgc2VlbiBhcyBhIHN5bXB0b20gb2Ygb3Zlci1tdHUgc2l6ZWQgZnJhbWVzLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHVubGlrZWx5KHJ0bDgxNjlfZnJhZ21lbnRlZF9mcmFtZShzdGF0dXMpKSkge1xcbi1cXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcXG4tXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuIFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRza2IgPSBuYXBpX2FsbG9jX3NrYihcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHBrdF9zaXplKTtcXG4rXFx0XFx0c2tiID0gbmFwaV9hbGxvY19za2IobmFwaSwgcGt0X3NpemUpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXNrYikpIHtcXG4tXFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0YWRkciA9IGxlNjRfdG9fY3B1KGRlc2MtXFx1MDAzZWFkZHIpO1xcbi1cXHRcXHRyeF9idWYgPSBwYWdlX2FkZHJlc3ModHAtXFx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuK1xcdFxcdGFkZHIgPSByaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XTtcXG4rXFx0XFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHJpbmctXFx1MDAzZXJ4X2RhdGFidWZmW2VudHJ5XSk7XFxuIFxcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFx0XFx0cHJlZmV0Y2gocnhfYnVmKTtcXG5AQCAtNDgzNiwxOSArNTI4NCwyNiBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxcbiBcXHRcXHRza2ItXFx1MDAzZWxlbiA9IHBrdF9zaXplO1xcbiBcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xcbitcXHRcXHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcXG4gXFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcXG4gXFxuLVxcdFxcdHJ0bDgxNjlfcnhfdmxhbl90YWcoZGVzYywgc2tiKTtcXG4rXFx0XFx0cnRsODE2OV9yeF92bGFuX3RhZyh0cCwgZGVzYywgc2tiKTtcXG4gXFxuLVxcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpXFxuLVxcdFxcdFxcdGRldi1cXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XFxuK1xcdFxcdGlmIChza2ItXFx1MDAzZXBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpIHtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmluZy1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2VzdGF0cy5tdWx0aWNhc3QrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShcXHUwMDI2dHAtXFx1MDAzZW5hcGksIHNrYik7XFxuK1xcdFxcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcXG4gXFxuIFxcdFxcdGRldl9zd19uZXRzdGF0c19yeF9hZGQoZGV2LCBwa3Rfc2l6ZSk7XFxuIHJlbGVhc2VfZGVzY3JpcHRvcjpcXG4tXFx0XFx0cnRsODE2OV9tYXJrX3RvX2FzaWMoZGVzYyk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcXG4rXFx0XFx0XFx0ZGVzYy1cXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChyaW5nLVxcdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7XFxuK1xcdFxcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGNvdW50O1xcbkBAIC00ODU2LDggKzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcXG4gXFxuIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuIHtcXG4tXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XFxuLVxcdHUzMiBzdGF0dXMgPSBydGxfZ2V0X2V2ZW50cyh0cCk7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XFxuK1xcdHUzMiBzdGF0dXM7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KG5hcGktXFx1MDAzZWRldik7XFxuK1xcdHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcXG4gXFxuIFxcdGlmICgoc3RhdHVzIFxcdTAwMjYgMHhmZmZmKSA9PSAweGZmZmYgfHwgIShzdGF0dXMgXFx1MDAyNiB0cC1cXHUwMDNlaXJxX21hc2spKVxcbiBcXHRcXHRyZXR1cm4gSVJRX05PTkU7XFxuQEAgLTQ4NzMsMTMgKzUzMzIsMTE0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuIFxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG4gXFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcXG4tXFx0bmFwaV9zY2hlZHVsZShcXHUwMDI2dHAtXFx1MDAzZW5hcGkpO1xcbitcXHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xcbiBvdXQ6XFxuIFxcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfb25lX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGkpXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGlmIChpIFxcdTAwM2MgUjgxNjlfTUFYX1FVRVVFUylcXG4rXFx0XFx0XFx0cGNpX2ZyZWVfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLCBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdFxcdGVsc2UgaWYgKGkgPT0gTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpXFxuK1xcdFxcdFxcdHBjaV9mcmVlX2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSwgdHApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwY2lfZnJlZV9pcnEodHAtXFx1MDAzZXBjaV9kZXYsIGksIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZWlycV9udmVjczsgaSsrKVxcbitcXHRcXHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG1lc3NhZ2VfaWQpXFxuK3tcXG4rXFx0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXFxuK3tcXG4rXFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgbWVzc2FnZV9pZClcXG4re1xcbitcXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IG1lc3NhZ2VfaWQ7XFxuK1xcbitcXHR0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaTtcXG4rXFxuK1xcdHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeCh0cCwgbWVzc2FnZV9pZCk7XFxuK1xcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcXG4rXFxuK1xcdG5hcGlfc2NoZWR1bGUobmFwaSk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XFxuK1xcbitcXHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xcbitcXHRwaHlfbWFjX2ludGVycnVwdCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcmVxdWVzdF9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTtcXG4rXFx0aW50IGksIHJjO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRwLVxcdTAwM2VpcnFfbnZlY3M7IGkrKykge1xcbitcXHRcXHRuYXBpID0gXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV07XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXFxuK1xcdFxcdFxcdFxcdHJjID0gcGNpX3JlcXVlc3RfaXJxKHRwLVxcdTAwM2VwY2lfZGV2LCBpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0X21zaXgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCwgbmFwaSwgXFxcIiVzLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZW5hbWUsIGkpO1xcbitcXHRcXHRcXHRlbHNlIGlmIChpID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKVxcbitcXHRcXHRcXHRcXHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBydGw4MTY5X2ludGVycnVwdF9vdGhlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCB0cCwgXFxcIiVzLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZW5hbWUsIGkpO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cXHUwMDNlcGNpX2RldiwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBydGw4MTY5X2ludGVycnVwdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMLCBuYXBpLCBcXFwiJXMtJWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNlbmFtZSwgaSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0Z290byBmcmVlX2lycTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfaXJxOlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApXFxuK1xcdFxcdHJ0bDgxNjlfZnJlZV9vbmVfaXJxKHRwLCBpKTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPVxcbkBAIC00OTE0LDEzICs1NDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4ge1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBuYXBpKTtcXG4tXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVxcdTAwM2VkZXY7XFxuLVxcdGludCB3b3JrX2RvbmU7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmFwaS1cXHUwMDNlZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXFx1MDAzZWRldjtcXG4rXFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuIFxcbiBcXHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcXG4gXFxuLVxcdHdvcmtfZG9uZSA9IHJ0bF9yeChkZXYsIHRwLCBidWRnZXQpO1xcbitcXHQvKiBydGw4MTY5X3BvbGwoKSBpcyB1c2VkIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBSWCByaW5nLiAqL1xcbitcXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nWzBdLCBidWRnZXQsIG5hcGkpO1xcbiBcXG4gXFx0aWYgKHdvcmtfZG9uZSBcXHUwMDNjIGJ1ZGdldCBcXHUwMDI2XFx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcXG4gXFx0XFx0cnRsX2lycV9lbmFibGUodHApO1xcbkBAIC01MDM1LDcgKzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XFxuLVxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuK1xcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xcbiBcXHRlbmFibGVfd29yayhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmspO1xcbiBcXHRydGxfcmVzZXRfd29yayh0cCk7XFxuIFxcbkBAIC01MDUxLDE4ICs1NjEyLDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xcbiBcXHRydGw4MTY5X2Rvd24odHApO1xcbi1cXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIFxcbi1cXHRmcmVlX2lycSh0cC1cXHUwMDNlaXJxLCB0cCk7XFxuK1xcdHJ0bDgxNjlfZnJlZV9pcnEodHApO1xcbiBcXG4gXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbi1cXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlUnhEZXNjQXJyYXksXFxuLVxcdFxcdFxcdCAgdHAtXFx1MDAzZVJ4UGh5QWRkcik7XFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VUeERlc2NBcnJheSxcXG4gXFx0XFx0XFx0ICB0cC1cXHUwMDNlVHhQaHlBZGRyKTtcXG4gXFx0dHAtXFx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXG4gXFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTUwNzMsOCArNTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRpbnQgbmFwaV9udW07XFxuK1xcbitcXHRuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4gXFxuLVxcdHJ0bDgxNjlfaW50ZXJydXB0KHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBuYXBpX251bTsgaSsrKSB7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0cnRsODE2OV9pbnRlcnJ1cHRfbXNpeChwY2lfaXJxX3ZlY3Rvcih0cC1cXHUwMDNlcGNpX2RldiwgaSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXFx1MDAzZXBjaV9kZXYsIGkpLFxcbitcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcXG4rXFx0fVxcbiB9XFxuICNlbmRpZlxcbiBcXG5AQCAtNTA4Miw3ICs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4tXFx0dW5zaWduZWQgbG9uZyBpcnFmbGFncztcXG4gXFx0aW50IHJldHZhbCA9IC1FTk9NRU07XFxuIFxcbiBcXHRwbV9ydW50aW1lX2dldF9zeW5jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbkBAIC01MDk2LDEwICs1NjY1LDggQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRpZiAoIXRwLVxcdTAwM2VUeERlc2NBcnJheSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHR0cC1cXHUwMDNlUnhEZXNjQXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHAtXFx1MDAzZVJ4UGh5QWRkciwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghdHAtXFx1MDAzZVJ4RGVzY0FycmF5KVxcbi1cXHRcXHRnb3RvIGVycl9mcmVlX3R4XzA7XFxuK1xcdGlmIChydGw4MTY5X2FsbG9jX3J4X2Rlc2ModHApIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9yeF8xO1xcbiBcXG4gXFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG5AQCAtNTEwNyw4ICs1Njc0LDcgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0cnRsX3JlcXVlc3RfZmlybXdhcmUodHApO1xcbiBcXG4tXFx0aXJxZmxhZ3MgPSBwY2lfZGV2X21zaV9lbmFibGVkKHBkZXYpID8gSVJRRl9OT19USFJFQUQgOiBJUlFGX1NIQVJFRDtcXG4tXFx0cmV0dmFsID0gcmVxdWVzdF9pcnEodHAtXFx1MDAzZWlycSwgcnRsODE2OV9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtXFx1MDAzZW5hbWUsIHRwKTtcXG4rXFx0cmV0dmFsID0gcnRsODE2OV9yZXF1ZXN0X2lycSh0cCk7XFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XFxuIFxcbkBAIC01MTI1LDE1ICs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHJldHZhbDtcXG4gXFxuIGVycl9mcmVlX2lycTpcXG4tXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbitcXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcXG4gZXJyX3JlbGVhc2VfZndfMjpcXG4gXFx0cnRsX3JlbGVhc2VfZmlybXdhcmUodHApO1xcbi1cXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXFxuK1xcdFxcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFxcdTAwMjZ0cC1cXHUwMDNlcnhfcmluZ1tpXSk7XFxuIGVycl9mcmVlX3J4XzE6XFxuLVxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4tXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG4tXFx0dHAtXFx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcXG4tZXJyX2ZyZWVfdHhfMDpcXG4rXFx0cnRsODE2OV9mcmVlX3J4X2Rlc2ModHApO1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBSODE2OV9UWF9SSU5HX0JZVEVTLCB0cC1cXHUwMDNlVHhEZXNjQXJyYXksXFxuIFxcdFxcdFxcdCAgdHAtXFx1MDAzZVR4UGh5QWRkcik7XFxuIFxcdHRwLVxcdTAwM2VUeERlc2NBcnJheSA9IE5VTEw7XFxuQEAgLTUxNTIsNiArNTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuIFxcdG5ldGRldl9zdGF0c190b19zdGF0czY0KHN0YXRzLCBcXHUwMDI2ZGV2LVxcdTAwM2VzdGF0cyk7XFxuIFxcdGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdGF0cywgZGV2LVxcdTAwM2V0c3RhdHMpO1xcbiBcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0cC1cXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcXG4rXFx0XFx0dTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0O1xcbitcXHRcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZyaW5nLVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdGVycm9ycyA9IHJpbmctXFx1MDAzZXN0YXRzLnJ4X2Vycm9ycztcXG4rXFx0XFx0XFx0ZHJvcHBlZCA9IHJpbmctXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQ7XFxuK1xcdFxcdFxcdGxlbmd0aF9lcnJvcnMgPSByaW5nLVxcdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzO1xcbitcXHRcXHRcXHRjcmNfZXJyb3JzID0gcmluZy1cXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycztcXG4rXFx0XFx0XFx0bXVsdGljYXN0ID0gcmluZy1cXHUwMDNlc3RhdHMubXVsdGljYXN0O1xcbitcXHRcXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXFx1MDAyNnJpbmctXFx1MDAzZXN0YXRzLnN5bmNwLCBzdGFydCkpO1xcbitcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZXJ4X2Vycm9ycyArPSBlcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9kcm9wcGVkICs9IGRyb3BwZWQ7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9sZW5ndGhfZXJyb3JzICs9IGxlbmd0aF9lcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VyeF9jcmNfZXJyb3JzICs9IGNyY19lcnJvcnM7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VtdWx0aWNhc3QgKz0gbXVsdGljYXN0O1xcbitcXHR9XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBGZXRjaCBhZGRpdGlvbmFsIGNvdW50ZXIgdmFsdWVzIG1pc3NpbmcgaW4gc3RhdHMgY29sbGVjdGVkIGJ5IGRyaXZlclxcbiBcXHQgKiBmcm9tIHRhbGx5IGNvdW50ZXJzLlxcbkBAIC01Mjc1LDYgKzU4NjAsMTYgQEAgc3RhdGljIHZvaWQgcnRsX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRwY2lfcHJlcGFyZV90b19zbGVlcChwZGV2KTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcjgxNjlfZnJlZV9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCBuYXBpX251bSA9IG1pbih0cC1cXHUwMDNlaXJxX252ZWNzLCBSODE2OV9NQVhfUVVFVUVTKTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgbmFwaV9udW07IGkrKylcXG4rXFx0XFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNnRwLVxcdTAwM2VydGw4MTY5X25hcGlbaV0pO1xcbitcXG4rXFx0a2ZyZWUodHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbkBAIC01Mjg5LDYgKzU4ODQsOSBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVxcdTAwM2VkZXYpO1xcbiBcXG4rXFx0cjgxNjlfZnJlZV9uYXBpKHRwKTtcXG4rXFx0a2ZyZWUodHAtXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4gXFx0aWYgKHRwLVxcdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XFxuIFxcbkBAIC01MzIwLDE1ICs1OTE4LDQ5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfc2V0X2lycV9tYXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdHRwLVxcdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XFxuK1xcdGlmICh0cC1cXHUwMDNlaXJxX252ZWNzIFxcdTAwM2UgMSkge1xcbitcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgPSBJU1JJTVJfTElOS0NIRyB8IElTUklNUl9UT0tfUTA7XFxuK1xcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gSVNSSU1SX1JPS19RMCBcXHUwMDNjXFx1MDAzYyBpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xcbiBcXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxcbi1cXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlaXJxX21hc2sgfD0gU1lTRXJyIHwgUnhGSUZPT3ZlcjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGdldF9tYXhfaXJxX252ZWNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0cmV0dXJuIFI4MTI3X01BWF9OVU1fSVJRVkVDO1xcbitcXHRyZXR1cm4gUjgxNjlfSVJRX0RFRkFVTFQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZ2V0X21pbl9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRyZXR1cm4gUjgxMjdfTUlOX05VTV9JUlFWRUM7XFxuK1xcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfcnhfcmluZ19udW0oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHRwLVxcdTAwM2VpcnFfbnZlY3MgXFx1MDAzZT0gZ2V0X21pbl9pcnFfbnZlY3ModHApKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcXG4rXFxuK1xcdFxcdHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgPSByb3VuZGRvd25fcG93X29mX3R3byhtaW4ocnNzX3F1ZXVlX251bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHRwLVxcdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMpKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VudW1fcnhfcmluZ3MgXFx1MDAzZT0gMilcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUztcXG4rXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4gXFx0dW5zaWduZWQgaW50IGZsYWdzO1xcbitcXHRpbnQgbnZlY3M7XFxuIFxcbiBcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMDIgLi4uIFJUTF9HSUdBX01BQ19WRVJfMDY6XFxuQEAgLTUzNDQsNyArNTk3NiwxOCBAQCBzdGF0aWMgaW50IHJ0bF9hbGxvY19pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHRwLVxcdTAwM2VwY2lfZGV2LCAxLCAxLCBmbGFncyk7XFxuK1xcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIGdldF9taW5faXJxX252ZWNzKHRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XFxuK1xcbitcXHRpZiAobnZlY3MgXFx1MDAzYyAwKVxcbitcXHRcXHRudmVjcyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2LCAxLCAxLCBmbGFncyk7XFxuK1xcbitcXHRpZiAobnZlY3MgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gbnZlY3M7XFxuK1xcbitcXHR0cC1cXHUwMDNlaXJxX252ZWNzID0gbnZlY3M7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuQEAgLTU1OTksNiArNjI0MiwxMDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcXG4rXFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuK1xcdGludCBtZXNzYWdlX2lkO1xcbitcXG4rXFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVxcdTAwM2VydGw4MTY5X25hcGk7XFxuK1xcbitcXHRpZiAobWVzc2FnZV9pZCBcXHUwMDNjIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpXFxuK1xcdFxcdHdvcmtfZG9uZSArPSBydGxfcngoZGV2LCB0cCwgXFx1MDAyNnRwLVxcdTAwM2VyeF9yaW5nW21lc3NhZ2VfaWRdLFxcbitcXHRcXHRcXHRcXHQgICAgYnVkZ2V0LCBuYXBpKTtcXG4rXFxuK1xcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQgXFx1MDAyNlxcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXFxuK1xcdFxcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcXG4rXFxuK1xcdHJldHVybiB3b3JrX2RvbmU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wb2xsX21zaXhfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xcbitcXG4rXFx0dHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0LyogQ3VycmVudGx5IHI4MTY5IG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgVHggcmluZy5cXG4rXFx0ICogVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIGEgcGVyLXJpbmcgVHggcHJvY2Vzc2luZyBsb29wIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRydGxfdHgoZGV2LCB0cCwgYnVkZ2V0KTtcXG4rXFxuK1xcdGlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpXFxuK1xcdFxcdHJ0bDgxNjlfZW5hYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCAoaW50KShuYXBpIC0gdHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFJUTDgxMjcgTVNJLVggdmVjdG9yIGxheW91dDpcXG4rICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSlcXHRcXHQ6IFJ4IFF1ZXVlc1xcbisgKiBWZWN0b3JzIFJ4UXMgLi4gKFJ4UXMgKyBUeFFzIC0gMSlcXHQ6IFR4IFF1ZXVlc1xcbisgKiBOQVBJIGlzIG9ubHkgYWxsb2NhdGVkIGZvciBkYXRhIHBhdGhcXG4rICovXFxuK3N0YXRpYyB2b2lkIHI4MTY5X2luaXRfbmFwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpbnQgbmFwaV9udW0gPSBtaW4odHAtXFx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5hcGlfbnVtOyBpKyspIHtcXG4rXFx0XFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XFxuK1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZWlycV9udmVjcyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyBSODE2OV9NQVhfUlhfUVVFVUVTKVxcbitcXHRcXHRcXHRcXHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfcng7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cG9sbF9mbiA9IHJ0bDgxNjlfcG9sbF9tc2l4X3R4O1xcbitcXHRcXHR9XFxuK1xcdFxcdG5ldGlmX25hcGlfYWRkKHRwLVxcdTAwM2VkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlcnRsODE2OV9uYXBpW2ldLCBwb2xsX2ZuKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfY2hhbm5lbHMgKmNoKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VtYXhfcnggPSB0cC1cXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzO1xcbitcXHRjaC1cXHUwMDNlbWF4X3R4ID0gMTtcXG4rXFxuK1xcdGNoLVxcdTAwM2VyeF9jb3VudCA9IHRwLVxcdTAwM2VudW1fcnhfcmluZ3M7XFxuK1xcdGNoLVxcdTAwM2V0eF9jb3VudCA9IDE7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4rXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcXG4rXFx0XFx0XFx0XFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX01BWF9GUkFNRVMsXFxuK1xcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcXG4rXFx0LmdldF9yZWdzX2xlblxcdFxcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXFxuK1xcdC5nZXRfbGlua1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfbGluayxcXG4rXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gcnRsX2dldF9jb2FsZXNjZSxcXG4rXFx0LnNldF9jb2FsZXNjZVxcdFxcdD0gcnRsX3NldF9jb2FsZXNjZSxcXG4rXFx0LmdldF9yZWdzXFx0XFx0PSBydGw4MTY5X2dldF9yZWdzLFxcbitcXHQuZ2V0X3dvbFxcdFxcdD0gcnRsODE2OV9nZXRfd29sLFxcbitcXHQuc2V0X3dvbFxcdFxcdD0gcnRsODE2OV9zZXRfd29sLFxcbitcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuK1xcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbitcXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbitcXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbitcXHQuZ2V0X2NoYW5uZWxzXFx0XFx0PSBydGw4MTY5X2dldF9jaGFubmVscyxcXG4rXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcXG4rXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXFxuK1xcdC5nZXRfcGF1c2VwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcXG4rXFx0LnNldF9wYXVzZXBhcmFtXFx0XFx0PSBydGw4MTY5X3NldF9wYXVzZXBhcmFtLFxcbitcXHQuZ2V0X2V0aF9tYWNfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX2N0cmxfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbit9O1xcbitcXG4gc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gKmNoaXA7XFxuQEAgLTU2MDksNyArNjM1MywxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0dTMyIHR4Y29uZmlnO1xcbiBcXHR1MzIgeGlkO1xcbiBcXG4tXFx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YgKCp0cCkpO1xcbitcXHRkZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUjgxNjlfTUFYX1RYX1FVRVVFUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUjgxNjlfTUFYX1JYX1FVRVVFUyk7XFxuK1xcbiBcXHRpZiAoIWRldilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC01Njg5LDYgKzY0MzYsMTMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG4gXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XFxuK1xcdFxcdHRwLVxcdTAwM2Vyc3NfZGF0YSA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKnRwLVxcdTAwM2Vyc3NfZGF0YSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCF0cC1cXHUwMDNlcnNzX2RhdGEpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHR0cC1cXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFxcdTAwMjYgQ1BDTURfTUFTSztcXG4gXFxuIFxcdGlmIChzaXplb2YoZG1hX2FkZHJfdCkgXFx1MDAzZSA0IFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFxcdTAwMjZcXHUwMDI2XFxuQEAgLTU3MDMsMTEgKzY0NTcsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBcXHRydGxfaHdfcmVzZXQodHApO1xcbiBcXG4rXFx0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XFxuK1xcbiBcXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xcbiBcXHRpZiAocmMgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByYywgXFxcIkNhbid0IGFsbG9jYXRlIGludGVycnVwdFxcXFxuXFxcIik7XFxuIFxcbi1cXHR0cC1cXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XFxuK1xcdHJ0bDgxNjlfc2V0X3J4X3JpbmdfbnVtKHRwKTtcXG4rXFxuK1xcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKVxcbitcXHRcXHRydGw4MTY5X2luaXRfcnNzKHRwKTtcXG4gXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2dHAtXFx1MDAzZXdrLndvcmssIHJ0bF90YXNrKTtcXG4gXFx0ZGlzYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuQEAgLTU3MTYsMTMgKzY0NzUsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcbiBcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNnJ0bDgxNjlfZXRodG9vbF9vcHM7XFxuIFxcbi1cXHRuZXRpZl9uYXBpX2FkZChkZXYsIFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSwgcnRsODE2OV9wb2xsKTtcXG4tXFxuIFxcdGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XFxuIFxcdFxcdFxcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XFxuIFxcdGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcXG4gXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcbiBcXG4rXFx0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZW51bV9yeF9yaW5ncyBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcXG4rXFx0fVxcbitcXG4gXFx0LypcXG4gXFx0ICogUHJldGVuZCB3ZSBhcmUgdXNpbmcgVkxBTnM7IFRoaXMgYnlwYXNzZXMgYSBuYXN0eSBidWcgd2hlcmVcXG4gXFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXFxuQEAgLTU3NzgsNiArNjU0MCwxMCBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0aWYgKGp1bWJvX21heClcXG4gXFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0ganVtYm9fbWF4O1xcbiBcXG4rXFx0cmMgPSBuZXRpZl9zZXRfcmVhbF9udW1fcXVldWVzKHRwLVxcdTAwM2VkZXYsIDEsIHRwLVxcdTAwM2VudW1fcnhfcmluZ3MpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCByYywgXFxcInNldCB0eC9yeCBudW0gZmFpbHVyZVxcXFxuXFxcIik7XFxuK1xcbiBcXHRydGxfc2V0X2lycV9tYXNrKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqdHAtXFx1MDAzZWNvdW50ZXJzKSxcXG5AQCAtNTc5Miw5ICs2NTU4LDI2IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdHRwLVxcdTAwM2VyeF9yaW5nID0ga2NhbGxvYyh0cC1cXHUwMDNlbnVtX3J4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHJ0bDgxNjlfcnhfcmluZyksXFxuK1xcdFxcdFxcdCAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VyeF9yaW5nKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdHAtXFx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxcbitcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2dHAtXFx1MDAzZXJ4X3JpbmdbaV0uc3RhdHMuc3luY3ApO1xcbitcXG4rXFx0dHAtXFx1MDAzZXJ0bDgxNjlfbmFwaSA9IGtjYWxsb2ModHAtXFx1MDAzZWlycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksXFxuK1xcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VydGw4MTY5X25hcGkpIHtcXG4rXFx0XFx0a2ZyZWUodHAtXFx1MDAzZXJ4X3JpbmcpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cjgxNjlfaW5pdF9uYXBpKHRwKTtcXG4rXFxuIFxcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuIFxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25hcGk7XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgwMyw4ICs2NTg2LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdHRwLVxcdTAwM2VsZWRzID0gcnRsODE2OF9pbml0X2xlZHMoZGV2KTtcXG4gXFx0fVxcbiBcXG4tXFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiJXMsICVwTSwgJXNYSUQgJXgsIElSUSAlZFxcXFxuXFxcIixcXG4tXFx0XFx0ICAgIGNoaXAtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsIHRwLVxcdTAwM2VpcnEpO1xcbitcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCIlcywgJXBNLCAlc1hJRCAleCwgSVJRICVkICglZCB0b3RhbClcXFxcblxcXCIsXFxuK1xcdFxcdCAgICBjaGlwLVxcdTAwM2VuYW1lLCBkZXYtXFx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLFxcbitcXHRcXHQgICAgcGNpX2lycV92ZWN0b3IocGRldiwgMCksIHRwLVxcdTAwM2VpcnFfbnZlY3MpO1xcbiBcXG4gXFx0aWYgKGp1bWJvX21heClcXG4gXFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwianVtYm8gZmVhdHVyZXMgW2ZyYW1lczogJWQgYnl0ZXMsIHR4IGNoZWNrc3VtbWluZzogJXNdXFxcXG5cXFwiLFxcbkBAIC01ODIxLDYgKzY2MDUsMTEgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX25hcGk6XFxuK1xcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XFxuK1xcdGtmcmVlKHRwLVxcdTAwM2VyeF9yaW5nKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxODo0NS40NjM4MzI3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE5MjQ3NjE0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzZjY5ZTA2YTA1NzE3YmM2YTY3ZWU5YWQ1YmE3YmE5NjlhNGRlYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNjoxODo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmE3NmZiZjFlNTBkMTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yOSw2ICsyOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbkBAIC03NCw5ICs3NSwzMyBAQFxuICNkZWZpbmUgTlVNX1RYX0RFU0NcdDI1Nlx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXG4gI2RlZmluZSBOVU1fUlhfREVTQ1x0MjU2XHQvKiBOdW1iZXIgb2YgUnggZGVzY3JpcHRvciByZWdpc3RlcnMgKi9cbiAjZGVmaW5lIFI4MTY5X1RYX1JJTkdfQllURVNcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcbi0jZGVmaW5lIFI4MTY5X1JYX1JJTkdfQllURVNcdChOVU1fUlhfREVTQyAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcbitcbisvKlxuKyAqIFdvcmthcm91bmQgZm9yIHRoZSBoYXJkd2FyZSBETUEgcHJlZmV0Y2hlci4gVGhlIEgvVyBtaWdodCBhZ2dyZXNzaXZlbHlcbisgKiBmZXRjaCBvbmUgbW9yZSBkZXNjcmlwdG9yIGV2ZW4gYWZ0ZXIgaGl0dGluZyB0aGUgUmluZ0VuZCBtYXJrLiBXZVxuKyAqIGFsbG9jYXRlIHRoaXMgZXh0cmEgZHVtbXkgc3BhY2UgYXMgcGFkZGluZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHNcbisgKiBhY2Nlc3MgYW5kIHBvdGVudGlhbCBJT01NVSBmYXVsdHMuXG4rICovXG4rI2RlZmluZSBSODE2OV9SWF9SSU5HX0JZVEVTXHQoKE5VTV9SWF9ERVNDICsgMSkgKiBzaXplb2Yoc3RydWN0IFJ4RGVzYykpXG4gI2RlZmluZSBSODE2OV9UWF9TVE9QX1RIUlNcdChNQVhfU0tCX0ZSQUdTICsgMSlcbiAjZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcdCgyICogUjgxNjlfVFhfU1RPUF9USFJTKVxuKyNkZWZpbmUgUjgxNjlfTUFYX1FVRVVFU1x0MTZcbisjZGVmaW5lIFI4MTY5X01BWF9SWF9RVUVVRVNcdDhcbisjZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXHQxXG4rI2RlZmluZSBSODE2OV9NQVhfVFhfUVVFVUVTXHQxXG4rI2RlZmluZSBSODEyN19NQVhfTlVNX0lSUVZFQ1x0MzJcbisjZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXHQzMFxuKyNkZWZpbmUgUjgxNjlfSVJRX0RFRkFVTFRcdDFcbisjZGVmaW5lIFJUTF9SU1NfS0VZX1NJWkVcdDQwXG4rI2RlZmluZSBSU1NfQ1BVX05VTV9NQVNLXHRHRU5NQVNLKDE4LCAxNilcbisjZGVmaW5lIFJTU19IQVNIX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbisjZGVmaW5lIFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUyAxMjhcbisjZGVmaW5lIFJYU19SU1NfVURQXHRcdEJJVCgyNylcbisjZGVmaW5lIFJYU19SU1NfSVBWNFx0XHRCSVQoMjgpXG4rI2RlZmluZSBSWFNfUlNTX0lQVjZcdFx0QklUKDI5KVxuKyNkZWZpbmUgUlhTX1JTU19UQ1BcdFx0QklUKDMwKVxuKyNkZWZpbmUgUlhTX1JTU19MM19UWVBFX01BU0tcdChSWFNfUlNTX0lQVjQgfCBSWFNfUlNTX0lQVjYpXG4rI2RlZmluZSBSWFNfUlNTX0w0X1RZUEVfTUFTS1x0KFJYU19SU1NfVENQIHwgUlhTX1JTU19VRFApXG4gXG4gI2RlZmluZSBPQ1BfU1REX1BIWV9CQVNFXHQweGE0MDBcbiBcbkBAIC00NDEsMTEgKzQ2NiwxNiBAQCBlbnVtIHJ0bDgxMjVfcmVnaXN0ZXJzIHtcbiBcdFR4UG9sbF84MTI1XHRcdD0gMHg5MCxcbiBcdExFRFNFTDNcdFx0XHQ9IDB4OTYsXG4gXHRNQUMwX0JLUFx0XHQ9IDB4MTllMCxcbitcdFJEU0FSX1ExX0xPV1x0XHQ9IDB4NDAwMCxcbiBcdFJTU19DVFJMXzgxMjVcdFx0PSAweDQ1MDAsXG4gXHRRX05VTV9DVFJMXzgxMjVcdFx0PSAweDQ4MDAsXG4gXHRFRUVfVFhJRExFX1RJTUVSXzgxMjVcdD0gMHg2MDQ4LFxuK1x0SU1SX0NMRUFSX1ZFQ19NQVBfUkVHXHQ9IDB4MGQwMCxcbitcdElTUl9WRUNfTUFQX1JFR1x0XHQ9IDB4MGQwNCxcbitcdElNUl9TRVRfVkVDX01BUF9SRUdcdD0gMHgwZDBjLFxuIH07XG4gXG4rI2RlZmluZSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIR1x0MjlcbiAjZGVmaW5lIExFRFNFTF9NQVNLXzgxMjVcdDB4MjNmXG4gXG4gI2RlZmluZSBSWF9WTEFOX0lOTkVSXzgxMjVcdEJJVCgyMilcbkBAIC00NzQsNiArNTA0LDkgQEAgZW51bSBydGxfcmVnaXN0ZXJfY29udGVudCB7XG4gXHRSeFJVTlRcdD0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbiBcdFJ4Q1JDXHQ9ICgxIFx1MDAzY1x1MDAzYyAxOSksXG4gXG4rXHRSWFJVTlRfUlNTXHQ9ICgxIFx1MDAzY1x1MDAzYyAyMSksXG4rXHRSWENSQ19SU1NcdD0gKDEgXHUwMDNjXHUwMDNjIDIwKSxcbitcbiBcdC8qIENoaXBDbWRCaXRzICovXG4gXHRTdG9wUmVxXHRcdD0gMHg4MCxcbiBcdENtZFJlc2V0XHQ9IDB4MTAsXG5AQCAtNTc2LDYgKzYwOSwyNSBAQCBlbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcbiBcbiBcdC8qIG1hZ2ljIGVuYWJsZSB2MiAqL1xuIFx0TWFnaWNQYWNrZXRfdjJcdD0gKDEgXHUwMDNjXHUwMDNjIDE2KSxcdC8qIFdha2UgdXAgd2hlbiByZWNlaXZlcyBhIE1hZ2ljIFBhY2tldCAqL1xuKyNkZWZpbmVcdElTUklNUl9MSU5LQ0hHXHRCSVQoMjkpXG4rI2RlZmluZVx0SVNSSU1SX1RPS19RMFx0QklUKDgpXG4rI2RlZmluZVx0SVNSSU1SX1JPS19RMFx0QklUKDApXG4rI2RlZmluZSBSVExfREVTQ19UWVBFX0NUUkxcdFx0MHhkOFxuKyNkZWZpbmUgUlNTX0tFWV9SRUdcdFx0XHQweDQ2MDBcbisjZGVmaW5lIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHXHRcdDB4NDcwMFxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjRfU1VQUFx0XHRCSVQoMClcbisjZGVmaW5lIFJUTF9ERVNDX1RZUEVfUlNTXHRcdEJJVCgxKVxuKyNkZWZpbmUgUlNTX0NUUkxfSVBWNF9TVVBQXHRcdEJJVCgxKVxuKyNkZWZpbmUgUlNTX0NUUkxfVENQX0lQVjZfU1VQUFx0XHRCSVQoMilcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfU1VQUFx0XHRCSVQoMylcbisjZGVmaW5lIFJTU19DVFJMX0lQVjZfRVhUX1NVUFBcdFx0QklUKDQpXG4rI2RlZmluZSBSU1NfQ1RSTF9UQ1BfSVBWNl9FWFRfU1VQUFx0QklUKDUpXG4rI2RlZmluZSBSU1NfQ1RSTF9VRFBfSVBWNF9TVVBQXHRcdEJJVCgxMSlcbisjZGVmaW5lIFJTU19DVFJMX1VEUF9JUFY2X1NVUFBcdFx0QklUKDEyKVxuKyNkZWZpbmVcdFJYX1JFU19SU1NcdFx0XHRCSVQoMjIpXG4rI2RlZmluZVx0UlhfUlVOVF9SU1NcdFx0XHRCSVQoMjEpXG4rI2RlZmluZVx0UlhfQ1JDX1JTU1x0XHRcdEJJVCgyMClcbisjZGVmaW5lIFJUTF9SWF9RX05VTV9NQVNLXHRcdEdFTk1BU0soNCwgMilcbiB9O1xuIFxuIGVudW0gcnRsX2Rlc2NfYml0IHtcbkBAIC02MzMsNiArNjg1LDExIEBAIGVudW0gcnRsX3J4X2Rlc2NfYml0IHtcbiAjZGVmaW5lIFJ4UHJvdG9JUFx0KFBJRDEgfCBQSUQwKVxuICNkZWZpbmUgUnhQcm90b01hc2tcdFJ4UHJvdG9JUFxuIFxuKyNkZWZpbmVcdFJYX1VEUFRfREVTQ19SU1NcdEJJVCgxOSlcbisjZGVmaW5lXHRSWF9UQ1BUX0RFU0NfUlNTXHRCSVQoMTgpXG4rI2RlZmluZVx0UlhfVURQRl9ERVNDX1JTU1x0QklUKDE2KSAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rI2RlZmluZVx0UlhfVENQRl9ERVNDX1JTU1x0QklUKDE1KSAvKiBUQ1AvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4rXG4gXHRJUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTYpLCAvKiBJUCBjaGVja3N1bSBmYWlsZWQgKi9cbiBcdFVEUEZhaWxcdFx0PSAoMSBcdTAwM2NcdTAwM2MgMTUpLCAvKiBVRFAvSVAgY2hlY2tzdW0gZmFpbGVkICovXG4gXHRUQ1BGYWlsXHRcdD0gKDEgXHUwMDNjXHUwMDNjIDE0KSwgLyogVENQL0lQIGNoZWNrc3VtIGZhaWxlZCAqL1xuQEAgLTY1NCw5ICs3MTEsMjcgQEAgc3RydWN0IFR4RGVzYyB7XG4gfTtcbiBcbiBzdHJ1Y3QgUnhEZXNjIHtcbi1cdF9fbGUzMiBvcHRzMTtcbi1cdF9fbGUzMiBvcHRzMjtcbi1cdF9fbGU2NCBhZGRyO1xuK1x0dW5pb24ge1xuK1x0XHQvKiBSWF9ERVNDX1RZUEVfREVGQVVMVCAqL1xuK1x0XHRzdHJ1Y3Qge1xuK1x0XHRcdF9fbGUzMiBvcHRzMTtcbitcdFx0XHRfX2xlMzIgb3B0czI7XG4rXHRcdFx0X19sZTY0IGFkZHI7XG4rXHRcdH07XG4rXG4rXHRcdC8qIFJYX0RFU0NfVFlQRV9SU1MgKi9cbitcdFx0c3RydWN0IHtcbitcdFx0XHR1bmlvbiB7XG4rXHRcdFx0XHRfX2xlNjQgcnNzX2FkZHI7XG4rXHRcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0XHRfX2xlMzIgcnNzX2luZm87XG4rXHRcdFx0XHRcdF9fbGUzMiByc3NfcmVzdWx0O1xuK1x0XHRcdFx0fSByc3NfZHdvcmQ7XG4rXHRcdFx0fTtcbitcdFx0XHRfX2xlMzIgcnNzX29wdHMyO1xuK1x0XHRcdF9fbGUzMiByc3Nfb3B0czE7XG4rXHRcdH07XG4rXHR9O1xuIH07XG4gXG4gc3RydWN0IHJpbmdfaW5mbyB7XG5AQCAtNzI4LDI3ICs4MDMsNTcgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSByeF9kZXNjX3R5cGUge1xuK1x0UlhfREVTQ19UWVBFX0RFRkFVTFQsXG4rXHRSWF9ERVNDX1RZUEVfUlNTLFxuK307XG4rXG4rc3RydWN0IHJ0bDgxNjlfcnhfcmluZyB7XG4rXHR1MzIgY3VyX3J4O1xuK1x0dTMyIGRpcnR5X3J4O1xuK1x0c3RydWN0IFJ4RGVzYyAqcnhfZGVzY19hcnJheTtcbitcdGRtYV9hZGRyX3QgcnhfZGVzY19waHlfYWRkcltOVU1fUlhfREVTQ107XG4rXHRkbWFfYWRkcl90IHJ4X3BoeV9hZGRyO1xuK1x0c3RydWN0IHBhZ2UgKnJ4X2RhdGFidWZmW05VTV9SWF9ERVNDXTtcbitcbitcdHN0cnVjdCB7XG4rXHRcdHU2NCByeF9lcnJvcnM7XG4rXHRcdHU2NCByeF9kcm9wcGVkO1xuK1x0XHR1NjQgcnhfbGVuZ3RoX2Vycm9ycztcbitcdFx0dTY0IHJ4X2NyY19lcnJvcnM7XG4rXHRcdHU2NCBtdWx0aWNhc3Q7XG4rXHRcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbitcdH0gc3RhdHM7XG4rfTtcbitcbitzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XG4rXHR1OCByc3Nfa2V5W1JUTF9SU1NfS0VZX1NJWkVdO1xuK1x0dTggcnNzX2luZGlyX3RibFtSVExfTUFYX0lORElSRUNUSU9OX1RBQkxFX0VOVFJJRVNdO1xuK1x0dW5zaWduZWQgaW50IGh3X3N1cHBfaW5kaXJfdGJsX2VudHJpZXM7XG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuLVx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xuIFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcbi1cdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG4gXHRzdHJ1Y3QgVHhEZXNjICpUeERlc2NBcnJheTtcdC8qIDI1Ni1hbGlnbmVkIFR4IGRlc2NyaXB0b3IgcmluZyAqL1xuLVx0c3RydWN0IFJ4RGVzYyAqUnhEZXNjQXJyYXk7XHQvKiAyNTYtYWxpZ25lZCBSeCBkZXNjcmlwdG9yIHJpbmcgKi9cbiBcdGRtYV9hZGRyX3QgVHhQaHlBZGRyO1xuLVx0ZG1hX2FkZHJfdCBSeFBoeUFkZHI7XG4tXHRzdHJ1Y3QgcGFnZSAqUnhfZGF0YWJ1ZmZbTlVNX1JYX0RFU0NdO1x0LyogUnggZGF0YSBidWZmZXJzICovXG4gXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XHQvKiBUeCBkYXRhIGJ1ZmZlcnMgKi9cbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcnhfcmluZztcbitcdHVuc2lnbmVkIGludCBudW1fcnhfcmluZ3M7XG4gXHR1MTYgY3BfY21kO1xuIFx0dTE2IHR4X2xwaV90aW1lcjtcbiBcdHUzMiBpcnFfbWFzaztcbi1cdGludCBpcnE7XG4rXHR1bnNpZ25lZCBpbnQgaHdfc3VwcF9udW1fcnhfcXVldWVzO1xuK1x0c3RydWN0IHJ0bDgxNjlfcnNzX2RhdGEgKnJzc19kYXRhO1xuK1x0dW5zaWduZWQgaW50IGlycV9udmVjcztcbitcdGVudW0gcnhfZGVzY190eXBlIGluaXRfcnhfZGVzY190eXBlO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFxuIFx0c3RydWN0IHtcbkBAIC0xNTc4LDYgKzE2ODMsMTEgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2h3X3N1cHBvcnRfcnNzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjQ0LDI2ICsxNzU0LDM4IEBAIHN0YXRpYyB1MzIgcnRsX2dldF9ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHZvaWQgcnRsX2Fja19ldmVudHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiBiaXRzKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4tXHRlbHNlXG4rXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpXG4rXHRcdFx0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBiaXRzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJTdGF0dXNfODEyNSwgYml0cyk7XG4rXHR9IGVsc2Uge1xuIFx0XHRSVExfVzE2KHRwLCBJbnRyU3RhdHVzLCBiaXRzKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpXG4tXHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIDApO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9DTEVBUl9WRUNfTUFQX1JFRywgMHhmZmZmZmZmZik7XG4rXHRcdGVsc2VcbitcdFx0XHRSVExfVzMyKHRwLCBJbnRyTWFza184MTI1LCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCAwKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2lycV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbi1cdFx0UlRMX1czMih0cCwgSW50ck1hc2tfODEyNSwgdHAtXHUwMDNlaXJxX21hc2spO1xuLVx0ZWxzZVxuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdFJUTF9XMzIodHAsIElNUl9TRVRfVkVDX01BUF9SRUcsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdFx0ZWxzZVxuK1x0XHRcdFJUTF9XMzIodHAsIEludHJNYXNrXzgxMjUsIHRwLVx1MDAzZWlycV9tYXNrKTtcbitcdH0gZWxzZSB7XG4gXHRcdFJUTF9XMTYodHAsIEludHJNYXNrLCB0cC1cdTAwM2VpcnFfbWFzayk7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0xODY3LDkgKzE5ODksMjAgQEAgc3RhdGljIGlubGluZSB1MzIgcnRsODE2OV90eF92bGFuX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfdmxhbl90YWcoc3RydWN0IFJ4RGVzYyAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyxcbitcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0dTMyIG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHR1MzIgb3B0czI7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3Nfb3B0czIpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG9wdHMyID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2VvcHRzMik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0aWYgKG9wdHMyIFx1MDAyNiBSeFZsYW5UYWcpXG4gXHRcdF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHN3YWIxNihvcHRzMiBcdTAwMjYgMHhmZmZmKSk7XG5AQCAtMjQxNiwzNCArMjU0OSw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9NQVhfRlJBTUVTLFxuLVx0LmdldF9kcnZpbmZvXHRcdD0gcnRsODE2OV9nZXRfZHJ2aW5mbyxcbi1cdC5nZXRfcmVnc19sZW5cdFx0PSBydGw4MTY5X2dldF9yZWdzX2xlbixcbi1cdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4tXHQuZ2V0X2NvYWxlc2NlXHRcdD0gcnRsX2dldF9jb2FsZXNjZSxcbi1cdC5zZXRfY29hbGVzY2VcdFx0PSBydGxfc2V0X2NvYWxlc2NlLFxuLVx0LmdldF9yZWdzXHRcdD0gcnRsODE2OV9nZXRfcmVncyxcbi1cdC5nZXRfd29sXHRcdD0gcnRsODE2OV9nZXRfd29sLFxuLVx0LnNldF93b2xcdFx0PSBydGw4MTY5X3NldF93b2wsXG4tXHQuZ2V0X3N0cmluZ3NcdFx0PSBydGw4MTY5X2dldF9zdHJpbmdzLFxuLVx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbi1cdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbi1cdC5nZXRfZWVlXHRcdD0gcnRsODE2OV9nZXRfZWVlLFxuLVx0LnNldF9lZWVcdFx0PSBydGw4MTY5X3NldF9lZWUsXG4tXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbi1cdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4tXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbi1cdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG4tXHQuZ2V0X3BhdXNlcGFyYW1cdFx0PSBydGw4MTY5X2dldF9wYXVzZXBhcmFtLFxuLVx0LnNldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9zZXRfcGF1c2VwYXJhbSxcbi1cdC5nZXRfZXRoX21hY19zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzLFxuLVx0LmdldF9ldGhfY3RybF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyxcbi19O1xuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqcnRsODE2OV9nZXRfY2hpcF92ZXJzaW9uKHUzMiB4aWQsIGJvb2wgZ21paSlcbiB7XG4gXHQvKiBDaGlwcyBjb21iaW5pbmcgYSAxR2JwcyBNQUMgd2l0aCBhIDEwME1icHMgUEhZICovXG5AQCAtMjYxOSw5ICsyNzI0LDI2IEBAIHN0YXRpYyB2b2lkIHJ0bF9pbml0X3J4Y2ZnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0c3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyA9IFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV07XG4rXG4rXHRcdG1lbXNldChyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksIDB4MCwgUjgxNjlfUlhfUklOR19CWVRFUyk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlZGlydHlfdHggPSB0cC1cdTAwM2VjdXJfdHggPSB0cC1cdTAwM2VjdXJfcnggPSAwO1xuK1x0dHAtXHUwMDNlZGlydHlfdHggPSAwO1xuK1x0dHAtXHUwMDNlY3VyX3R4ID0gMDtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0cmluZy1cdTAwM2VkaXJ0eV9yeCA9IDA7XG4rXHRcdHJpbmctXHUwMDNlY3VyX3J4ID0gMDtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbkBAIC0yNjgwLDYgKzI4MDIsMjkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnJ0bF9jaGlwY21kX2NvbmQsIDEwMCwgMTAwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JzcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSsrKVxuK1x0XHR0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgdHAtXHUwMDNlbnVtX3J4X3JpbmdzKTtcbitcbitcdG5ldGRldl9yc3Nfa2V5X2ZpbGwodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlcnNzX2tleSwgUlRMX1JTU19LRVlfU0laRSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9zZXR1cF9yeF9wYXJhbXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gMTtcbitcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbitcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl84MDpcbitcdFx0dHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzID0gUjgxNjlfTUFYX1JYX1FVRVVFUztcbitcdFx0dHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcyA9IFJUTF9NQVhfSU5ESVJFQ1RJT05fVEFCTEVfRU5UUklFUztcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHR0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXMgPSBSODE2OV9ERUZBVUxUX1JYX1FVRVVFUztcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHR0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9IFJYX0RFU0NfVFlQRV9ERUZBVUxUO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcnRsX2Z3ICpydGxfZnc7XG5AQCAtMjgwMiw4ICsyOTQ3LDYyIEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbWF4X3NpemUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRSVExfVzE2KHRwLCBSeE1heFNpemUsIFI4MTY5X1JYX0JVRl9TSVpFICsgMSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc3RvcmVfcnNzX2tleShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1OCAqcnNzX2tleSA9IHRwLVx1MDAzZXJzc19kYXRhLVx1MDAzZXJzc19rZXk7XG4rXHRjb25zdCB1MTYgcnNzX2tleV9yZWcgPSBSU1NfS0VZX1JFRztcbitcbitcdC8qIFdyaXRlIHJlZGlyZWN0aW9uIHRhYmxlIHRvIEhXICovXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgUlRMX1JTU19LRVlfU0laRTsgaSArPSBzaXplb2YodTMyKSlcbitcdFx0UlRMX1czMih0cCwgcnNzX2tleV9yZWcgKyBpLCBnZXRfdW5hbGlnbmVkX2xlMzIocnNzX2tleSArIGkpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9zdG9yZV9yZXRhKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHU4ICppbmRpcl90YmwgPSB0cC1cdTAwM2Vyc3NfZGF0YS1cdTAwM2Vyc3NfaW5kaXJfdGJsO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHQvKiBXcml0ZSByZWRpcmVjdGlvbiB0YWJsZSB0byBIVyAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllczsgaSArPSA0KSB7XG4rXHRcdHUzMiByZXRhID0gZ2V0X3VuYWxpZ25lZF9sZTMyKFx1MDAyNmluZGlyX3RibFtpXSk7XG4rXG4rXHRcdFJUTF9XMzIodHAsIFJTU19JTkRJUkVDVElPTl9UQkxfUkVHICsgaSwgcmV0YSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X3Jzc19oYXNoX29wdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1MzIgcnNzX2N0cmw7XG4rXG4rXHRyc3NfY3RybCA9IEZJRUxEX1BSRVAoUlNTX0NQVV9OVU1fTUFTSywgaWxvZzIodHAtXHUwMDNlbnVtX3J4X3JpbmdzKSk7XG4rXG4rXHQvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovXG4rXHRyc3NfY3RybCB8PSBSU1NfQ1RSTF9UQ1BfSVBWNF9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX0lQVjRfU1VQUCB8XG4rXHRcdCAgICBSU1NfQ1RSTF9JUFY2X1NVUFAgfFxuK1x0XHQgICAgUlNTX0NUUkxfSVBWNl9FWFRfU1VQUCB8XG4rXHRcdCAgICBSU1NfQ1RSTF9UQ1BfSVBWNl9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX1RDUF9JUFY2X0VYVF9TVVBQIHxcbitcdFx0ICAgIFJTU19DVFJMX1VEUF9JUFY0X1NVUFAgfFxuK1x0XHQgICAgUlNTX0NUUkxfVURQX0lQVjZfU1VQUDtcbitcbitcdHJzc19jdHJsIHw9IEZJRUxEX1BSRVAoUlNTX0hBU0hfTUFTSyxcbitcdFx0XHQgICAgICAgaWxvZzIodHAtXHUwMDNlcnNzX2RhdGEtXHUwMDNlaHdfc3VwcF9pbmRpcl90YmxfZW50cmllcykpO1xuK1xuK1x0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgcnNzX2N0cmwpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfc2V0X3Jzc19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0cnRsODE2OV9zZXRfcnNzX2hhc2hfb3B0KHRwKTtcbitcdHJ0bDgxNjlfc3RvcmVfcmV0YSh0cCk7XG4rXHRydGw4MTY5X3N0b3JlX3Jzc19rZXkodHApO1xuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nWzBdO1xuK1xuIFx0LypcbiBcdCAqIE1hZ2ljIHNwZWxsOiBzb21lIGlvcDN4eCBBUk0gYm9hcmQgbmVlZHMgdGhlIFR4RGVzY0FkZHJIaWdoXG4gXHQgKiByZWdpc3RlciB0byBiZSB3cml0dGVuIGJlZm9yZSBUeERlc2NBZGRyTG93IHRvIHdvcmsuXG5AQCAtMjgxMSw4ICszMDEwLDE4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfdHhfZGVzY19yZWdpc3RlcnMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgKi9cbiBcdFJUTF9XMzIodHAsIFR4RGVzY1N0YXJ0QWRkckhpZ2gsICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4gXHRSVExfVzMyKHRwLCBUeERlc2NTdGFydEFkZHJMb3csICgodTY0KSB0cC1cdTAwM2VUeFBoeUFkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbi1cdFJUTF9XMzIodHAsIFJ4RGVzY0FkZHJIaWdoLCAoKHU2NCkgdHAtXHUwMDNlUnhQaHlBZGRyKSBcdTAwM2VcdTAwM2UgMzIpO1xuLVx0UlRMX1czMih0cCwgUnhEZXNjQWRkckxvdywgKCh1NjQpIHRwLVx1MDAzZVJ4UGh5QWRkcikgXHUwMDI2IERNQV9CSVRfTUFTSygzMikpO1xuK1x0UlRMX1czMih0cCwgUnhEZXNjQWRkckhpZ2gsICgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAzZVx1MDAzZSAzMik7XG4rXHRSVExfVzMyKHRwLCBSeERlc2NBZGRyTG93LFxuK1x0XHQoKHU2NClyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyKSBcdTAwMjYgRE1BX0JJVF9NQVNLKDMyKSk7XG4rXG4rXHRmb3IgKGludCBpID0gMTsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0dW5zaWduZWQgaW50IHJkc2FyX3JlZyA9IFJEU0FSX1ExX0xPVyArIChpIC0gMSkgKiA4O1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnICsgNCwgKCh1NjQpcmluZy1cdTAwM2VyeF9waHlfYWRkciBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdFx0UlRMX1czMih0cCwgcmRzYXJfcmVnLFxuK1x0XHRcdCgodTY0KXJpbmctXHUwMDNlcnhfcGh5X2FkZHIpIFx1MDAyNiBETUFfQklUX01BU0soMzIpKTtcbitcdH1cbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuQEAgLTM4NTgsNiArNDA2NywyNyBAQCBERUNMQVJFX1JUTF9DT05EKHJ0bF9tYWNfb2NwX2UwMGVfY29uZClcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZTAwZSkgXHUwMDI2IEJJVCgxMyk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHUxNiByeF9xX251bTtcbitcdHUxNiBxX2N0cmw7XG4rXG4rXHRyeF9xX251bSA9IGlsb2cyKHRwLVx1MDAzZW51bV9yeF9yaW5ncyk7XG4rXHRxX2N0cmwgPSBSVExfUjE2KHRwLCBRX05VTV9DVFJMXzgxMjUpO1xuK1x0cV9jdHJsIFx1MDAyNj0gflJUTF9SWF9RX05VTV9NQVNLO1xuK1x0cV9jdHJsIHw9IEZJRUxEX1BSRVAoUlRMX1JYX1FfTlVNX01BU0ssIHJ4X3FfbnVtKTtcbitcdFJUTF9XMTYodHAsIFFfTlVNX0NUUkxfODEyNSwgcV9jdHJsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dTggdG1wO1xuK1xuK1x0dG1wID0gUlRMX1I4KHRwLCBJTlRfQ0ZHMF84MTI1KTtcbitcdHRtcCB8PSBJTlRfQ0ZHMF9FTkFCTEVfODEyNTtcbitcdFJUTF9XOCh0cCwgSU5UX0NGRzBfODEyNSwgdG1wKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG5AQCAtMzg2Niw2ICs0MDk2LDkgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMCk7XG4gXHRSVExfVzE2KHRwLCBRX05VTV9DVFJMXzgxMjUsIDApO1xuIFxuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSlcbitcdFx0cnRsODE2OV9od19lbmFibGVfdmVjX21hcHBpbmcodHApO1xuK1xuIFx0LyogZGlzYWJsZSBVUFMgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MGEsIDB4MDAxMCwgMHgwMDAwKTtcbiBcbkBAIC0zODg1LDYgKzQxMTgsMTMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMjVfY29tbW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4gXHRcdFJUTF9XOCh0cCwgMHhEOCwgUlRMX1I4KHRwLCAweEQ4KSBcdTAwMjYgfjB4MDIpO1xuIFxuK1x0LyogZW5hYmxlIHJ4IGRlc2NyaXB0b3IgdHlwZSB2NCBhbmQgc2V0IHF1ZXVlIG51bSBmb3IgcnNzICovXG4rXHRpZiAodHAtXHUwMDNlbnVtX3J4X3JpbmdzIFx1MDAzZSAxKSB7XG4rXHRcdHJ0bDgxMjVfc2V0X3J4X3FfbnVtKHRwKTtcbitcdFx0UlRMX1c4KHRwLCBSVExfREVTQ19UWVBFX0NUUkwsXG4rXHRcdCAgICAgICBSVExfUjgodHAsIFJUTF9ERVNDX1RZUEVfQ1RSTCkgfCBSVExfREVTQ19UWVBFX1JTUyk7XG4rXHR9XG4rXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiBcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTYxNCwgMHgwZjAwLCAweDBmMDApO1xuIFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbkBAIC00MTIxLDYgKzQzNjEsMTIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUodHAsIHRydWUpO1xuIFx0cnRsX3NldF9yeF9tYXhfc2l6ZSh0cCk7XG4gXHRydGxfc2V0X3J4X3R4X2Rlc2NfcmVnaXN0ZXJzKHRwKTtcbitcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbitcdFx0aWYgKHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSlcbitcdFx0XHRydGxfc2V0X3Jzc19jb25maWcodHApO1xuK1x0XHRlbHNlXG4rXHRcdFx0UlRMX1czMih0cCwgUlNTX0NUUkxfODEyNSwgMHgwMCk7XG4rXHR9XG4gXHRydGxfbG9ja19jb25maWdfcmVncyh0cCk7XG4gXG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbkBAIC00MTQ4LDE5ICs0Mzk0LDMyIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bDgxNjlfbWFya190b19hc2ljKHN0cnVjdCBSeERlc2MgKmRlc2MpXG4rc3RhdGljIHZvaWQgcnRsODE2OV9tYXJrX3RvX2FzaWMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBSeERlc2MgKmRlc2MpXG4ge1xuLVx0dTMyIGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlb3B0czEpIFx1MDAyNiBSaW5nRW5kO1xuK1x0dTMyIGVvcjtcbiBcbi1cdGRlc2MtXHUwMDNlb3B0czIgPSAwO1xuLVx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbi1cdGRtYV93bWIoKTtcbi1cdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGVvciA9IGxlMzJfdG9fY3B1KGRlc2MtXHUwMDNlcnNzX29wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czIgPSBjcHVfdG9fbGUzMigwKTtcbitcdFx0LyogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgcmVsZWFzaW5nIGRlc2NyaXB0b3IgKi9cbitcdFx0ZG1hX3dtYigpO1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlcnNzX29wdHMxLCBjcHVfdG9fbGUzMihEZXNjT3duIHwgZW9yIHwgUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRlb3IgPSBsZTMyX3RvX2NwdShkZXNjLVx1MDAzZW9wdHMxKSBcdTAwMjYgUmluZ0VuZDtcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMiA9IGNwdV90b19sZTMyKDApO1xuK1x0XHQvKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSByZWxlYXNpbmcgZGVzY3JpcHRvciAqL1xuK1x0XHRkbWFfd21iKCk7XG4rXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VvcHRzMSwgY3B1X3RvX2xlMzIoRGVzY093biB8IGVvciB8IFI4MTY5X1JYX0JVRl9TSVpFKSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKnJ0bDgxNjlfYWxsb2NfcnhfZGF0YShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbi1cdFx0XHRcdFx0ICBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIHVuc2lnbmVkIGludCBpbmRleClcbiB7XG4rXHRzdHJ1Y3QgUnhEZXNjICpkZXNjID0gcmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ICsgaW5kZXg7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbiBcdGludCBub2RlID0gZGV2X3RvX25vZGUoZCk7XG4gXHRkbWFfYWRkcl90IG1hcHBpbmc7XG5AQCAtNDE3Nyw1NiArNDQzNiwxMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICpydGw4MTY5X2FsbG9jX3J4X2RhdGEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4tXHRydGw4MTY5X21hcmtfdG9fYXNpYyhkZXNjKTtcbitcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpbmRleF0gPSBtYXBwaW5nO1xuK1x0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9SU1MpXG4rXHRcdGRlc2MtXHUwMDNlcnNzX2FkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTtcbitcdGVsc2VcbitcdFx0ZGVzYy1cdTAwM2VhZGRyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7XG4rXHRydGw4MTY5X21hcmtfdG9fYXNpYyh0cCwgZGVzYyk7XG4gXG4gXHRyZXR1cm4gZGF0YTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsODE2OV9yeF9jbGVhcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbitzdGF0aWMgdm9pZCBydGw4MTY5X3J4X2NsZWFyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHRcdCAgICAgc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZylcbiB7XG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5VTV9SWF9ERVNDIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VSeF9kYXRhYnVmZltpXTsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOVU1fUlhfREVTQyBcdTAwMjZcdTAwMjYgcmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXTsgaSsrKSB7XG4gXHRcdGRtYV91bm1hcF9wYWdlKHRwX3RvX2Rldih0cCksXG4tXHRcdFx0ICAgICAgIGxlNjRfdG9fY3B1KHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIpLFxuK1x0XHRcdCAgICAgICByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbaV0sXG4gXHRcdFx0ICAgICAgIFI4MTY5X1JYX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuLVx0XHRfX2ZyZWVfcGFnZXModHAtXHUwMDNlUnhfZGF0YWJ1ZmZbaV0sIGdldF9vcmRlcihSODE2OV9SWF9CVUZfU0laRSkpO1xuLVx0XHR0cC1cdTAwM2VSeF9kYXRhYnVmZltpXSA9IE5VTEw7XG4tXHRcdHRwLVx1MDAzZVJ4RGVzY0FycmF5W2ldLmFkZHIgPSAwO1xuLVx0XHR0cC1cdTAwM2VSeERlc2NBcnJheVtpXS5vcHRzMSA9IDA7XG4rXHRcdF9fZnJlZV9wYWdlcyhyaW5nLVx1MDAzZXJ4X2RhdGFidWZmW2ldLCBnZXRfb3JkZXIoUjgxNjlfUlhfQlVGX1NJWkUpKTtcbitcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IE5VTEw7XG4rXHRcdHJpbmctXHUwMDNlcnhfZGVzY19waHlfYWRkcltpXSA9IDA7XG4rXHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKSB7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLnJzc19hZGRyID0gMDtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0ucnNzX29wdHMxID0gMDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXlbaV0uYWRkciA9IDA7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2ldLm9wdHMxID0gMDtcbitcdFx0fVxuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0ZGVzYy1cdTAwM2Vyc3Nfb3B0czEgfD0gY3B1X3RvX2xlMzIoUmluZ0VuZCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0ZGVzYy1cdTAwM2VvcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdFx0YnJlYWs7XG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyBpbnQgcnRsODE2OV9yeF9maWxsKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nKVxuIHtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqZGF0YTtcbiBcbi1cdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgdHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdFx0ZGF0YSA9IHJ0bDgxNjlfYWxsb2NfcnhfZGF0YSh0cCwgcmluZywgaSk7XG4gXHRcdGlmICghZGF0YSkge1xuLVx0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuK1x0XHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIHJpbmcpO1xuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHR9XG4tXHRcdHRwLVx1MDAzZVJ4X2RhdGFidWZmW2ldID0gZGF0YTtcbitcdFx0cmluZy1cdTAwM2VyeF9kYXRhYnVmZltpXSA9IGRhdGE7XG4gXHR9XG4gXG4gXHQvKiBtYXJrIGFzIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqL1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXlbTlVNX1JYX0RFU0MgLSAxXS5vcHRzMSB8PSBjcHVfdG9fbGUzMihSaW5nRW5kKTtcbitcdHJ0bDgxNjlfbWFya19hc19sYXN0X2Rlc2NyaXB0b3IodHAsIFx1MDAyNnJpbmctXHUwMDNlcnhfZGVzY19hcnJheVtOVU1fUlhfREVTQyAtIDFdKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgxNjlfYWxsb2NfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRyaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgPSBkbWFfYWxsb2NfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFx0XHQgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0XHRcdCBcdTAwMjZyaW5nLVx1MDAzZXJ4X3BoeV9hZGRyLFxuK1x0XHRcdFx0XHRcdFx0IEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXJpbmctXHUwMDNlcnhfZGVzY19hcnJheSlcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfcnhfZGVzYyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1x0XHRpZiAocmluZy1cdTAwM2VyeF9kZXNjX2FycmF5KSB7XG4rXHRcdFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgUjgxNjlfUlhfUklOR19CWVRFUyxcbitcdFx0XHRcdFx0ICByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXksXG4rXHRcdFx0XHRcdCAgcmluZy1cdTAwM2VyeF9waHlfYWRkcik7XG4rXHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5ID0gTlVMTDtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgaW50IHJ0bDgxNjlfaW5pdF9yaW5nKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdGludCBpLCByZXQ7XG4rXG4gXHRydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHRwKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19pbml0KHRwKTtcbiBcbiBcdG1lbXNldCh0cC1cdTAwM2V0eF9za2IsIDAsIHNpemVvZih0cC1cdTAwM2V0eF9za2IpKTtcbi1cdG1lbXNldCh0cC1cdTAwM2VSeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHRwLVx1MDAzZVJ4X2RhdGFidWZmKSk7XG4gXG4tXHRyZXR1cm4gcnRsODE2OV9yeF9maWxsKHRwKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcgPSBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldO1xuK1xuK1x0XHRtZW1zZXQocmluZy1cdTAwM2VyeF9kYXRhYnVmZiwgMCwgc2l6ZW9mKHJpbmctXHUwMDNlcnhfZGF0YWJ1ZmYpKTtcbitcdFx0cmV0ID0gcnRsODE2OV9yeF9maWxsKHRwLCByaW5nKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9jbGVhcjtcbitcdH1cbitcdHJldHVybiAwO1xuK1xuK2Vycl9jbGVhcjpcbitcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRydGw4MTY5X3J4X2NsZWFyKHRwLCBcdTAwMjZ0cC1cdTAwM2VyeF9yaW5nW2ldKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdW5tYXBfdHhfc2tiKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1bnNpZ25lZCBpbnQgZW50cnkpXG5AQCAtNDI2Niw5ICs0NTk3LDI1IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdHhfY2xlYXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXRkZXZfcmVzZXRfcXVldWUodHAtXHUwMDNlZGV2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsODE2OV9uYXBpX2Rpc2FibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmFwaV9kaXNhYmxlKFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfbmFwaV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdG5hcGlfZGlzYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9kaXNhYmxlKHRwKTtcbiBcbiBcdC8qIEdpdmUgYSByYWNpbmcgaGFyZF9zdGFydF94bWl0IGEgZmV3IGN5Y2xlcyB0byBjb21wbGV0ZS4gKi9cbiBcdHN5bmNocm9uaXplX25ldCgpO1xuQEAgLTQzMDMsMTggKzQ2NTAsMzAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9jbGVhbnVwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyh0cCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9yZXNldF93b3JrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcnhfZGVzY19yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRpbnQgaTtcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcbitcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIE5VTV9SWF9ERVNDOyBqKyspIHtcbitcdFx0XHRkbWFfYWRkcl90IHBoeV9hZGRyID0gcmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2pdO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSA9PSBSWF9ERVNDX1RZUEVfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VyeF9kZXNjX2FycmF5W2pdLnJzc19hZGRyID0gY3B1X3RvX2xlNjQocGh5X2FkZHIpO1xuK1x0XHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCByaW5nLVx1MDAzZXJ4X2Rlc2NfYXJyYXkgKyBqKTtcbitcdFx0fVxuK1x0fVxuK31cbiBcbitzdGF0aWMgdm9pZCBydGxfcmVzZXRfd29yayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKHRwLVx1MDAzZWRldik7XG4gXG4gXHRydGw4MTY5X2NsZWFudXAodHApO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlVNX1JYX0RFU0M7IGkrKylcbi1cdFx0cnRsODE2OV9tYXJrX3RvX2FzaWModHAtXHUwMDNlUnhEZXNjQXJyYXkgKyBpKTtcbitcdHJ0bDgxNjlfcnhfZGVzY19yZXNldCh0cCk7XG4gXG4tXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbitcdHJ0bDgxNjlfbmFwaV9lbmFibGUodHApO1xuIFx0cnRsX2h3X3N0YXJ0KHRwKTtcbiB9XG4gXG5AQCAtNDc1OCwzMCArNTExNywxMTEgQEAgc3RhdGljIGlubGluZSBpbnQgcnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpXG4gXHRyZXR1cm4gKHN0YXR1cyBcdTAwMjYgKEZpcnN0RnJhZyB8IExhc3RGcmFnKSkgIT0gKEZpcnN0RnJhZyB8IExhc3RGcmFnKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgb3B0czEpXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfaGFzaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBSeERlc2MgKmRlc2MsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHUzMiByc3NfaGVhZGVyX2luZm87XG4rXHR1MzIgaGFzaF92YWw7XG4rXG4rXHRpZiAoISh0cC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfUlhIQVNIKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cnNzX2hlYWRlcl9pbmZvID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX2luZm8pO1xuK1xuK1x0aWYgKCEocnNzX2hlYWRlcl9pbmZvIFx1MDAyNiBSWFNfUlNTX0wzX1RZUEVfTUFTSykpXG4rXHRcdHJldHVybjtcbitcbitcdGhhc2hfdmFsID0gbGUzMl90b19jcHUoZGVzYy1cdTAwM2Vyc3NfZHdvcmQucnNzX3Jlc3VsdCk7XG4rXG4rXHRza2Jfc2V0X2hhc2goc2tiLCBoYXNoX3ZhbCxcbitcdFx0ICAgICAoUlhTX1JTU19MNF9UWVBFX01BU0sgXHUwMDI2IHJzc19oZWFkZXJfaW5mbykgP1xuK1x0XHQgICAgIFBLVF9IQVNIX1RZUEVfTDQgOiBQS1RfSEFTSF9UWVBFX0wzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxNjlfcnhfY3N1bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICB1MzIgb3B0czEpXG4ge1xuLVx0dTMyIHN0YXR1cyA9IG9wdHMxIFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xuK1x0Ym9vbCBjc3VtX29rID0gZmFsc2U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlKSB7XG4rXHRjYXNlIFJYX0RFU0NfVFlQRV9SU1M6XG4rXHRcdGlmICgoKG9wdHMxIFx1MDAyNiBSWF9UQ1BUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVENQRl9ERVNDX1JTUykpIHx8XG4rXHRcdCAgICAoKG9wdHMxIFx1MDAyNiBSWF9VRFBUX0RFU0NfUlNTKSBcdTAwMjZcdTAwMjYgIShvcHRzMSBcdTAwMjYgUlhfVURQRl9ERVNDX1JTUykpKVxuK1x0XHRcdGNzdW1fb2sgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6IHtcbitcdFx0dTMyIHN0YXR1cyA9IG9wdHMxIFx1MDAyNiAoUnhQcm90b01hc2sgfCBSeENTRmFpbE1hc2spO1xuK1xuK1x0XHRpZiAoc3RhdHVzID09IFJ4UHJvdG9UQ1AgfHwgc3RhdHVzID09IFJ4UHJvdG9VRFApXG4rXHRcdFx0Y3N1bV9vayA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0fVxuIFxuLVx0aWYgKHN0YXR1cyA9PSBSeFByb3RvVENQIHx8IHN0YXR1cyA9PSBSeFByb3RvVURQKVxuK1x0aWYgKGNzdW1fb2spXG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdGVsc2VcbiBcdFx0c2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0KVxuK3N0YXRpYyBfX2xlMzIgcnRsODE2OV9yeF9kZXNjX29wdHMxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgUnhEZXNjICpkZXNjKVxuK3tcbitcdHN3aXRjaCAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUpIHtcbitcdGNhc2UgUlhfREVTQ19UWVBFX1JTUzpcbitcdFx0cmV0dXJuIFJFQURfT05DRShkZXNjLVx1MDAzZXJzc19vcHRzMSk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYm9vbCBydGw4MTY5X2NoZWNrX3J4X2Rlc2NfZXJyb3Ioc3RydWN0IHJ0bDgxNjlfcnhfcmluZyAqcmluZyxcbitcdFx0XHRcdFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG4rXHRcdFx0XHRcdHUzMiBzdGF0dXMpXG4re1xuK1x0c3dpdGNoICh0cC1cdTAwM2Vpbml0X3J4X2Rlc2NfdHlwZSkge1xuK1x0Y2FzZSBSWF9ERVNDX1RZUEVfUlNTOlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSWF9SRVNfUlNTKSkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0aWYgKHN0YXR1cyBcdTAwMjYgUlhfUlVOVF9SU1MpXG4rXHRcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSWF9DUkNfUlNTKVxuK1x0XHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9jcmNfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4rXHRcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKztcbitcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeENSQylcbitcdFx0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfY3JjX2Vycm9ycysrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxuK1x0XHQgIHN0cnVjdCBydGw4MTY5X3J4X3JpbmcgKnJpbmcsIGludCBidWRnZXQsXG4rXHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuIFx0aW50IGNvdW50O1xuIFxuLVx0Zm9yIChjb3VudCA9IDA7IGNvdW50IFx1MDAzYyBidWRnZXQ7IGNvdW50KyssIHRwLVx1MDAzZWN1cl9yeCsrKSB7XG4tXHRcdHVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgZW50cnkgPSB0cC1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbi1cdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHRwLVx1MDAzZVJ4RGVzY0FycmF5ICsgZW50cnk7XG4rXHRmb3IgKGNvdW50ID0gMDsgY291bnQgXHUwMDNjIGJ1ZGdldDsgY291bnQrKywgcmluZy1cdTAwM2VjdXJfcngrKykge1xuK1x0XHR1bnNpZ25lZCBpbnQgcGt0X3NpemUsIGVudHJ5ID0gcmluZy1cdTAwM2VjdXJfcnggJSBOVU1fUlhfREVTQztcbitcdFx0c3RydWN0IFJ4RGVzYyAqZGVzYyA9IHJpbmctXHUwMDNlcnhfZGVzY19hcnJheSArIGVudHJ5O1xuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0XHRjb25zdCB2b2lkICpyeF9idWY7XG4gXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdFx0dTMyIHN0YXR1cztcbiBcbi1cdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlb3B0czEpKTtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUocnRsODE2OV9yeF9kZXNjX29wdHMxKHRwLCBkZXNjKSk7XG4gXHRcdGlmIChzdGF0dXMgXHUwMDI2IERlc2NPd24pXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtNDc5MSwyMCArNTIzMSwyNCBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKi9cbiBcdFx0ZG1hX3JtYigpO1xuIFxuLVx0XHRpZiAodW5saWtlbHkoc3RhdHVzIFx1MDAyNiBSeFJFUykpIHtcbitcdFx0aWYgKHJ0bDgxNjlfY2hlY2tfcnhfZGVzY19lcnJvcihyaW5nLCB0cCwgc3RhdHVzKSkge1xuIFx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4gXHRcdFx0XHRuZXRkZXZfd2FybihkZXYsIFwiUnggRVJST1IuIHN0YXR1cyA9ICUwOHhcXG5cIixcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cyk7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Vycm9ycysrO1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IChSeFJXVCB8IFJ4UlVOVCkpXG4tXHRcdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuLVx0XHRcdGlmIChzdGF0dXMgXHUwMDI2IFJ4Q1JDKVxuLVx0XHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnMrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJpbmctXHUwMDNlc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJpbmctXHUwMDNlc3RhdHMucnhfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXG4gXHRcdFx0aWYgKCEoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1JYQUxMKSlcbiBcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuLVx0XHRcdGVsc2UgaWYgKHN0YXR1cyBcdTAwMjYgUnhSV1QgfHwgIShzdGF0dXMgXHUwMDI2IChSeFJVTlQgfCBSeENSQykpKVxuLVx0XHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4rXG4rXHRcdFx0aWYgKHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID09IFJYX0RFU0NfVFlQRV9ERUZBVUxUKSB7XG4rXHRcdFx0XHRpZiAoc3RhdHVzIFx1MDAyNiBSeFJXVCB8fCAhKHN0YXR1cyBcdTAwMjYgKFJ4UlVOVCB8IFJ4Q1JDKSkpXG4rXHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRpZiAoIShzdGF0dXMgXHUwMDI2IChSWFJVTlRfUlNTIHwgUlhDUkNfUlNTKSkpXG4rXHRcdFx0XHRcdGdvdG8gcmVsZWFzZV9kZXNjcmlwdG9yO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRwa3Rfc2l6ZSA9IHN0YXR1cyBcdTAwMjYgR0VOTUFTSygxMywgMCk7XG5AQCAtNDgxNSwxOSArNTI1OSwyMyBAQCBzdGF0aWMgaW50IHJ0bF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGJ1ZGdldFxuIFx0XHQgKiBUaGV5IGFyZSBzZWVuIGFzIGEgc3ltcHRvbSBvZiBvdmVyLW10dSBzaXplZCBmcmFtZXMuXG4gXHRcdCAqL1xuIFx0XHRpZiAodW5saWtlbHkocnRsODE2OV9mcmFnbWVudGVkX2ZyYW1lKHN0YXR1cykpKSB7XG4tXHRcdFx0ZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byByZWxlYXNlX2Rlc2NyaXB0b3I7XG4gXHRcdH1cbiBcbi1cdFx0c2tiID0gbmFwaV9hbGxvY19za2IoXHUwMDI2dHAtXHUwMDNlbmFwaSwgcGt0X3NpemUpO1xuK1x0XHRza2IgPSBuYXBpX2FsbG9jX3NrYihuYXBpLCBwa3Rfc2l6ZSk7XG4gXHRcdGlmICh1bmxpa2VseSghc2tiKSkge1xuLVx0XHRcdGRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbitcdFx0XHRyaW5nLVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIHJlbGVhc2VfZGVzY3JpcHRvcjtcbiBcdFx0fVxuIFxuLVx0XHRhZGRyID0gbGU2NF90b19jcHUoZGVzYy1cdTAwM2VhZGRyKTtcbi1cdFx0cnhfYnVmID0gcGFnZV9hZGRyZXNzKHRwLVx1MDAzZVJ4X2RhdGFidWZmW2VudHJ5XSk7XG4rXHRcdGFkZHIgPSByaW5nLVx1MDAzZXJ4X2Rlc2NfcGh5X2FkZHJbZW50cnldO1xuK1x0XHRyeF9idWYgPSBwYWdlX2FkZHJlc3MocmluZy1cdTAwM2VyeF9kYXRhYnVmZltlbnRyeV0pO1xuIFxuIFx0XHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkLCBhZGRyLCBwa3Rfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiBcdFx0cHJlZmV0Y2gocnhfYnVmKTtcbkBAIC00ODM2LDE5ICs1Mjg0LDI2IEBAIHN0YXRpYyBpbnQgcnRsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYnVkZ2V0XG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBwa3Rfc2l6ZTtcbiBcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZCwgYWRkciwgcGt0X3NpemUsIERNQV9GUk9NX0RFVklDRSk7XG4gXG4tXHRcdHJ0bDgxNjlfcnhfY3N1bShza2IsIHN0YXR1cyk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlIDEpXG4rXHRcdFx0cnRsODE2OV9yeF9oYXNoKHRwLCBkZXNjLCBza2IpO1xuK1x0XHRydGw4MTY5X3J4X2NzdW0odHAsIHNrYiwgc3RhdHVzKTtcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpO1xuIFxuLVx0XHRydGw4MTY5X3J4X3ZsYW5fdGFnKGRlc2MsIHNrYik7XG4rXHRcdHJ0bDgxNjlfcnhfdmxhbl90YWcodHAsIGRlc2MsIHNrYik7XG4gXG4tXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVClcbi1cdFx0XHRkZXYtXHUwMDNlc3RhdHMubXVsdGljYXN0Kys7XG4rXHRcdGlmIChza2ItXHUwMDNlcGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0cmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3QrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwKTtcbitcdFx0fVxuIFxuLVx0XHRuYXBpX2dyb19yZWNlaXZlKFx1MDAyNnRwLVx1MDAzZW5hcGksIHNrYik7XG4rXHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiBcbiBcdFx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHBrdF9zaXplKTtcbiByZWxlYXNlX2Rlc2NyaXB0b3I6XG4tXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKGRlc2MpO1xuK1x0XHRpZiAodHAtXHUwMDNlaW5pdF9yeF9kZXNjX3R5cGUgPT0gUlhfREVTQ19UWVBFX1JTUylcbitcdFx0XHRkZXNjLVx1MDAzZXJzc19hZGRyID0gY3B1X3RvX2xlNjQocmluZy1cdTAwM2VyeF9kZXNjX3BoeV9hZGRyW2VudHJ5XSk7XG4rXHRcdHJ0bDgxNjlfbWFya190b19hc2ljKHRwLCBkZXNjKTtcbiBcdH1cbiBcbiBcdHJldHVybiBjb3VudDtcbkBAIC00ODU2LDggKzUzMTEsMTIgQEAgc3RhdGljIGludCBydGxfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBidWRnZXRcbiBcbiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGV2X2luc3RhbmNlO1xuLVx0dTMyIHN0YXR1cyA9IHJ0bF9nZXRfZXZlbnRzKHRwKTtcbitcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwO1xuK1x0dTMyIHN0YXR1cztcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYobmFwaS1cdTAwM2VkZXYpO1xuK1x0c3RhdHVzID0gcnRsX2dldF9ldmVudHModHApO1xuIFxuIFx0aWYgKChzdGF0dXMgXHUwMDI2IDB4ZmZmZikgPT0gMHhmZmZmIHx8ICEoc3RhdHVzIFx1MDAyNiB0cC1cdTAwM2VpcnFfbWFzaykpXG4gXHRcdHJldHVybiBJUlFfTk9ORTtcbkBAIC00ODczLDEzICs1MzMyLDExNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbi1cdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRuYXBpX3NjaGVkdWxlKG5hcGkpO1xuIG91dDpcbiBcdHJ0bF9hY2tfZXZlbnRzKHRwLCBzdGF0dXMpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGw4MTY5X2ZyZWVfb25lX2lycShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGkpXG4re1xuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuK1x0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1FVRVVFUylcbitcdFx0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdFx0ZWxzZSBpZiAoaSA9PSBNU0lYX0lEX1ZFQ19NQVBfTElOS0NIRylcbitcdFx0XHRwY2lfZnJlZV9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSwgdHApO1xuK1x0fSBlbHNlIHtcbitcdFx0cGNpX2ZyZWVfaXJxKHRwLVx1MDAzZXBjaV9kZXYsIGksIFx1MDAyNnRwLVx1MDAzZXJ0bDgxNjlfbmFwaVtpXSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZnJlZV9pcnEoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZWlycV9udmVjczsgaSsrKVxuK1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfZGlzYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdFx0ICAgICAgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSU1SX0NMRUFSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2NsZWFyX2h3X2lzcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IG1lc3NhZ2VfaWQpXG4re1xuK1x0UlRMX1czMih0cCwgSVNSX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2VuYWJsZV9od19pbnRlcnJ1cHRfbXNpeChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCxcbitcdFx0XHRcdFx0ICAgICBpbnQgbWVzc2FnZV9pZClcbit7XG4rXHRSVExfVzMyKHRwLCBJTVJfU0VUX1ZFQ19NQVBfUkVHLCBCSVQobWVzc2FnZV9pZCkpO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4re1xuK1x0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGV2X2luc3RhbmNlO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXHRpbnQgbWVzc2FnZV9pZDtcbitcbitcdHRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdG1lc3NhZ2VfaWQgPSBuYXBpIC0gdHAtXHUwMDNlcnRsODE2OV9uYXBpO1xuK1xuK1x0cnRsODE2OV9kaXNhYmxlX2h3X2ludGVycnVwdF9tc2l4KHRwLCBtZXNzYWdlX2lkKTtcbitcdHJ0bDgxNjlfY2xlYXJfaHdfaXNyKHRwLCBtZXNzYWdlX2lkKTtcbitcbitcdG5hcGlfc2NoZWR1bGUobmFwaSk7XG4rXG4rXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rfVxuK1xuK3N0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdF9vdGhlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkZXZfaW5zdGFuY2U7XG4rXG4rXHRydGw4MTY5X2NsZWFyX2h3X2lzcih0cCwgTVNJWF9JRF9WRUNfTUFQX0xJTktDSEcpO1xuK1x0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3JlcXVlc3RfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGk7XG4rXHRpbnQgaSwgcmM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VpcnFfbnZlY3M7IGkrKykge1xuK1x0XHRuYXBpID0gXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldO1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKSB7XG4rXHRcdFx0aWYgKGkgXHUwMDNjIFI4MTY5X01BWF9RVUVVRVMpXG4rXHRcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuK1x0XHRcdFx0XHRcdCAgICAgcnRsODE2OV9pbnRlcnJ1cHRfbXNpeCxcbitcdFx0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbitcdFx0XHRlbHNlIGlmIChpID09IE1TSVhfSURfVkVDX01BUF9MSU5LQ0hHKVxuK1x0XHRcdFx0cmMgPSBwY2lfcmVxdWVzdF9pcnEodHAtXHUwMDNlcGNpX2RldiwgaSxcbitcdFx0XHRcdFx0XHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0X290aGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgTlVMTCwgdHAsIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0XHQgICAgIGRldi1cdTAwM2VuYW1lLCBpKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRyYyA9IHBjaV9yZXF1ZXN0X2lycSh0cC1cdTAwM2VwY2lfZGV2LCBpLFxuK1x0XHRcdFx0XHQgICAgIHJ0bDgxNjlfaW50ZXJydXB0LFxuK1x0XHRcdFx0XHQgICAgIE5VTEwsIG5hcGksIFwiJXMtJWRcIixcbitcdFx0XHRcdFx0ICAgICBkZXYtXHUwMDNlbmFtZSwgaSk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHJjKVxuK1x0XHRcdGdvdG8gZnJlZV9pcnE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2lycTpcbitcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRydGw4MTY5X2ZyZWVfb25lX2lycSh0cCwgaSk7XG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9XG5AQCAtNDkxNCwxMyArNTQ3NCwxNCBAQCBzdGF0aWMgdm9pZCBydGxfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIHtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIG5hcGkpO1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLVx1MDAzZWRldjtcbi1cdGludCB3b3JrX2RvbmU7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5hcGktXHUwMDNlZGV2KTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLVx1MDAzZWRldjtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuIFxuIFx0cnRsX3R4KGRldiwgdHAsIGJ1ZGdldCk7XG4gXG4tXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgYnVkZ2V0KTtcbitcdC8qIHJ0bDgxNjlfcG9sbCgpIGlzIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgc2luZ2xlIFJYIHJpbmcuICovXG4rXHR3b3JrX2RvbmUgPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1swXSwgYnVkZ2V0LCBuYXBpKTtcbiBcbiBcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCBcdTAwMjZcdTAwMjYgbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSkpXG4gXHRcdHJ0bF9pcnFfZW5hYmxlKHRwKTtcbkBAIC01MDM1LDcgKzU1OTYsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuLVx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4rXHRydGw4MTY5X25hcGlfZW5hYmxlKHRwKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuIFxuQEAgLTUwNTEsMTggKzU2MTIsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0pO1xuIFxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBcbiBcdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4gXG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1RYX1JJTkdfQllURVMsIHRwLVx1MDAzZVR4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlVHhQaHlBZGRyKTtcbiBcdHRwLVx1MDAzZVR4RGVzY0FycmF5ID0gTlVMTDtcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gTlVMTDtcbitcdHJ0bDgxNjlfZnJlZV9yeF9kZXNjKHRwKTtcbiBcbiBcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuQEAgLTUwNzMsOCArNTYzMywxOCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgdm9pZCBydGw4MTY5X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRpbnQgbmFwaV9udW07XG4rXG4rXHRuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuIFxuLVx0cnRsODE2OV9pbnRlcnJ1cHQodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKykge1xuK1x0XHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZSAxKVxuK1x0XHRcdHJ0bDgxNjlfaW50ZXJydXB0X21zaXgocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0cnRsODE2OV9pbnRlcnJ1cHQocGNpX2lycV92ZWN0b3IodHAtXHUwMDNlcGNpX2RldiwgaSksXG4rXHRcdFx0XHRcdCAgXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcdH1cbiB9XG4gI2VuZGlmXG4gXG5AQCAtNTA4Miw3ICs1NjUyLDYgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2Rldjtcbi1cdHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7XG4gXHRpbnQgcmV0dmFsID0gLUVOT01FTTtcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuQEAgLTUwOTYsMTAgKzU2NjUsOCBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAoIXRwLVx1MDAzZVR4RGVzY0FycmF5KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHRwLVx1MDAzZVJ4RGVzY0FycmF5ID0gZG1hX2FsbG9jX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLFxuLVx0XHRcdFx0XHQgICAgIFx1MDAyNnRwLVx1MDAzZVJ4UGh5QWRkciwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXRwLVx1MDAzZVJ4RGVzY0FycmF5KVxuLVx0XHRnb3RvIGVycl9mcmVlX3R4XzA7XG4rXHRpZiAocnRsODE2OV9hbGxvY19yeF9kZXNjKHRwKSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfZnJlZV9yeF8xO1xuIFxuIFx0cmV0dmFsID0gcnRsODE2OV9pbml0X3JpbmcodHApO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbkBAIC01MTA3LDggKzU2NzQsNyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRydGxfcmVxdWVzdF9maXJtd2FyZSh0cCk7XG4gXG4tXHRpcnFmbGFncyA9IHBjaV9kZXZfbXNpX2VuYWJsZWQocGRldikgPyBJUlFGX05PX1RIUkVBRCA6IElSUUZfU0hBUkVEO1xuLVx0cmV0dmFsID0gcmVxdWVzdF9pcnEodHAtXHUwMDNlaXJxLCBydGw4MTY5X2ludGVycnVwdCwgaXJxZmxhZ3MsIGRldi1cdTAwM2VuYW1lLCB0cCk7XG4rXHRyZXR2YWwgPSBydGw4MTY5X3JlcXVlc3RfaXJxKHRwKTtcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbkBAIC01MTI1LDE1ICs1NjkxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiByZXR2YWw7XG4gXG4gZXJyX2ZyZWVfaXJxOlxuLVx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4rXHRydGw4MTY5X2ZyZWVfaXJxKHRwKTtcbiBlcnJfcmVsZWFzZV9md18yOlxuIFx0cnRsX3JlbGVhc2VfZmlybXdhcmUodHApO1xuLVx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspXG4rXHRcdHJ0bDgxNjlfcnhfY2xlYXIodHAsIFx1MDAyNnRwLVx1MDAzZXJ4X3JpbmdbaV0pO1xuIGVycl9mcmVlX3J4XzE6XG4tXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4tXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuLVx0dHAtXHUwMDNlUnhEZXNjQXJyYXkgPSBOVUxMO1xuLWVycl9mcmVlX3R4XzA6XG4rXHRydGw4MTY5X2ZyZWVfcnhfZGVzYyh0cCk7XG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfVFhfUklOR19CWVRFUywgdHAtXHUwMDNlVHhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VUeFBoeUFkZHIpO1xuIFx0dHAtXHUwMDNlVHhEZXNjQXJyYXkgPSBOVUxMO1xuQEAgLTUxNTIsNiArNTcxNiwyNyBAQCBydGw4MTY5X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG4gXHRuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdGF0cywgXHUwMDI2ZGV2LVx1MDAzZXN0YXRzKTtcbiBcdGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdGF0cywgZGV2LVx1MDAzZXRzdGF0cyk7XG4gXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHAtXHUwMDNlbnVtX3J4X3JpbmdzOyBpKyspIHtcbitcdFx0dTY0IGVycm9ycywgZHJvcHBlZCwgbGVuZ3RoX2Vycm9ycywgY3JjX2Vycm9ycywgbXVsdGljYXN0O1xuK1x0XHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyaW5nID0gXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXTtcbitcdFx0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0XHRkbyB7XG4rXHRcdFx0c3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oXHUwMDI2cmluZy1cdTAwM2VzdGF0cy5zeW5jcCk7XG4rXHRcdFx0ZXJyb3JzID0gcmluZy1cdTAwM2VzdGF0cy5yeF9lcnJvcnM7XG4rXHRcdFx0ZHJvcHBlZCA9IHJpbmctXHUwMDNlc3RhdHMucnhfZHJvcHBlZDtcbitcdFx0XHRsZW5ndGhfZXJyb3JzID0gcmluZy1cdTAwM2VzdGF0cy5yeF9sZW5ndGhfZXJyb3JzO1xuK1x0XHRcdGNyY19lcnJvcnMgPSByaW5nLVx1MDAzZXN0YXRzLnJ4X2NyY19lcnJvcnM7XG4rXHRcdFx0bXVsdGljYXN0ID0gcmluZy1cdTAwM2VzdGF0cy5tdWx0aWNhc3Q7XG4rXHRcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyaW5nLVx1MDAzZXN0YXRzLnN5bmNwLCBzdGFydCkpO1xuK1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9lcnJvcnMgKz0gZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9kcm9wcGVkICs9IGRyb3BwZWQ7XG4rXHRcdHN0YXRzLVx1MDAzZXJ4X2xlbmd0aF9lcnJvcnMgKz0gbGVuZ3RoX2Vycm9ycztcbitcdFx0c3RhdHMtXHUwMDNlcnhfY3JjX2Vycm9ycyArPSBjcmNfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VtdWx0aWNhc3QgKz0gbXVsdGljYXN0O1xuK1x0fVxuK1xuIFx0LypcbiBcdCAqIEZldGNoIGFkZGl0aW9uYWwgY291bnRlciB2YWx1ZXMgbWlzc2luZyBpbiBzdGF0cyBjb2xsZWN0ZWQgYnkgZHJpdmVyXG4gXHQgKiBmcm9tIHRhbGx5IGNvdW50ZXJzLlxuQEAgLTUyNzUsNiArNTg2MCwxNiBAQCBzdGF0aWMgdm9pZCBydGxfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByODE2OV9mcmVlX25hcGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IG5hcGlfbnVtID0gbWluKHRwLVx1MDAzZWlycV9udmVjcywgUjgxNjlfTUFYX1FVRVVFUyk7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgbmFwaV9udW07IGkrKylcbitcdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2dHAtXHUwMDNlcnRsODE2OV9uYXBpW2ldKTtcbitcbitcdGtmcmVlKHRwLVx1MDAzZXJ0bDgxNjlfbmFwaSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuQEAgLTUyODksNiArNTg4NCw5IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXHUwMDNlZGV2KTtcbiBcbitcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XG4rXHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbitcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG4gXG5AQCAtNTMyMCwxNSArNTkxOCw0OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFxuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfaXJxX21hc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dHAtXHUwMDNlaXJxX21hc2sgPSBSeE9LIHwgUnhFcnIgfCBUeE9LIHwgVHhFcnIgfCBMaW5rQ2hnO1xuK1x0aWYgKHRwLVx1MDAzZWlycV9udmVjcyBcdTAwM2UgMSkge1xuK1x0XHR0cC1cdTAwM2VpcnFfbWFzayA9IElTUklNUl9MSU5LQ0hHIHwgSVNSSU1SX1RPS19RMDtcbitcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHRwLVx1MDAzZW51bV9yeF9yaW5nczsgaSsrKVxuK1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IElTUklNUl9ST0tfUTAgXHUwMDNjXHUwMDNjIGk7XG4rXHR9IGVsc2Uge1xuK1x0XHR0cC1cdTAwM2VpcnFfbWFzayA9IFJ4T0sgfCBSeEVyciB8IFR4T0sgfCBUeEVyciB8IExpbmtDaGc7XG4gXG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxuLVx0XHR0cC1cdTAwM2VpcnFfbWFzayB8PSBTWVNFcnIgfCBSeEZJRk9PdmVyO1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KVxuK1x0XHRcdHRwLVx1MDAzZWlycV9tYXNrIHw9IFNZU0VyciB8IFJ4RklGT092ZXI7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZ2V0X21heF9pcnFfbnZlY3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdHJldHVybiBSODEyN19NQVhfTlVNX0lSUVZFQztcbitcdHJldHVybiBSODE2OV9JUlFfREVGQVVMVDtcbit9XG4rXG4rc3RhdGljIGludCBnZXRfbWluX2lycV9udmVjcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0cmV0dXJuIFI4MTI3X01JTl9OVU1fSVJRVkVDO1xuK1x0cmV0dXJuIFI4MTY5X0lSUV9ERUZBVUxUO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9yeF9yaW5nX251bShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRpZiAodHAtXHUwMDNlaXJxX252ZWNzIFx1MDAzZT0gZ2V0X21pbl9pcnFfbnZlY3ModHApKSB7XG4rXHRcdHVuc2lnbmVkIGludCByc3NfcXVldWVfbnVtID0gbmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKTtcbitcbitcdFx0dHAtXHUwMDNlbnVtX3J4X3JpbmdzID0gcm91bmRkb3duX3Bvd19vZl90d28obWluKHJzc19xdWV1ZV9udW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgdHAtXHUwMDNlaHdfc3VwcF9udW1fcnhfcXVldWVzKSk7XG4rXHRcdGlmICh0cC1cdTAwM2VudW1fcnhfcmluZ3MgXHUwMDNlPSAyKVxuK1x0XHRcdHRwLVx1MDAzZWluaXRfcnhfZGVzY190eXBlID0gUlhfREVTQ19UWVBFX1JTUztcbitcdH1cbiB9XG4gXG4gc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtXHUwMDNlcGNpX2RldjtcbiBcdHVuc2lnbmVkIGludCBmbGFncztcbitcdGludCBudmVjcztcbiBcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcbkBAIC01MzQ0LDcgKzU5NzYsMTggQEAgc3RhdGljIGludCBydGxfYWxsb2NfaXJxKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbi1cdHJldHVybiBwY2lfYWxsb2NfaXJxX3ZlY3RvcnModHAtXHUwMDNlcGNpX2RldiwgMSwgMSwgZmxhZ3MpO1xuK1x0bnZlY3MgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgZ2V0X21pbl9pcnFfbnZlY3ModHApLFxuK1x0XHRcdFx0ICAgICAgZ2V0X21heF9pcnFfbnZlY3ModHApLCBmbGFncyk7XG4rXG4rXHRpZiAobnZlY3MgXHUwMDNjIDApXG4rXHRcdG52ZWNzID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIGZsYWdzKTtcbitcbitcdGlmIChudmVjcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG52ZWNzO1xuK1xuK1x0dHAtXHUwMDNlaXJxX252ZWNzID0gbnZlY3M7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2FkZHJlc3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXG5AQCAtNTU5OSw2ICs2MjQyLDEwNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbF9tc2l4X3J4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmFwaS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cDtcbitcdGludCB3b3JrX2RvbmUgPSAwO1xuK1x0aW50IG1lc3NhZ2VfaWQ7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRtZXNzYWdlX2lkID0gbmFwaSAtIHRwLVx1MDAzZXJ0bDgxNjlfbmFwaTtcbitcbitcdGlmIChtZXNzYWdlX2lkIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3MpXG4rXHRcdHdvcmtfZG9uZSArPSBydGxfcngoZGV2LCB0cCwgXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1ttZXNzYWdlX2lkXSxcbitcdFx0XHRcdCAgICBidWRnZXQsIG5hcGkpO1xuK1xuK1x0aWYgKHdvcmtfZG9uZSBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiBuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIG1lc3NhZ2VfaWQpO1xuK1xuK1x0cmV0dXJuIHdvcmtfZG9uZTtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3BvbGxfbXNpeF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5hcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHA7XG4rXG4rXHR0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHQvKiBDdXJyZW50bHkgcjgxNjkgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBUeCByaW5nLlxuK1x0ICogVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIGEgcGVyLXJpbmcgVHggcHJvY2Vzc2luZyBsb29wIGhlcmUuXG4rXHQgKi9cbitcdHJ0bF90eChkZXYsIHRwLCBidWRnZXQpO1xuK1xuK1x0aWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSlcbitcdFx0cnRsODE2OV9lbmFibGVfaHdfaW50ZXJydXB0X21zaXgodHAsIChpbnQpKG5hcGkgLSB0cC1cdTAwM2VydGw4MTY5X25hcGkpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBSVEw4MTI3IE1TSS1YIHZlY3RvciBsYXlvdXQ6XG4rICogVmVjdG9ycyAwIC4uIChSeFFzIC0gMSlcdFx0OiBSeCBRdWV1ZXNcbisgKiBWZWN0b3JzIFJ4UXMgLi4gKFJ4UXMgKyBUeFFzIC0gMSlcdDogVHggUXVldWVzXG4rICogTkFQSSBpcyBvbmx5IGFsbG9jYXRlZCBmb3IgZGF0YSBwYXRoXG4rICovXG4rc3RhdGljIHZvaWQgcjgxNjlfaW5pdF9uYXBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGludCBuYXBpX251bSA9IG1pbih0cC1cdTAwM2VpcnFfbnZlY3MsIFI4MTY5X01BWF9RVUVVRVMpO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5hcGlfbnVtOyBpKyspIHtcbitcdFx0aW50ICgqcG9sbF9mbikoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCkgPSBydGw4MTY5X3BvbGw7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VpcnFfbnZlY3MgXHUwMDNlIDEpIHtcbitcdFx0XHRpZiAoaSBcdTAwM2MgUjgxNjlfTUFYX1JYX1FVRVVFUylcbitcdFx0XHRcdHBvbGxfZm4gPSBydGw4MTY5X3BvbGxfbXNpeF9yeDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRwb2xsX2ZuID0gcnRsODE2OV9wb2xsX21zaXhfdHg7XG4rXHRcdH1cbitcdFx0bmV0aWZfbmFwaV9hZGQodHAtXHUwMDNlZGV2LCBcdTAwMjZ0cC1cdTAwM2VydGw4MTY5X25hcGlbaV0sIHBvbGxfZm4pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBldGh0b29sX2NoYW5uZWxzICpjaClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4rXG4rXHRjaC1cdTAwM2VtYXhfcnggPSB0cC1cdTAwM2Vod19zdXBwX251bV9yeF9xdWV1ZXM7XG4rXHRjaC1cdTAwM2VtYXhfdHggPSAxO1xuK1xuK1x0Y2gtXHUwMDNlcnhfY291bnQgPSB0cC1cdTAwM2VudW1fcnhfcmluZ3M7XG4rXHRjaC1cdTAwM2V0eF9jb3VudCA9IDE7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbitcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4rXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUyxcbitcdC5nZXRfZHJ2aW5mb1x0XHQ9IHJ0bDgxNjlfZ2V0X2RydmluZm8sXG4rXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gcnRsODE2OV9nZXRfcmVnc19sZW4sXG4rXHQuZ2V0X2xpbmtcdFx0PSBldGh0b29sX29wX2dldF9saW5rLFxuK1x0LmdldF9jb2FsZXNjZVx0XHQ9IHJ0bF9nZXRfY29hbGVzY2UsXG4rXHQuc2V0X2NvYWxlc2NlXHRcdD0gcnRsX3NldF9jb2FsZXNjZSxcbitcdC5nZXRfcmVnc1x0XHQ9IHJ0bDgxNjlfZ2V0X3JlZ3MsXG4rXHQuZ2V0X3dvbFx0XHQ9IHJ0bDgxNjlfZ2V0X3dvbCxcbitcdC5zZXRfd29sXHRcdD0gcnRsODE2OV9zZXRfd29sLFxuK1x0LmdldF9zdHJpbmdzXHRcdD0gcnRsODE2OV9nZXRfc3RyaW5ncyxcbitcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbitcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4rXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4rXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbitcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuK1x0LmdldF9jaGFubmVsc1x0XHQ9IHJ0bDgxNjlfZ2V0X2NoYW5uZWxzLFxuK1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4rXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuK1x0LmdldF9wYXVzZXBhcmFtXHRcdD0gcnRsODE2OV9nZXRfcGF1c2VwYXJhbSxcbitcdC5zZXRfcGF1c2VwYXJhbVx0XHQ9IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0sXG4rXHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMsXG4rfTtcbitcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjA5LDcgKzYzNTMsMTAgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR1MzIgdHhjb25maWc7XG4gXHR1MzIgeGlkO1xuIFxuLVx0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldihcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mICgqdHApKTtcbitcdGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwKSxcbitcdFx0XHRcdCAgICAgIFI4MTY5X01BWF9UWF9RVUVVRVMsXG4rXHRcdFx0XHQgICAgICBSODE2OV9NQVhfUlhfUVVFVUVTKTtcbitcbiBcdGlmICghZGV2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC01Njg5LDYgKzY0MzYsMTMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbiBcbitcdGlmIChydGxfaHdfc3VwcG9ydF9yc3ModHApKSB7XG4rXHRcdHRwLVx1MDAzZXJzc19kYXRhID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZXJzc19kYXRhKSxcbitcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZXJzc19kYXRhKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuIFx0dHAtXHUwMDNlY3BfY21kID0gUlRMX1IxNih0cCwgQ1BsdXNDbWQpIFx1MDAyNiBDUENNRF9NQVNLO1xuIFxuIFx0aWYgKHNpemVvZihkbWFfYWRkcl90KSBcdTAwM2UgNCBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzE4IFx1MDAyNlx1MDAyNlxuQEAgLTU3MDMsMTEgKzY0NTcsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRydGxfaHdfcmVzZXQodHApO1xuIFxuK1x0cnRsX3NldHVwX3J4X3BhcmFtcyh0cCk7XG4rXG4gXHRyYyA9IHJ0bF9hbGxvY19pcnEodHApO1xuIFx0aWYgKHJjIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0XFxuXCIpO1xuIFxuLVx0dHAtXHUwMDNlaXJxID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XG4rXHRydGw4MTY5X3NldF9yeF9yaW5nX251bSh0cCk7XG4rXG4rXHRpZiAocnRsX2h3X3N1cHBvcnRfcnNzKHRwKSlcbitcdFx0cnRsODE2OV9pbml0X3Jzcyh0cCk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2dHAtXHUwMDNld2sud29yaywgcnRsX3Rhc2spO1xuIFx0ZGlzYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuQEAgLTU3MTYsMTMgKzY0NzUsMTYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZydGw4MTY5X2V0aHRvb2xfb3BzO1xuIFxuLVx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZ0cC1cdTAwM2VuYXBpLCBydGw4MTY5X3BvbGwpO1xuLVxuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxuIFx0XHRcdCAgIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XG4gXHRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTztcbiBcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuIFxuK1x0aWYgKHJ0bF9od19zdXBwb3J0X3Jzcyh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW51bV9yeF9yaW5ncyBcdTAwM2UgMSkge1xuK1x0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7XG4rXHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1JYSEFTSDtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBQcmV0ZW5kIHdlIGFyZSB1c2luZyBWTEFOczsgVGhpcyBieXBhc3NlcyBhIG5hc3R5IGJ1ZyB3aGVyZVxuIFx0ICogSW50ZXJydXB0cyBzdG9wIGZsb3dpbmcgb24gaGlnaCBsb2FkIG9uIDgxMTBTQ2QgY29udHJvbGxlcnMuXG5AQCAtNTc3OCw2ICs2NTQwLDEwIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0aWYgKGp1bWJvX21heClcbiBcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSBqdW1ib19tYXg7XG4gXG4rXHRyYyA9IG5ldGlmX3NldF9yZWFsX251bV9xdWV1ZXModHAtXHUwMDNlZGV2LCAxLCB0cC1cdTAwM2VudW1fcnhfcmluZ3MpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcmMsIFwic2V0IHR4L3J4IG51bSBmYWlsdXJlXFxuXCIpO1xuK1xuIFx0cnRsX3NldF9pcnFfbWFzayh0cCk7XG4gXG4gXHR0cC1cdTAwM2Vjb3VudGVycyA9IGRtYW1fYWxsb2NfY29oZXJlbnQgKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnRwLVx1MDAzZWNvdW50ZXJzKSxcbkBAIC01NzkyLDkgKzY1NTgsMjYgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRpZiAocmMpXG4gXHRcdHJldHVybiByYztcbiBcbitcdHRwLVx1MDAzZXJ4X3JpbmcgPSBrY2FsbG9jKHRwLVx1MDAzZW51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCBydGw4MTY5X3J4X3JpbmcpLFxuK1x0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuK1x0aWYgKCF0cC1cdTAwM2VyeF9yaW5nKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0cC1cdTAwM2VudW1fcnhfcmluZ3M7IGkrKylcbitcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2dHAtXHUwMDNlcnhfcmluZ1tpXS5zdGF0cy5zeW5jcCk7XG4rXG4rXHR0cC1cdTAwM2VydGw4MTY5X25hcGkgPSBrY2FsbG9jKHRwLVx1MDAzZWlycV9udmVjcywgc2l6ZW9mKHN0cnVjdCBuYXBpX3N0cnVjdCksXG4rXHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbitcdGlmICghdHAtXHUwMDNlcnRsODE2OV9uYXBpKSB7XG4rXHRcdGtmcmVlKHRwLVx1MDAzZXJ4X3JpbmcpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdHI4MTY5X2luaXRfbmFwaSh0cCk7XG4rXG4gXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuIFx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmFwaTtcbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MDMsOCArNjU4Niw5IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdHRwLVx1MDAzZWxlZHMgPSBydGw4MTY4X2luaXRfbGVkcyhkZXYpO1xuIFx0fVxuIFxuLVx0bmV0ZGV2X2luZm8oZGV2LCBcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWRcXG5cIixcbi1cdFx0ICAgIGNoaXAtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyLCBleHRfeGlkX3N0ciwgeGlkLCB0cC1cdTAwM2VpcnEpO1xuK1x0bmV0ZGV2X2luZm8oZGV2LCBcIiVzLCAlcE0sICVzWElEICV4LCBJUlEgJWQgKCVkIHRvdGFsKVxcblwiLFxuK1x0XHQgICAgY2hpcC1cdTAwM2VuYW1lLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGV4dF94aWRfc3RyLCB4aWQsXG4rXHRcdCAgICBwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgdHAtXHUwMDNlaXJxX252ZWNzKTtcbiBcbiBcdGlmIChqdW1ib19tYXgpXG4gXHRcdG5ldGRldl9pbmZvKGRldiwgXCJqdW1ibyBmZWF0dXJlcyBbZnJhbWVzOiAlZCBieXRlcywgdHggY2hlY2tzdW1taW5nOiAlc11cXG5cIixcbkBAIC01ODIxLDYgKzY2MDUsMTEgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfbmFwaTpcbitcdHI4MTY5X2ZyZWVfbmFwaSh0cCk7XG4rXHRrZnJlZSh0cC1cdTAwM2VyeF9yaW5nKTtcbitcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxNjlfcGNpX2RyaXZlciA9IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ1LjQ2MzgzNDU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3NTAxODI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6eiBhbmQsIGlmIHNvLCB3aGF0IGNvbmZpZ3VyYXRpb25zIG9yIHN5bWJvbHMgYXJlIGxpa2VseSB0byBiZSBpbXBvcnRhbnQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQgZHJpdmVyIHdhcyBtb2RpZmllZC4gQWgsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY2AuIFRoYXQncyB0aGUgUmVhbHRlayA4MTY5LCA4MTY4LCA4MTI1LCBvciA4MTI3IGV0aGVybmV0IGRyaXZlciwgcmlnaHQ/IE5vdyB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZHJpdmVyIGV2ZW4gZW11bGF0ZWQgaW4gUUVNVT8gQW5kIGlmIHNvIGlzIGl0IHdvcnRoIGJvdGhlcmluZyB0byBmdXp6LlxuXG5XYWl0IGEgc2Vjb25k4oCmIGluIFFFTVUsIHRoZSBlbXVsYXRlZCBSZWFsdGVrIGlzIGFjdHVhbGx5IHRoZSBydGw4MTM5LCB1c2luZyBgLW5ldCBuaWMsbW9kZWw9cnRsODEzOWAuIE9rYXksIHNvIGAtbmV0IG5pYyxtb2RlbD1ydGw4MTM5YCBpcyBlaXRoZXIgODEzOWNwIG9yIDgxMzkuIElzIHRoZSByODE2OSBvciBydGw4MTY5IGVtdWxhdGVkPyBXYWl0LCBsZXQgbWUgbGlzdCB0aGUgb3RoZXIgb3B0aW9ucyBRRU1VIGdpdmVzIHVzLiBJdCBoYXMgYHJ0bDgxMzlgLCBgZTEwMDBgLCBgZTEwMDBlYCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBuZTJrX3BjaWAsIGFuZCBgcGNuZXRgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCByZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IHNhaWQgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdC4uLlwiLiBMZXQncyBzZWU6IGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgYWxzbyBtZW50aW9uZWQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgYW5kIHRlYXItZG93biBjYWxsYmFja3MuIEdvdCBpdC4gU28sIGlzIFJlYWx0ZWsgODE2OSBQQ0kgaGFyZHdhcmUgb3IgaXMgaXQgYWNjZXNzaWJsZT8gUUVNVSBvbmx5IGhhcyBydGw4MTM5IChgaHcvbmV0L3J0bDgxMzkuY2ApLiBCdXQgd2FpdCEgQ2FuIHRoZSByODE2OSBkcml2ZXIgYmluZCB0byB0aGUgODEzOT8gSSBzaG91bGQgZ3JlcCBmb3IgYHJ0bDgxMzlgIHZzIGByODE2OWAgaW4gdGhlIGtlcm5lbCBvciBJIHNob3VsZCBqdXN0IGNoZWNrIHRoZSBQQ0kgSURzLiBJIG5lZWQgdG8gbWFrZSBhIHNvbGlkIGFzc2Vzc21lbnQgYmVmb3JlIEkgd2FzdGUgbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxODo0OS43Mzg4NTU4OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0Mzg1ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiODE2OVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjY2NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYz0xMzY9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2Mi1cXHRUeFBvbGxcXHRcXHQ9IDB4RDksXFx0LyogVGVsbCBjaGlwIHRvIGNoZWNrIFR4IGRlc2NyaXB0b3JzIGZvciB3b3JrICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYzoxNjM6XFx0UnhNYXhTaXplXFx0PSAweERBLCAvKiBNYXggc2l6ZSBvZiBhbiBSeCBwYWNrZXQgKDgxNjkgb25seSkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jLTE2NC1cXHRDcENtZFxcdFxcdD0gMHhFMCwgLyogQysgQ29tbWFuZCByZWdpc3RlciAoQysgbW9kZSBvbmx5KSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTc0PWNvbmZpZyA4MTM5X09MRF9SWF9SRVNFVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo4NDpjb25maWcgUjgxNjlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODU6XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04Ni1cXHRkZXBlbmRzIG9uIFBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTkzLVxcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6OTQ6XFx0ICBSVEw4MTY5IEdpZ2FiaXQgRXRoZXJuZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTUtXFx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05OS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MTAwOlxcdCAgd2lsbCBiZSBjYWxsZWQgcjgxNjkuICBUaGlzIGlzIHJlY29tbWVuZGVkLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMjpjb25maWcgUjgxNjlfTEVEU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMDQ6XFx0ZGVwZW5kcyBvbiBSODE2OSBcXHUwMDI2XFx1MDAyNiBMRURTX1RSSUdHRVJfTkVUREVWXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwNTpcXHRkZXBlbmRzIG9uICEoUjgxNjk9eSBcXHUwMDI2XFx1MDAyNiBMRURTX0NMQVNTPW0pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTEwNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHXzgxMzlUT08pICs9IDgxMzl0b28ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6ODpyODE2OS15ICs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6OTpyODE2OS0kKENPTkZJR19SODE2OV9MRURTKSArPSByODE2OV9sZWRzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19SODE2OSkgKz0gcjgxNjkub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtMTEtb2JqLSQoQ09ORklHX1JUQVNFKSArPSBydGFzZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6MjovKiByODE2OS5oOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmgtMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oPTE1PWVudW0gbWFjX3ZlcnNpb24ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4MDpzdHJ1Y3QgcnRsODE2OV9wcml2YXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo4MTpzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODM6dm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjg0OnUxNiBydGw4MTY4aF8yX2dldF9hZGNfYmlhc19pb2Zmc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODU6dTggcnRsODE2OGRfZWZ1c2VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODY6dm9pZCByODE2OV9od19waHlfY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04Ny1cXHRcXHRcXHQgZW51bSBtYWNfdmVyc2lvbiB2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaC04OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6ODk6dm9pZCByODE2OV9nZXRfbGVkX25hbWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oLTkwLVxcdFxcdFxcdGNoYXIgKmJ1ZiwgaW50IGJ1Zl9sZW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MTppbnQgcnRsODE2OF9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5MjppbnQgcnRsODE2OF9sZWRfbW9kX2N0cmwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBtYXNrLCB1MTYgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTM6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODE2OF9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuaDo5NDppbnQgcnRsODEyNV9nZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjk1OmludCBydGw4MTI1X3NldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGluZGV4LCB1MTYgbW9kZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5oOjk2OnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKnJ0bDgxMjVfaW5pdF9sZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5Lmg6OTc6dm9pZCByODE2OV9yZW1vdmVfbGVkcyhzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MjovKiByODE2OV9maXJtd2FyZS5jOiBSZWFsVGVrIDgxNjkvODE2OC84MTAxIGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuYzoxNDojaW5jbHVkZSBcXFwicjgxNjlfZmlybXdhcmUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmMtMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM9ODg9c3RhdGljIGJvb2wgcnRsX2Z3X2RhdGFfb2soc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTEzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmM6MTQwOnZvaWQgcnRsX2Z3X3dyaXRlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBzdHJ1Y3QgcnRsX2Z3ICpydGxfZncpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5jLTE0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oOjI6LyogcjgxNjlfZmlybXdhcmUuaDogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTMtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfZmlybXdhcmUuaC0xMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTQ6c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTU6dHlwZWRlZiB2b2lkICgqcnRsX2Z3X3dyaXRlX3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6MTY6dHlwZWRlZiBpbnQgKCpydGxfZndfcmVhZF90KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9maXJtd2FyZS5oPTM4PXZvaWQgcnRsX2Z3X3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IHJ0bF9mdyAqcnRsX2Z3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2Zpcm13YXJlLmg6Mzk6dm9pZCBydGxfZndfd3JpdGVfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHN0cnVjdCBydGxfZncgKnJ0bF9mdyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyOi8qIHI4MTY5X2xlZHMuYzogUmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IGRyaXZlci5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzojaW5jbHVkZSBcXFwicjgxNjkuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjMwOnN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTMxLVxcdHN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6Mzc6I2RlZmluZSBsY2Rldl90b19yODE2OV9sZGV2KGxjZGV2KSBjb250YWluZXJfb2YobGNkZXYsIHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYsIGxlZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0zOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzozOTpzdGF0aWMgYm9vbCByODE2OV90cmlnZ2VyX21vZGVfaXNfdmFsaWQodW5zaWduZWQgbG9uZyBmbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy00MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz01ND1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjU3OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo1ODpcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTU5LVxcdGludCBzaGlmdCA9IGxkZXYtXFx1MDAzZWluZGV4ICogNDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo2MTpcXHRpZiAoIXI4MTY5X3RyaWdnZXJfbW9kZV9pc192YWxpZChmbGFncykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy02Mi1cXHRcXHQvKiBTd2l0Y2ggTEVEIG9mZiB0byBpbmRpY2F0ZSB0aGF0IG1vZGUgaXNuJ3Qgc3VwcG9ydGVkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz03MD1zdGF0aWMgaW50IHJ0bDgxNjhfbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtNzIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjczOlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzo3NDpcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGxkZXYtXFx1MDAzZW5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTc1LVxcdGludCBzaGlmdCA9IGxkZXYtXFx1MDAzZWluZGV4ICogNDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jPTkwPXN0YXRpYyBpbnQgcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy05Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6OTM6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldiA9IGxjZGV2X3RvX3I4MTY5X2xkZXYobGVkX2NkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjk0OlxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtOTUtXFx0aW50IHNoaWZ0ID0gbGRldi1cXHUwMDNlaW5kZXggKiA0O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MTIyPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMjM6XFx0cjgxNjlfbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMjQte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEyNTpcXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzMDpzdGF0aWMgdm9pZCBydGw4MTY4X3NldHVwX2xkZXYoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzEtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTMyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxMzM6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xMzQtXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcXHUwMDI2bGRldi1cXHUwMDNlbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjEzOTpcXHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVxcdTAwM2VuYW1lLCBzaXplb2YobGRldi1cXHUwMDNlbmFtZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0MC1cXHRsZWRfY2Rldi1cXHUwMDNlbmFtZSA9IGxkZXYtXFx1MDAzZW5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNDUtXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODE2OF9sZWRfaHdfY29udHJvbF9nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTQ2OlxcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNTI6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODE2OF9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMTUzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNTQ6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNTUtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xNjc9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE2OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTcwOlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxNzE6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTczOlxcdGlmICghcjgxNjlfdHJpZ2dlcl9tb2RlX2lzX3ZhbGlkKGZsYWdzKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE3NC1cXHRcXHQvKiBTd2l0Y2ggTEVEIG9mZiB0byBpbmRpY2F0ZSB0aGF0IG1vZGUgaXNuJ3Qgc3VwcG9ydGVkICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYz0xODI9c3RhdGljIGludCBydGw4MTI1X2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTE4NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MTg1OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYgPSBsY2Rldl90b19yODE2OV9sZGV2KGxlZF9jZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoxODY6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihsZGV2LVxcdTAwM2VuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0xODctXFx0dTE2IG1vZGUgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM9MjAzPXN0YXRpYyBpbnQgcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIwNjpcXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZGV2ID0gbGNkZXZfdG9fcjgxNjlfbGRldihsZWRfY2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjA3OlxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobGRldi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjA4LVxcdGludCBtb2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIyODpzdGF0aWMgdm9pZCBydGw4MTI1X3NldHVwX2xlZF9sZGV2KHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjI5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyMzE6XFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yMzItXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBcXHUwMDI2bGRldi1cXHUwMDNlbGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjIzNzpcXHRyODE2OV9nZXRfbGVkX25hbWUodHAsIGluZGV4LCBsZGV2LVxcdTAwM2VuYW1lLCBzaXplb2YobGRldi1cXHUwMDNlbmFtZSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTIzOC1cXHRsZWRfY2Rldi1cXHUwMDNlbmFtZSA9IGxkZXYtXFx1MDAzZW5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNDMtXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0gcnRsODEyNV9sZWRfaHdfY29udHJvbF9nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjQ0OlxcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSByODE2OV9sZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jLTI0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTA6c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqcnRsODEyNV9pbml0X2xlZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjUxLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYzoyNTI6XFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNTMtXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmM6MjY1OnZvaWQgcjgxNjlfcmVtb3ZlX2xlZHMoc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X2xlZHMuYy0yNjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbGVkcy5jOjI3MDpcXHRmb3IgKHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmwgPSBsZWRzOyBsLVxcdTAwM2VuZGV2OyBsKyspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9sZWRzLmMtMjcxLVxcdFxcdGxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKFxcdTAwMjZsLVxcdTAwM2VsZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMi0vKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjM6ICogcjgxNjkuYzogUmVhbFRlayA4MTY5LzgxNjgvODEwMSBldGhlcm5ldCBkcml2ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mzc6I2luY2x1ZGUgXFxcInI4MTY5LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6Mzg6I2luY2x1ZGUgXFxcInI4MTY5X2Zpcm13YXJlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3MzojZGVmaW5lIFI4MTY5X1JFR1NfU0laRVxcdFxcdDI1NlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc0OiNkZWZpbmUgUjgxNjlfUlhfQlVGX1NJWkVcXHQoU1pfMTZLIC0gMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03NS0jZGVmaW5lIE5VTV9UWF9ERVNDXFx0MjU2XFx0LyogTnVtYmVyIG9mIFR4IGRlc2NyaXB0b3IgcmVnaXN0ZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzYtI2RlZmluZSBOVU1fUlhfREVTQ1xcdDI1NlxcdC8qIE51bWJlciBvZiBSeCBkZXNjcmlwdG9yIHJlZ2lzdGVycyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc3OiNkZWZpbmUgUjgxNjlfVFhfUklOR19CWVRFU1xcdChOVU1fVFhfREVTQyAqIHNpemVvZihzdHJ1Y3QgVHhEZXNjKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg1OiNkZWZpbmUgUjgxNjlfUlhfUklOR19CWVRFU1xcdCgoTlVNX1JYX0RFU0MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgUnhEZXNjKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NjojZGVmaW5lIFI4MTY5X1RYX1NUT1BfVEhSU1xcdChNQVhfU0tCX0ZSQUdTICsgMSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzojZGVmaW5lIFI4MTY5X1RYX1NUQVJUX1RIUlNcXHQoMiAqIFI4MTY5X1RYX1NUT1BfVEhSUylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4ODojZGVmaW5lIFI4MTY5X01BWF9RVUVVRVNcXHQxNlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg5OiNkZWZpbmUgUjgxNjlfTUFYX1JYX1FVRVVFU1xcdDhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MDojZGVmaW5lIFI4MTY5X0RFRkFVTFRfUlhfUVVFVUVTXFx0MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjkxOiNkZWZpbmUgUjgxNjlfTUFYX1RYX1FVRVVFU1xcdDFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05Mi0jZGVmaW5lIFI4MTI3X01BWF9OVU1fSVJRVkVDXFx0MzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05My0jZGVmaW5lIFI4MTI3X01JTl9OVU1fSVJRVkVDXFx0MzBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDojZGVmaW5lIFI4MTY5X0lSUV9ERUZBVUxUXFx0MVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1LSNkZWZpbmUgUlRMX1JTU19LRVlfU0laRVxcdDQwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIzMS1cXHQvKiA4MTEwIGZhbWlseS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMzI6XFx0eyAweGZjOCwgMHg5ODAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wNiwgXFxcIlJUTDgxNjlzYy84MTEwc2NcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjMzOlxcdHsgMHhmYzgsIDB4MTgwLFxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFxcXCJSVEw4MTY5c2MvODExMHNjXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzNDpcXHR7IDB4ZmM4LCAweDEwMCxcXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcXFwiUlRMODE2OXNiLzgxMTBzYlxcXCIgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMzUtXFx0eyAweGZjOCwgMHgwNDAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wMywgXFxcIlJUTDgxMTBzXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIzNjpcXHR7IDB4ZmM4LCAweDAwOCxcXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcXFwiUlRMODE2OXNcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjM3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyBydGxfY2hpcF9pbmZvc19leHRlbmRlZFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjU0LVxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDI1MDIpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNjItXFx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcXHQweDgxNjgpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjYzOlxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxNjkpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjY0LVxcdHsgUENJX1ZERVZJQ0UoRExJTkssXFx0MHg0MzAwKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjI3OTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsODE2OV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MjgxPWVudW0gcnRsX3JlZ2lzdGVycyB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0zNDAtXFx0UnhEZXNjQWRkckhpZ2hcXHQ9IDB4ZTgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MzQxOlxcdEVhcmx5VHhUaHJlc1xcdD0gMHhlYyxcXHQvKiA4MTY5LiBVbml0IG9mIDMyIGJ5dGVzLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTM0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTQ4Nz1lbnVtIHJ0bF9yZWdpc3Rlcl9jb250ZW50IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU1MS1cXHRDbGtSZXFFblxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgNyksXFx0LyogQ2xvY2sgUmVxdWVzdCBFbmFibGUgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1NTI6XFx0TVNJRW5hYmxlXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyA1KSxcXHQvKiA4MTY5IG9ubHkuIFJlc2VydmVkIGluIHRoZSA4MTY4LiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU1My1cXHRQQ0lfQ2xvY2tfNjZNSHogPSAweDAxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTc3LVxcdE1hY19kYmdvX29lXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNCksXFx0Ly8gODE2OCA4MTAxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTc4OlxcdEVuQW5hUExMXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAxNCksXFx0Ly8gODE2OVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU3OS1cXHROb3JtYWxfbW9kZVxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMTMpLFxcdC8vIHVudXNlZFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU5NDpcXHQvKiBydGw4MTY5X1BIWXN0YXR1cyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU5NS1cXHRUQklfRW5hYmxlXFx0PSAweDgwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjQyPWVudW0gcnRsX3R4X2Rlc2NfYml0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo2NTE6LyogODE2OSwgODE2OGIgYW5kIDgxMHggZXhjZXB0IDgxMDJlLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY1Mi1lbnVtIHJ0bF90eF9kZXNjX2JpdF8wIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTczNz1zdHJ1Y3QgcmluZ19pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo3NDI6c3RydWN0IHJ0bDgxNjlfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTc0My1cXHRfX2xlNjRcXHR0eF9wYWNrZXRzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNzg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjc4NTpzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy03ODYtXFx0Ym9vbFxcdGluaXRlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTgwNj1lbnVtIHJ4X2Rlc2NfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODExOnN0cnVjdCBydGw4MTY5X3J4X3Jpbmcge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgxMi1cXHR1MzIgY3VyX3J4O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjgyOTpzdHJ1Y3QgcnRsODE2OV9yc3NfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODMwLVxcdHU4IHJzc19rZXlbUlRMX1JTU19LRVlfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04MzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODM1OnN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTgzNi1cXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0Ni1cXHRzdHJ1Y3QgcmluZ19pbmZvIHR4X3NrYltOVU1fVFhfREVTQ107XFx0LyogVHggZGF0YSBidWZmZXJzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODQ3OlxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqcnRsODE2OV9uYXBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg0ODpcXHRzdHJ1Y3QgcnRsODE2OV9yeF9yaW5nICpyeF9yaW5nO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg0OS1cXHR1bnNpZ25lZCBpbnQgbnVtX3J4X3JpbmdzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODUzLVxcdHVuc2lnbmVkIGludCBod19zdXBwX251bV9yeF9xdWV1ZXM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODU0OlxcdHN0cnVjdCBydGw4MTY5X3Jzc19kYXRhICpyc3NfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NTUtXFx0dW5zaWduZWQgaW50IGlycV9udmVjcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTg3MS1cXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo4NzI6XFx0c3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg3MzpcXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NzQtXFx0dTMyIHNhdmVkX3dvbG9wdHM7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04NzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODc5OlxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtODgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg4NDp0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6ODg2Ok1PRFVMRV9BVVRIT1IoXFxcIlJlYWx0ZWsgYW5kIHRoZSBMaW51eCByODE2OSBjcmV3IFxcdTAwM2NuZXRkZXZAdmdlci5rZXJuZWwub3JnXFx1MDAzZVxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjg4NzpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlJlYWxUZWsgUlRMLTgxNjkgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy04ODgtTU9EVUxFX1NPRlRERVAoXFxcInByZTogcmVhbHRla1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9OTE4PU1PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV84MTI3QV8xKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTIwOnN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZSAqdHBfdG9fZGV2KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyMS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTI1OnN0YXRpYyB2b2lkIHJ0bF9sb2NrX2NvbmZpZ19yZWdzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTMwOnN0YXRpYyB2b2lkIHJ0bF91bmxvY2tfY29uZmlnX3JlZ3Moc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5MzU6c3RhdGljIHZvaWQgcnRsX3BjaV9jb21taXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTM2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk0MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5NDE6c3RhdGljIHZvaWQgcnRsX21vZF9jb25maWcyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCBjbGVhciwgdTggc2V0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk0Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTQ5OnN0YXRpYyB2b2lkIHJ0bF9tb2RfY29uZmlnNShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTggY2xlYXIsIHU4IHNldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjk1NzpzdGF0aWMgdm9pZCByODE2OV9tb2RfcmVnOF9jb25kKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk1OC1cXHRcXHRcXHRcXHR1OCBiaXRzLCBib29sIGNvbmQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTcxOnN0YXRpYyBib29sIHJ0bF9pc184MTI1KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05NzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTc2OnN0YXRpYyBib29sIHJ0bF9pc184MTY4ZXZsX3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6OTgzOnN0YXRpYyBib29sIHJ0bF9zdXBwb3J0c19lZWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtOTg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5OTA6c3RhdGljIHZvaWQgcnRsX3JlYWRfbWFjX2Zyb21fcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1OCAqbWFjLCBpbnQgcmVnKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTk5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz05OTg9c3RydWN0IHJ0bF9jb25kIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo5OTk6XFx0Ym9vbCAoKmNoZWNrKShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMDAtXFx0Y29uc3QgY2hhciAqbXNnO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAwMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDAzOnN0YXRpYyBib29sIHJ0bF9sb29wX3dhaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGNvbnN0IHN0cnVjdCBydGxfY29uZCAqYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDA0LVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyB1c2VjcywgaW50IG4sIGJvb2wgaGlnaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAyMDpzdGF0aWMgYm9vbCBydGxfbG9vcF93YWl0X2hpZ2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyMS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHJ0bF9jb25kICpjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDI3OnN0YXRpYyBib29sIHJ0bF9sb29wX3dhaXRfbG93KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwMjgtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHJ0bF9jb25kICpjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTAzNC0jZGVmaW5lIERFQ0xBUkVfUlRMX0NPTkQobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTAzNTpzdGF0aWMgYm9vbCBuYW1lICMjIF9jaGVjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICopO1xcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDM2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NvbmQgbmFtZSA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDQyOnN0YXRpYyBib29sIG5hbWUgIyMgX2NoZWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA0NDppbnQgcnRsODE2OF9sZWRfbW9kX2N0cmwoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBtYXNrLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwNDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMDYyOmludCBydGw4MTY4X2dldF9sZWRfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMDYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTEwNzg9c3RhdGljIGludCBydGw4MTI1X2dldF9sZWRfcmVnKGludCBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEwODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTA4NTppbnQgcnRsODEyNV9zZXRfbGVkX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpbmRleCwgdTE2IG1vZGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTA4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTA1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExMDY6aW50IHJ0bDgxMjVfZ2V0X2xlZF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgaW5kZXgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEwNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExMjM6dm9pZCByODE2OV9nZXRfbGVkX25hbWUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBpZHgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTEyNC1cXHRcXHRcXHRjaGFyICpidWYsIGludCBidWZfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTQ1OnN0YXRpYyB2b2lkIHI4MTY4ZnBfYWRqdXN0X29jcF9jbWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiAqY21kLCBpbnQgdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNTI9REVDTEFSRV9SVExfQ09ORChydGxfZXJpYXJfY29uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE1NzpzdGF0aWMgdm9pZCBfcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNTgtXFx0XFx0XFx0ICAgdTMyIHZhbCwgaW50IHR5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjExNzI6c3RhdGljIHZvaWQgcnRsX2VyaV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtYXNrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzMtXFx0XFx0XFx0ICB1MzIgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTc4OnN0YXRpYyB1MzIgX3J0bF9lcmlfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIGludCB0eXBlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExNzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMTg5OnN0YXRpYyB1MzIgcnRsX2VyaV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgYWRkcilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTExOTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTE5NDpzdGF0aWMgdm9pZCBydGxfdzB3MV9lcmkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBhZGRyLCB1MzIgcCwgdTMyIG0pXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTE5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyMDE6c3RhdGljIHZvaWQgcnRsX2VyaV9zZXRfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjA2OnN0YXRpYyB2b2lkIHJ0bF9lcmlfY2xlYXJfYml0cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IGFkZHIsIHUzMiBtKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMDcte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9MTIxNj1ERUNMQVJFX1JUTF9DT05EKHJ0bF9vY3BfZ3BoeV9jb25kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjIxOnN0YXRpYyB2b2lkIHI4MTY4X3BoeV9vY3Bfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcsIHUzMiBkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjMxOnN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyMzIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoxMjQ2OnN0YXRpYyB2b2lkIF9fcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNTQ6c3RhdGljIHZvaWQgcjgxNjhfbWFjX29jcF93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTMyIGRhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEyNjM6c3RhdGljIHUxNiBfX3I4MTY4X21hY19vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI3MzpzdGF0aWMgdTE2IHI4MTY4X21hY19vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjc0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI4NTpzdGF0aWMgdm9pZCByODE2OF9tYWNfb2NwX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZywgdTE2IG1hc2ssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTI4Ni1cXHRcXHRcXHRcXHQgdTE2IHNldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEyOTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTI5NzpzdGF0aWMgdm9pZCByODEyN19zZnBfc2RzX3BoeV9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMjk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEzMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MTMwNzpzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMTMwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0xMzI0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjEzMjU6c3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTEzMjYte1xcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjQ5Ljc4OTI5OTMyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMjMyMjM2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBSZWFsdGVrIDgxNjkvODEyNS84MTI3IERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGRldGVybWluZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcuIFRoZSBydWxlcyBzdGF0ZSBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgdGhpbmdzIGxpa2UgUENJZSBzd2l0Y2ggb3IgU21hcnROSUMgZHJpdmVycyB0aGF0IHJlbHkgb24gcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGVzZSBSZWFsdGVrIGRyaXZlcnMsIHNwZWNpZmljYWxseSB0aGUgODE2OSwgODEyNSwgb3IgODEyNyB2YXJpYW50cywgYXJlIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBJZiB0aGV5J3JlIG5vdCwgdGhlbiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBub3Qgd29ydGggZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgUUVNVSdzIHN1cHBvcnRlZCBuZXR3b3JrIGRldmljZXMuIEkgY2FuIHF1aWNrbHkgYXNjZXJ0YWluIHRoYXQgUUVNVSBkb2VzIGVtdWxhdGUgUmVhbHRlaydzIGBydGw4MTM5YCAoUENJIElEIDEwZWM6ODEzOSksIHdoaWNoIHVzZXMgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycy4gSG93ZXZlciwgUUVNVSdzIGRvY3VtZW50YXRpb24gbGlzdHMgbnVtZXJvdXMgb3RoZXIgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzLCBpbmNsdWRpbmcgSW50ZWwncyBlMTAwMCBzZXJpZXMsIHZpcnRpby1uZXQsIGFuZCBvdGhlcnMsIGJ1dCAqbm90KiBSVEw4MTY5LlxuXG5UbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIEknbGwgY3Jvc3MtcmVmZXJlbmNlIHRoZSBQQ0kgSURzIG9mIGA4MTM5Y3BgLCBgODEzOXRvb2AsIGFuZCBgcjgxNjlgLiBJIGxvb2sgYXQgdGhlIGRyaXZlciBjb2RlIGFuZCBmaW5kIHRoYXQgdGhlIGA4MTM5Y3BgIGFuZCBgODEzOXRvb2AgZHJpdmVycyBib3RoIHVzZSBQQ0kgSUQgMHg4MTM5IChmcm9tIFJlYWx0ZWspLCB3aGlsZSB0aGUgYHI4MTY5YCBkcml2ZXIgdXNlcyBhIGRpZmZlcmVudCBzZXQsIGluY2x1ZGluZyB0aGUgY3J1Y2lhbCAweDgxNjksIDB4ODEyNSwgMHg4MTI3IElEcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBQQ0llIE5JQ3MgSSdtIGNvbmNlcm5lZCB3aXRoLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgZW11bGF0ZXMgYW4gUlRMODE2OSBvciBhbnkgb2YgdGhlIG90aGVyIHJlZmVyZW5jZWQgZGV2aWNlcy4gSSBkZWx2ZSBpbnRvIFFFTVUncyBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGl0cyBuZXR3b3JrIGRldmljZSBlbXVsYXRpb24gKGBody9uZXQvYCksIGFuZCBJIHNlZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBlbXVsYXRlZCBuZXR3b3JrIGRldmljZXMuLi5idXQgSSBkbyBub3Qgc2VlIGBydGw4MTY5YCEgUUVNVSBvbmx5IGhhcyBgcnRsODEzOWAsIHdoaWNoIGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0IGRvZXMgbm90IGVtdWxhdGUgdGhlIHRhcmdldGVkIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIFJlYWx0ZWsgODE2OS84MTI1LzgxMjcgZHJpdmVycyBhcmUgbm90IGFjY2Vzc2libGUgaW4gYSBzdGFuZGFyZCBRRU1VIG9yIEdDRSBlbnZpcm9ubWVudC5cblxuU2luY2UgdGhlIGByODE2OWAgZHJpdmVyIChhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIGRyaXZlcnMgZm9yIDgxMjUgYW5kIDgxMjcpIHJlcXVpcmVzIGEgKnBoeXNpY2FsKiBQQ0llIGNhcmQgd2l0aCBhIHNwZWNpZmljIHZlbmRvci9kZXZpY2UgSUQgY29tYmluYXRpb24gdGhhdCBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSwgSSBjb25jbHVkZSB0aGF0IHRoZXNlIGNvZGUgcGF0aHMgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgdW5kZXIgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24uXG5cblRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIHJ1bGUgcmVnYXJkaW5nIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBJIGRldGVybWluZSB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgZnV6emluZyBlZmZvcnQgaXMgYmVzdCBmb2N1c2VkIGVsc2V3aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAyNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE4OjU4LjgxMjUyNTUyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk3NjI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X3BjaV90YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRla1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0yNDU9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHJ0bF9jaGlwX2luZm9zX2V4dGVuZGVkW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjUzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTY5X3BjaV90YmxbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yNTQtXFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4MjUwMikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTI3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyNzk6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJ0bDgxNjlfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjgwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NjYxNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODE2OV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTY2MTYtXFx0Lm5hbWVcXHRcXHQ9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjY2MTc6XFx0LmlkX3RhYmxlXFx0PSBydGw4MTY5X3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNjYxOC1cXHQucHJvYmVcXHRcXHQ9IHJ0bF9pbml0X29uZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDY6MTg6NTguODYyNTA2Mzc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxNzA2MjkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBDSSBUYWJsZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCBmaWxlIGFnYWluLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIGFuZCBjb250ZW50cyBvZiB0aGUgYHJ0bDgxNjlfcGNpX3RibGAgdGFibGUgd2l0aGluIHRoaXMgZHJpdmVyLiBUaGlzIHRhYmxlIGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIHByb3BlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgdGFibGUgc3RydWN0dXJlcyB0aGUgZHJpdmVyJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUmVhbHRlayBSVEw4MTY5IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXJzLiBXaGF0IFBDSSBJRHMgZG9lcyBpdCByZWNvZ25pemU/IFdoYXQgdmVuZG9yIElEcyBhcmUgaGFuZGxlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBxdWlya3Mgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGRlZmluZWQgZm9yIHBhcnRpY3VsYXIgcmV2aXNpb25zIG9yIG1hbnVmYWN0dXJlcnM/IEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgZW50cmllcyBkZWZpbmluZyBkZXZpY2Utc3BlY2lmaWMgUENJIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycywgYW55IHVuaXF1ZSBzZXR1cCBwcm9jZWR1cmVzLiBJdCBpcyB0aW1lIHRvIGRldGVybWluZSB0aGUgZGV0YWlscyBvZiB0aGVzZSBwYXJhbWV0ZXJzLCBzbyBJIGtub3cgSSB1bmRlcnN0YW5kIHRoZW0gYW5kIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIGRyaXZlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHRhYmxlIGVudHJpZXMgYW5kIHRoZSBhY3R1YWwgaGFyZHdhcmUuIEknbSBnb2luZyB0byBzdGFydCByZWFkaW5nIGFuZCBtYXBwaW5nIG91dCB3aGF0IEkgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ2MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE5OjAxLjQ3OTU3MTE2M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE2OV9wY2lfdGJsW10gPSB7XFxuIDI1NDpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHgyNTAyKSB9LFxcbiAyNTU6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4MjYwMCkgfSxcXG4gMjU2OlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxMjkpIH0sXFxuIDI1NzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTM2KSwgLmRyaXZlcl9kYXRhID0gUlRMX0NGR19OT19HQklUIH0sXFxuIDI1ODpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTYxKSB9LFxcbiAyNTk6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4ODE2MikgfSxcXG4gMjYwOlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxNjcpIH0sXFxuIDI2MTpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTY4KSB9LFxcbiAyNjI6XFx0XFx0eyBQQ0lfVkRFVklDRShOQ1VCRSxcXHQweDgxNjgpIH0sXFxuIDI2MzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTY5KSB9LFxcbiAyNjQ6XFx0XFx0eyBQQ0lfVkRFVklDRShETElOSyxcXHQweDQzMDApIH0sXFxuIDI2NTpcXHRcXHR7IFBDSV9WREVWSUNFKERMSU5LLFxcdDB4NDMwMikgfSxcXG4gMjY2OlxcdFxcdHsgUENJX1ZERVZJQ0UoQVQsXFx0MHhjMTA3KSB9LFxcbiAyNjc6XFx0XFx0eyBQQ0lfVkRFVklDRShVU1IsXFx0MHgwMTE2KSB9LFxcbiAyNjg6XFx0XFx0eyBQQ0lfVkRFVklDRV9TVUIoTElOS1NZUywgMHgxMDMyLCBQQ0lfQU5ZX0lELCAweDAwMjQpIH0sXFxuIDI2OTpcXHRcXHR7IFBDSV9ERVZJQ0VfU1VCKDB4MDAwMSwgMHg4MTY4LCBQQ0lfQU5ZX0lELCAweDI0MTApIH0sXFxuIDI3MDpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHg4MTI1KSB9LFxcbiAyNzE6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4ODEyNikgfSxcXG4gMjcyOlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDgxMjcpIH0sXFxuIDI3MzpcXHRcXHR7IFBDSV9WREVWSUNFKFJFQUxURUssXFx0MHgzMDAwKSB9LFxcbiAyNzQ6XFx0XFx0eyBQQ0lfVkRFVklDRShSRUFMVEVLLFxcdDB4NTAwMCkgfSxcXG4gMjc1OlxcdFxcdHsgUENJX1ZERVZJQ0UoUkVBTFRFSyxcXHQweDBlMTApIH0sXFxuIDI3NjpcXHRcXHR7IH1cXG4gMjc3OlxcdH07XFxuIDI3ODpcXHRcXG4gMjc5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGw4MTY5X3BjaV90YmwpO1xcbiAyODA6XFx0XFxuIDI4MTpcXHRlbnVtIHJ0bF9yZWdpc3RlcnMge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxOTowMS40Nzk5NjQ1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTA4NTk5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgYW5hbHl6ZWQgdGhpcyBzaXR1YXRpb24gYW5kIEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGNvbmNsdXNpb24uIFRoZSBkZXZpY2UgSUQgYDB4ODEzOWAgaXMgZGVmaW5pdGVseSAqbm90KiByZWxhdGVkIHRvIHRoZSBgcjgxNjlgIGRyaXZlciwgd2hpY2ggaGFuZGxlcyBSZWFsdGVrIFBDSWUgZXRoZXJuZXQgZGV2aWNlcyBsaWtlIHRoZSA4MTY5LCA4MTY4LCA4MTI1LCBhbmQgODEyNy4gVGhlIGtpY2tlciBoZXJlIGlzIHRoYXQgKm5vbmUqIG9mIHRob3NlIGFyZSBhY3R1YWxseSBlbXVsYXRlZCBpbiB0aGUgdHlwaWNhbCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgd2UncmUgdXNpbmcgZm9yIGZ1enppbmcsIGxpa2UgUUVNVSBvciBHQ0UuXG5cbkkndmUgY29uc2lkZXJlZCB0aGF0IHNvbWUgKnNwZWNpZmljKiBzY2VuYXJpb3MgKmNvdWxkKiB0cmlnZ2VyIHRoaXMsIGJ1dCByZWFsaXplZCB0aGV5J3JlIGltcG9zc2libGU6IEknbSByZWZlcnJpbmcgdG8gdGhpbmdzIGxpa2Ugc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgc2V0dXBzIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbS4gQWxzbywgY29kZSBwYXRocyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKHRoaW5rIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZHMsIHdoaWNoLCBhZ2Fpbiwgd2UgKmRvbid0KiBoYXZlIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGhhcyB0byBiZSBgZmFsc2VgIGluIHRoaXMgY2FzZS4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyB0aGUgUmVhbHRlayBgcjgxNjlgIGRyaXZlciwgYW5kIHRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBhZGRzIG11bHRpLXF1ZXVlL1JTUyBzdXBwb3J0IGZvciB0aGUgUlRMODEyNyBoYXJkd2FyZS4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWxpZXMgb24gcGh5c2ljYWwgUmVhbHRlayBQQ0llIE5JQyBoYXJkd2FyZSBvciBhdCBsZWFzdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSBJRHMuIFNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IHRyaWdnZXIgdGhlIHRhcmdldGVkIGNvZGUgcGF0aHMgaW4gb3VyIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXBzLCBpdCdzIG5vdCB3b3J0aCBzcGVuZGluZyB0aGUgZWZmb3J0IG9uLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgcmlnaHQ6XG5cbiogICBgV29ydGhGdXp6aW5nYDogc2V0IHRvIGBmYWxzZWBcbiogICBgRm9jdXNTeW1ib2xzYDogc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3QsIGBbXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IHNob3VsZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gXG4qICAgYFJlYXNvbmluZ2A6IEkgaGF2ZSB0aGUgY29uY2lzZSBleHBsYW5hdGlvbiBoZXJlLCBhbGwgZ29vZC5cblxuTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBvZiB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgc3RydWN0dXJlIGlzIGNvcnJlY3Q6XG5cbiogICBgRW5hYmxlQ29uZmlnc2A6IEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgbnVsbFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIG51bGxcbiogICBgUmVhc29uaW5nYDogQSBzdHJpbmdcbiogICBgV29ydGhGdXp6aW5nYDogQSBib29sZWFuXG5cblllcCwgZm9ybWF0IGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUxMSwiT3V0cHV0VG9rZW5zIjoxMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNjoxOTowNy4zODg1Njc2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSZWFsdGVrIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIGFkZCBtdWx0aS1xdWV1ZS9SU1MgYW5kIE1TSS1YIHN1cHBvcnQgZm9yIFJUTDgxMjcvUlRMODEyNSBOSUNzLiBUaGUgcjgxNjkgZHJpdmVyIG9wZXJhdGVzIG9uIHBoeXNpY2FsIFBDSWUgUmVhbHRlayBOSUNzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGRyaXZlciBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIGtlcm5lbCBmdXp6aW5nIHNldHVwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA2OjE5OjA3LjM4ODU5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow52d95[1] Phase: Running StartedAt: 2026-08-31 06:19:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52d95[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 06:19:19 +0000 UTC FinishedAt: 2026-08-31 06:19:23 +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,}