Name: series-workflowv6gfj Phase: Failed StartedAt: 2026-09-08 07:40:31 +0000 UTC FinishedAt: 2026-09-08 07:43:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6gfj[0] Phase: Succeeded StartedAt: 2026-09-08 07:40:31 +0000 UTC FinishedAt: 2026-09-08 07:43:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6gfj[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 07:40:31 +0000 UTC FinishedAt: 2026-09-08 07:43:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzo0MjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5pbmRleCA5NDFhZTlmNjZmNzBiLi42YjA4YmI4ZmVkNWI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5AQCAtMjQ3OCw2ICYjNDM7MjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBmcmVlX2dpcnE7XG4gXG4mIzQzO1x0XHRrc3o4NDYzX3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbkBAIC0yNzc1LDYgJiM0MzsyNzc2LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuJiM0MztcdFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTc4MSw2ICYjNDM7MTc4MSw3IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbiYjNDM7XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4mIzQzO1x0XHQubl9waW5zID0gMTIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMTIsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjNdID0ge1xuQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg3OTVdID0ge1xuQEAgLTE0MTQsNiAmIzQzOzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zZ21paV9wb3J0ID0gNyxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTg5Nl0gPSB7XG5AQCAtMTU0NCw2ICYjNDM7MTU1MCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGUgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o4NTY3XSA9IHtcbkBAIC0xNTgxLDYgJiM0MzsxNTg5LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXG4gXHRcdFx0XHQgICB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjk1NjddID0ge1xuQEAgLTE2MTUsNiAmIzQzOzE2MjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdFx0XHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzBdID0ge1xuQEAgLTE2NDYsNiAmIzQzOzE2NTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MV0gPSB7XG5AQCAtMTY3Nyw2ICYjNDM7MTY5MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3Ml0gPSB7XG5AQCAtMTcxMiw2ICYjNDM7MTcyOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzczXSA9IHtcbkBAIC0xNzQ3LDYgJiM0MzsxNzY1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45Mzc0XSA9IHtcbkBAIC0xNzgyLDYgJiM0MzsxODAyLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjk2NDZdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbmluZGV4IGNiZTk4NDk0NTc4YzMuLjExNTViMzkzNTBjMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC0xMzksNiAmIzQzOzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcbiBcdHU4IHNnbWlpX3BvcnQ7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XG4mIzQzO1x0Y29uc3QgdTggbl9waW5zO1xuJiM0MztcdGNvbnN0IHU4IG5fcGVyX291dDtcbiB9O1xuIFxuIHN0cnVjdCBrc3pfaXJxIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCAzOWNjNzBkNjU5MDBiLi5kMzMwMzQ4OTJhOGY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5AQCAtMjYsNiAmIzQzOzI2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtTWl9NQVhfRFJJRlRfQ09SUiA2MjQ5OTk5XG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5DX05TIDQwVUxMICAvKiBIVyBjbG9jayBpcyBpbmNyZW1lbnRlZCBldmVyeSA0MCBucyAoYnkgNDApICovXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcbkBAIC02Myw2ICYjNDM7NjQsMTcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9ncGlvKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRcdFx0IExFRF9TUkNfUFRQX0dQSU9fMSB8IExFRF9TUkNfUFRQX0dQSU9fMik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTg2LDcgJiM0Mzs5OCw3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdFx0XHQgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucylcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zLCB1MzIgbWFzaylcbiB7XG4gXHR1MzIgZGF0YTtcbiBcbkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcbi1cdGlmICghRklFTERfRklUKFRSSUdfUFVMU0VfV0lEVEhfTSwgZGF0YSkpXG4mIzQzO1x0aWYgKChtYXNrIFx1MDAyNiBkYXRhKSAhPSBkYXRhKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9FTiwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEoZGF0YSBcdTAwMjYgQklUKHVuaXQpKSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0dW5pdCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiB7XG4gXHR1MzIgZGF0YTtcbkBAIC0xNDcsNiAmIzQzOzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG4mIzQzO1x0XHRcdFx0XHR1OCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcbiYjNDM7XHR1MTYgY2ZnX2Jhc2UgPSBLU1o4NDYzX1RSSUcxX0NGRyAmIzQzOyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVx1MDAzZWNoYW47XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSGFyZHdhcmUgaGFzIG9ubHkgMzIgYml0ICovXG4mIzQzO1x0aWYgKCh0YXJnZXRfdGltZS1cdTAwM2V0dl9zZWMgXHUwMDI2IDB4ZmZmZmZmZmYpICE9IHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHxcbiYjNDM7XHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XG4mIzQzO1x0ICAgICAgIHBpbi1cdTAwM2VpbmRleDtcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGLFxuJiM0MztcdFx0XHQgIGN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogS1NaODQ2MyB1c2VzIGEgOCBucyB1bml0IHZhbHVlIHRvIGNvbXB1dGUgdGhlIHB1bHNlIHdpZHRoICovXG4mIzQzO1x0ZGF0YSA9IChwdWxzZV93aWR0aF9ucyAvIDgpO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfVEFSR0VUX05TRUMsXG4mIzQzO1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfbnNlYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19UQVJHRVRfU0VDLFxuJiM0MztcdFx0XHQgIHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxuQEAgLTE4MywxNyAmIzQzOzI2NywxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbi1cdFx0XHRcdCBpbnQgb24pXG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuLVx0dTY0IGN5Y2xlX3dpZHRoX25zO1xuLVx0dTY0IHB1bHNlX3dpZHRoX25zO1xuLVx0aW50IHBpbiA9IDA7XG4tXHR1MzIgZGF0YTMyO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcGluO1xuIFxuIFx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0yMDYsNiAmIzQzOzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdGlmIChwaW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJldHVybiBwaW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbiYjNDM7XG4mIzQzO1x0KmN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbiYjNDM7XHRpZiAoKCpjeWNsZV93aWR0aF9ucyBcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSAqY3ljbGVfd2lkdGhfbnMpIHtcbiYjNDM7XHRcdCpjeWNsZV93aWR0aF9ucyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0XHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlcV9wdWxzZV93aWR0aF9ucztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiYjNDM7XHRcdHJldHVybiByZXF1ZXN0LVx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1x0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuJiM0MztcbiYjNDM7XHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXG4mIzQzO1x0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1xuJiM0MztcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4mIzQzO1x0cmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4mIzQzO1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuJiM0MztcdGludCBwaW47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4mIzQzO1x0aWYgKHBpbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwaW47XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9uKSB7XG4mIzQzO1x0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcbiYjNDM7XHRcdFx0XHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxuJiM0MztcdFx0XHRcdFx0ICAgcGluKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfZ3BpbyhkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuJiM0MztcdFx0XHRcdCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4mIzQzO1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuJiM0MztcdGludCBwaW4gPSAwO1xuJiM0MztcdHUzMiBkYXRhMzI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4mIzQzO1x0aWYgKHBpbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwaW47XG4mIzQzO1xuIFx0ZGF0YTMyID0gRklFTERfUFJFUChQVFBfR1BJT19JTkRFWCwgcGluKSB8XG4gXHRcdCBGSUVMRF9QUkVQKFBUUF9UT1VfSU5ERVgsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuIFx0cmV0ID0ga3N6X3JtdzMyKGRldiwgUkVHX1BUUF9VTklUX0lOREVYX180LFxuQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuJiM0MztcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4gXG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWM7XG4tXG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWM7XG4tXG4tXHRjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZCk7XG4tXHRpZiAoKGN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9IGN5Y2xlX3dpZHRoX25zKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChyZXF1ZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBQVFBfUEVST1VUX0RVVFlfQ1lDTEUpIHtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSByZXF1ZXN0LVx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1xuLVx0XHRcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbi1cdH0gZWxzZSB7XG4tXHRcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbi1cdFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4tXHRcdCAqL1xuLVx0XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4tXHRcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXG4tXHRcdFx0XHQgICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4tXHR9XG4tXG4tXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xuJiM0MztcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtNzU2LDExICYjNDM7OTI0LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9nZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiBcdHM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7XG4tXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBuZXh0O1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xuIFx0dW5zaWduZWQgaW50IGNvdW50O1xuQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXG4gXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cbiBcdG5leHQgPSBuc190b190aW1lc3BlYzY0KG5leHRfbnMpO1xuLVx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XG4tXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xuLVx0cmVxdWVzdC5pbmRleCA9IDA7XG4tXHRyZXF1ZXN0LmZsYWdzID0gMDtcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VpbmRleCA9IDA7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0LCAxKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogV3JpdGUgdG8gc2hhZG93IHJlZ2lzdGVycyBhbmQgTG9hZCBQVFAgY2xvY2sgKi9cbiBcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIHRzLVx1MDAzZXR2X25zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXHUwMDNldHZfc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgUFRQX0xPQURfVElNRSwgUFRQX0xPQURfVElNRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxuJiM0MztcdFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUgPSAqdHM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtODkwLDE4ICYjNDM7MTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiYjNDM7c3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4gXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0czMyIHNlYywgbnNlYztcbiBcdHUxNiBkYXRhMTY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cbiBcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxuIFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcbiBcdCAqL1xuQEAgLTkwOSwxNSAmIzQzOzExNDMsMTUgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCBhYnMobnNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXHUwMDI2ZGF0YTE2KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGRhdGExNiB8PSBQVFBfU1RFUF9BREo7XG4gXG5AQCAtOTI4LDYgJiM0MzsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUsIGRlbHRhNjQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuQEAgLTk1Miw2ICYjNDM7MTIzNiwyNiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocmVxLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxLVx1MDAzZXBlcm91dCwgb24pO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcdFx0XHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4ge1xuQEAgLTEwMjgsMTcgJiM0MzsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiYjNDM7XHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcJiMzNDtNaWNyb2NoaXAgQ2xvY2tcJiMzNDspO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMubWF4X2Fkalx0XHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmdldHRpbWU2NFx0PSBrc3pfcHRwX2dldHRpbWU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5zZXR0aW1lNjRcdD0ga3N6ODQ2M19wdHBfc2V0dGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkamZpbmVcdFx0PSBrc3pfcHRwX2FkamZpbmU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGp0aW1lXHRcdD0ga3N6ODQ2M19wdHBfYWRqdGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmRvX2F1eF93b3JrXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuLVx0aW50IHJldDtcbi1cdHU4IGk7XG4gXG4gXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiBcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwmIzM0O01pY3JvY2hpcCBDbG9ja1wmIzM0Oyk7XG5AQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3pfcHRwX2VuYWJsZTtcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMudmVyaWZ5XHRcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBLU1pfUFRQX05fR1BJTztcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHJldCA9IGtzel9wdHBfc3RhcnRfY2xvY2soZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnB0cF9waW4gPSBcdTAwMjZwdHBfZGF0YS1cdTAwM2VwaW5fY29uZmlnW2ldO1xuIFxuIFx0XHRzbnByaW50ZihwdHBfcGluLVx1MDAzZW5hbWUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuaW5kZXggNzA2N2VjOWJkMWU2Zi4uMzgzOGE3M2E4MzAyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTEyLDcgJiM0MzsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQyXG4mIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MTJcbiBcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xuIFx0S1NaX1BUUF9UT1VfSURMRSxcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7XG4gfTtcbiBcbiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4mIzQzO3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5AQCAtNjUsNiAmIzQzOzY3LDggQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuQEAgLTUxLDYgJiM0Mzs1MSwyMiBAQFxuIFxuICNkZWZpbmUgUkVHX1BUUF9VTklUX0lOREVYX180XHRcdDB4MDUyMFxuIFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVx0XHQweDIwMlxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXHRcdFx0MHgyMDZcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1RcdFx0MHgyMDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHTl9DRkdfU0laRVx0XHQweDIwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHMV9DRkdcdFx0MHgyMjBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXHRcdDB4MDAwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfU0VDXHRcdDB4MDA0XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX09GRlx0XHQweDAwOFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fTVx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVUxTRV9XSURUSF9PRkZcdFx0MHgwMEFcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlx0XHQweDAwQ1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRlx0XHQweDAxMFxuJiM0MztcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXHRcdFx0R0VOTUFTSygxOSwgMTYpXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXHRcdFx0QklUKDgpXG4gI2RlZmluZSBQVFBfVE9VX0lOREVYXHRcdFx0R0VOTUFTSygxLCAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuQEAgLTg2Nyw2ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNzo0MjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTI0NzgsNiAmIzQzOzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCQlpZiAocmV0KQogCQkJZ290byBmcmVlX2dpcnE7CiAKJiM0MzsJCWtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTsKIAkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcbiYjMzQ7LApAQCAtMjc3NSw2ICYjNDM7Mjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJfQogCiAJaWYgKGRldi0mZ3Q7aW5mby0mZ3Q7cHRwX2NhcGFibGUpIHsKJiM0MzsJCWtzel9wdHBfc2V0X2NhcHMoZHMpOwogCQlyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAlpZiAoZGV2LSZndDtpbmZvLSZndDtwdHBfY2FwYWJsZSkgewomIzQzOwkJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJCXJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sCiYjNDM7CQkubl9waW5zID0gMTIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMTIsCiAJfSwKIAogCVtLU1o4NTYzXSA9IHsKQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaODc5NV0gPSB7CkBAIC0xNDE0LDYgJiM0MzsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc2dtaWlfcG9ydCA9IDcsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaOTg5Nl0gPSB7CkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSwKIAkJLmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtLU1o4NTY3XSA9IHsKQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5nYml0X2NhcGFibGUJPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJCSAgIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0tTWjk1NjddID0gewpAQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJCQkgICB0cnVlLCBmYWxzZSwgZmFsc2V9LAogCQkuZ2JpdF9jYXBhYmxlCT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjkzNzBdID0gewpAQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJLnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3MV0gPSB7CkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3Ml0gPSB7CkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5CT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45MzczXSA9IHsKQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45Mzc0XSA9IHsKQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjk2NDZdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7CiAJdTggc2dtaWlfcG9ydDsKIAljb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7CiAJY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlOwomIzQzOwljb25zdCB1OCBuX3BpbnM7CiYjNDM7CWNvbnN0IHU4IG5fcGVyX291dDsKIH07CiAKIHN0cnVjdCBrc3pfaXJxIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTkKICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTAomIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTEwKIAogI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqLwogI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzIKQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJCSBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpOwogfQogCiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiB7CiAJdTMyIGRhdGE7CkBAIC04Niw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiAJCQkgMCk7CiB9CiAKLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucykKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKQogewogCXUzMiBkYXRhOwogCkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSAocHVsc2VfbnMgLyA4KTsKLQlpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKQomIzQzOwlpZiAoKG1hc2sgJmFtcDsgZGF0YSkgIT0gZGF0YSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KQomIzQzO3sKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCEoZGF0YSAmYW1wOyBCSVQodW5pdCkpKSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQl1bml0KTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIHsKIAl1MzIgZGF0YTsKQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCQlzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCiYjNDM7CQkJCQl1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTsKJiM0MzsJdTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgJiM0MzsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi0mZ3Q7Y2hhbjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqLwomIzQzOwlpZiAoKHRhcmdldF90aW1lLSZndDt0dl9zZWMgJmFtcDsgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtJmd0O3R2X3NlYykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfAomIzQzOwkgICAgICAgcGluLSZndDtpbmRleDsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsCiYjNDM7CQkJICBjeWNsZV93aWR0aF9ucyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovCiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqLwomIzQzOwlkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7CiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9OU0VDLAomIzQzOwkJCSAgdGFyZ2V0X3RpbWUtJmd0O3R2X25zZWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsCiYjNDM7CQkJICB0YXJnZXRfdGltZS0mZ3Q7dHZfc2VjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJCQkJICAgIHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLAogCQkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCkBAIC0xODMsMTcgJiM0MzsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCwKLQkJCQkgaW50IG9uKQomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQl1NjQgcmVxX3B1bHNlX3dpZHRoX25zOwotCXU2NCBjeWNsZV93aWR0aF9uczsKLQl1NjQgcHVsc2Vfd2lkdGhfbnM7Ci0JaW50IHBpbiA9IDA7Ci0JdTMyIGRhdGEzMjsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGluOwogCiAJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCWlmIChwaW4gJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyZXR1cm4gcGluOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgKmN5Y2xlX3dpZHRoX25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDtwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtJmd0O3N0YXJ0LnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKJiM0MzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwomIzQzOwomIzQzOwkqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwomIzQzOwlpZiAoKCpjeWNsZV93aWR0aF9ucyAmYW1wOyBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykgewomIzQzOwkJKmN5Y2xlX3dpZHRoX25zID0gMDsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgbWF4X3B1bHNlX3dpZHRoKQomIzQzO3sKJiM0MzsJdTY0IHJlcV9wdWxzZV93aWR0aF9uczsKJiM0MzsKJiM0MzsJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkKJiM0MzsJCXJldHVybiByZXF1ZXN0LSZndDtvbi5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0MzsJcmVxdWVzdC0mZ3Q7b24ubnNlYzsKJiM0MzsKJiM0MzsJLyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZQomIzQzOwkgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy4KJiM0MzsJICovCiYjNDM7CXJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CQkJICAgICAgcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMpIC8gMjsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgICAgIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwl1NjQgY3ljbGVfd2lkdGhfbnM7CiYjNDM7CXU2NCBwdWxzZV93aWR0aF9uczsKJiM0MzsJaW50IHBpbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFvbikgewomIzQzOwkJcHRwX2RhdGEtJmd0O3RvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpOwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCSAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLAomIzQzOwkJCQkJICAgJmFtcDtwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LAomIzQzOwkJCQkJICAgcGluKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtJmd0O2luZGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDt0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgaW50IG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CXU2NCBjeWNsZV93aWR0aF9uczsKJiM0MzsJdTY0IHB1bHNlX3dpZHRoX25zOwomIzQzOwlpbnQgcGluID0gMDsKJiM0MzsJdTMyIGRhdGEzMjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKIAlkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHwKIAkJIEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwogCXJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCwKQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQlwdHBfZGF0YS0mZ3Q7dG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7CiAKLQlwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LSZndDtzdGFydC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKLQotCXB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwotCi0JY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwotCWlmICgoY3ljbGVfd2lkdGhfbnMgJmFtcDsgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVxdWVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7Ci0JCXB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC0mZ3Q7b24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7Ci0JCQlyZXF1ZXN0LSZndDtvbi5uc2VjOwotCX0gZWxzZSB7Ci0JCS8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUKLQkJICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuCi0JCSAqLwotCQlyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzOwotCQkJCSAgICAgIHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjKSAvIDI7Ci0JCXB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsCi0JCQkJICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpOwotCX0KLQotCXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwogCXM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7Ci0Jc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCXN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93OwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAKIAkvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi8KIAluZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTsKLQlyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYzsKLQlyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7Ci0JcmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKLQlyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYzsKLQlyZXF1ZXN0LmluZGV4ID0gMDsKLQlyZXF1ZXN0LmZsYWdzID0gMDsKJiM0MzsJcmVxdWVzdC0mZ3Q7c3RhcnQuc2VjICA9IG5leHQudHZfc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMgPSBwdHBfZGF0YS0mZ3Q7cGVyb3V0X3BlcmlvZC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtpbmRleCA9IDA7CiYjNDM7CXJlcXVlc3QtJmd0O2ZsYWdzID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKLQkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiYjNDM7ewomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqLwogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy0mZ3Q7dHZfbnNlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtJmd0O3R2X3NlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHRwX2RhdGEtJmd0O3RvdV9tb2RlKSB7CiYjNDM7CWNhc2UgS1NaX1BUUF9UT1VfSURMRToKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDoKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSA9ICp0czsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSkKIHsKLQlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKLQlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwogCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzMzIgc2VjLCBuc2VjOwogCXUxNiBkYXRhMTY7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7Ci0KIAkvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSwKIAkgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBodwogCSAqLwpAQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sICZhbXA7ZGF0YTE2KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlkYXRhMTYgfD0gUFRQX1NURVBfQURKOwogCkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKIAkJZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjsKIAogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlzd2l0Y2ggKHB0cF9kYXRhLSZndDt0b3VfbW9kZSkgewomIzQzOwljYXNlIEtTWl9QVFBfVE9VX0lETEU6CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3B0cF9kYXRhLSZndDtjbG9ja19sb2NrKTsKJiM0MzsJcHRwX2RhdGEtJmd0O2Nsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSwgZGVsdGE2NCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApAQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHJlcS0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDoKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgJmFtcDtyZXEtJmd0O3Blcm91dCwgb24pOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCQkJICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKQogewpAQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5vd25lcgkJPSBUSElTX01PRFVMRTsKJiM0MzsJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5tYXhfYWRqCQk9IEtTWl9NQVhfRFJJRlRfQ09SUjsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuZ2V0dGltZTY0CT0ga3N6X3B0cF9nZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5zZXR0aW1lNjQJPSBrc3o4NDYzX3B0cF9zZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5hZGpmaW5lCQk9IGtzel9wdHBfYWRqZmluZTsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuYWRqdGltZQkJPSBrc3o4NDYzX3B0cF9hZGp0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5kb19hdXhfd29yawk9IGtzel9wdHBfZG9fYXV4X3dvcms7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLmVuYWJsZQkJPSBrc3o4NDYzX3B0cF9lbmFibGU7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLnZlcmlmeQkJPSBrc3pfcHRwX3ZlcmlmeV9waW47CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLm5fcGlucwkJPSBkZXYtJmd0O2luZm8tJmd0O25fcGluczsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gZGV2LSZndDtpbmZvLSZndDtuX3Blcl9vdXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTsKLQlpbnQgcmV0OwotCXU4IGk7CiAKIAlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQltdXRleF9pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwogCiAJcHRwX2RhdGEtJmd0O2NhcHMub3duZXIJCT0gVEhJU19NT0RVTEU7CiAJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwpAQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXB0cF9kYXRhLSZndDtjYXBzLmRvX2F1eF93b3JrCT0ga3N6X3B0cF9kb19hdXhfd29yazsKIAlwdHBfZGF0YS0mZ3Q7Y2Fwcy5lbmFibGUJCT0ga3N6X3B0cF9lbmFibGU7CiAJcHRwX2RhdGEtJmd0O2NhcHMudmVyaWZ5CQk9IGtzel9wdHBfdmVyaWZ5X3BpbjsKLQlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3BpbnMJCT0gS1NaX1BUUF9OX0dQSU87Ci0JcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gMzsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9waW5zCQk9IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3Blcl9vdXQJPSBkZXYtJmd0O2luZm8tJmd0O25fcGVyX291dDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3B0cF9kYXRhLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiAKIAlyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gJmFtcDtwdHBfZGF0YS0mZ3Q7cGluX2NvbmZpZ1tpXTsKIAogCQlzbnByaW50ZihwdHBfcGluLSZndDtuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAppbmRleCA3MDY3ZWM5YmQxZTZmLi4zODM4YTczYTgzMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaApAQCAtMTIsNyAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAotI2RlZmluZSBLU1pfUFRQX05fR1BJTwkJMgomIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU8JCTEyCiAKIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7CiAJS1NaX1BUUF9UT1VfSURMRSwKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7CiB9OwogCiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKQEAgLTY1LDYgJiM0Mzs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaAppbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC01MSw2ICYjNDM7NTEsMjIgQEAKIAogI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzQJCTB4MDUyMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkUJCTB4MjAyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTgkJCTB4MjA2CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1QJCTB4MjA4CiYjNDM7CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFCQkweDIwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGRwkJMHgyMjAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUMJCTB4MDAwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUMJCTB4MDA0CiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGCQkweDAwOAomIzQzOyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRgkJMHgwMEEKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRgkJMHgwMEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRgkJMHgwMTAKJiM0MzsKICNkZWZpbmUgUFRQX0dQSU9fSU5ERVgJCQlHRU5NQVNLKDE5LCAxNikKICNkZWZpbmUgUFRQX1RTSV9JTkRFWAkJCUJJVCg4KQogI2RlZmluZSBQVFBfVE9VX0lOREVYCQkJR0VOTUFTSygxLCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKJiM0MzsJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBzeXprYWxsZXIgYXQgaXQuIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJ1bmNoIG9mIE1pY3JvY2hpcCBLU1ogc3dpdGNoIGRyaXZlcnMsIHNwZWNpZmljYWxseTogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jYCwgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jYCwgYW5kIGEgZmV3IHJlbGF0ZWQgY29tbW9uIGZpbGVzIGxpa2UgYGtzel9jb21tb24uY2AgYW5kIGBrc3pfcHRwLmNgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzIGFuZCBgbGFuOTM3eF9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIGxpa2VseSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuCgpOb3csIGxldCBtZSBxdWlja2x5IGFzY2VydGFpbiB0aGUgaGFyZHdhcmUgY29udGV4dC4gVGhlc2UgTWljcm9jaGlwIEtTWiBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgU1BJLCBJMkMsIE1ESU8sIG9yIFNNSSBjb25uZWN0ZWQgRXRoZXJuZXQgc3dpdGNoIElDcyDigJMgdGhlIEtTWjh4eHgsIEtTWjl4eHgsIGFuZCBMQU45Mzd4IGZhbWlsaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkcml2ZXJzIGhhdmUgYSBjbGVhciBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGJ1cyBhdHRhY2htZW50LiBBcmUgdGhleSByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnN0YW50aWF0aW9uLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBvciBwdXJlbHkgc29mdHdhcmUtYmFzZWQgcGF0aD8gSWRlYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGludGVyZmFjZXMgdGhhdCBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGtlcm5lbCwgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHByb2JlZC4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgaG93IGBrc3pfc3dpdGNoX2NoaXBzYCBvciByb3V0aW5lcyBpbiBga3N6X2NvbW1vbi5jYCBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5IGl0IHdvdWxkIGJlIHRvIHRyaWdnZXIgdGhlIHJvdXRpbmVzIGluIHRoZXNlIGZpbGVzIHRocm91Z2ggYSBzeXprYWxsZXIgcHJvZ3JhbSwgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggY3JlYXRpbmcgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSB0byBkbyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfc3BpX2RyaXZlcnxtb2R1bGVfaTJjX2RyaXZlcnxrc3pfc3dpdGNoX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM9MTMzPXN0YXRpYyBpbnQga3N6ODg2M19zbWlfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNjgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM6MTY5Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4ODYzX3NtaS5jLTE3MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTc9c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy01MC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzo1MTpcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy01Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxMT1zdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MTY6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTQwNjEtfVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6NDA2MjpFWFBPUlRfU1lNQk9MKGtzel9zd2l0Y2hfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD00Mjk9c3RydWN0IGtzel9kZXZpY2UgKmtzel9zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzEtXHRcdFx0XHQgICAgdm9pZCAqcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzMtdm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTk0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTk2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jPTM0OT1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIga3N6X3NwaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MzYxOm1vZHVsZV9zcGlfZHJpdmVyKGtzel9zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxOQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNaWNyb2NoaXAgS1NaIEV0aGVybmV0IFN3aXRjaCBEcml2ZXJzIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTWljcm9jaGlwIERTQSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyczogYGtzejg0NjNgLCBga3N6OGAsIGBrc3o5NDc3YCwgYGxhbjkzN3hgLiBUaGVzZSBndXlzIGF0dGFjaCB2aWEgU1BJLCBJMkMsIFNNSSwgb3IgTURJTy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiBDYW4gSSBldmVuICpzZWUqIHRoZXNlIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlcyBvbiBlbWJlZGRlZCBib2FyZHM/IEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgdGhlc2UgZm9yIGZ1enppbmcuCgpMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgYW55IGNoYW5jZSB0aGVzZSBhcmUgdXNpbmcgdmlydHVhbCBidXNlcywgb3IgY291bGQgdGhleSBwb3RlbnRpYWxseSBiZSBpbnN0YW50aWF0ZWQgaW4gc3l6a2FsbGVyPyBPa2F5LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgdGhlIHRyaWFnZSBwcmluY2lwbGVzOiAmIzM0O1JFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLiYjMzQ7IElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFZNcywgZm9yZ2V0IGl0LCBubyBmdXp6aW5nLCBubyBtYXR0ZXIgaG93IHRlbXB0aW5nLiBUaGF0IGJyaW5ncyB1cCB0aGUga2V5IHBvaW50OiB3aGF0JiMzOTtzICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlPyYjMzQ7IFRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzIG9yIFNtYXJ0TklDcyDigJMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGV0Yy4gYXJlIGFsbCBvdXQuIFRoZSBvcHBvc2l0ZSwgb2YgY291cnNlLCBpcyByZWFjaGFibGUsIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyBzdWNoIGFzIGB2aXJ0aW9gLCBgVVNCIGdhZGdldGAsIGBsb29wYmFja2AsIGBuZXRsaW5rYCwgZXRjLgoKTm93LCBiYWNrIHRvIHRoZXNlIEtTWiBkcml2ZXJzLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGRlZXBlci4gRG8gYW55IG9mIHRoZW0gaW5zdGFudGlhdGUgSTJDIG9yIFNQSSBkZXZpY2VzLCBvciBhcmUgdGhleSBwdXJlbHkgdGllZCB0byBwaHlzaWNhbCBlbWJlZGRlZCBzd2l0Y2ggaGFyZHdhcmUsIGxpa2UgYSB0cnVlIERTQSBzd2l0Y2g/IENhbiBJIGV2ZW4gY3JlYXRlIEkyQyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHZpYSBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWA/IFRoYXQgd291bGQgYmUgYSBodWdlIHdpbiEgSSBuZWVkIHRvIHNlZSBpZiBzeXprYWxsZXIgaXMgdXNpbmcgYGkyYy1kZXZgIG9yIGR1bW15IEkyQywgb3IgaWYgdGhlIGRyaXZlcnMgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBJIG5lZWQgdG8gbG9vayBhdCBga3N6OTQ3N19pMmNfcHJvYmVgIGFuZCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgY29kZSwgdGhhdCBzaG91bGQgYmUgZW5vdWdoIHRvIHRlbGwgbWUgaWYgdGhpcyBpcyBhIHBhdGggSSBjYW4gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3o5NDc3X2kyY19wcm9iZXxrc3pfc3dpdGNoX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM9MTMzPXN0YXRpYyBpbnQga3N6ODg2M19zbWlfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNjgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM6MTY5Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4ODYzX3NtaS5jLTE3MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjE3OnN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjUxOlx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYz0xMzM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGtzejk0NzdfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxMzk6XHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDAtXHQucmVtb3ZlXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zOTExPXN0YXRpYyBpbnQga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkxNjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2MS19XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMS1cdFx0XHRcdCAgICB2b2lkICpwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMy12b2lkIGtzel9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jPTEzNz1zdGF0aWMgaW50IGtzel9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzoxOTU6XHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0czoKCioqRGl2aW5nIGludG8gdGhlIE1pY3JvY2hpcCBLU1o5NDc3IERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1NaOTQ3NyBzd2l0Y2ggaXMgYnJvdWdodCBvbmxpbmUgaW4gdGhlIERTQSBmcmFtZXdvcmssIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdHdvIGtleSBmdW5jdGlvbnM6IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGx5bmNocGlucyBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBEU0EgaW50ZWdyYXRpb24gZm9yIHRoaXMgTWljcm9jaGlwIHN3aXRjaC4gVGhlIGZpcnN0LCBga3N6OTQ3N19pMmNfcHJvYmVgLCBpbiBga3N6OTQ3N19pMmMuY2AsIGxpa2VseSBoYW5kbGVzIHRoZSBJMkMtc3BlY2lmaWMgYXNwZWN0cyBvZiBwcm9iaW5nIGZvciB0aGUgZGV2aWNlOyBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpZGVudGlmaWVzIHRoZSBjaGlwLCBjb25maWd1cmVzIHRoZSBJMkMgYnVzLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgZmlyc3QgY29udGFjdC4gVGhlbiwgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBrc3pfY29tbW9uLmNgIGlzIHdoZXJlIHRoaW5ncyBzaG91bGQgZ2V0IGludGVyZXN0aW5nLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGludGVncmF0ZSB0aGUgS1NaOTQ3NyBpbnRvIHRoZSBEU0EgbGF5ZXIuIEl04oCZbGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIHN3aXRjaCBzdHJ1Y3R1cmVzLCByZWdpc3RlcmluZyBpdCB3aXRoIHRoZSBEU0EgY29yZSwgYW5kIHNldHRpbmcgdXAgdGhlIHJlbGV2YW50IGNhbGxiYWNrcyBmb3IgTUFDIGxlYXJuaW5nLCBWTEFOIGZpbHRlcmluZywgcG9ydCBjb25maWd1cmF0aW9uLCBhbmQgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgd2lsbCBjb25uZWN0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBlcnJvciBoYW5kbGluZyBpcyBoYW5kbGVkIGluIGJvdGguIFVsdGltYXRlbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmUgdXNhZ2UgYW5kIGhvdyB0aGUgZHJpdmVyIHJlcHJlc2VudHMgdGhlIEtTWjk0NzcgYXMgYSBuZXR3b3JrIHN3aXRjaCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdGF0aWMgaW50IGtzejk0NzdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpXG4gIDE4Olx0e1xuICAxOTpcdFx0Y29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEgKmNoaXA7XG4gIDIwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gXHUwMDI2aTJjLVx1MDAzZWRldjtcbiAgMjE6XHRcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xuICAyMjpcdFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcbiAgMjM6XHRcdGludCBpLCByZXQ7XG4gIDI0Olx0XG4gIDI1Olx0XHRjaGlwID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpO1xuICAyNjpcdFx0aWYgKCFjaGlwKVxuICAyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgMjg6XHRcbiAgMjk6XHRcdGRldiA9IGtzel9zd2l0Y2hfYWxsb2MoXHUwMDI2aTJjLVx1MDAzZWRldiwgY2hpcCwgaTJjKTtcbiAgMzA6XHRcdGlmICghZGV2KVxuICAzMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAgMzI6XHRcbiAgMzM6XHRcdC8qIFNhdmUgY2hpcCBpZCB0byBkbyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIHdoZW4gcHJvYmluZy4gKi9cbiAgMzQ6XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gY2hpcC1cdTAwM2VjaGlwX2lkO1xuICAzNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgX19LU1pfTlVNX1JFR01BUFM7IGkmIzQzOyYjNDM7KSB7XG4gIDM2Olx0XHRcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xuICAzNzpcdFx0XHRyYy5sb2NrX2FyZyA9IFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXg7XG4gIDM4Olx0XHRcdGRldi1cdTAwM2VyZWdtYXBbaV0gPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsIFx1MDAyNnJjKTtcbiAgMzk6XHRcdFx0aWYgKElTX0VSUihkZXYtXHUwMDNlcmVnbWFwW2ldKSkge1xuICA0MDpcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmkyYy1cdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVx1MDAzZXJlZ21hcFtpXSksXG4gIDQxOlx0XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0XHRcdCAgICAga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldLnZhbF9iaXRzKTtcbiAgNDM6XHRcdFx0fVxuICA0NDpcdFx0fVxuICA0NTpcdFxuICA0NjpcdFx0aWYgKGkyYy1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YSlcbiAgNDc6XHRcdFx0ZGV2LVx1MDAzZXBkYXRhID0gaTJjLVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuICA0ODpcdFxuICA0OTpcdFx0ZGV2LVx1MDAzZWlycSA9IGkyYy1cdTAwM2VpcnE7XG4gIDUwOlx0XG4gIDUxOlx0XHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XG4gIDUyOlx0XG4gIDUzOlx0XHQvKiBNYWluIERTQSBkcml2ZXIgbWF5IG5vdCBiZSBzdGFydGVkIHlldC4gKi9cbiAgNTQ6XHRcdGlmIChyZXQpXG4gIDU1Olx0XHRcdHJldHVybiByZXQ7XG4gIDU2Olx0XG4gIDU3Olx0XHRpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBkZXYpO1xuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIDA7XG4gIDYwOlx0fVxuICA2MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgS1NaIFN3aXRjaCBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgS1NaIHN3aXRjaCBnZXRzIHJlZ2lzdGVyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpYCBmdW5jdGlvbi4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDM5MTYgdGhyb3VnaCA0MDAwLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgaW52b2x2ZWQgaW4gdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29ubmVjdGlvbiB0byB0aGUgRFNBIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgaW50ZXJydXB0IHJlZ2lzdHJhdGlvbiAoaWYgYW55KSwgYW5kIGhvdyB0aGUgc3dpdGNoIGlzIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhpcyBtb2RlbCBvZiB0aGUgS1NaIGFuZCBvdGhlciBtb2RlbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtc3RydWN0dXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBwb3B1bGF0aW5nIHZhcmlvdXMgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIERTQSBpbnRlcmZhY2UuIEFueSBjbGV2ZXIgdXNlIG9mIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgd2lsbCBjYXRjaCBteSBleWUgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBpcyBjbGVhbiBhbmQgYWRoZXJlcyB0byBjb21tb24gY29kaW5nIHN0YW5kYXJkcyBpbiB0aGUgbmV0d29ya2luZyBzcGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MTY6XHRpbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMzkxNzpcdHtcbjM5MTg6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xuMzkxOTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcbjM5MjA6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zOTIxOlx0XHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XG4zOTIyOlx0XHRpbnQgcmV0O1xuMzkyMzpcdFx0aW50IGk7XG4zOTI0Olx0XG4zOTI1Olx0XHRkZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMzkyNjpcdFx0XHRcdFx0XHRcdCAgR1BJT0RfT1VUX0xPVyk7XG4zOTI3Olx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VyZXNldF9ncGlvKSlcbjM5Mjg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuMzkyOTpcdFxuMzkzMDpcdFx0aWYgKGRldi1cdTAwM2VyZXNldF9ncGlvKSB7XG4zOTMxOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzkzMjpcdFx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbjM5MzM6XHRcdFx0XHRpZiAocmV0KVxuMzkzNDpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjM5MzU6XHRcdFx0fVxuMzkzNjpcdFxuMzkzNzpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuMzkzODpcdFx0XHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcbjM5Mzk6XHRcdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjM5NDA6XHRcdFx0bXNsZWVwKDEwMCk7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzk0MzpcdFx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG4zOTQ0Olx0XHRcdFx0aWYgKHJldClcbjM5NDU6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4zOTQ2Olx0XHRcdH1cbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4zOTUwOlx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXgpO1xuMzk1MTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlYWx1X211dGV4KTtcbjM5NTI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXZsYW5fbXV0ZXgpO1xuMzk1MzpcdFxuMzk1NDpcdFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbjM5NTU6XHRcdGlmIChyZXQpXG4zOTU2Olx0XHRcdHJldHVybiByZXQ7XG4zOTU3Olx0XG4zOTU4Olx0XHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cdTAwM2VjaGlwX2lkKTtcbjM5NTk6XHRcdGlmICghaW5mbylcbjM5NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zOTYxOlx0XG4zOTYyOlx0XHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXG4zOTYzOlx0XHRkZXYtXHUwMDNlaW5mbyA9IGluZm87XG4zOTY0Olx0XG4zOTY1Olx0XHRkZXZfaW5mbyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXG5cJiMzNDssXG4zOTY2Olx0XHRcdCBkZXYtXHUwMDNlaW5mby1cdTAwM2VkZXZfbmFtZSwgZGV2LVx1MDAzZWNoaXBfcmV2KTtcbjM5Njc6XHRcbjM5Njg6XHRcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcbjM5Njk6XHRcdGlmIChyZXQpXG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XG4zOTcyOlx0XHRkZXYtXHUwMDNlZGV2X29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW9wcztcbjM5NzM6XHRcbjM5NzQ6XHRcdHJldCA9IGRldi1cdTAwM2VkZXZfb3BzLVx1MDAzZWluaXQoZGV2KTtcbjM5NzU6XHRcdGlmIChyZXQpXG4zOTc2Olx0XHRcdHJldHVybiByZXQ7XG4zOTc3Olx0XG4zOTc4Olx0XHRkZXYtXHUwMDNlcG9ydHMgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZWRldixcbjM5Nzk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZWluZm8tXHUwMDNlcG9ydF9jbnQgKiBzaXplb2Yoc3RydWN0IGtzel9wb3J0KSxcbjM5ODA6XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4zOTgxOlx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0cylcbjM5ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTgzOlx0XG4zOTg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbjM5ODU6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xuMzk4NjpcdFx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcbjM5ODc6XHRcdFx0ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XG4zOTg4Olx0XHRcdFx0ZGV2bV9remFsbG9jKGRldi1cdTAwM2VkZXYsXG4zOTg5Olx0XHRcdFx0XHQgICAgIHNpemVvZih1NjQpICogKGRldi1cdTAwM2VpbmZvLVx1MDAzZW1pYl9jbnQgJiM0MzsgMSksXG4zOTkwOlx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuMzk5MTpcdFx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXG4zOTkyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTkzOlx0XG4zOTk0Olx0XHRcdGRldi1cdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xuMzk5NTpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbaV0ubnVtID0gaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLU1ogU3dpdGNoIERldGVjdGlvbiBhbmQgRFNBIERyaXZlcnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBrc3pfc3dpdGNoX2RldGVjdChkZXYpYCBhbmQgYGtzel9jaGVja19kZXZpY2VfaWQoZGV2KWAgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHBoeXNpY2FsIHN3aXRjaCBjaGlwLiBTcGVjaWZpY2FsbHksIGBrc3pfc3dpdGNoX2RldGVjdChkZXYpYCB1c2VzIEkyQy9TUEkgdG8gcmVhZCByZWdpc3RlcnMgZnJvbSB0aGUgaGFyZHdhcmUuIElmIHRoYXQgaGFyZHdhcmUgKmlzbiYjMzk7dCogcHJlc2VudCDigJMgYXMgeW91JiMzOTtkIGV4cGVjdCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBWTXMgd2l0aG91dCBhIEtTWjg0NjMsIEtTWjk0NzcsIG9yIHNpbWlsYXIgY2hpcCDigJMgdGhlc2UgcmVnaXN0ZXIgcmVhZHMgd2lsbCBsaWtlbHkgZmFpbCwgeWllbGRpbmcgaW52YWxpZCBJRHMgYW5kIGEgZmFpbGVkIHByb2JlLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LgoKSSYjMzk7bSBhbHNvIHJlbWluZGluZyBteXNlbGYgdGhhdCB0aGVzZSBLU1ogc3dpdGNoZXMgYXJlIERTQSBFdGhlcm5ldCBzd2l0Y2hlcywgY29tbW9ubHkgdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggTWljcm9jaGlwIEFTSUNzIGxpa2UgdGhlIEtTWjg0NjMsIEtTWjg1NjMsIEtTWjg3OTUsIEtTWjk0NzcsIEtTWjk4OTYsIGFuZCBMQU45Mzd4LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgYml0IGFib3V0ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgaXMgY3JpdGljYWwgaGVyZTogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgYWN0dWFsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkdpdmVuIHRoYXQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgRFNBIGRyaXZlcnMgb3IgaWYgYW55IERTQSBzd2l0Y2hlcyBjYW4gZXZlbiBiZSBlbXVsYXRlZC4gSXQgc2VlbXMgdGhlIG9ubHkgRFNBIGRyaXZlciB3aXRoaW4gc3l6a2FsbGVyJiMzOTtzIHJlYWNoIG9yIHRlc3RhYmxlIHdpdGhvdXQgaGFyZHdhcmUgaXMgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBJdCYjMzk7cyBhIG1vY2sgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCB1c2VzIGEgZml4ZWQtcGh5LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBtaWNyb2NoaXBgIGRpcmVjdG9yeSAoYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBga3N6OC5jYCwgYGtzejk0NzcuY2AsIGBsYW45Mzd4X21haW4uY2ApLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGRlZGljYXRlZCB0byB0aGUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyAoS1NaODQ2MywgS1NaOTQ3NywgTEFOOTM3MCwgZXRjLikgb24gU1BJL0kyQy9TTUkgYnVzZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjYWxsZXJzIG9yIHVzYWdlIHBhdHRlcm5zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCB0aGUgZW50aXJlIGNvZGViYXNlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gYGtzejg0NjNfcHRwX3NldF9jYXBzYCwgYGtzel9wdHBfc2V0X2NhcHNgLCBga3N6X3B0cF9jbG9ja19yZWdpc3RlcmAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBrc3pfc3dpdGNoX2NoaXBzYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBob3BlIGZvciB0ZXN0aW5nIHRoZXNlIGRyaXZlcnMgaW4gYSB2aXJ0dWFsIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzei4qcHRwX3NldF9jYXBzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIzODU9c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDgwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ4MTpcdFx0a3N6ODQ2M19wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ4Mi1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjY0Nj1zdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI3NzgtXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI3Nzk6XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc4MC1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTY3MD1zdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODMtXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjE3ODQ6XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMTc4NS1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9MTMxOT1zdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzM0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTMzNTp2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMzYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNTUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzU2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD0yMj1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0zNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6Mzc6dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMzgtaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD02NT1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC02OS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo3MTpzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTcyLXN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9NzY4PXN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy04NjktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjg3MDpcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy04NzEtXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBidWlsZCBkZXBlbmRlbmNpZXMuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIGlzIEtjb25maWcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBvciBpbXBsaWVkIGZvciB0aGlzIGRyaXZlciB0byBjb21waWxlIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsbHkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gcHJldmVudCBpdCBmcm9tIGJ1aWxkaW5nIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgcG90ZW50aWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHkuIFRoaXMgc2F2ZXMgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSByb2FkIOKAkyBubyBwb2ludCBpbiBjaGFzaW5nIGJ1Z3MgdGhhdCBhcmUganVzdCB0aGUgcmVzdWx0IG9mIGEgbWlzc2luZyBLY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RTQV9NSUNST0NISVB8TkVUX0RTQV9LU1omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MTc6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfSTJDXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIEkyQyBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OIFx1MDAyNlx1MDAyNiBJMkNcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMC1cdHNlbGVjdCBSRUdNQVBfSTJDXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI0OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfU1BJXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIFNQSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI2Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OIFx1MDAyNlx1MDAyNiBTUElcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yNy1cdHNlbGVjdCBSRUdNQVBfU1BJXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTj1tIHx8IFBUUF8xNTg4X0NMT0NLPXlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDQtXHRzZWxlY3QgTURJT19CSVRCQU5HXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OKVx0JiM0Mzs9IGtzel9zd2l0Y2gub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT02PWtzel9zd2l0Y2gtb2JqcyAmIzQzOz0gbGFuOTM3eF9tYWluLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS05LWtzel9zd2l0Y2gtb2JqcyAmIzQzOz0ga3N6X3B0cC5vXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTEwPWVuZGlmXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlLTExLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXHQmIzQzOz0ga3N6OTQ3N19pMmMub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1NQSSlcdFx0JiM0Mzs9IGtzel9zcGkub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXHQmIzQzOz0ga3N6ODg2M19zbWkub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTE3MT1zdHJ1Y3Qga3N6X3BvcnQge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5NC1cdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtMTk2LVx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjExOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9OTE9c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykge31cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDoxMDc6I2VuZGlmXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MjIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIE1pY3JvY2hpcCBLU1ovTEFOIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIFBUUCAoUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wpIHN1cHBvcnQgZm9yIHRoZSBLU1o4NDYzIHN3aXRjaCBjaGlwLCBhbmQgcmVmYWN0b3JzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW52b2x2ZXMgc2V0dGluZyB1cCBjYXBhYmlsaXRpZXMsIGVuYWJsaW5nIHBlci1vdXRwdXQgY29uZmlndXJhdGlvbnMsIGFuZCBtYW5hZ2luZyB0aW1lIGFkanVzdG1lbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcC4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZWdyYXRlZCB0aHJvdWdoIHRoZSBEU0Egc3dpdGNoIHNldHVwIGNhbGxiYWNrcy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzIGZvciBmdXp6aW5nLCBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBDYW4gdGhpcyBiZSBwcm9iZWQgYW5kIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIG5vLiBUaGVzZSBhcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBJQ3MsIGNvbW11bmljYXRpbmcgdmlhIFNQSSwgSTJDLCBTTUksIG9yIE1ESU8gYnVzc2VzLiBXZSAqbmVlZCogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGV2ZW4gcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBEU0Egc3dpdGNoLiBJdCYjMzk7cyBqdXN0IHN0cnVjdHVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNyaXRlcmlhIGZyb20gU2VjdGlvbiAyIGRpcmVjdGx5IGRpc3F1YWxpZmllcyBpdCBmcm9tIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIG9uIGRyaXZlciBjb2RlIHRoYXQsIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBjYXBhYmlsaXRpZXMsIGlzIGluYWNjZXNzaWJsZS4KCk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5OgoKMS4gIEkgaGF2ZSBjb21wbGV0ZWQgdGhlIGFuYWx5c2lzLgoyLiAgSSBhbSBjZXJ0YWluIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgozLiAgSSBkb24mIzM5O3QgaGF2ZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agb3IgYEVuYWJsZUNvbmZpZ3NgLgo0LiAgSSBoYXZlIHByb3ZpZGVkIHRoZSByZWFzb25pbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6MzAuNDM1MTE4OTE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDkxMzEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IGFuZCBwZXItb3V0IGNvbmZpZ3VyYXRpb24gZm9yIE1pY3JvY2hpcCBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzIHdpdGhpbiB0aGUgTWljcm9jaGlwIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC8pLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBBU0lDcyBjb25uZWN0ZWQgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6MzAuNDM1MTIzMTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMTg5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDc6NDI6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbkBAIC0yNDc4LDYgKzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfZ2lycTtcXG4gXFxuK1xcdFxcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcbkBAIC0yNzc1LDYgKzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwdHBfY2FwYWJsZSkge1xcbitcXHRcXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuaW5kZXggM2VlOTk1NTQ1YzU3OS4uNzI1MjhhNTNiNjdkMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuQEAgLTE3ODEsNiArMTc4MSw3IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXB0cF9jYXBhYmxlKSB7XFxuK1xcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5AQCAtMTE2MSw2ICsxMTYxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfbWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXFxuIFxcdFxcdC5zdXBwb3J0c19ybWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxcbitcXHRcXHQubl9waW5zID0gMTIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAxMixcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o4NTYzXSA9IHtcXG5AQCAtMTE5NCw2ICsxMTk2LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbiBcXHRcXHQud3JfdGFibGUgPSBcXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXFxuIFxcdFxcdC5yZF90YWJsZSA9IFxcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg3OTVdID0ge1xcbkBAIC0xNDE0LDYgKzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zZ21paV9wb3J0ID0gNyxcXG4gXFx0XFx0LndyX3RhYmxlID0gXFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxcbiBcXHRcXHQucmRfdGFibGUgPSBcXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o5ODk2XSA9IHtcXG5AQCAtMTU0NCw2ICsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg1NjddID0ge1xcbkBAIC0xNTgxLDYgKzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5nYml0X2NhcGFibGVcXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXFxuIFxcdFxcdFxcdFxcdCAgIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaOTU2N10gPSB7XFxuQEAgLTE2MTUsNiArMTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0XFx0XFx0ICAgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZVxcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3MF0gPSB7XFxuQEAgLTE2NDYsNiArMTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcxXSA9IHtcXG5AQCAtMTY3Nyw2ICsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcyXSA9IHtcXG5AQCAtMTcxMiw2ICsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuaW50ZXJuYWxfcGh5XFx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzNdID0ge1xcbkBAIC0xNzQ3LDYgKzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzRdID0ge1xcbkBAIC0xNzgyLDYgKzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTY0Nl0gPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5pbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcXG4gXFx0dTggc2dtaWlfcG9ydDtcXG4gXFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKndyX3RhYmxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XFxuK1xcdGNvbnN0IHU4IG5fcGlucztcXG4rXFx0Y29uc3QgdTggbl9wZXJfb3V0O1xcbiB9O1xcbiBcXG4gc3RydWN0IGtzel9pcnEge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gICovXFxuICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTlcXG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXFxuKyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcXG4gXFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcXG5AQCAtNjMsNiArNjQsMTcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9ncGlvKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdCBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4ge1xcbiBcXHR1MzIgZGF0YTtcXG5AQCAtODYsNyArOTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuIFxcdFxcdFxcdCAwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxcbitzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbiBcXG5AQCAtOTQsNyArMTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcXG4tXFx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcXG4rXFx0aWYgKChtYXNrIFxcdTAwMjYgZGF0YSkgIT0gZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTIwLDYgKzEzMiwyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3RhcmdldF90aW1lX3NldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4re1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIShkYXRhIFxcdTAwMjYgQklUKHVuaXQpKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiJXM6IFRyaWdnZXIgdW5pdCVkIGVycm9yIVxcXFxuXFxcIiwgX19mdW5jX18sXFxuK1xcdFxcdFxcdHVuaXQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4ge1xcbiBcXHR1MzIgZGF0YTtcXG5AQCAtMTQ3LDYgKzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcXG4rXFx0XFx0XFx0XFx0XFx0dTggaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGEucGluX2NvbmZpZ1tpbmRleF07XFxuK1xcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi1cXHUwMDNlY2hhbjtcXG4rXFx0dTE2IGRhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cXG4rXFx0aWYgKCh0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjIFxcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXFx1MDAzZXR2X3NlYylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfFxcbitcXHQgICAgICAgcGluLVxcdTAwM2VpbmRleDtcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGLFxcbitcXHRcXHRcXHQgIGN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFNldCBjeWNsZSBjb3VudCAwIC0gSW5maW5pdGUgKi9cXG4rXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfQ05UX09GRiwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cXG4rXFx0ZGF0YSA9IChwdWxzZV93aWR0aF9ucyAvIDgpO1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX05TRUMsXFxuK1xcdFxcdFxcdCAgdGFyZ2V0X3RpbWUtXFx1MDAzZXR2X25zZWMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX1NFQyxcXG4rXFx0XFx0XFx0ICB0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzel9wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXFxuQEAgLTE4MywxNyArMjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcXG4tXFx0XFx0XFx0XFx0IGludCBvbilcXG4rc3RhdGljIGludCBrc3pfcHRwX2dldF9waW4oc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbi1cXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xcbi1cXHR1NjQgY3ljbGVfd2lkdGhfbnM7XFxuLVxcdHU2NCBwdWxzZV93aWR0aF9ucztcXG4tXFx0aW50IHBpbiA9IDA7XFxuLVxcdHUzMiBkYXRhMzI7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCBwaW47XFxuIFxcbiBcXHRpZiAocmVxdWVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+UFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuQEAgLTIwNiw2ICsyODQsMTE0IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChwaW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHJldHVybiBwaW47XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgKmN5Y2xlX3dpZHRoX25zKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5zZWM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0Lm5zZWM7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWM7XFxuK1xcbitcXHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZCk7XFxuK1xcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFxcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSAqY3ljbGVfd2lkdGhfbnMpIHtcXG4rXFx0XFx0KmN5Y2xlX3dpZHRoX25zID0gMDtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IG1heF9wdWxzZV93aWR0aClcXG4re1xcbitcXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xcbitcXG4rXFx0aWYgKHJlcXVlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxcbitcXHRcXHRyZXR1cm4gcmVxdWVzdC1cXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcXHRyZXF1ZXN0LVxcdTAwM2Vvbi5uc2VjO1xcbitcXG4rXFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxcbitcXHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cXG4rXFx0ICovXFxuK1xcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcXG4rXFx0XFx0XFx0ICAgICAgcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcXG4rXFx0cmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbitcXHR1NjQgY3ljbGVfd2lkdGhfbnM7XFxuK1xcdHU2NCBwdWxzZV93aWR0aF9ucztcXG4rXFx0aW50IHBpbjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xcbitcXHRpZiAocGluIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBpbjtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghb24pIHtcXG4rXFx0XFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFxcdTAwMjZjeWNsZV93aWR0aF9ucyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcXG4rXFxuK1xcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBwaW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfZ3BpbyhkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3N0YXJ0KGRldiwgcmVxdWVzdC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfUEVST1VUO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHQgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4rXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbitcXHRpbnQgcGluID0gMDtcXG4rXFx0dTMyIGRhdGEzMjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xcbitcXHRpZiAocGluIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBpbjtcXG4rXFxuIFxcdGRhdGEzMiA9IEZJRUxEX1BSRVAoUFRQX0dQSU9fSU5ERVgsIHBpbikgfFxcbiBcXHRcXHQgRklFTERfUFJFUChQVFBfVE9VX0lOREVYLCByZXF1ZXN0LVxcdTAwM2VpbmRleCk7XFxuIFxcdHJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCxcXG5AQCAtMjIxLDMxICs0MDcsMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0XFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4rXFx0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFxcdTAwMjZjeWNsZV93aWR0aF9ucyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xcbiBcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cXHUwMDNlc3RhcnQuc2VjO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5uc2VjO1xcbi1cXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYztcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjO1xcbi1cXG4tXFx0Y3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZCk7XFxuLVxcdGlmICgoY3ljbGVfd2lkdGhfbnMgXFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9IGN5Y2xlX3dpZHRoX25zKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmIChyZXF1ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xcbi1cXHRcXHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXFx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyArXFxuLVxcdFxcdFxcdHJlcXVlc3QtXFx1MDAzZW9uLm5zZWM7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcXG4tXFx0XFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyArXFxuLVxcdFxcdFxcdFxcdCAgICAgIHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XFxuLVxcdFxcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zKTtcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtNzU2LDExICs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCAqcmVxdWVzdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbiBcXHRzNjQgbm93X25zLCBmaXJzdF9ucywgcGVyaW9kX25zLCBuZXh0X25zO1xcbi1cXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcXG4gXFx0dW5zaWduZWQgaW50IGNvdW50O1xcbkBAIC03OTEsNDAgKzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cXG4gXFx0bmV4dCA9IG5zX3RvX3RpbWVzcGVjNjQobmV4dF9ucyk7XFxuLVxcdHJlcXVlc3Quc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xcbi1cXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XFxuLVxcdHJlcXVlc3QucGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XFxuLVxcdHJlcXVlc3QucGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xcbi1cXHRyZXF1ZXN0LmluZGV4ID0gMDtcXG4tXFx0cmVxdWVzdC5mbGFncyA9IDA7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlaW5kZXggPSAwO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VmbGFncyA9IDA7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0LCAxKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbi1cXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuLVxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxdWVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0LCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2tzel9wdHBfc2V0dGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4re1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xcbiBcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX1JUQ19TVUJfTkFOT1NFQ10sIFBUUF9SVENfME5TKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgdHMtXFx1MDAzZXR2X25zZWMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX1NFQ10sIHRzLVxcdTAwM2V0dl9zZWMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgUFRQX0xPQURfVElNRSwgUFRQX0xPQURfVElNRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRzd2l0Y2ggKHB0cF9kYXRhLVxcdTAwM2V0b3VfbW9kZSkge1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbkBAIC04OTAsMTggKzExMjksMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4rc3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4tXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbiBcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuIFxcdHMzMiBzZWMsIG5zZWM7XFxuIFxcdHUxNiBkYXRhMTY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHQvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSxcXG4gXFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcXG4gXFx0ICovXFxuQEAgLTkwOSwxNSArMTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIFxcdTAwMjZkYXRhMTYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGRhdGExNiB8PSBQVFBfU1RFUF9BREo7XFxuIFxcbkBAIC05MjgsNiArMTE2Miw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbiBcXHRcXHRkYXRhMTYgfD0gUFRQX1NURVBfRElSO1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIGRhdGExNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0c3dpdGNoIChwdHBfZGF0YS1cXHUwMDNldG91X21vZGUpIHtcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSwgZGVsdGE2NCk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuK1xcbit1bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuQEAgLTk1Miw2ICsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHJlcS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcS1cXHUwMDNlcGVyb3V0LCBvbik7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXFxuIHtcXG5AQCAtMTAyOCwxNyArMTMzMiwzMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5vd25lclxcdFxcdD0gVEhJU19NT0RVTEU7XFxuK1xcdHNucHJpbnRmKHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5hbWUsIDE2LCBcXFwiTWljcm9jaGlwIENsb2NrXFxcIik7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm1heF9hZGpcXHRcXHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZ2V0dGltZTY0XFx0PSBrc3pfcHRwX2dldHRpbWU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnNldHRpbWU2NFxcdD0ga3N6ODQ2M19wdHBfc2V0dGltZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuYWRqZmluZVxcdFxcdD0ga3N6X3B0cF9hZGpmaW5lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5hZGp0aW1lXFx0XFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5kb19hdXhfd29ya1xcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZW5hYmxlXFx0XFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnZlcmlmeVxcdFxcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9wZXJfb3V0O1xcbit9XFxuK1xcbit2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTggaTtcXG4gXFxuIFxcdHB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4gXFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm93bmVyXFx0XFx0PSBUSElTX01PRFVMRTtcXG4gXFx0c25wcmludGYocHRwX2RhdGEtXFx1MDAzZWNhcHMubmFtZSwgMTYsIFxcXCJNaWNyb2NoaXAgQ2xvY2tcXFwiKTtcXG5AQCAtMTA1MCwxNCArMTM3MCwyNyBAQCBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmRvX2F1eF93b3JrXFx0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xcbiBcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5lbmFibGVcXHRcXHQ9IGtzel9wdHBfZW5hYmxlO1xcbiBcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy52ZXJpZnlcXHRcXHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubl9waW5zXFx0XFx0PSBLU1pfUFRQX05fR1BJTztcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubl9wZXJfb3V0XFx0PSAzO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9wZXJfb3V0O1xcbit9XFxuK1xcbitpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1OCBpO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbiBcXG4gXFx0cmV0ID0ga3N6X3B0cF9zdGFydF9jbG9jayhkZXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtTWl9QVFBfTl9HUElPOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGluX2NvbmZpZ1tpXTtcXG4gXFxuIFxcdFxcdHNucHJpbnRmKHB0cF9waW4tXFx1MDAzZW5hbWUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi4zODM4YTczYTgzMDJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5AQCAtMTIsNyArMTIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cXHRcXHQyXFxuKyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cXHRcXHQxMlxcbiBcXG4gZW51bSBrc3pfcHRwX3RvdV9tb2RlIHtcXG4gXFx0S1NaX1BUUF9UT1VfSURMRSxcXG5AQCAtMzMsNiArMzMsOCBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcXG4gfTtcXG4gXFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiB2b2lkIGtzel9wdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbkBAIC02NSw2ICs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuaW5kZXggNjVlYTg1NzdhZjc1NS4uMTZmMTE3ZmE1ZDQ5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG5AQCAtNTEsNiArNTEsMjIgQEBcXG4gXFxuICNkZWZpbmUgUkVHX1BUUF9VTklUX0lOREVYX180XFx0XFx0MHgwNTIwXFxuIFxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVxcdFxcdDB4MjAyXFxuKyNkZWZpbmUgS1NaODQ2M19UT1VfRU5cXHRcXHRcXHQweDIwNlxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX1NXX1JTVFxcdFxcdDB4MjA4XFxuK1xcbisjZGVmaW5lIEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkVcXHRcXHQweDIwXFxuKyNkZWZpbmUgS1NaODQ2M19UUklHMV9DRkdcXHRcXHQweDIyMFxcbisjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUNcXHRcXHQweDAwMFxcbisjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX1NFQ1xcdFxcdDB4MDA0XFxuKyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX09GRlxcdFxcdDB4MDA4XFxuKyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX01cXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgS1NaODQ2M19QVUxTRV9XSURUSF9PRkZcXHRcXHQweDAwQVxcbisjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NXFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlxcdFxcdDB4MDBDXFxuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9DTlRfT0ZGXFx0XFx0MHgwMTBcXG4rXFxuICNkZWZpbmUgUFRQX0dQSU9fSU5ERVhcXHRcXHRcXHRHRU5NQVNLKDE5LCAxNilcXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXFx0XFx0XFx0QklUKDgpXFxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFxcdFxcdFxcdEdFTk1BU0soMSwgMClcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuQEAgLTg2Nyw2ICs4NjcsNyBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjMwLjk4MTE2OTU0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0MDMwNjkyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwZGRmZmI5YjNlMzkwNzA5YWJkMDI2ZDM4NzMwMjY2ZTFiYjJjYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjQyOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTI0NzgsNiArMjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBmcmVlX2dpcnE7XG4gXG4rXHRcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbkBAIC0yNzc1LDYgKzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4rXHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNzgxLDYgKzE3ODEsNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4rXHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbmluZGV4IDFhOWQ2ZjgzYTAyMzIuLjllMjM0YWQ3MWI3MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0xMTYxLDYgKzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4rXHRcdC5uX3BpbnMgPSAxMixcbitcdFx0Lm5fcGVyX291dCA9IDEyLFxuIFx0fSxcbiBcbiBcdFtLU1o4NTYzXSA9IHtcbkBAIC0xMTk0LDYgKzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o4Nzk1XSA9IHtcbkBAIC0xNDE0LDYgKzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zZ21paV9wb3J0ID0gNyxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjk4OTZdID0ge1xuQEAgLTE1NDQsNiArMTU1MCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGUgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODU2N10gPSB7XG5AQCAtMTU4MSw2ICsxNTg5LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXG4gXHRcdFx0XHQgICB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5NTY3XSA9IHtcbkBAIC0xNjE1LDYgKzE2MjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdFx0XHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcwXSA9IHtcbkBAIC0xNjQ2LDYgKzE2NTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzFdID0ge1xuQEAgLTE2NzcsNiArMTY5MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzJdID0ge1xuQEAgLTE3MTIsNiArMTcyOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3M10gPSB7XG5AQCAtMTc0Nyw2ICsxNzY1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3NF0gPSB7XG5AQCAtMTc4Miw2ICsxODAyLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45NjQ2XSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcbiBcdHU4IHNnbWlpX3BvcnQ7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XG4rXHRjb25zdCB1OCBuX3BpbnM7XG4rXHRjb25zdCB1OCBuX3Blcl9vdXQ7XG4gfTtcbiBcbiBzdHJ1Y3Qga3N6X2lycSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuQEAgLTI2LDYgKzI2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtTWl9NQVhfRFJJRlRfQ09SUiA2MjQ5OTk5XG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXG4rI2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxuQEAgLTYzLDYgKzY0LDE3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdCBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpO1xuIH1cbiBcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtODYsNyArOTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRcdFx0IDApO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4rc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zLCB1MzIgbWFzaylcbiB7XG4gXHR1MzIgZGF0YTtcbiBcbkBAIC05NCw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xuLVx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcbitcdGlmICgobWFzayBcdTAwMjYgZGF0YSkgIT0gZGF0YSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMjAsNiArMTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbit7XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9FTiwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghKGRhdGEgXHUwMDI2IEJJVCh1bml0KSkpIHtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIiVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcXG5cIiwgX19mdW5jX18sXG4rXHRcdFx0dW5pdCk7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiB7XG4gXHR1MzIgZGF0YTtcbkBAIC0xNDcsNiArMTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcbitcdFx0XHRcdFx0dTggaW5kZXgpXG4re1xuK1x0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhLnBpbl9jb25maWdbaW5kZXhdO1xuK1x0dTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgKyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVx1MDAzZWNoYW47XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cbitcdGlmICgodGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjIFx1MDAyNiAweGZmZmZmZmZmKSAhPSB0YXJnZXRfdGltZS1cdTAwM2V0dl9zZWMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZGF0YSA9IEtTWjg0NjNfTk9USUZZX0JJVCB8XG4rXHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XG4rXHQgICAgICAgcGluLVx1MDAzZWluZGV4O1xuK1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRixcbitcdFx0XHQgIGN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovXG4rXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cbitcdGRhdGEgPSAocHVsc2Vfd2lkdGhfbnMgLyA4KTtcbitcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX05TRUMsXG4rXHRcdFx0ICB0YXJnZXRfdGltZS1cdTAwM2V0dl9uc2VjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfU0VDLFxuK1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG5AQCAtMTgzLDE3ICsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4tXHRcdFx0XHQgaW50IG9uKVxuK3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4tXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4tXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4tXHRpbnQgcGluID0gMDtcbi1cdHUzMiBkYXRhMzI7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHBpbjtcbiBcbiBcdGlmIChyZXF1ZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiB+UFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMjA2LDYgKzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdGlmIChwaW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cmV0dXJuIHBpbjtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHRcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWM7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbitcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWM7XG4rXG4rXHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuK1x0aWYgKCgqY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gKmN5Y2xlX3dpZHRoX25zKSB7XG4rXHRcdCpjeWNsZV93aWR0aF9ucyA9IDA7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0XHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxuK3tcbitcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4rXG4rXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuK1x0XHRyZXR1cm4gcmVxdWVzdC1cdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1x0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuK1xuK1x0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxuK1x0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4rXHQgKi9cbitcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgK1xuK1x0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbitcdHJldHVybiBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucywgbWF4X3B1bHNlX3dpZHRoKTtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHQgICAgIGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdHU2NCBjeWNsZV93aWR0aF9ucztcbitcdHU2NCBwdWxzZV93aWR0aF9ucztcbitcdGludCBwaW47XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4rXHRpZiAocGluIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcGluO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFvbikge1xuK1x0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuK1x0XHRcdFx0XHRcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcbitcbitcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcbitcdFx0XHRcdCAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChkZXYsIGN5Y2xlX3dpZHRoX25zLCBwdWxzZV93aWR0aF9ucyxcbitcdFx0XHRcdFx0ICAgXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxuK1x0XHRcdFx0XHQgICBwaW4pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHQgaW50IG9uKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1x0dTY0IGN5Y2xlX3dpZHRoX25zO1xuK1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuK1x0aW50IHBpbiA9IDA7XG4rXHR1MzIgZGF0YTMyO1xuK1x0aW50IHJldDtcbitcbitcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xuK1x0aWYgKHBpbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBpbjtcbitcbiBcdGRhdGEzMiA9IEZJRUxEX1BSRVAoUFRQX0dQSU9fSU5ERVgsIHBpbikgfFxuIFx0XHQgRklFTERfUFJFUChQVFBfVE9VX0lOREVYLCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbiBcdHJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCxcbkBAIC0yMjEsMzEgKzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuK1x0XHRcdFx0XHRcdCAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xuIFxuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuLVxuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuLVxuLVx0Y3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuLVx0aWYgKChjeWNsZV93aWR0aF9ucyBcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucylcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC1cdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1xuLVx0XHRcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbi1cdH0gZWxzZSB7XG4tXHRcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbi1cdFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4tXHRcdCAqL1xuLVx0XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcbi1cdFx0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcbi1cdFx0XHRcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbi1cdH1cbi1cbi1cdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7XG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsIFRSSUdfUFVMU0VfV0lEVEhfTSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTc1NiwxMSArOTI0LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9nZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4gXHRzNjQgbm93X25zLCBmaXJzdF9ucywgcGVyaW9kX25zLCBuZXh0X25zO1xuLVx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbmV4dDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcbiBcdHVuc2lnbmVkIGludCBjb3VudDtcbkBAIC03OTEsNDAgKzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXG4gXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cbiBcdG5leHQgPSBuc190b190aW1lc3BlYzY0KG5leHRfbnMpO1xuLVx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XG4tXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xuLVx0cmVxdWVzdC5pbmRleCA9IDA7XG4tXHRyZXF1ZXN0LmZsYWdzID0gMDtcbitcdHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbitcdHJlcXVlc3QtXHUwMDNlaW5kZXggPSAwO1xuK1x0cmVxdWVzdC1cdTAwM2VmbGFncyA9IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0LCAxKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19rc3pfcHRwX3NldHRpbWUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qIFdyaXRlIHRvIHNoYWRvdyByZWdpc3RlcnMgYW5kIExvYWQgUFRQIGNsb2NrICovXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX1JUQ19TVUJfTkFOT1NFQ10sIFBUUF9SVENfME5TKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIHRzLVx1MDAzZXR2X25zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCB0cy1cdTAwM2V0dl9zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIFBUUF9MT0FEX1RJTUUsIFBUUF9MT0FEX1RJTUUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbitcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcbitcdFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXHRwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lID0gKnRzO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuQEAgLTg5MCwxOCArMTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiBcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzMzIgc2VjLCBuc2VjO1xuIFx0dTE2IGRhdGExNjtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVxuIFx0LyogZG8gbm90IHVzZSBuc190b190aW1lc3BlYzY0KCksXG4gXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xuIFx0ICovXG5AQCAtOTA5LDE1ICsxMTQzLDE1IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgYWJzKG5zZWMpKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBcdTAwMjZkYXRhMTYpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRkYXRhMTYgfD0gUFRQX1NURVBfQURKO1xuIFxuQEAgLTkyOCw2ICsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4rXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUsIGRlbHRhNjQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC05NTIsNiArMTIzNiwyNiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgICAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRzd2l0Y2ggKHJlcS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0ID0ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcS1cdTAwM2VwZXJvdXQsIG9uKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4gXHRcdFx0ICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxuIHtcbkBAIC0xMDI4LDE3ICsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm93bmVyXHRcdD0gVEhJU19NT0RVTEU7XG4rXHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcIk1pY3JvY2hpcCBDbG9ja1wiKTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubWF4X2Fkalx0XHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZ2V0dGltZTY0XHQ9IGtzel9wdHBfZ2V0dGltZTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuc2V0dGltZTY0XHQ9IGtzejg0NjNfcHRwX3NldHRpbWU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkamZpbmVcdFx0PSBrc3pfcHRwX2FkamZpbmU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkanRpbWVcdFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9waW5zXHRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9waW5zO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuK31cbitcbit2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuLVx0aW50IHJldDtcbi1cdHU4IGk7XG4gXG4gXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiBcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwiTWljcm9jaGlwIENsb2NrXCIpO1xuQEAgLTEwNTAsMTQgKzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3pfcHRwX2VuYWJsZTtcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMudmVyaWZ5XHRcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBLU1pfUFRQX05fR1BJTztcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IDM7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGVyX291dDtcbit9XG4rXG4raW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1x0aW50IHJldDtcbitcdHU4IGk7XG4rXG4rXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHJldCA9IGtzel9wdHBfc3RhcnRfY2xvY2soZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLU1pfUFRQX05fR1BJTzsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGluX2NvbmZpZ1tpXTtcbiBcbiBcdFx0c25wcmludGYocHRwX3Bpbi1cdTAwM2VuYW1lLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDcwNjdlYzliZDFlNmYuLjM4MzhhNzNhODMwMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbkBAIC0xMiw3ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQyXG4rI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQxMlxuIFxuIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7XG4gXHRLU1pfUFRQX1RPVV9JRExFLFxuQEAgLTMzLDYgKzMzLDggQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBwZXJvdXRfcGVyaW9kO1xuIH07XG4gXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbkBAIC02NSw2ICs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IG11dGV4IGxvY2s7XG4gfTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuaW5kZXggNjVlYTg1NzdhZjc1NS4uMTZmMTE3ZmE1ZDQ5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtNTEsNiArNTEsMjIgQEBcbiBcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFx0XHQweDA1MjBcbiBcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVx0XHQweDIwMlxuKyNkZWZpbmUgS1NaODQ2M19UT1VfRU5cdFx0XHQweDIwNlxuKyNkZWZpbmUgS1NaODQ2M19UT1VfU1dfUlNUXHRcdDB4MjA4XG4rXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFXHRcdDB4MjBcbisjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXHRcdDB4MjIwXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXHRcdDB4MDAwXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUNcdFx0MHgwMDRcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcdFx0MHgwMDhcbisjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFx0XHRCSVQoOClcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXHRcdDB4MDBBXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGXHRcdDB4MDBDXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX0NOVF9PRkZcdFx0MHgwMTBcbitcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXHRcdFx0R0VOTUFTSygxOSwgMTYpXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXHRcdFx0QklUKDgpXG4gI2RlZmluZSBQVFBfVE9VX0lOREVYXHRcdFx0R0VOTUFTSygxLCAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuQEAgLTg2Nyw2ICs4NjcsNyBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4rXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjMwLjk4MTE3MTI4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDAwNjU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBzeXprYWxsZXIgYXQgaXQuIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlcy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBidW5jaCBvZiBNaWNyb2NoaXAgS1NaIHN3aXRjaCBkcml2ZXJzLCBzcGVjaWZpY2FsbHk6IGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY2AsIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY2AsIGFuZCBhIGZldyByZWxhdGVkIGNvbW1vbiBmaWxlcyBsaWtlIGBrc3pfY29tbW9uLmNgIGFuZCBga3N6X3B0cC5jYCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlcyBhbmQgYGxhbjkzN3hfbWFpbi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXNlIGFyZSBsaWtlbHkgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXJzLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IGFzY2VydGFpbiB0aGUgaGFyZHdhcmUgY29udGV4dC4gVGhlc2UgTWljcm9jaGlwIEtTWiBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgU1BJLCBJMkMsIE1ESU8sIG9yIFNNSSBjb25uZWN0ZWQgRXRoZXJuZXQgc3dpdGNoIElDcyDigJMgdGhlIEtTWjh4eHgsIEtTWjl4eHgsIGFuZCBMQU45Mzd4IGZhbWlsaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkcml2ZXJzIGhhdmUgYSBjbGVhciBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGJ1cyBhdHRhY2htZW50LiBBcmUgdGhleSByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnN0YW50aWF0aW9uLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBvciBwdXJlbHkgc29mdHdhcmUtYmFzZWQgcGF0aD8gSWRlYWxseSwgd2UncmUgbG9va2luZyBmb3IgaW50ZXJmYWNlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBhY3R1YWxseSBwcm9iZWQuIEkgbmVlZCB0byBzZWFyY2ggZm9yIGhvdyBga3N6X3N3aXRjaF9jaGlwc2Agb3Igcm91dGluZXMgaW4gYGtzel9jb21tb24uY2AgYXJlIHV0aWxpemVkIHdpdGhpbiB0aGUga2VybmVsJ3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5IGl0IHdvdWxkIGJlIHRvIHRyaWdnZXIgdGhlIHJvdXRpbmVzIGluIHRoZXNlIGZpbGVzIHRocm91Z2ggYSBzeXprYWxsZXIgcHJvZ3JhbSwgYW5kIHdoZXRoZXIgaXQncyB3b3J0aCBjcmVhdGluZyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIHRvIGRvIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjM1LjY4MTIzOTI0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5OTczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3NwaV9kcml2ZXJ8bW9kdWxlX2kyY19kcml2ZXJ8a3N6X3N3aXRjaF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYz0xMzM9c3RhdGljIGludCBrc3o4ODYzX3NtaV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmMtMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYzoxNjk6XFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTc9c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUwLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzo1MTpcXHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jPTEzMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga3N6OTQ3N19pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTQ1Om1vZHVsZV9pMmNfZHJpdmVyKGtzejk0NzdfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM5MTE9c3RhdGljIGludCBrc3o4NDYzX3JlbGVhc2Vfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTE2OmludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYxLX1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMxLVxcdFxcdFxcdFxcdCAgICB2b2lkICpwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMzLXZvaWQga3N6X3N3aXRjaF9yZW1vdmUoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1OlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0zNDk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGtzel9zcGlfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjM2MTptb2R1bGVfc3BpX2RyaXZlcihrc3pfc3BpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0MjozNS43ODMyNDI1NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU4OTkzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1pY3JvY2hpcCBLU1ogRXRoZXJuZXQgU3dpdGNoIERyaXZlcnMgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTWljcm9jaGlwIERTQSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyczogYGtzejg0NjNgLCBga3N6OGAsIGBrc3o5NDc3YCwgYGxhbjkzN3hgLiBUaGVzZSBndXlzIGF0dGFjaCB2aWEgU1BJLCBJMkMsIFNNSSwgb3IgTURJTy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiBDYW4gSSBldmVuICpzZWUqIHRoZXNlIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlcyBvbiBlbWJlZGRlZCBib2FyZHM/IEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgdGhlc2UgZm9yIGZ1enppbmcuXG5cbkxldCBtZSB0aGluay4uLiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZXNlIGFyZSB1c2luZyB2aXJ0dWFsIGJ1c2VzLCBvciBjb3VsZCB0aGV5IHBvdGVudGlhbGx5IGJlIGluc3RhbnRpYXRlZCBpbiBzeXprYWxsZXI/IE9rYXksIHRpbWUgdG8gc3RlcCBiYWNrIGFuZCByZW1lbWJlciB0aGUgdHJpYWdlIHByaW5jaXBsZXM6IFwiUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEUuXCIgSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgVk1zLCBmb3JnZXQgaXQsIG5vIGZ1enppbmcsIG5vIG1hdHRlciBob3cgdGVtcHRpbmcuIFRoYXQgYnJpbmdzIHVwIHRoZSBrZXkgcG9pbnQ6IHdoYXQncyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZT9cIiBUaGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQ3Mg4oCTIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBldGMuIGFyZSBhbGwgb3V0LiBUaGUgb3Bwb3NpdGUsIG9mIGNvdXJzZSwgaXMgcmVhY2hhYmxlLCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgc3VjaCBhcyBgdmlydGlvYCwgYFVTQiBnYWRnZXRgLCBgbG9vcGJhY2tgLCBgbmV0bGlua2AsIGV0Yy5cblxuTm93LCBiYWNrIHRvIHRoZXNlIEtTWiBkcml2ZXJzLiBMZXQncyBkaWcgaW4gYSBiaXQgZGVlcGVyLiBEbyBhbnkgb2YgdGhlbSBpbnN0YW50aWF0ZSBJMkMgb3IgU1BJIGRldmljZXMsIG9yIGFyZSB0aGV5IHB1cmVseSB0aWVkIHRvIHBoeXNpY2FsIGVtYmVkZGVkIHN3aXRjaCBoYXJkd2FyZSwgbGlrZSBhIHRydWUgRFNBIHN3aXRjaD8gQ2FuIEkgZXZlbiBjcmVhdGUgSTJDIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYD8gVGhhdCB3b3VsZCBiZSBhIGh1Z2Ugd2luISBJIG5lZWQgdG8gc2VlIGlmIHN5emthbGxlciBpcyB1c2luZyBgaTJjLWRldmAgb3IgZHVtbXkgSTJDLCBvciBpZiB0aGUgZHJpdmVycyByZXF1aXJlIGRpcmVjdCBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGR1cmluZyB0aGUgcHJvYmUuIEkgbmVlZCB0byBsb29rIGF0IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBjb2RlLCB0aGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gdGVsbCBtZSBpZiB0aGlzIGlzIGEgcGF0aCBJIGNhbiB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo0MC43NDIyMzg1NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4NjA5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6OTQ3N19pMmNfcHJvYmV8a3N6X3N3aXRjaF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYz0xMzM9c3RhdGljIGludCBrc3o4ODYzX3NtaV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmMtMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYzoxNjk6XFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTc6c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtNTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjUxOlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtNTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVxcdH0sXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcXHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQwLVxcdC5yZW1vdmVcXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM5MTE9c3RhdGljIGludCBrc3o4NDYzX3JlbGVhc2Vfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTE2OmludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYxLX1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMxLVxcdFxcdFxcdFxcdCAgICB2b2lkICpwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMzLXZvaWQga3N6X3N3aXRjaF9yZW1vdmUoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1OlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjQwLjgxOTEwNjM1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTUwMDY1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0czpcblxuKipEaXZpbmcgaW50byB0aGUgTWljcm9jaGlwIEtTWjk0NzcgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1NaOTQ3NyBzd2l0Y2ggaXMgYnJvdWdodCBvbmxpbmUgaW4gdGhlIERTQSBmcmFtZXdvcmssIHNvIEknbSBmb2N1c2luZyBvbiB0d28ga2V5IGZ1bmN0aW9uczogYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgLiBUaGVzZSBhcmUgYWxtb3N0IGNlcnRhaW5seSB0aGUgbHluY2hwaW5zIG9mIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIERTQSBpbnRlZ3JhdGlvbiBmb3IgdGhpcyBNaWNyb2NoaXAgc3dpdGNoLiBUaGUgZmlyc3QsIGBrc3o5NDc3X2kyY19wcm9iZWAsIGluIGBrc3o5NDc3X2kyYy5jYCwgbGlrZWx5IGhhbmRsZXMgdGhlIEkyQy1zcGVjaWZpYyBhc3BlY3RzIG9mIHByb2JpbmcgZm9yIHRoZSBkZXZpY2U7IEkgbmVlZCB0byBzZWUgaG93IGl0IGlkZW50aWZpZXMgdGhlIGNoaXAsIGNvbmZpZ3VyZXMgdGhlIEkyQyBidXMsIGFuZCBwb3RlbnRpYWxseSBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUuIEl0J3MgdGhlIHBvaW50IG9mIGZpcnN0IGNvbnRhY3QuIFRoZW4sIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBpbiBga3N6X2NvbW1vbi5jYCBpcyB3aGVyZSB0aGluZ3Mgc2hvdWxkIGdldCBpbnRlcmVzdGluZy4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBpbnRlZ3JhdGUgdGhlIEtTWjk0NzcgaW50byB0aGUgRFNBIGxheWVyLiBJdOKAmWxsIHByb2JhYmx5IGludm9sdmUgYWxsb2NhdGluZyBzd2l0Y2ggc3RydWN0dXJlcywgcmVnaXN0ZXJpbmcgaXQgd2l0aCB0aGUgRFNBIGNvcmUsIGFuZCBzZXR0aW5nIHVwIHRoZSByZWxldmFudCBjYWxsYmFja3MgZm9yIE1BQyBsZWFybmluZywgVkxBTiBmaWx0ZXJpbmcsIHBvcnQgY29uZmlndXJhdGlvbiwgYW5kIHRyYWZmaWMgY29udHJvbC4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHdpbGwgY29ubmVjdCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byB2ZXJpZnkgaG93IGVycm9yIGhhbmRsaW5nIGlzIGhhbmRsZWQgaW4gYm90aC4gVWx0aW1hdGVseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlIHVzYWdlIGFuZCBob3cgdGhlIGRyaXZlciByZXByZXNlbnRzIHRoZSBLU1o5NDc3IGFzIGEgbmV0d29yayBzd2l0Y2ggd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDE0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NDMuNTc0MTE1MTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDE4OlxcdHtcXG4gIDE5OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGRldiA9IFxcdTAwMjZpMmMtXFx1MDAzZWRldjtcXG4gIDIxOlxcdFxcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xcbiAgMjI6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcXG4gIDIzOlxcdFxcdGludCBpLCByZXQ7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdGNoaXAgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGRldik7XFxuICAyNjpcXHRcXHRpZiAoIWNoaXApXFxuICAyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ZGV2ID0ga3N6X3N3aXRjaF9hbGxvYyhcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIGNoaXAsIGkyYyk7XFxuICAzMDpcXHRcXHRpZiAoIWRldilcXG4gIDMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXFxuICAzNDpcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBjaGlwLVxcdTAwM2VjaGlwX2lkO1xcbiAgMzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpKyspIHtcXG4gIDM2OlxcdFxcdFxcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xcbiAgMzc6XFx0XFx0XFx0cmMubG9ja19hcmcgPSBcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXg7XFxuICAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZXJlZ21hcFtpXSA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgXFx1MDAyNnJjKTtcXG4gIDM5OlxcdFxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pKSB7XFxuICA0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pLFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXFxcblxcXCIsXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XFxuICA0MzpcXHRcXHRcXHR9XFxuICA0NDpcXHRcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChpMmMtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhKVxcbiAgNDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VwZGF0YSA9IGkyYy1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGRldi1cXHUwMDNlaXJxID0gaTJjLVxcdTAwM2VpcnE7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXFxuICA1NDpcXHRcXHRpZiAocmV0KVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cmV0dXJuIDA7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NDMuNTc0MTk4MzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MzM3NDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1NaIFN3aXRjaCBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgS1NaIHN3aXRjaCBnZXRzIHJlZ2lzdGVyZWQuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldilgIGZ1bmN0aW9uLiBUaW1lIHRvIHB1bGwgdXAgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jYCBhbmQgZm9jdXMgb24gbGluZXMgMzkxNiB0aHJvdWdoIDQwMDAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBpbnZvbHZlZCBpbiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBjb25uZWN0aW9uIHRvIHRoZSBEU0EgZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGludGVycnVwdCByZWdpc3RyYXRpb24gKGlmIGFueSksIGFuZCBob3cgdGhlIHN3aXRjaCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBhbnkgcG90ZW50aWFsIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiB0aGlzIG1vZGVsIG9mIHRoZSBLU1ogYW5kIG90aGVyIG1vZGVscy4gSSdsbCBiZSBsb29raW5nIGZvciB3ZWxsLXN0cnVjdHVyZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSdyZSBwb3B1bGF0aW5nIHZhcmlvdXMgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIERTQSBpbnRlcmZhY2UuIEFueSBjbGV2ZXIgdXNlIG9mIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgd2lsbCBjYXRjaCBteSBleWUgYXMgd2VsbC4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGlzIGNsZWFuIGFuZCBhZGhlcmVzIHRvIGNvbW1vbiBjb2Rpbmcgc3RhbmRhcmRzIGluIHRoZSBuZXR3b3JraW5nIHNwaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjQ1LjgyNzU3NTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTE2LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTE2OlxcdGludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuMzkxNzpcXHR7XFxuMzkxODpcXHRcXHRjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSAqaW5mbztcXG4zOTE5OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHM7XFxuMzkyMDpcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbjM5MjE6XFx0XFx0dW5zaWduZWQgaW50IHBvcnRfbnVtO1xcbjM5MjI6XFx0XFx0aW50IHJldDtcXG4zOTIzOlxcdFxcdGludCBpO1xcbjM5MjQ6XFx0XFxuMzkyNTpcXHRcXHRkZXYtXFx1MDAzZXJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYtXFx1MDAzZWRldiwgXFxcInJlc2V0XFxcIixcXG4zOTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgR1BJT0RfT1VUX0xPVyk7XFxuMzkyNzpcXHRcXHRpZiAoSVNfRVJSKGRldi1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuMzkyODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihkZXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbjM5Mjk6XFx0XFxuMzkzMDpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZXNldF9ncGlvKSB7XFxuMzkzMTpcXHRcXHRcXHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJtaWNyb2NoaXAsa3N6ODQ2M1xcXCIpKSB7XFxuMzkzMjpcXHRcXHRcXHRcXHRyZXQgPSBrc3o4NDYzX2NvbmZpZ3VyZV9zdHJhcHNfc3BpKGRldik7XFxuMzkzMzpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjM5MzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTM1OlxcdFxcdFxcdH1cXG4zOTM2OlxcdFxcbjM5Mzc6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cXHUwMDNlcmVzZXRfZ3BpbywgMSk7XFxuMzkzODpcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcXG4zOTM5OlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZXYtXFx1MDAzZXJlc2V0X2dwaW8sIDApO1xcbjM5NDA6XFx0XFx0XFx0bXNsZWVwKDEwMCk7XFxuMzk0MTpcXHRcXG4zOTQyOlxcdFxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG4zOTQzOlxcdFxcdFxcdFxcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XFxuMzk0NDpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjM5NDU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTQ2OlxcdFxcdFxcdH1cXG4zOTQ3OlxcdFxcdH1cXG4zOTQ4OlxcdFxcbjM5NDk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfbXV0ZXgpO1xcbjM5NTA6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXgpO1xcbjM5NTE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VhbHVfbXV0ZXgpO1xcbjM5NTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V2bGFuX211dGV4KTtcXG4zOTUzOlxcdFxcbjM5NTQ6XFx0XFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcXG4zOTU1OlxcdFxcdGlmIChyZXQpXFxuMzk1NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NTc6XFx0XFxuMzk1ODpcXHRcXHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cXHUwMDNlY2hpcF9pZCk7XFxuMzk1OTpcXHRcXHRpZiAoIWluZm8pXFxuMzk2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zOTYxOlxcdFxcbjM5NjI6XFx0XFx0LyogVXBkYXRlIHRoZSBjb21wYXRpYmxlIGluZm8gd2l0aCB0aGUgcHJvYmVkIG9uZSAqL1xcbjM5NjM6XFx0XFx0ZGV2LVxcdTAwM2VpbmZvID0gaW5mbztcXG4zOTY0OlxcdFxcbjM5NjU6XFx0XFx0ZGV2X2luZm8oZGV2LVxcdTAwM2VkZXYsIFxcXCJmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXFxcblxcXCIsXFxuMzk2NjpcXHRcXHRcXHQgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VkZXZfbmFtZSwgZGV2LVxcdTAwM2VjaGlwX3Jldik7XFxuMzk2NzpcXHRcXG4zOTY4OlxcdFxcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcXG4zOTY5OlxcdFxcdGlmIChyZXQpXFxuMzk3MDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NzE6XFx0XFxuMzk3MjpcXHRcXHRkZXYtXFx1MDAzZWRldl9vcHMgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW9wcztcXG4zOTczOlxcdFxcbjM5NzQ6XFx0XFx0cmV0ID0gZGV2LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2Vpbml0KGRldik7XFxuMzk3NTpcXHRcXHRpZiAocmV0KVxcbjM5NzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTc3OlxcdFxcbjM5Nzg6XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0cyA9IGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZWRldixcXG4zOTc5OlxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb3J0X2NudCAqIHNpemVvZihzdHJ1Y3Qga3N6X3BvcnQpLFxcbjM5ODA6XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4zOTgxOlxcdFxcdGlmICghZGV2LVxcdTAwM2Vwb3J0cylcXG4zOTgyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5ODM6XFx0XFxuMzk4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb3J0X2NudDsgaSsrKSB7XFxuMzk4NTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuc3RhdHM2NF9sb2NrKTtcXG4zOTg2OlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbaV0ubWliLmNudF9tdXRleCk7XFxuMzk4NzpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XFxuMzk4ODpcXHRcXHRcXHRcXHRkZXZtX2t6YWxsb2MoZGV2LVxcdTAwM2VkZXYsXFxuMzk4OTpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZih1NjQpICogKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbWliX2NudCArIDEpLFxcbjM5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4zOTkxOlxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXFxuMzk5MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zOTkzOlxcdFxcbjM5OTQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xcbjM5OTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0c1tpXS5udW0gPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo0NS44Mjc5NzcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTAzNDQwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1NaIFN3aXRjaCBEZXRlY3Rpb24gYW5kIERTQSBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGtzel9zd2l0Y2hfZGV0ZWN0KGRldilgIGFuZCBga3N6X2NoZWNrX2RldmljZV9pZChkZXYpYCBmdW5jdGlvbnMuIEknbSBmb2N1c2luZyBvbiBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBzd2l0Y2ggY2hpcC4gU3BlY2lmaWNhbGx5LCBga3N6X3N3aXRjaF9kZXRlY3QoZGV2KWAgdXNlcyBJMkMvU1BJIHRvIHJlYWQgcmVnaXN0ZXJzIGZyb20gdGhlIGhhcmR3YXJlLiBJZiB0aGF0IGhhcmR3YXJlICppc24ndCogcHJlc2VudCDigJMgYXMgeW91J2QgZXhwZWN0IGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIFZNcyB3aXRob3V0IGEgS1NaODQ2MywgS1NaOTQ3Nywgb3Igc2ltaWxhciBjaGlwIOKAkyB0aGVzZSByZWdpc3RlciByZWFkcyB3aWxsIGxpa2VseSBmYWlsLCB5aWVsZGluZyBpbnZhbGlkIElEcyBhbmQgYSBmYWlsZWQgcHJvYmUuIFRoYXQncyBhIGtleSBwb2ludC5cblxuSSdtIGFsc28gcmVtaW5kaW5nIG15c2VsZiB0aGF0IHRoZXNlIEtTWiBzd2l0Y2hlcyBhcmUgRFNBIEV0aGVybmV0IHN3aXRjaGVzLCBjb21tb25seSB1c2VkIGluIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBNaWNyb2NoaXAgQVNJQ3MgbGlrZSB0aGUgS1NaODQ2MywgS1NaODU2MywgS1NaODc5NSwgS1NaOTQ3NywgS1NaOTg5NiwgYW5kIExBTjkzN3guXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgYml0IGFib3V0IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaXMgY3JpdGljYWwgaGVyZTogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgYWN0dWFsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSB2aXJ0dWFsIERTQSBkcml2ZXJzIG9yIGlmIGFueSBEU0Egc3dpdGNoZXMgY2FuIGV2ZW4gYmUgZW11bGF0ZWQuIEl0IHNlZW1zIHRoZSBvbmx5IERTQSBkcml2ZXIgd2l0aGluIHN5emthbGxlcidzIHJlYWNoIG9yIHRlc3RhYmxlIHdpdGhvdXQgaGFyZHdhcmUgaXMgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBJdCdzIGEgbW9jayBEU0Egc3dpdGNoIGRyaXZlciB0aGF0IHVzZXMgYSBmaXhlZC1waHkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBtaWNyb2NoaXBgIGRpcmVjdG9yeSAoYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBga3N6OC5jYCwgYGtzejk0NzcuY2AsIGBsYW45Mzd4X21haW4uY2ApLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgZGVkaWNhdGVkIHRvIHRoZSBwaHlzaWNhbCBNaWNyb2NoaXAgc3dpdGNoIEFTSUNzIChLU1o4NDYzLCBLU1o5NDc3LCBMQU45MzcwLCBldGMuKSBvbiBTUEkvSTJDL1NNSSBidXNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY2FsbGVycyBvciB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJ20gZ29pbmcgdG8gZ3JlcCB0aGUgZW50aXJlIGNvZGViYXNlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gYGtzejg0NjNfcHRwX3NldF9jYXBzYCwgYGtzel9wdHBfc2V0X2NhcHNgLCBga3N6X3B0cF9jbG9ja19yZWdpc3RlcmAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBrc3pfc3dpdGNoX2NoaXBzYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGhvcGUgZm9yIHRlc3RpbmcgdGhlc2UgZHJpdmVycyBpbiBhIHZpcnR1YWwgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo1MC4zMzE0MjEyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODk1MDI2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6LipwdHBfc2V0X2NhcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjM4NT1zdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ4MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDgxOlxcdFxcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDgyLVxcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjY0Nj1zdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc3OC1cXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwdHBfY2FwYWJsZSkge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI3Nzk6XFx0XFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc4MC1cXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTE2NzA9c3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODMtXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcHRwX2NhcGFibGUpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoxNzg0OlxcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODUtXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMzE5PXN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMzNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzM1OnZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzU2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD0yMj1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTM1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM3OnZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0zOC1pbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NjU9c3RydWN0IGtzel9wdHBfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC02OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo3MDpzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTcyLXN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz03Njg9c3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtODY5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6ODcwOlxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtODcxLVxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo1My4wMjA5MzA0MTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNzE5MTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyBpcyBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgaW1wbGllZCBmb3IgdGhpcyBkcml2ZXIgdG8gY29tcGlsZSBhbmQgZnVuY3Rpb24gY29ycmVjdGx5LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsbHkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gcHJldmVudCBpdCBmcm9tIGJ1aWxkaW5nIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgcG90ZW50aWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHkuIFRoaXMgc2F2ZXMgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSByb2FkIOKAkyBubyBwb2ludCBpbiBjaGFzaW5nIGJ1Z3MgdGhhdCBhcmUganVzdCB0aGUgcmVzdWx0IG9mIGEgbWlzc2luZyBLY29uZmlnIG9wdGlvbi4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU0Ljg0ODEyNjI1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODg3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9EU0FfTUlDUk9DSElQfE5FVF9EU0FfS1NaXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiS1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MjQ6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9TUElcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIktTWiBzZXJpZXMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI3LVxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04pXFx0Kz0ga3N6X3N3aXRjaC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTY9a3N6X3N3aXRjaC1vYmpzICs9IGxhbjkzN3hfbWFpbi5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgKz0ga3N6X3B0cC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXFx0Kz0ga3N6OTQ3N19pMmMub1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXFx0XFx0Kz0ga3N6X3NwaS5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXFx0Kz0ga3N6ODg2M19zbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9MTcxPXN0cnVjdCBrc3pfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFApXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjEwNzojZW5kaWZcXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU0Ljk4MzAxOTkyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDAxMTk2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgcHJvdmlkZWQgcGF0Y2ggdGFyZ2V0cyBNaWNyb2NoaXAgS1NaL0xBTiBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBzdXBwb3J0IGZvciB0aGUgS1NaODQ2MyBzd2l0Y2ggY2hpcCwgYW5kIHJlZmFjdG9ycyBzb21lIGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludm9sdmVzIHNldHRpbmcgdXAgY2FwYWJpbGl0aWVzLCBlbmFibGluZyBwZXItb3V0cHV0IGNvbmZpZ3VyYXRpb25zLCBhbmQgbWFuYWdpbmcgdGltZSBhZGp1c3RtZW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoaXAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGludGVncmF0ZWQgdGhyb3VnaCB0aGUgRFNBIHN3aXRjaCBzZXR1cCBjYWxsYmFja3MuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzIGZvciBmdXp6aW5nLCBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBDYW4gdGhpcyBiZSBwcm9iZWQgYW5kIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIG5vLiBUaGVzZSBhcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBJQ3MsIGNvbW11bmljYXRpbmcgdmlhIFNQSSwgSTJDLCBTTUksIG9yIE1ESU8gYnVzc2VzLiBXZSAqbmVlZCogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGV2ZW4gcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBEU0Egc3dpdGNoLiBJdCdzIGp1c3Qgc3RydWN0dXJhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMiBkaXJlY3RseSBkaXNxdWFsaWZpZXMgaXQgZnJvbSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBvbiBkcml2ZXIgY29kZSB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiBvdXIgZXhpc3RpbmcgY2FwYWJpbGl0aWVzLCBpcyBpbmFjY2Vzc2libGUuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5OlxuXG4xLiAgSSBoYXZlIGNvbXBsZXRlZCB0aGUgYW5hbHlzaXMuXG4yLiAgSSBhbSBjZXJ0YWluIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuMy4gIEkgZG9uJ3QgaGF2ZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agb3IgYEVuYWJsZUNvbmZpZ3NgLlxuNC4gIEkgaGF2ZSBwcm92aWRlZCB0aGUgcmVhc29uaW5nLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3MjIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU5LjM4NDIxNzg5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IGFuZCBwZXItb3V0IGNvbmZpZ3VyYXRpb24gZm9yIE1pY3JvY2hpcCBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzIHdpdGhpbiB0aGUgTWljcm9jaGlwIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC8pLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBBU0lDcyBjb25uZWN0ZWQgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NTkuMzg0MjQwNzI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6gfj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 07:40:31 +0000 UTC FinishedAt: 2026-09-08 07:43:00 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNzo0MjoyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5pbmRleCA5NDFhZTlmNjZmNzBiLi42YjA4YmI4ZmVkNWI3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG5AQCAtMjQ3OCw2ICYjNDM7MjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBmcmVlX2dpcnE7XG4gXG4mIzQzO1x0XHRrc3o4NDYzX3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbkBAIC0yNzc1LDYgJiM0MzsyNzc2LDcgQEAgc3RhdGljIGludCBrc3o4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcbiBcdGlmIChkZXYtXHUwMDNlaW5mby1cdTAwM2VwdHBfY2FwYWJsZSkge1xuJiM0MztcdFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XG4gXHRcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5pbmRleCAzZWU5OTU1NDVjNTc5Li43MjUyOGE1M2I2N2QyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXG5AQCAtMTc4MSw2ICYjNDM7MTc4MSw3IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXG4gXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbiYjNDM7XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4mIzQzO1x0XHQubl9waW5zID0gMTIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMTIsXG4gXHR9LFxuIFxuIFx0W0tTWjg1NjNdID0ge1xuQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjg3OTVdID0ge1xuQEAgLTE0MTQsNiAmIzQzOzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zZ21paV9wb3J0ID0gNyxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaOTg5Nl0gPSB7XG5AQCAtMTU0NCw2ICYjNDM7MTU1MCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGUgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o4NTY3XSA9IHtcbkBAIC0xNTgxLDYgJiM0MzsxNTg5LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXG4gXHRcdFx0XHQgICB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjk1NjddID0ge1xuQEAgLTE2MTUsNiAmIzQzOzE2MjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdFx0XHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzBdID0ge1xuQEAgLTE2NDYsNiAmIzQzOzE2NTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3MV0gPSB7XG5AQCAtMTY3Nyw2ICYjNDM7MTY5MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5fcGlucyA9IDIsXG4mIzQzO1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3Ml0gPSB7XG5AQCAtMTcxMiw2ICYjNDM7MTcyOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzczXSA9IHtcbkBAIC0xNzQ3LDYgJiM0MzsxNzY1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4mIzQzO1x0XHQubl9waW5zID0gMixcbiYjNDM7XHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45Mzc0XSA9IHtcbkBAIC0xNzgyLDYgJiM0MzsxODAyLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbiYjNDM7XHRcdC5uX3BpbnMgPSAyLFxuJiM0MztcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjk2NDZdID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbmluZGV4IGNiZTk4NDk0NTc4YzMuLjExNTViMzkzNTBjMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbkBAIC0xMzksNiAmIzQzOzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcbiBcdHU4IHNnbWlpX3BvcnQ7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XG4mIzQzO1x0Y29uc3QgdTggbl9waW5zO1xuJiM0MztcdGNvbnN0IHU4IG5fcGVyX291dDtcbiB9O1xuIFxuIHN0cnVjdCBrc3pfaXJxIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5pbmRleCAzOWNjNzBkNjU5MDBiLi5kMzMwMzQ4OTJhOGY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG5AQCAtMjYsNiAmIzQzOzI2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtTWl9NQVhfRFJJRlRfQ09SUiA2MjQ5OTk5XG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcbiBcbiAjZGVmaW5lIEtTWl9QVFBfSU5DX05TIDQwVUxMICAvKiBIVyBjbG9jayBpcyBpbmNyZW1lbnRlZCBldmVyeSA0MCBucyAoYnkgNDApICovXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcbkBAIC02Myw2ICYjNDM7NjQsMTcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9ncGlvKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXHRcdFx0IExFRF9TUkNfUFRQX0dQSU9fMSB8IExFRF9TUkNfUFRQX0dQSU9fMik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIEJJVCh1bml0KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgMCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuIHtcbiBcdHUzMiBkYXRhO1xuQEAgLTg2LDcgJiM0Mzs5OCw3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdFx0XHQgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucylcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zLCB1MzIgbWFzaylcbiB7XG4gXHR1MzIgZGF0YTtcbiBcbkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcbi1cdGlmICghRklFTERfRklUKFRSSUdfUFVMU0VfV0lEVEhfTSwgZGF0YSkpXG4mIzQzO1x0aWYgKChtYXNrIFx1MDAyNiBkYXRhKSAhPSBkYXRhKVxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4mIzQzO3tcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9FTiwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCEoZGF0YSBcdTAwMjYgQklUKHVuaXQpKSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogVHJpZ2dlciB1bml0JWQgZXJyb3IhXFxuXCYjMzQ7LCBfX2Z1bmNfXyxcbiYjNDM7XHRcdFx0dW5pdCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiB7XG4gXHR1MzIgZGF0YTtcbkBAIC0xNDcsNiAmIzQzOzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG4mIzQzO1x0XHRcdFx0XHR1OCBpbmRleClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTtcbiYjNDM7XHR1MTYgY2ZnX2Jhc2UgPSBLU1o4NDYzX1RSSUcxX0NGRyAmIzQzOyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVx1MDAzZWNoYW47XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSGFyZHdhcmUgaGFzIG9ubHkgMzIgYml0ICovXG4mIzQzO1x0aWYgKCh0YXJnZXRfdGltZS1cdTAwM2V0dl9zZWMgXHUwMDI2IDB4ZmZmZmZmZmYpICE9IHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHxcbiYjNDM7XHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XG4mIzQzO1x0ICAgICAgIHBpbi1cdTAwM2VpbmRleDtcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGLFxuJiM0MztcdFx0XHQgIGN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGN5Y2xlIGNvdW50IDAgLSBJbmZpbml0ZSAqL1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogS1NaODQ2MyB1c2VzIGEgOCBucyB1bml0IHZhbHVlIHRvIGNvbXB1dGUgdGhlIHB1bHNlIHdpZHRoICovXG4mIzQzO1x0ZGF0YSA9IChwdWxzZV93aWR0aF9ucyAvIDgpO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICYjNDM7IEtTWjg0NjNfVEFSR0VUX05TRUMsXG4mIzQzO1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfbnNlYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19UQVJHRVRfU0VDLFxuJiM0MztcdFx0XHQgIHRhcmdldF90aW1lLVx1MDAzZXR2X3NlYyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4gXHRcdFx0XHQgICAgc3RydWN0IHRpbWVzcGVjNjQgY29uc3QgKnRhcmdldF90aW1lLFxuQEAgLTE4MywxNyAmIzQzOzI2NywxMSBAQCBzdGF0aWMgaW50IGtzel9wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbi1cdFx0XHRcdCBpbnQgb24pXG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4tXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xuLVx0dTY0IGN5Y2xlX3dpZHRoX25zO1xuLVx0dTY0IHB1bHNlX3dpZHRoX25zO1xuLVx0aW50IHBpbiA9IDA7XG4tXHR1MzIgZGF0YTMyO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcGluO1xuIFxuIFx0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbkBAIC0yMDYsNiAmIzQzOzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdGlmIChwaW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHJldHVybiBwaW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlc3RhcnQubnNlYztcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYztcbiYjNDM7XG4mIzQzO1x0KmN5Y2xlX3dpZHRoX25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kKTtcbiYjNDM7XHRpZiAoKCpjeWNsZV93aWR0aF9ucyBcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSAqY3ljbGVfd2lkdGhfbnMpIHtcbiYjNDM7XHRcdCpjeWNsZV93aWR0aF9ucyA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0XHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlcV9wdWxzZV93aWR0aF9ucztcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVlc3QtXHUwMDNlZmxhZ3MgXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSlcbiYjNDM7XHRcdHJldHVybiByZXF1ZXN0LVx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1x0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuJiM0MztcbiYjNDM7XHQvKiBVc2UgYSBkdXR5IGN5Y2xlIG9mIDUwJS4gTWF4aW11bSBwdWxzZSB3aWR0aCBzdXBwb3J0ZWQgYnkgdGhlXG4mIzQzO1x0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxX3B1bHNlX3dpZHRoX25zID0gKHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1xuJiM0MztcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4mIzQzO1x0cmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4mIzQzO1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuJiM0MztcdGludCBwaW47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4mIzQzO1x0aWYgKHBpbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwaW47XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9uKSB7XG4mIzQzO1x0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcbiYjNDM7XHRcdFx0XHQgICAgICAgS1NaODQ2M19UUklHX1BVTFNFX1dJRFRIX00pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxuJiM0MztcdFx0XHRcdFx0ICAgcGluKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N6X3B0cF90b3VfZ3BpbyhkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNldG91X21vZGUgPSBLU1pfUFRQX1RPVV9QRVJPVVQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuJiM0MztcdFx0XHRcdCBpbnQgb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiYjNDM7XHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4mIzQzO1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuJiM0MztcdGludCBwaW4gPSAwO1xuJiM0MztcdHUzMiBkYXRhMzI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4mIzQzO1x0aWYgKHBpbiBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBwaW47XG4mIzQzO1xuIFx0ZGF0YTMyID0gRklFTERfUFJFUChQVFBfR1BJT19JTkRFWCwgcGluKSB8XG4gXHRcdCBGSUVMRF9QUkVQKFBUUF9UT1VfSU5ERVgsIHJlcXVlc3QtXHUwMDNlaW5kZXgpO1xuIFx0cmV0ID0ga3N6X3JtdzMyKGRldiwgUkVHX1BUUF9VTklUX0lOREVYX180LFxuQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuJiM0MztcdHJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCBcdTAwMjZjeWNsZV93aWR0aF9ucyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cHVsc2Vfd2lkdGhfbnMgPSBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X3B1bHNlKGRldiwgcmVxdWVzdCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4gXG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWM7XG4tXG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWM7XG4tXG4tXHRjeWNsZV93aWR0aF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZCk7XG4tXHRpZiAoKGN5Y2xlX3dpZHRoX25zIFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9IGN5Y2xlX3dpZHRoX25zKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmIChyZXF1ZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiBQVFBfUEVST1VUX0RVVFlfQ1lDTEUpIHtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSByZXF1ZXN0LVx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzO1xuLVx0XHRcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbi1cdH0gZWxzZSB7XG4tXHRcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbi1cdFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4tXHRcdCAqL1xuLVx0XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7XG4tXHRcdFx0XHQgICAgICByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXG4tXHRcdFx0XHQgICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7XG4tXHR9XG4tXG4tXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMpO1xuJiM0MztcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtNzU2LDExICYjNDM7OTI0LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9nZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7c3RhdGljIGludCBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbiBcdHM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7XG4tXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBuZXh0O1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbm93O1xuIFx0dW5zaWduZWQgaW50IGNvdW50O1xuQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXG4gXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cbiBcdG5leHQgPSBuc190b190aW1lc3BlYzY0KG5leHRfbnMpO1xuLVx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XG4tXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xuLVx0cmVxdWVzdC5pbmRleCA9IDA7XG4tXHRyZXF1ZXN0LmZsYWdzID0gMDtcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcbiYjNDM7XHRyZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuJiM0MztcdHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VpbmRleCA9IDA7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2VmbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0LCAxKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgcmVxdWVzdDtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogV3JpdGUgdG8gc2hhZG93IHJlZ2lzdGVycyBhbmQgTG9hZCBQVFAgY2xvY2sgKi9cbiBcdHJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIHRzLVx1MDAzZXR2X25zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtXHUwMDNldHZfc2VjKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgUFRQX0xPQURfVElNRSwgUFRQX0xPQURfVElNRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxuJiM0MztcdFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUgPSAqdHM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4gXG5AQCAtODkwLDE4ICYjNDM7MTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiYjNDM7c3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXG4ge1xuLVx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4tXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4tXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4gXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuIFx0czMyIHNlYywgbnNlYztcbiBcdHUxNiBkYXRhMTY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbi1cbiBcdC8qIGRvIG5vdCB1c2UgbnNfdG9fdGltZXNwZWM2NCgpLFxuIFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcbiBcdCAqL1xuQEAgLTkwOSwxNSAmIzQzOzExNDMsMTUgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbiBcbiBcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCBhYnMobnNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3JlYWQxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgXHUwMDI2ZGF0YTE2KTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGRhdGExNiB8PSBQVFBfU1RFUF9BREo7XG4gXG5AQCAtOTI4LDYgJiM0MzsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbiYjNDM7XHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUsIGRlbHRhNjQpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuJiM0MztcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuQEAgLTk1Miw2ICYjNDM7MTIzNiwyNiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4mIzQzO1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAocmVxLVx1MDAzZXR5cGUpIHtcbiYjNDM7XHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxLVx1MDAzZXBlcm91dCwgb24pO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcbiBcdFx0XHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXG4ge1xuQEAgLTEwMjgsMTcgJiM0MzsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiYjNDM7XHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcJiMzNDtNaWNyb2NoaXAgQ2xvY2tcJiMzNDspO1xuJiM0MztcdHB0cF9kYXRhLVx1MDAzZWNhcHMubWF4X2Fkalx0XHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmdldHRpbWU2NFx0PSBrc3pfcHRwX2dldHRpbWU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5zZXR0aW1lNjRcdD0ga3N6ODQ2M19wdHBfc2V0dGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkamZpbmVcdFx0PSBrc3pfcHRwX2FkamZpbmU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5hZGp0aW1lXHRcdD0ga3N6ODQ2M19wdHBfYWRqdGltZTtcbiYjNDM7XHRwdHBfZGF0YS1cdTAwM2VjYXBzLmRvX2F1eF93b3JrXHQ9IGtzel9wdHBfZG9fYXV4X3dvcms7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy52ZXJpZnlcdFx0PSBrc3pfcHRwX3ZlcmlmeV9waW47XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuLVx0aW50IHJldDtcbi1cdHU4IGk7XG4gXG4gXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiBcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwmIzM0O01pY3JvY2hpcCBDbG9ja1wmIzM0Oyk7XG5AQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3pfcHRwX2VuYWJsZTtcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMudmVyaWZ5XHRcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBLU1pfUFRQX05fR1BJTztcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IDM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7XG4mIzQzO1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuJiM0MztcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTggaTtcbiYjNDM7XG4mIzQzO1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHJldCA9IGtzel9wdHBfc3RhcnRfY2xvY2soZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHN0cnVjdCBwdHBfcGluX2Rlc2MgKnB0cF9waW4gPSBcdTAwMjZwdHBfZGF0YS1cdTAwM2VwaW5fY29uZmlnW2ldO1xuIFxuIFx0XHRzbnByaW50ZihwdHBfcGluLVx1MDAzZW5hbWUsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuaW5kZXggNzA2N2VjOWJkMWU2Zi4uMzgzOGE3M2E4MzAyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuQEAgLTEyLDcgJiM0MzsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQyXG4mIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cdFx0MTJcbiBcbiBlbnVtIGtzel9wdHBfdG91X21vZGUge1xuIFx0S1NaX1BUUF9UT1VfSURMRSxcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7XG4gfTtcbiBcbiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4mIzQzO3ZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIFxuIHZvaWQga3N6X3B0cF9jbG9ja191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG5AQCAtNjUsNiAmIzQzOzY3LDggQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiB9O1xuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbmluZGV4IDY1ZWE4NTc3YWY3NTUuLjE2ZjExN2ZhNWQ0OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuQEAgLTUxLDYgJiM0Mzs1MSwyMiBAQFxuIFxuICNkZWZpbmUgUkVHX1BUUF9VTklUX0lOREVYX180XHRcdDB4MDUyMFxuIFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVx0XHQweDIwMlxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfVE9VX0VOXHRcdFx0MHgyMDZcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1RcdFx0MHgyMDhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHTl9DRkdfU0laRVx0XHQweDIwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UUklHMV9DRkdcdFx0MHgyMjBcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXHRcdDB4MDAwXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19UQVJHRVRfU0VDXHRcdDB4MDA0XG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX09GRlx0XHQweDAwOFxuJiM0MzsjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fTVx0XHRHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgS1NaODQ2M19QVUxTRV9XSURUSF9PRkZcdFx0MHgwMEFcbiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlx0XHQweDAwQ1xuJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRlx0XHQweDAxMFxuJiM0MztcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXHRcdFx0R0VOTUFTSygxOSwgMTYpXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXHRcdFx0QklUKDgpXG4gI2RlZmluZSBQVFBfVE9VX0lOREVYXHRcdFx0R0VOTUFTSygxLCAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuQEAgLTg2Nyw2ICYjNDM7ODY3LDcgQEAgc3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAwNzo0MjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMKQEAgLTI0NzgsNiAmIzQzOzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCQlpZiAocmV0KQogCQkJZ290byBmcmVlX2dpcnE7CiAKJiM0MzsJCWtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTsKIAkJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJCWlmIChyZXQpIHsKIAkJCWRldl9lcnIoZGV2LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcbiYjMzQ7LApAQCAtMjc3NSw2ICYjNDM7Mjc3Niw3IEBAIHN0YXRpYyBpbnQga3N6OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJfQogCiAJaWYgKGRldi0mZ3Q7aW5mby0mZ3Q7cHRwX2NhcGFibGUpIHsKJiM0MzsJCWtzel9wdHBfc2V0X2NhcHMoZHMpOwogCQlyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycihkZXYtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jCkBAIC0xNzgxLDYgJiM0MzsxNzgxLDcgQEAgc3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAl9CiAKIAlpZiAoZGV2LSZndDtpbmZvLSZndDtwdHBfY2FwYWJsZSkgewomIzQzOwkJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJCXJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKaW5kZXggMWE5ZDZmODNhMDIzMi4uOWUyMzRhZDcxYjcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMKQEAgLTExNjEsNiAmIzQzOzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sCiYjNDM7CQkubl9waW5zID0gMTIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMTIsCiAJfSwKIAogCVtLU1o4NTYzXSA9IHsKQEAgLTExOTQsNiAmIzQzOzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6ODU2M19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaODc5NV0gPSB7CkBAIC0xNDE0LDYgJiM0MzsxNDE4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc2dtaWlfcG9ydCA9IDcsCiAJCS53cl90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiAJCS5yZF90YWJsZSA9ICZhbXA7a3N6OTQ3N19yZWdpc3Rlcl9zZXQsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbS1NaOTg5Nl0gPSB7CkBAIC0xNTQ0LDYgJiM0MzsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSwKIAkJLmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtLU1o4NTY3XSA9IHsKQEAgLTE1ODEsNiAmIzQzOzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5nYml0X2NhcGFibGUJPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJCSAgIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0tTWjk1NjddID0gewpAQCAtMTYxNSw2ICYjNDM7MTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJCQkgICB0cnVlLCBmYWxzZSwgZmFsc2V9LAogCQkuZ2JpdF9jYXBhYmxlCT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjkzNzBdID0gewpAQCAtMTY0Niw2ICYjNDM7MTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHsKIAkJLnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSwKIAkJLmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3MV0gPSB7CkBAIC0xNjc3LDYgJiM0MzsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sCiAJCS5wdHBfY2FwYWJsZSA9IHRydWUsCiYjNDM7CQkubl9waW5zID0gMiwKJiM0MzsJCS5uX3Blcl9vdXQgPSAzLAogCX0sCiAKIAlbTEFOOTM3Ml0gPSB7CkBAIC0xNzEyLDYgJiM0MzsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0gewogCQkuaW50ZXJuYWxfcGh5CT0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45MzczXSA9IHsKQEAgLTE3NDcsNiAmIzQzOzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCiAJCQkJICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSwKIAkJLnB0cF9jYXBhYmxlID0gdHJ1ZSwKJiM0MzsJCS5uX3BpbnMgPSAyLAomIzQzOwkJLm5fcGVyX291dCA9IDMsCiAJfSwKIAogCVtMQU45Mzc0XSA9IHsKQEAgLTE3ODIsNiAmIzQzOzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7CiAJCS5pbnRlcm5hbF9waHkJPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKIAkJCQkgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LAogCQkucHRwX2NhcGFibGUgPSB0cnVlLAomIzQzOwkJLm5fcGlucyA9IDIsCiYjNDM7CQkubl9wZXJfb3V0ID0gMywKIAl9LAogCiAJW0xBTjk2NDZdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAppbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaApAQCAtMTM5LDYgJiM0MzsxMzksOCBAQCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSB7CiAJdTggc2dtaWlfcG9ydDsKIAljb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7CiAJY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKnJkX3RhYmxlOwomIzQzOwljb25zdCB1OCBuX3BpbnM7CiYjNDM7CWNvbnN0IHU4IG5fcGVyX291dDsKIH07CiAKIHN0cnVjdCBrc3pfaXJxIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMKQEAgLTI2LDYgJiM0MzsyNiw3IEBACiAgKi8KICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTkKICNkZWZpbmUgS1NaX01BWF9QVUxTRV9XSURUSCAxMjUwMDAwMDBMTAomIzQzOyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTEwKIAogI2RlZmluZSBLU1pfUFRQX0lOQ19OUyA0MFVMTCAgLyogSFcgY2xvY2sgaXMgaW5jcmVtZW50ZWQgZXZlcnkgNDAgbnMgKGJ5IDQwKSAqLwogI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzIKQEAgLTYzLDYgJiM0Mzs2NCwxNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X2dwaW8oc3RydWN0IGtzel9kZXZpY2UgKmRldikKIAkJCSBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpOwogfQogCiYjNDM7c3RhdGljIGludCBrc3o4NDYzX3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCBCSVQodW5pdCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX1NXX1JTVCwgQklUKHVuaXQpLCAwKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiB7CiAJdTMyIGRhdGE7CkBAIC04Niw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpCiAJCQkgMCk7CiB9CiAKLXN0YXRpYyBpbnQga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHU2NCBwdWxzZV9ucykKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKQogewogCXUzMiBkYXRhOwogCkBAIC05NCw3ICYjNDM7MTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRhdGEgPSAocHVsc2VfbnMgLyA4KTsKLQlpZiAoIUZJRUxEX0ZJVChUUklHX1BVTFNFX1dJRFRIX00sIGRhdGEpKQomIzQzOwlpZiAoKG1hc2sgJmFtcDsgZGF0YSkgIT0gZGF0YSkKIAkJcmV0dXJuIC1FUkFOR0U7CiAKIAlyZXR1cm4gMDsKQEAgLTEyMCw2ICYjNDM7MTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9zdGFydChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KQomIzQzO3sKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCEoZGF0YSAmYW1wOyBCSVQodW5pdCkpKSB7CiYjNDM7CQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcbiYjMzQ7LCBfX2Z1bmNfXywKJiM0MzsJCQl1bml0KTsKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIHsKIAl1MzIgZGF0YTsKQEAgLTE0Nyw2ICYjNDM7MTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCQlzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCiYjNDM7CQkJCQl1OCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwdHBfcGluX2Rlc2MgKnBpbiA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YS5waW5fY29uZmlnW2luZGV4XTsKJiM0MzsJdTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgJiM0MzsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi0mZ3Q7Y2hhbjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEhhcmR3YXJlIGhhcyBvbmx5IDMyIGJpdCAqLwomIzQzOwlpZiAoKHRhcmdldF90aW1lLSZndDt0dl9zZWMgJmFtcDsgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtJmd0O3R2X3NlYykKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHwKJiM0MzsJICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfAomIzQzOwkgICAgICAgcGluLSZndDtpbmRleDsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1BBVFRFUk5fT0ZGLCBkYXRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9XSURUSF9PRkYsCiYjNDM7CQkJICBjeWNsZV93aWR0aF9ucyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovCiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIEtTWjg0NjMgdXNlcyBhIDggbnMgdW5pdCB2YWx1ZSB0byBjb21wdXRlIHRoZSBwdWxzZSB3aWR0aCAqLwomIzQzOwlkYXRhID0gKHB1bHNlX3dpZHRoX25zIC8gOCk7CiYjNDM7CXJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgJiM0MzsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9OU0VDLAomIzQzOwkJCSAgdGFyZ2V0X3RpbWUtJmd0O3R2X25zZWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSAmIzQzOyBLU1o4NDYzX1RBUkdFVF9TRUMsCiYjNDM7CQkJICB0YXJnZXRfdGltZS0mZ3Q7dHZfc2VjKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiAJCQkJICAgIHUzMiBjeWNsZV93aWR0aF9ucywgdTMyIHB1bHNlX3dpZHRoX25zLAogCQkJCSAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsCkBAIC0xODMsMTcgJiM0MzsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCwKLQkJCQkgaW50IG9uKQomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQl1NjQgcmVxX3B1bHNlX3dpZHRoX25zOwotCXU2NCBjeWNsZV93aWR0aF9uczsKLQl1NjQgcHVsc2Vfd2lkdGhfbnM7Ci0JaW50IHBpbiA9IDA7Ci0JdTMyIGRhdGEzMjsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGluOwogCiAJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IH5QVFBfUEVST1VUX0RVVFlfQ1lDTEUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIwNiw2ICYjNDM7Mjg0LDExNCBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCWlmIChwaW4gJmx0OyAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAomIzQzOwlyZXR1cm4gcGluOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgKmN5Y2xlX3dpZHRoX25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDtwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtJmd0O3N0YXJ0LnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKJiM0MzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYzsKJiM0MzsJcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwomIzQzOwomIzQzOwkqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwomIzQzOwlpZiAoKCpjeWNsZV93aWR0aF9ucyAmYW1wOyBUUklHX0NZQ0xFX1dJRFRIX00pICE9ICpjeWNsZV93aWR0aF9ucykgewomIzQzOwkJKmN5Y2xlX3dpZHRoX25zID0gMDsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCXN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsCiYjNDM7CQkJCQl1NjQgbWF4X3B1bHNlX3dpZHRoKQomIzQzO3sKJiM0MzsJdTY0IHJlcV9wdWxzZV93aWR0aF9uczsKJiM0MzsKJiM0MzsJaWYgKHJlcXVlc3QtJmd0O2ZsYWdzICZhbXA7IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkKJiM0MzsJCXJldHVybiByZXF1ZXN0LSZndDtvbi5zZWMgKiBOU0VDX1BFUl9TRUMgJiM0MzsJcmVxdWVzdC0mZ3Q7b24ubnNlYzsKJiM0MzsKJiM0MzsJLyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZQomIzQzOwkgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy4KJiM0MzsJICovCiYjNDM7CXJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICYjNDM7CiYjNDM7CQkJICAgICAgcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMpIC8gMjsKJiM0MzsJcmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgICAgIGludCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwl1NjQgY3ljbGVfd2lkdGhfbnM7CiYjNDM7CXU2NCBwdWxzZV93aWR0aF9uczsKJiM0MzsJaW50IHBpbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKJiM0MzsJcmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFvbikgewomIzQzOwkJcHRwX2RhdGEtJmd0O3RvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEgpOwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsCiYjNDM7CQkJCSAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3o4NDYzX3B0cF9jb25maWd1cmVfcGVyb3V0KGRldiwgY3ljbGVfd2lkdGhfbnMsIHB1bHNlX3dpZHRoX25zLAomIzQzOwkJCQkJICAgJmFtcDtwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LAomIzQzOwkJCQkJICAgcGluKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzejg0NjNfcHRwX3RvdV9zdGFydChkZXYsIHJlcXVlc3QtJmd0O2luZGV4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXB0cF9kYXRhLSZndDt0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LAomIzQzOwkJCQkgaW50IG9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSAmYW1wO2Rldi0mZ3Q7cHRwX2RhdGE7CiYjNDM7CXU2NCBjeWNsZV93aWR0aF9uczsKJiM0MzsJdTY0IHB1bHNlX3dpZHRoX25zOwomIzQzOwlpbnQgcGluID0gMDsKJiM0MzsJdTMyIGRhdGEzMjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7CiYjNDM7CWlmIChwaW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBpbjsKJiM0MzsKIAlkYXRhMzIgPSBGSUVMRF9QUkVQKFBUUF9HUElPX0lOREVYLCBwaW4pIHwKIAkJIEZJRUxEX1BSRVAoUFRQX1RPVV9JTkRFWCwgcmVxdWVzdC0mZ3Q7aW5kZXgpOwogCXJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCwKQEAgLTIyMSwzMSAmIzQzOzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAogCQlwdHBfZGF0YS0mZ3Q7dG91X21vZGUgPSBLU1pfUFRQX1RPVV9JRExFOwogCQlyZXR1cm4gMDsKIAl9CiYjNDM7CXJldCA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfY3ljbGUoZGV2LCByZXF1ZXN0LCAmYW1wO2N5Y2xlX3dpZHRoX25zKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsCiYjNDM7CQkJCQkJICAgICAgS1NaX01BWF9QVUxTRV9XSURUSCk7CiAKLQlwdHBfZGF0YS0mZ3Q7cGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LSZndDtzdGFydC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC0mZ3Q7c3RhcnQubnNlYzsKLQotCXB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5zZWM7Ci0JcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjOwotCi0JY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7cHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QpOwotCWlmICgoY3ljbGVfd2lkdGhfbnMgJmFtcDsgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmVxdWVzdC0mZ3Q7ZmxhZ3MgJmFtcDsgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7Ci0JCXB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC0mZ3Q7b24uc2VjICogTlNFQ19QRVJfU0VDICYjNDM7Ci0JCQlyZXF1ZXN0LSZndDtvbi5uc2VjOwotCX0gZWxzZSB7Ci0JCS8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUKLQkJICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuCi0JCSAqLwotCQlyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC0mZ3Q7cGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyAmIzQzOwotCQkJCSAgICAgIHJlcXVlc3QtJmd0O3BlcmlvZC5uc2VjKSAvIDI7Ci0JCXB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsCi0JCQkJICAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpOwotCX0KLQotCXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7CiYjNDM7CXJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucywgVFJJR19QVUxTRV9XSURUSF9NKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03NTYsMTEgJiM0Mzs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldikKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0ICpyZXF1ZXN0KQogewogCXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwogCXM2NCBub3dfbnMsIGZpcnN0X25zLCBwZXJpb2RfbnMsIG5leHRfbnM7Ci0Jc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCXN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7CiAJc3RydWN0IHRpbWVzcGVjNjQgbm93OwogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTc5MSw0MCAmIzQzOzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAKIAkvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi8KIAluZXh0ID0gbnNfdG9fdGltZXNwZWM2NChuZXh0X25zKTsKLQlyZXF1ZXN0LnN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYzsKLQlyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7Ci0JcmVxdWVzdC5wZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKLQlyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtJmd0O3Blcm91dF9wZXJpb2QudHZfbnNlYzsKLQlyZXF1ZXN0LmluZGV4ID0gMDsKLQlyZXF1ZXN0LmZsYWdzID0gMDsKJiM0MzsJcmVxdWVzdC0mZ3Q7c3RhcnQuc2VjICA9IG5leHQudHZfc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtwZXJpb2Quc2VjICA9IHB0cF9kYXRhLSZndDtwZXJvdXRfcGVyaW9kLnR2X3NlYzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cGVyaW9kLm5zZWMgPSBwdHBfZGF0YS0mZ3Q7cGVyb3V0X3BlcmlvZC50dl9uc2VjOwomIzQzOwlyZXF1ZXN0LSZndDtpbmRleCA9IDA7CiYjNDM7CXJlcXVlc3QtJmd0O2ZsYWdzID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwogfQogCi1zdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKLQkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7Ci0Jc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKJiM0MzsJc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0OwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCAmYW1wO3JlcXVlc3QsIDEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsCiYjNDM7CQkJICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpCiYjNDM7ewomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqLwogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfUlRDX1NVQl9OQU5PU0VDXSwgUFRQX1JUQ18wTlMpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX05BTk9TRUNdLCB0cy0mZ3Q7dHZfbnNlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgdHMtJmd0O3R2X3NlYyk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3JtdzE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBQVFBfTE9BRF9USU1FLCBQVFBfTE9BRF9USU1FKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXN3aXRjaCAocHRwX2RhdGEtJmd0O3RvdV9tb2RlKSB7CiYjNDM7CWNhc2UgS1NaX1BUUF9UT1VfSURMRToKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOwljYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDoKJiM0MzsJCXJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSA9ICp0czsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6X3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApOwomIzQzOwlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IF9fa3N6X3B0cF9zZXR0aW1lKGRldiwgdHMpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC04OTAsMTggJiM0MzsxMTI5LDEzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKJiM0MztzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSkKIHsKLQlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKLQlzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwogCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzMzIgc2VjLCBuc2VjOwogCXUxNiBkYXRhMTY7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7Ci0KIAkvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSwKIAkgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBodwogCSAqLwpAQCAtOTA5LDE1ICYjNDM7MTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXR1cm4gcmV0OwogCiAJcmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpOwogCWlmIChyZXQpCi0JCWdvdG8gdW5sb2NrOwomIzQzOwkJcmV0dXJuIHJldDsKIAogCXJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sICZhbXA7ZGF0YTE2KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubG9jazsKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlkYXRhMTYgfD0gUFRQX1NURVBfQURKOwogCkBAIC05MjgsNiAmIzQzOzExNjIsNTYgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSkKIAkJZGF0YTE2IHw9IFBUUF9TVEVQX0RJUjsKIAogCXJldCA9IGtzel93cml0ZTE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBkYXRhMTYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwlzd2l0Y2ggKHB0cF9kYXRhLSZndDt0b3VfbW9kZSkgewomIzQzOwljYXNlIEtTWl9QVFBfVE9VX0lETEU6CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJY2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3B0cF9kYXRhLSZndDtjbG9ja19sb2NrKTsKJiM0MzsJcHRwX2RhdGEtJmd0O2Nsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS0mZ3Q7Y2xvY2tfdGltZSwgZGVsdGE2NCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwomIzQzOwomIzQzO3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXQgPSBfX2tzel9wdHBfYWRqdGltZShkZXYsIGRlbHRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIApAQCAtOTUyLDYgJiM0MzsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTsKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHJlcS0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDoKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwdHBfZGF0YS0mZ3Q7bG9jayk7CiYjNDM7CQlyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgJmFtcDtyZXEtJmd0O3Blcm91dCwgb24pOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCQkJICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKQogewpAQCAtMTAyOCwxNyAmIzQzOzEzMzIsMzMgQEAgc3RhdGljIGludCBrc3pfcHRwX3N0YXJ0X2Nsb2NrKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGE7CiYjNDM7CiYjNDM7CXB0cF9kYXRhID0gJmFtcDtkZXYtJmd0O3B0cF9kYXRhOwomIzQzOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5vd25lcgkJPSBUSElTX01PRFVMRTsKJiM0MzsJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5tYXhfYWRqCQk9IEtTWl9NQVhfRFJJRlRfQ09SUjsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuZ2V0dGltZTY0CT0ga3N6X3B0cF9nZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5zZXR0aW1lNjQJPSBrc3o4NDYzX3B0cF9zZXR0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5hZGpmaW5lCQk9IGtzel9wdHBfYWRqZmluZTsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMuYWRqdGltZQkJPSBrc3o4NDYzX3B0cF9hZGp0aW1lOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5kb19hdXhfd29yawk9IGtzel9wdHBfZG9fYXV4X3dvcms7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLmVuYWJsZQkJPSBrc3o4NDYzX3B0cF9lbmFibGU7CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLnZlcmlmeQkJPSBrc3pfcHRwX3ZlcmlmeV9waW47CiYjNDM7CXB0cF9kYXRhLSZndDtjYXBzLm5fcGlucwkJPSBkZXYtJmd0O2luZm8tJmd0O25fcGluczsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gZGV2LSZndDtpbmZvLSZndDtuX3Blcl9vdXQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwotCWNvbnN0IHUxNiAqcmVncyA9IGRldi0mZ3Q7aW5mby0mZ3Q7cmVnczsKIAlzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTsKLQlpbnQgcmV0OwotCXU4IGk7CiAKIAlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKLQltdXRleF9pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhbXA7cHRwX2RhdGEtJmd0O2Nsb2NrX2xvY2spOwogCiAJcHRwX2RhdGEtJmd0O2NhcHMub3duZXIJCT0gVEhJU19NT0RVTEU7CiAJc25wcmludGYocHRwX2RhdGEtJmd0O2NhcHMubmFtZSwgMTYsICYjMzQ7TWljcm9jaGlwIENsb2NrJiMzNDspOwpAQCAtMTA1MCwxNCAmIzQzOzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXB0cF9kYXRhLSZndDtjYXBzLmRvX2F1eF93b3JrCT0ga3N6X3B0cF9kb19hdXhfd29yazsKIAlwdHBfZGF0YS0mZ3Q7Y2Fwcy5lbmFibGUJCT0ga3N6X3B0cF9lbmFibGU7CiAJcHRwX2RhdGEtJmd0O2NhcHMudmVyaWZ5CQk9IGtzel9wdHBfdmVyaWZ5X3BpbjsKLQlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3BpbnMJCT0gS1NaX1BUUF9OX0dQSU87Ci0JcHRwX2RhdGEtJmd0O2NhcHMubl9wZXJfb3V0CT0gMzsKJiM0MzsJcHRwX2RhdGEtJmd0O2NhcHMubl9waW5zCQk9IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOwomIzQzOwlwdHBfZGF0YS0mZ3Q7Y2Fwcy5uX3Blcl9vdXQJPSBkZXYtJmd0O2luZm8tJmd0O25fcGVyX291dDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwljb25zdCB1MTYgKnJlZ3MgPSBkZXYtJmd0O2luZm8tJmd0O3JlZ3M7CiYjNDM7CXN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1OCBpOwomIzQzOwomIzQzOwlwdHBfZGF0YSA9ICZhbXA7ZGV2LSZndDtwdHBfZGF0YTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3B0cF9kYXRhLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwdHBfZGF0YS0mZ3Q7Y2xvY2tfbG9jayk7CiAKIAlyZXQgPSBrc3pfcHRwX3N0YXJ0X2Nsb2NrKGRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBLU1pfUFRQX05fR1BJTzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRldi0mZ3Q7aW5mby0mZ3Q7bl9waW5zOyBpJiM0MzsmIzQzOykgewogCQlzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gJmFtcDtwdHBfZGF0YS0mZ3Q7cGluX2NvbmZpZ1tpXTsKIAogCQlzbnByaW50ZihwdHBfcGluLSZndDtuYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmggYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAppbmRleCA3MDY3ZWM5YmQxZTZmLi4zODM4YTczYTgzMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaApAQCAtMTIsNyAmIzQzOzEyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKIAotI2RlZmluZSBLU1pfUFRQX05fR1BJTwkJMgomIzQzOyNkZWZpbmUgS1NaX1BUUF9OX0dQSU8JCTEyCiAKIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7CiAJS1NaX1BUUF9UT1VfSURMRSwKQEAgLTMzLDYgJiM0MzszMyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCB0aW1lc3BlYzY0IHBlcm91dF9wZXJpb2Q7CiB9OwogCiYjNDM7dm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7CiYjNDM7dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpOwogaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKIAogdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKQEAgLTY1LDYgJiM0Mzs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEgewogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9CiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaAppbmRleCA2NWVhODU3N2FmNzU1Li4xNmYxMTdmYTVkNDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oCkBAIC01MSw2ICYjNDM7NTEsMjIgQEAKIAogI2RlZmluZSBSRUdfUFRQX1VOSVRfSU5ERVhfXzQJCTB4MDUyMAogCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9BQ1RJVkUJCTB4MjAyCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9FTgkJCTB4MjA2CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RPVV9TV19SU1QJCTB4MjA4CiYjNDM7CiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFCQkweDIwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RSSUcxX0NGRwkJMHgyMjAKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUMJCTB4MDAwCiYjNDM7I2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUMJCTB4MDA0CiYjNDM7I2RlZmluZSBLU1o4NDYzX1BBVFRFUk5fT0ZGCQkweDAwOAomIzQzOyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NCQlHRU5NQVNLKDYsIDQpCiYjNDM7I2RlZmluZSBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRgkJMHgwMEEKJiM0MzsjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRgkJMHgwMEMKJiM0MzsjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfQ05UX09GRgkJMHgwMTAKJiM0MzsKICNkZWZpbmUgUFRQX0dQSU9fSU5ERVgJCQlHRU5NQVNLKDE5LCAxNikKICNkZWZpbmUgUFRQX1RTSV9JTkRFWAkJCUJJVCg4KQogI2RlZmluZSBQVFBfVE9VX0lOREVYCQkJR0VOTUFTSygxLCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMKaW5kZXggODZjZTNhODY3MDVmOS4uM2EyMDkxMjJmYzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jCkBAIC04NjcsNiAmIzQzOzg2Nyw3IEBAIHN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCX0KIAl9CiAKJiM0MzsJa3N6X3B0cF9zZXRfY2Fwcyhkcyk7CiAJcmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXG4mIzM0OywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTUKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBzeXprYWxsZXIgYXQgaXQuIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgbW9kaWZpZWQgZmlsZXMuIExvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGJ1bmNoIG9mIE1pY3JvY2hpcCBLU1ogc3dpdGNoIGRyaXZlcnMsIHNwZWNpZmljYWxseTogYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jYCwgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jYCwgYW5kIGEgZmV3IHJlbGF0ZWQgY29tbW9uIGZpbGVzIGxpa2UgYGtzel9jb21tb24uY2AgYW5kIGBrc3pfcHRwLmNgLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgaGVhZGVyIGZpbGVzIGFuZCBgbGFuOTM3eF9tYWluLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhlc2UgYXJlIGxpa2VseSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlcnMuCgpOb3csIGxldCBtZSBxdWlja2x5IGFzY2VydGFpbiB0aGUgaGFyZHdhcmUgY29udGV4dC4gVGhlc2UgTWljcm9jaGlwIEtTWiBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgU1BJLCBJMkMsIE1ESU8sIG9yIFNNSSBjb25uZWN0ZWQgRXRoZXJuZXQgc3dpdGNoIElDcyDigJMgdGhlIEtTWjh4eHgsIEtTWjl4eHgsIGFuZCBMQU45Mzd4IGZhbWlsaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkcml2ZXJzIGhhdmUgYSBjbGVhciBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGJ1cyBhdHRhY2htZW50LiBBcmUgdGhleSByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnN0YW50aWF0aW9uLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBvciBwdXJlbHkgc29mdHdhcmUtYmFzZWQgcGF0aD8gSWRlYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGludGVyZmFjZXMgdGhhdCBhcmUgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIGtlcm5lbCwgbWFraW5nIHRoZW0gZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IHByb2JlZC4gSSBuZWVkIHRvIHNlYXJjaCBmb3IgaG93IGBrc3pfc3dpdGNoX2NoaXBzYCBvciByb3V0aW5lcyBpbiBga3N6X2NvbW1vbi5jYCBhcmUgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5IGl0IHdvdWxkIGJlIHRvIHRyaWdnZXIgdGhlIHJvdXRpbmVzIGluIHRoZXNlIGZpbGVzIHRocm91Z2ggYSBzeXprYWxsZXIgcHJvZ3JhbSwgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgd29ydGggY3JlYXRpbmcgdGhlIG5lY2Vzc2FyeSBpbmZyYXN0cnVjdHVyZSB0byBkbyBzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfc3BpX2RyaXZlcnxtb2R1bGVfaTJjX2RyaXZlcnxrc3pfc3dpdGNoX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM9MTMzPXN0YXRpYyBpbnQga3N6ODg2M19zbWlfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNjgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM6MTY5Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4ODYzX3NtaS5jLTE3MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTc9c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy01MC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzo1MTpcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy01Mi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxNDU6bW9kdWxlX2kyY19kcml2ZXIoa3N6OTQ3N19pMmNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM9MzkxMT1zdGF0aWMgaW50IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jOjM5MTY6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTM5MTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jLTQwNjEtfVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6NDA2MjpFWFBPUlRfU1lNQk9MKGtzel9zd2l0Y2hfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaD00Mjk9c3RydWN0IGtzel9kZXZpY2UgKmtzel9zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzEtXHRcdFx0XHQgICAgdm9pZCAqcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC00MzMtdm9pZCBrc3pfc3dpdGNoX3JlbW92ZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTk0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMTk2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jPTM0OT1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIga3N6X3NwaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MzYxOm1vZHVsZV9zcGlfZHJpdmVyKGtzel9zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jLTM2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAxOQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNaWNyb2NoaXAgS1NaIEV0aGVybmV0IFN3aXRjaCBEcml2ZXJzIGFuZCBTeXprYWxsZXIgQ29tcGF0aWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTWljcm9jaGlwIERTQSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyczogYGtzejg0NjNgLCBga3N6OGAsIGBrc3o5NDc3YCwgYGxhbjkzN3hgLiBUaGVzZSBndXlzIGF0dGFjaCB2aWEgU1BJLCBJMkMsIFNNSSwgb3IgTURJTy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiBDYW4gSSBldmVuICpzZWUqIHRoZXNlIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlcyBvbiBlbWJlZGRlZCBib2FyZHM/IEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgdGhlc2UgZm9yIGZ1enppbmcuCgpMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgYW55IGNoYW5jZSB0aGVzZSBhcmUgdXNpbmcgdmlydHVhbCBidXNlcywgb3IgY291bGQgdGhleSBwb3RlbnRpYWxseSBiZSBpbnN0YW50aWF0ZWQgaW4gc3l6a2FsbGVyPyBPa2F5LCB0aW1lIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgdGhlIHRyaWFnZSBwcmluY2lwbGVzOiAmIzM0O1JFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLiYjMzQ7IElmIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFZNcywgZm9yZ2V0IGl0LCBubyBmdXp6aW5nLCBubyBtYXR0ZXIgaG93IHRlbXB0aW5nLiBUaGF0IGJyaW5ncyB1cCB0aGUga2V5IHBvaW50OiB3aGF0JiMzOTtzICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlPyYjMzQ7IFRoaW5ncyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzIG9yIFNtYXJ0TklDcyDigJMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGV0Yy4gYXJlIGFsbCBvdXQuIFRoZSBvcHBvc2l0ZSwgb2YgY291cnNlLCBpcyByZWFjaGFibGUsIGRyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyBzdWNoIGFzIGB2aXJ0aW9gLCBgVVNCIGdhZGdldGAsIGBsb29wYmFja2AsIGBuZXRsaW5rYCwgZXRjLgoKTm93LCBiYWNrIHRvIHRoZXNlIEtTWiBkcml2ZXJzLiBMZXQmIzM5O3MgZGlnIGluIGEgYml0IGRlZXBlci4gRG8gYW55IG9mIHRoZW0gaW5zdGFudGlhdGUgSTJDIG9yIFNQSSBkZXZpY2VzLCBvciBhcmUgdGhleSBwdXJlbHkgdGllZCB0byBwaHlzaWNhbCBlbWJlZGRlZCBzd2l0Y2ggaGFyZHdhcmUsIGxpa2UgYSB0cnVlIERTQSBzd2l0Y2g/IENhbiBJIGV2ZW4gY3JlYXRlIEkyQyBkZXZpY2VzIGZyb20gdXNlcnNwYWNlIHZpYSBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLVgvbmV3X2RldmljZWA/IFRoYXQgd291bGQgYmUgYSBodWdlIHdpbiEgSSBuZWVkIHRvIHNlZSBpZiBzeXprYWxsZXIgaXMgdXNpbmcgYGkyYy1kZXZgIG9yIGR1bW15IEkyQywgb3IgaWYgdGhlIGRyaXZlcnMgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiBkdXJpbmcgdGhlIHByb2JlLiBJIG5lZWQgdG8gbG9vayBhdCBga3N6OTQ3N19pMmNfcHJvYmVgIGFuZCBga3N6X3N3aXRjaF9yZWdpc3RlcmAgY29kZSwgdGhhdCBzaG91bGQgYmUgZW5vdWdoIHRvIHRlbGwgbWUgaWYgdGhpcyBpcyBhIHBhdGggSSBjYW4gdGFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrc3o5NDc3X2kyY19wcm9iZXxrc3pfc3dpdGNoX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM9MTMzPXN0YXRpYyBpbnQga3N6ODg2M19zbWlfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNjgtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmM6MTY5Olx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4ODYzX3NtaS5jLTE3MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE2LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjE3OnN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjUxOlx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUyLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYz0xMzM9c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGtzejk0NzdfaTJjX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVx0fSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzoxMzk6XHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNDAtXHQucmVtb3ZlXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYz0zOTExPXN0YXRpYyBpbnQga3N6ODQ2M19yZWxlYXNlX3N0cmFwc19zcGkoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy0zOTE1LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmM6MzkxNjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2MS19XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMS1cdFx0XHRcdCAgICB2b2lkICpwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oOjQzMjppbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTQzMy12b2lkIGtzel9zd2l0Y2hfcmVtb3ZlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jPTEzNz1zdGF0aWMgaW50IGtzel9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYzoxOTU6XHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwMTQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0czoKCioqRGl2aW5nIGludG8gdGhlIE1pY3JvY2hpcCBLU1o5NDc3IERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1NaOTQ3NyBzd2l0Y2ggaXMgYnJvdWdodCBvbmxpbmUgaW4gdGhlIERTQSBmcmFtZXdvcmssIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdHdvIGtleSBmdW5jdGlvbnM6IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYC4gVGhlc2UgYXJlIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGx5bmNocGlucyBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBEU0EgaW50ZWdyYXRpb24gZm9yIHRoaXMgTWljcm9jaGlwIHN3aXRjaC4gVGhlIGZpcnN0LCBga3N6OTQ3N19pMmNfcHJvYmVgLCBpbiBga3N6OTQ3N19pMmMuY2AsIGxpa2VseSBoYW5kbGVzIHRoZSBJMkMtc3BlY2lmaWMgYXNwZWN0cyBvZiBwcm9iaW5nIGZvciB0aGUgZGV2aWNlOyBJIG5lZWQgdG8gc2VlIGhvdyBpdCBpZGVudGlmaWVzIHRoZSBjaGlwLCBjb25maWd1cmVzIHRoZSBJMkMgYnVzLCBhbmQgcG90ZW50aWFsbHkgaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgZmlyc3QgY29udGFjdC4gVGhlbiwgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgIGluIGBrc3pfY29tbW9uLmNgIGlzIHdoZXJlIHRoaW5ncyBzaG91bGQgZ2V0IGludGVyZXN0aW5nLiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGludGVncmF0ZSB0aGUgS1NaOTQ3NyBpbnRvIHRoZSBEU0EgbGF5ZXIuIEl04oCZbGwgcHJvYmFibHkgaW52b2x2ZSBhbGxvY2F0aW5nIHN3aXRjaCBzdHJ1Y3R1cmVzLCByZWdpc3RlcmluZyBpdCB3aXRoIHRoZSBEU0EgY29yZSwgYW5kIHNldHRpbmcgdXAgdGhlIHJlbGV2YW50IGNhbGxiYWNrcyBmb3IgTUFDIGxlYXJuaW5nLCBWTEFOIGZpbHRlcmluZywgcG9ydCBjb25maWd1cmF0aW9uLCBhbmQgdHJhZmZpYyBjb250cm9sLiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgd2lsbCBjb25uZWN0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IGhvdyBlcnJvciBoYW5kbGluZyBpcyBoYW5kbGVkIGluIGJvdGguIFVsdGltYXRlbHksIEkmIzM5O2xsIHBheSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmUgdXNhZ2UgYW5kIGhvdyB0aGUgZHJpdmVyIHJlcHJlc2VudHMgdGhlIEtTWjk0NzcgYXMgYSBuZXR3b3JrIHN3aXRjaCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdGF0aWMgaW50IGtzejk0NzdfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpXG4gIDE4Olx0e1xuICAxOTpcdFx0Y29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEgKmNoaXA7XG4gIDIwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZGV2ID0gXHUwMDI2aTJjLVx1MDAzZWRldjtcbiAgMjE6XHRcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xuICAyMjpcdFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcbiAgMjM6XHRcdGludCBpLCByZXQ7XG4gIDI0Olx0XG4gIDI1Olx0XHRjaGlwID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRkZXYpO1xuICAyNjpcdFx0aWYgKCFjaGlwKVxuICAyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAgMjg6XHRcbiAgMjk6XHRcdGRldiA9IGtzel9zd2l0Y2hfYWxsb2MoXHUwMDI2aTJjLVx1MDAzZWRldiwgY2hpcCwgaTJjKTtcbiAgMzA6XHRcdGlmICghZGV2KVxuICAzMTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAgMzI6XHRcbiAgMzM6XHRcdC8qIFNhdmUgY2hpcCBpZCB0byBkbyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIHdoZW4gcHJvYmluZy4gKi9cbiAgMzQ6XHRcdGRldi1cdTAwM2VjaGlwX2lkID0gY2hpcC1cdTAwM2VjaGlwX2lkO1xuICAzNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgX19LU1pfTlVNX1JFR01BUFM7IGkmIzQzOyYjNDM7KSB7XG4gIDM2Olx0XHRcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xuICAzNzpcdFx0XHRyYy5sb2NrX2FyZyA9IFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXg7XG4gIDM4Olx0XHRcdGRldi1cdTAwM2VyZWdtYXBbaV0gPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsIFx1MDAyNnJjKTtcbiAgMzk6XHRcdFx0aWYgKElTX0VSUihkZXYtXHUwMDNlcmVnbWFwW2ldKSkge1xuICA0MDpcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKFx1MDAyNmkyYy1cdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVx1MDAzZXJlZ21hcFtpXSksXG4gIDQxOlx0XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0XHRcdCAgICAga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldLnZhbF9iaXRzKTtcbiAgNDM6XHRcdFx0fVxuICA0NDpcdFx0fVxuICA0NTpcdFxuICA0NjpcdFx0aWYgKGkyYy1cdTAwM2VkZXYucGxhdGZvcm1fZGF0YSlcbiAgNDc6XHRcdFx0ZGV2LVx1MDAzZXBkYXRhID0gaTJjLVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuICA0ODpcdFxuICA0OTpcdFx0ZGV2LVx1MDAzZWlycSA9IGkyYy1cdTAwM2VpcnE7XG4gIDUwOlx0XG4gIDUxOlx0XHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XG4gIDUyOlx0XG4gIDUzOlx0XHQvKiBNYWluIERTQSBkcml2ZXIgbWF5IG5vdCBiZSBzdGFydGVkIHlldC4gKi9cbiAgNTQ6XHRcdGlmIChyZXQpXG4gIDU1Olx0XHRcdHJldHVybiByZXQ7XG4gIDU2Olx0XG4gIDU3Olx0XHRpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBkZXYpO1xuICA1ODpcdFxuICA1OTpcdFx0cmV0dXJuIDA7XG4gIDYwOlx0fVxuICA2MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgS1NaIFN3aXRjaCBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aGVuIGEgS1NaIHN3aXRjaCBnZXRzIHJlZ2lzdGVyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSBga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpYCBmdW5jdGlvbi4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY2AgYW5kIGZvY3VzIG9uIGxpbmVzIDM5MTYgdGhyb3VnaCA0MDAwLiBUaGF0IHNlY3Rpb24gc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgaW52b2x2ZWQgaW4gdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY29ubmVjdGlvbiB0byB0aGUgRFNBIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgaW50ZXJydXB0IHJlZ2lzdHJhdGlvbiAoaWYgYW55KSwgYW5kIGhvdyB0aGUgc3dpdGNoIGlzIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhpcyBtb2RlbCBvZiB0aGUgS1NaIGFuZCBvdGhlciBtb2RlbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdlbGwtc3RydWN0dXJlZCBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSBwb3B1bGF0aW5nIHZhcmlvdXMgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIERTQSBpbnRlcmZhY2UuIEFueSBjbGV2ZXIgdXNlIG9mIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgd2lsbCBjYXRjaCBteSBleWUgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBpcyBjbGVhbiBhbmQgYWRoZXJlcyB0byBjb21tb24gY29kaW5nIHN0YW5kYXJkcyBpbiB0aGUgbmV0d29ya2luZyBzcGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM5MTY6XHRpbnQga3N6X3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuMzkxNzpcdHtcbjM5MTg6XHRcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICppbmZvO1xuMzkxOTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cztcbjM5MjA6XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4zOTIxOlx0XHR1bnNpZ25lZCBpbnQgcG9ydF9udW07XG4zOTIyOlx0XHRpbnQgcmV0O1xuMzkyMzpcdFx0aW50IGk7XG4zOTI0Olx0XG4zOTI1Olx0XHRkZXYtXHUwMDNlcmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldi1cdTAwM2VkZXYsIFwmIzM0O3Jlc2V0XCYjMzQ7LFxuMzkyNjpcdFx0XHRcdFx0XHRcdCAgR1BJT0RfT1VUX0xPVyk7XG4zOTI3Olx0XHRpZiAoSVNfRVJSKGRldi1cdTAwM2VyZXNldF9ncGlvKSlcbjM5Mjg6XHRcdFx0cmV0dXJuIFBUUl9FUlIoZGV2LVx1MDAzZXJlc2V0X2dwaW8pO1xuMzkyOTpcdFxuMzkzMDpcdFx0aWYgKGRldi1cdTAwM2VyZXNldF9ncGlvKSB7XG4zOTMxOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzkzMjpcdFx0XHRcdHJldCA9IGtzejg0NjNfY29uZmlndXJlX3N0cmFwc19zcGkoZGV2KTtcbjM5MzM6XHRcdFx0XHRpZiAocmV0KVxuMzkzNDpcdFx0XHRcdFx0cmV0dXJuIHJldDtcbjM5MzU6XHRcdFx0fVxuMzkzNjpcdFxuMzkzNzpcdFx0XHRncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGV2LVx1MDAzZXJlc2V0X2dwaW8sIDEpO1xuMzkzODpcdFx0XHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcbjM5Mzk6XHRcdFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cdTAwM2VyZXNldF9ncGlvLCAwKTtcbjM5NDA6XHRcdFx0bXNsZWVwKDEwMCk7XG4zOTQxOlx0XG4zOTQyOlx0XHRcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O21pY3JvY2hpcCxrc3o4NDYzXCYjMzQ7KSkge1xuMzk0MzpcdFx0XHRcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XG4zOTQ0Olx0XHRcdFx0aWYgKHJldClcbjM5NDU6XHRcdFx0XHRcdHJldHVybiByZXQ7XG4zOTQ2Olx0XHRcdH1cbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4zOTUwOlx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWdtYXBfbXV0ZXgpO1xuMzk1MTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlYWx1X211dGV4KTtcbjM5NTI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXZsYW5fbXV0ZXgpO1xuMzk1MzpcdFxuMzk1NDpcdFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcbjM5NTU6XHRcdGlmIChyZXQpXG4zOTU2Olx0XHRcdHJldHVybiByZXQ7XG4zOTU3Olx0XG4zOTU4Olx0XHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cdTAwM2VjaGlwX2lkKTtcbjM5NTk6XHRcdGlmICghaW5mbylcbjM5NjA6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4zOTYxOlx0XG4zOTYyOlx0XHQvKiBVcGRhdGUgdGhlIGNvbXBhdGlibGUgaW5mbyB3aXRoIHRoZSBwcm9iZWQgb25lICovXG4zOTYzOlx0XHRkZXYtXHUwMDNlaW5mbyA9IGluZm87XG4zOTY0Olx0XG4zOTY1Olx0XHRkZXZfaW5mbyhkZXYtXHUwMDNlZGV2LCBcJiMzNDtmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXG5cJiMzNDssXG4zOTY2Olx0XHRcdCBkZXYtXHUwMDNlaW5mby1cdTAwM2VkZXZfbmFtZSwgZGV2LVx1MDAzZWNoaXBfcmV2KTtcbjM5Njc6XHRcbjM5Njg6XHRcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcbjM5Njk6XHRcdGlmIChyZXQpXG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XG4zOTcyOlx0XHRkZXYtXHUwMDNlZGV2X29wcyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW9wcztcbjM5NzM6XHRcbjM5NzQ6XHRcdHJldCA9IGRldi1cdTAwM2VkZXZfb3BzLVx1MDAzZWluaXQoZGV2KTtcbjM5NzU6XHRcdGlmIChyZXQpXG4zOTc2Olx0XHRcdHJldHVybiByZXQ7XG4zOTc3Olx0XG4zOTc4Olx0XHRkZXYtXHUwMDNlcG9ydHMgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZWRldixcbjM5Nzk6XHRcdFx0XHRcdCAgZGV2LVx1MDAzZWluZm8tXHUwMDNlcG9ydF9jbnQgKiBzaXplb2Yoc3RydWN0IGtzel9wb3J0KSxcbjM5ODA6XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4zOTgxOlx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0cylcbjM5ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTgzOlx0XG4zOTg0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2Vwb3J0X2NudDsgaSYjNDM7JiM0MzspIHtcbjM5ODU6XHRcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5zdGF0czY0X2xvY2spO1xuMzk4NjpcdFx0XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY250X211dGV4KTtcbjM5ODc6XHRcdFx0ZGV2LVx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XG4zOTg4Olx0XHRcdFx0ZGV2bV9remFsbG9jKGRldi1cdTAwM2VkZXYsXG4zOTg5Olx0XHRcdFx0XHQgICAgIHNpemVvZih1NjQpICogKGRldi1cdTAwM2VpbmZvLVx1MDAzZW1pYl9jbnQgJiM0MzsgMSksXG4zOTkwOlx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuMzk5MTpcdFx0XHRpZiAoIWRldi1cdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXG4zOTkyOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zOTkzOlx0XG4zOTk0Olx0XHRcdGRldi1cdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xuMzk5NTpcdFx0XHRkZXYtXHUwMDNlcG9ydHNbaV0ubnVtID0gaTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MTkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLU1ogU3dpdGNoIERldGVjdGlvbiBhbmQgRFNBIERyaXZlcnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBrc3pfc3dpdGNoX2RldGVjdChkZXYpYCBhbmQgYGtzel9jaGVja19kZXZpY2VfaWQoZGV2KWAgZnVuY3Rpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIHBoeXNpY2FsIHN3aXRjaCBjaGlwLiBTcGVjaWZpY2FsbHksIGBrc3pfc3dpdGNoX2RldGVjdChkZXYpYCB1c2VzIEkyQy9TUEkgdG8gcmVhZCByZWdpc3RlcnMgZnJvbSB0aGUgaGFyZHdhcmUuIElmIHRoYXQgaGFyZHdhcmUgKmlzbiYjMzk7dCogcHJlc2VudCDigJMgYXMgeW91JiMzOTtkIGV4cGVjdCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBWTXMgd2l0aG91dCBhIEtTWjg0NjMsIEtTWjk0NzcsIG9yIHNpbWlsYXIgY2hpcCDigJMgdGhlc2UgcmVnaXN0ZXIgcmVhZHMgd2lsbCBsaWtlbHkgZmFpbCwgeWllbGRpbmcgaW52YWxpZCBJRHMgYW5kIGEgZmFpbGVkIHByb2JlLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LgoKSSYjMzk7bSBhbHNvIHJlbWluZGluZyBteXNlbGYgdGhhdCB0aGVzZSBLU1ogc3dpdGNoZXMgYXJlIERTQSBFdGhlcm5ldCBzd2l0Y2hlcywgY29tbW9ubHkgdXNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggTWljcm9jaGlwIEFTSUNzIGxpa2UgdGhlIEtTWjg0NjMsIEtTWjg1NjMsIEtTWjg3OTUsIEtTWjk0NzcsIEtTWjk4OTYsIGFuZCBMQU45Mzd4LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgYml0IGFib3V0ICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgaXMgY3JpdGljYWwgaGVyZTogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgYWN0dWFsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KCkdpdmVuIHRoYXQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgRFNBIGRyaXZlcnMgb3IgaWYgYW55IERTQSBzd2l0Y2hlcyBjYW4gZXZlbiBiZSBlbXVsYXRlZC4gSXQgc2VlbXMgdGhlIG9ubHkgRFNBIGRyaXZlciB3aXRoaW4gc3l6a2FsbGVyJiMzOTtzIHJlYWNoIG9yIHRlc3RhYmxlIHdpdGhvdXQgaGFyZHdhcmUgaXMgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBJdCYjMzk7cyBhIG1vY2sgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCB1c2VzIGEgZml4ZWQtcGh5LgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGBtaWNyb2NoaXBgIGRpcmVjdG9yeSAoYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBga3N6OC5jYCwgYGtzejk0NzcuY2AsIGBsYW45Mzd4X21haW4uY2ApLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGlzIGRlZGljYXRlZCB0byB0aGUgcGh5c2ljYWwgTWljcm9jaGlwIHN3aXRjaCBBU0lDcyAoS1NaODQ2MywgS1NaOTQ3NywgTEFOOTM3MCwgZXRjLikgb24gU1BJL0kyQy9TTUkgYnVzZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjYWxsZXJzIG9yIHVzYWdlIHBhdHRlcm5zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkmIzM5O20gZ29pbmcgdG8gZ3JlcCB0aGUgZW50aXJlIGNvZGViYXNlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gYGtzejg0NjNfcHRwX3NldF9jYXBzYCwgYGtzel9wdHBfc2V0X2NhcHNgLCBga3N6X3B0cF9jbG9ja19yZWdpc3RlcmAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBrc3pfc3dpdGNoX2NoaXBzYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGFueSBob3BlIGZvciB0ZXN0aW5nIHRoZXNlIGRyaXZlcnMgaW4gYSB2aXJ0dWFsIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzei4qcHRwX3NldF9jYXBzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTIzODU9c3RhdGljIGludCBrc3o4NDYzX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDgwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MjQ4MTpcdFx0a3N6ODQ2M19wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ4Mi1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjY0Nj1zdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI3NzgtXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI3Nzk6XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc4MC1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTY3MD1zdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODMtXHRpZiAoZGV2LVx1MDAzZWluZm8tXHUwMDNlcHRwX2NhcGFibGUpIHtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jOjE3ODQ6XHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMTc4NS1cdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM9MTMxOT1zdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzM0LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmM6MTMzNTp2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMzYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzNTUtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzU2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYy0xMzU3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD0yMj1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0zNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6Mzc6dm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMzgtaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD02NT1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC02OS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo3MTpzdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7IH1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTcyLXN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9NzY4PXN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy04NjktXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjg3MDpcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy04NzEtXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5OTMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBidWlsZCBkZXBlbmRlbmNpZXMuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIGlzIEtjb25maWcuIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBvciBpbXBsaWVkIGZvciB0aGlzIGRyaXZlciB0byBjb21waWxlIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsbHkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gcHJldmVudCBpdCBmcm9tIGJ1aWxkaW5nIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgcG90ZW50aWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHkuIFRoaXMgc2F2ZXMgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSByb2FkIOKAkyBubyBwb2ludCBpbiBjaGFzaW5nIGJ1Z3MgdGhhdCBhcmUganVzdCB0aGUgcmVzdWx0IG9mIGEgbWlzc2luZyBLY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkVUX0RTQV9NSUNST0NISVB8TkVUX0RTQV9LU1omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MTc6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjk0NzdfSTJDXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIEkyQyBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OIFx1MDAyNlx1MDAyNiBJMkNcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMC1cdHNlbGVjdCBSRUdNQVBfSTJDXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI0OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfU1BJXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIFNQSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI2Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OIFx1MDAyNlx1MDAyNiBTUElcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yNy1cdHNlbGVjdCBSRUdNQVBfU1BJXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozMzpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcdTAwMjZcdTAwMjYgUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTj1tIHx8IFBUUF8xNTg4X0NMT0NLPXlcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0zNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDAtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDItXHR0cmlzdGF0ZSBcJiMzNDtLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjQzOlx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctNDQtXHRzZWxlY3QgTURJT19CSVRCQU5HXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OKVx0JiM0Mzs9IGtzel9zd2l0Y2gub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT02PWtzel9zd2l0Y2gtb2JqcyAmIzQzOz0gbGFuOTM3eF9tYWluLm9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtNy1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS05LWtzel9zd2l0Y2gtb2JqcyAmIzQzOz0ga3N6X3B0cC5vXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTEwPWVuZGlmXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlLTExLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXHQmIzQzOz0ga3N6OTQ3N19pMmMub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1NQSSlcdFx0JiM0Mzs9IGtzel9zcGkub1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXHQmIzQzOz0ga3N6ODg2M19zbWkub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTE3MT1zdHJ1Y3Qga3N6X3BvcnQge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5NC1cdHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzO1xuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtMTk2LVx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgdHN0YW1wX2NvbmZpZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjExOiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9OTE9c3RhdGljIGlubGluZSB2b2lkIGtzejg0NjNfcHRwX2lycV9mcmVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykge31cbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDYtXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDoxMDc6I2VuZGlmXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDc6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MjIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIE1pY3JvY2hpcCBLU1ovTEFOIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIFBUUCAoUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wpIHN1cHBvcnQgZm9yIHRoZSBLU1o4NDYzIHN3aXRjaCBjaGlwLCBhbmQgcmVmYWN0b3JzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW52b2x2ZXMgc2V0dGluZyB1cCBjYXBhYmlsaXRpZXMsIGVuYWJsaW5nIHBlci1vdXRwdXQgY29uZmlndXJhdGlvbnMsIGFuZCBtYW5hZ2luZyB0aW1lIGFkanVzdG1lbnRzIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcC4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgaW50ZWdyYXRlZCB0aHJvdWdoIHRoZSBEU0Egc3dpdGNoIHNldHVwIGNhbGxiYWNrcy4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzIGZvciBmdXp6aW5nLCBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBDYW4gdGhpcyBiZSBwcm9iZWQgYW5kIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIG5vLiBUaGVzZSBhcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBJQ3MsIGNvbW11bmljYXRpbmcgdmlhIFNQSSwgSTJDLCBTTUksIG9yIE1ESU8gYnVzc2VzLiBXZSAqbmVlZCogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGV2ZW4gcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBEU0Egc3dpdGNoLiBJdCYjMzk7cyBqdXN0IHN0cnVjdHVyYWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuCgpUaGVyZWZvcmUsIGFwcGx5aW5nIHRoZSAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGNyaXRlcmlhIGZyb20gU2VjdGlvbiAyIGRpcmVjdGx5IGRpc3F1YWxpZmllcyBpdCBmcm9tIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIG9uIGRyaXZlciBjb2RlIHRoYXQsIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBjYXBhYmlsaXRpZXMsIGlzIGluYWNjZXNzaWJsZS4KCk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5OgoKMS4gIEkgaGF2ZSBjb21wbGV0ZWQgdGhlIGFuYWx5c2lzLgoyLiAgSSBhbSBjZXJ0YWluIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLgozLiAgSSBkb24mIzM5O3QgaGF2ZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agb3IgYEVuYWJsZUNvbmZpZ3NgLgo0LiAgSSBoYXZlIHByb3ZpZGVkIHRoZSByZWFzb25pbmcuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA3OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBQVFAgc3VwcG9ydCBhbmQgcGVyLW91dCBjb25maWd1cmF0aW9uIGZvciBNaWNyb2NoaXAgS1NaODQ2MyBhbmQgcmVsYXRlZCBzd2l0Y2hlcyB3aXRoaW4gdGhlIE1pY3JvY2hpcCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvKS4gVGhlc2UgZHJpdmVycyByZXF1aXJlIHBoeXNpY2FsIE1pY3JvY2hpcCBFdGhlcm5ldCBzd2l0Y2ggQVNJQ3MgY29ubmVjdGVkIG92ZXIgU1BJLCBJMkMsIG9yIFNNSSBidXNlcyB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6MzAuNDM1MTE4OTE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NDkxMzEyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IGFuZCBwZXItb3V0IGNvbmZpZ3VyYXRpb24gZm9yIE1pY3JvY2hpcCBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzIHdpdGhpbiB0aGUgTWljcm9jaGlwIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC8pLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBBU0lDcyBjb25uZWN0ZWQgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6MzAuNDM1MTIzMTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDUyMTg5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MGRkZmZiOWIzZTM5MDcwOWFiZDAyNmQzODczMDI2NmUxYmIyY2FjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDc6NDI6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbmluZGV4IDk0MWFlOWY2NmY3MGIuLjZiMDhiYjhmZWQ1YjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xcbkBAIC0yNDc4LDYgKzI0NzgsNyBAQCBzdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfZ2lycTtcXG4gXFxuK1xcdFxcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcbkBAIC0yNzc1LDYgKzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwdHBfY2FwYWJsZSkge1xcbitcXHRcXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcXG4gXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuIFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWdpc3RlciBQVFAgY2xvY2s6ICVkXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuaW5kZXggM2VlOTk1NTQ1YzU3OS4uNzI1MjhhNTNiNjdkMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jXFxuQEAgLTE3ODEsNiArMTc4MSw3IEBAIHN0YXRpYyBpbnQga3N6OTQ3N19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXB0cF9jYXBhYmxlKSB7XFxuK1xcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5pbmRleCAxYTlkNmY4M2EwMjMyLi45ZTIzNGFkNzFiNzIzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcXG5AQCAtMTE2MSw2ICsxMTYxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfbWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXFxuIFxcdFxcdC5zdXBwb3J0c19ybWlpID0ge2ZhbHNlLCBmYWxzZSwgdHJ1ZX0sXFxuIFxcdFxcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxcbitcXHRcXHQubl9waW5zID0gMTIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAxMixcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o4NTYzXSA9IHtcXG5AQCAtMTE5NCw2ICsxMTk2LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbiBcXHRcXHQud3JfdGFibGUgPSBcXHUwMDI2a3N6ODU2M19yZWdpc3Rlcl9zZXQsXFxuIFxcdFxcdC5yZF90YWJsZSA9IFxcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg3OTVdID0ge1xcbkBAIC0xNDE0LDYgKzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5zZ21paV9wb3J0ID0gNyxcXG4gXFx0XFx0LndyX3RhYmxlID0gXFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxcbiBcXHRcXHQucmRfdGFibGUgPSBcXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtLU1o5ODk2XSA9IHtcXG5AQCAtMTU0NCw2ICsxNTUwLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIGZhbHNlfSxcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZSA9IHt0cnVlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0tTWjg1NjddID0ge1xcbkBAIC0xNTgxLDYgKzE1ODksOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5nYml0X2NhcGFibGVcXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXFxuIFxcdFxcdFxcdFxcdCAgIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbS1NaOTU2N10gPSB7XFxuQEAgLTE2MTUsNiArMTYyNSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0XFx0XFx0ICAgdHJ1ZSwgZmFsc2UsIGZhbHNlfSxcXG4gXFx0XFx0LmdiaXRfY2FwYWJsZVxcdD0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTM3MF0gPSB7XFxuQEAgLTE2NDYsNiArMTY1OCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcXG4gXFx0XFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSxcXG4gXFx0XFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcxXSA9IHtcXG5AQCAtMTY3Nyw2ICsxNjkxLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuc3VwcG9ydHNfcmdtaWkgPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQuaW50ZXJuYWxfcGh5ID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZX0sXFxuIFxcdFxcdC5wdHBfY2FwYWJsZSA9IHRydWUsXFxuK1xcdFxcdC5uX3BpbnMgPSAyLFxcbitcXHRcXHQubl9wZXJfb3V0ID0gMyxcXG4gXFx0fSxcXG4gXFxuIFxcdFtMQU45MzcyXSA9IHtcXG5AQCAtMTcxMiw2ICsxNzI4LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xcbiBcXHRcXHQuaW50ZXJuYWxfcGh5XFx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcXG4gXFx0XFx0XFx0XFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzNdID0ge1xcbkBAIC0xNzQ3LDYgKzE3NjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcXG4gXFx0XFx0XFx0XFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcXG4gXFx0XFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcXG4rXFx0XFx0Lm5fcGlucyA9IDIsXFxuK1xcdFxcdC5uX3Blcl9vdXQgPSAzLFxcbiBcXHR9LFxcbiBcXG4gXFx0W0xBTjkzNzRdID0ge1xcbkBAIC0xNzgyLDYgKzE4MDIsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XFxuIFxcdFxcdC5pbnRlcm5hbF9waHlcXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxcbiBcXHRcXHRcXHRcXHQgICBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LFxcbiBcXHRcXHQucHRwX2NhcGFibGUgPSB0cnVlLFxcbitcXHRcXHQubl9waW5zID0gMixcXG4rXFx0XFx0Lm5fcGVyX291dCA9IDMsXFxuIFxcdH0sXFxuIFxcbiBcXHRbTEFOOTY0Nl0gPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5pbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcXG4gXFx0dTggc2dtaWlfcG9ydDtcXG4gXFx0Y29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgKndyX3RhYmxlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XFxuK1xcdGNvbnN0IHU4IG5fcGlucztcXG4rXFx0Y29uc3QgdTggbl9wZXJfb3V0O1xcbiB9O1xcbiBcXG4gc3RydWN0IGtzel9pcnEge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXFxuQEAgLTI2LDYgKzI2LDcgQEBcXG4gICovXFxuICNkZWZpbmUgS1NaX01BWF9EUklGVF9DT1JSIDYyNDk5OTlcXG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXFxuKyNkZWZpbmUgS1NaODQ2M19NQVhfUFVMU0VfV0lEVEggNTAwMDAwTExcXG4gXFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cXG4gI2RlZmluZSBLU1pfUFRQX1NVQk5TX0JJVFMgMzJcXG5AQCAtNjMsNiArNjQsMTcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9ncGlvKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdCBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfcmVzZXQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4ge1xcbiBcXHR1MzIgZGF0YTtcXG5AQCAtODYsNyArOTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuIFxcdFxcdFxcdCAwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxcbitzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMsIHUzMiBtYXNrKVxcbiB7XFxuIFxcdHUzMiBkYXRhO1xcbiBcXG5AQCAtOTQsNyArMTA2LDcgQEAgc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGRhdGEgPSAocHVsc2VfbnMgLyA4KTtcXG4tXFx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcXG4rXFx0aWYgKChtYXNrIFxcdTAwMjYgZGF0YSkgIT0gZGF0YSlcXG4gXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTIwLDYgKzEzMiwyOCBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3RhcmdldF90aW1lX3NldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4re1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGtzel9ybXcxNihkZXYsIEtTWjg0NjNfVE9VX0VOLCBCSVQodW5pdCksIEJJVCh1bml0KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgS1NaODQ2M19UT1VfQUNUSVZFLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoIShkYXRhIFxcdTAwMjYgQklUKHVuaXQpKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiJXM6IFRyaWdnZXIgdW5pdCVkIGVycm9yIVxcXFxuXFxcIiwgX19mdW5jX18sXFxuK1xcdFxcdFxcdHVuaXQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcXG4ge1xcbiBcXHR1MzIgZGF0YTtcXG5AQCAtMTQ3LDYgKzE4MSw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3N0YXJ0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcXG4rXFx0XFx0XFx0XFx0XFx0dTggaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGEucGluX2NvbmZpZ1tpbmRleF07XFxuK1xcdHUxNiBjZmdfYmFzZSA9IEtTWjg0NjNfVFJJRzFfQ0ZHICsgS1NaODQ2M19UUklHTl9DRkdfU0laRSAqIHBpbi1cXHUwMDNlY2hhbjtcXG4rXFx0dTE2IGRhdGE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cXG4rXFx0aWYgKCh0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjIFxcdTAwMjYgMHhmZmZmZmZmZikgIT0gdGFyZ2V0X3RpbWUtXFx1MDAzZXR2X3NlYylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRkYXRhID0gS1NaODQ2M19OT1RJRllfQklUIHxcXG4rXFx0ICAgICAgIEZJRUxEX1BSRVAoS1NaODQ2M19QQVRURVJOX00sIFRSSUdfUE9TX1BFUklPRCkgfFxcbitcXHQgICAgICAgcGluLVxcdTAwM2VpbmRleDtcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGLFxcbitcXHRcXHRcXHQgIGN5Y2xlX3dpZHRoX25zKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFNldCBjeWNsZSBjb3VudCAwIC0gSW5maW5pdGUgKi9cXG4rXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfQ1lDTEVfQ05UX09GRiwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cXG4rXFx0ZGF0YSA9IChwdWxzZV93aWR0aF9ucyAvIDgpO1xcbitcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19QVUxTRV9XSURUSF9PRkYsIGRhdGEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX05TRUMsXFxuK1xcdFxcdFxcdCAgdGFyZ2V0X3RpbWUtXFx1MDAzZXR2X25zZWMpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX1NFQyxcXG4rXFx0XFx0XFx0ICB0YXJnZXRfdGltZS1cXHUwMDNldHZfc2VjKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzel9wdHBfY29uZmlndXJlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgdTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXFxuQEAgLTE4MywxNyArMjY3LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9jb25maWd1cmVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcXG4tXFx0XFx0XFx0XFx0IGludCBvbilcXG4rc3RhdGljIGludCBrc3pfcHRwX2dldF9waW4oc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbi1cXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xcbi1cXHR1NjQgY3ljbGVfd2lkdGhfbnM7XFxuLVxcdHU2NCBwdWxzZV93aWR0aF9ucztcXG4tXFx0aW50IHBpbiA9IDA7XFxuLVxcdHUzMiBkYXRhMzI7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCBwaW47XFxuIFxcbiBcXHRpZiAocmVxdWVzdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+UFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuQEAgLTIwNiw2ICsyODQsMTE0IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChwaW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHJldHVybiBwaW47XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgKmN5Y2xlX3dpZHRoX25zKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5zZWM7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXN0YXJ0Lm5zZWM7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWM7XFxuK1xcbitcXHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZCk7XFxuK1xcdGlmICgoKmN5Y2xlX3dpZHRoX25zIFxcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSAqY3ljbGVfd2lkdGhfbnMpIHtcXG4rXFx0XFx0KmN5Y2xlX3dpZHRoX25zID0gMDtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdTY0IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2Uoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0dTY0IG1heF9wdWxzZV93aWR0aClcXG4re1xcbitcXHR1NjQgcmVxX3B1bHNlX3dpZHRoX25zO1xcbitcXG4rXFx0aWYgKHJlcXVlc3QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxcbitcXHRcXHRyZXR1cm4gcmVxdWVzdC1cXHUwMDNlb24uc2VjICogTlNFQ19QRVJfU0VDICtcXHRyZXF1ZXN0LVxcdTAwM2Vvbi5uc2VjO1xcbitcXG4rXFx0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxcbitcXHQgKiBoYXJkd2FyZSBpcyBhIGxpdHRsZSBiaXQgbW9yZSB0aGFuIDEyNSBtcy5cXG4rXFx0ICovXFxuK1xcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVxcdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcXG4rXFx0XFx0XFx0ICAgICAgcmVxdWVzdC1cXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcXG4rXFx0cmV0dXJuIG1pbl90KHU2NCwgcmVxX3B1bHNlX3dpZHRoX25zLCBtYXhfcHVsc2Vfd2lkdGgpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBvbilcXG4re1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbitcXHR1NjQgY3ljbGVfd2lkdGhfbnM7XFxuK1xcdHU2NCBwdWxzZV93aWR0aF9ucztcXG4rXFx0aW50IHBpbjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xcbitcXHRpZiAocGluIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBpbjtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX3RvdV9yZXNldChkZXYsIHJlcXVlc3QtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmICghb24pIHtcXG4rXFx0XFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFx0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFxcdTAwMjZjeWNsZV93aWR0aF9ucyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcXG4rXFxuK1xcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoZGV2LCBjeWNsZV93aWR0aF9ucywgcHVsc2Vfd2lkdGhfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxcbitcXHRcXHRcXHRcXHRcXHQgICBwaW4pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfZ3BpbyhkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3N0YXJ0KGRldiwgcmVxdWVzdC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfUEVST1VUO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxcbitcXHRcXHRcXHRcXHQgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcdHU2NCBjeWNsZV93aWR0aF9ucztcXG4rXFx0dTY0IHB1bHNlX3dpZHRoX25zO1xcbitcXHRpbnQgcGluID0gMDtcXG4rXFx0dTMyIGRhdGEzMjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xcbitcXHRpZiAocGluIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBpbjtcXG4rXFxuIFxcdGRhdGEzMiA9IEZJRUxEX1BSRVAoUFRQX0dQSU9fSU5ERVgsIHBpbikgfFxcbiBcXHRcXHQgRklFTERfUFJFUChQVFBfVE9VX0lOREVYLCByZXF1ZXN0LVxcdTAwM2VpbmRleCk7XFxuIFxcdHJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCxcXG5AQCAtMjIxLDMxICs0MDcsMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcXG4gXFx0XFx0cHRwX2RhdGEtXFx1MDAzZXRvdV9tb2RlID0gS1NaX1BUUF9UT1VfSURMRTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4rXFx0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFxcdTAwMjZjeWNsZV93aWR0aF9ucyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHB1bHNlX3dpZHRoX25zID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShkZXYsIHJlcXVlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xcbiBcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9zZWMgID0gcmVxdWVzdC1cXHUwMDNlc3RhcnQuc2VjO1xcbi1cXHRwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVxcdTAwM2VzdGFydC5uc2VjO1xcbi1cXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjID0gcmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYztcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjO1xcbi1cXG4tXFx0Y3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZCk7XFxuLVxcdGlmICgoY3ljbGVfd2lkdGhfbnMgXFx1MDAyNiBUUklHX0NZQ0xFX1dJRFRIX00pICE9IGN5Y2xlX3dpZHRoX25zKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmIChyZXF1ZXN0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBUUF9QRVJPVVRfRFVUWV9DWUNMRSkge1xcbi1cXHRcXHRwdWxzZV93aWR0aF9ucyA9IHJlcXVlc3QtXFx1MDAzZW9uLnNlYyAqIE5TRUNfUEVSX1NFQyArXFxuLVxcdFxcdFxcdHJlcXVlc3QtXFx1MDAzZW9uLm5zZWM7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcXG4tXFx0XFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYyAqIE5TRUNfUEVSX1NFQyArXFxuLVxcdFxcdFxcdFxcdCAgICAgIHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjKSAvIDI7XFxuLVxcdFxcdHB1bHNlX3dpZHRoX25zID0gbWluX3QodTY0LCByZXFfcHVsc2Vfd2lkdGhfbnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zKTtcXG4rXFx0cmV0ID0ga3N6X3B0cF90b3VfcHVsc2VfdmVyaWZ5KHB1bHNlX3dpZHRoX25zLCBUUklHX1BVTFNFX1dJRFRIX00pO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtNzU2LDExICs5MjQsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2dldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3N0YXRpYyBpbnQga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCAqcmVxdWVzdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFxcdTAwMjZkZXYtXFx1MDAzZXB0cF9kYXRhO1xcbiBcXHRzNjQgbm93X25zLCBmaXJzdF9ucywgcGVyaW9kX25zLCBuZXh0X25zO1xcbi1cXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5leHQ7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcXG4gXFx0dW5zaWduZWQgaW50IGNvdW50O1xcbkBAIC03OTEsNDAgKzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cXG4gXFx0bmV4dCA9IG5zX3RvX3RpbWVzcGVjNjQobmV4dF9ucyk7XFxuLVxcdHJlcXVlc3Quc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xcbi1cXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XFxuLVxcdHJlcXVlc3QucGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XFxuLVxcdHJlcXVlc3QucGVyaW9kLm5zZWMgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xcbi1cXHRyZXF1ZXN0LmluZGV4ID0gMDtcXG4tXFx0cmVxdWVzdC5mbGFncyA9IDA7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZXN0YXJ0LnNlYyAgPSBuZXh0LnR2X3NlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlc3RhcnQubnNlYyA9IG5leHQudHZfbnNlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlcGVyaW9kLnNlYyAgPSBwdHBfZGF0YS1cXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XFxuK1xcdHJlcXVlc3QtXFx1MDAzZXBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXFx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcXG4rXFx0cmVxdWVzdC1cXHUwMDNlaW5kZXggPSAwO1xcbitcXHRyZXF1ZXN0LVxcdTAwM2VmbGFncyA9IDA7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N6X3B0cF9wcmVwYXJlX3Jlc3RhcnRfcGVyb3V0KGRldiwgXFx1MDAyNnJlcXVlc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0dXJuIGtzel9wdHBfZW5hYmxlX3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0LCAxKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbi1cXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuLVxcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcmVncztcXG4rXFx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRyZXQgPSBrc3pfcHRwX3ByZXBhcmVfcmVzdGFydF9wZXJvdXQoZGV2LCBcXHUwMDI2cmVxdWVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFxcdTAwMjZyZXF1ZXN0LCAxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX2tzel9wdHBfc2V0dGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcXG4re1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBXcml0ZSB0byBzaGFkb3cgcmVnaXN0ZXJzIGFuZCBMb2FkIFBUUCBjbG9jayAqL1xcbiBcXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX1JUQ19TVUJfTkFOT1NFQ10sIFBUUF9SVENfME5TKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgdHMtXFx1MDAzZXR2X25zZWMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel93cml0ZTMyKGRldiwgcmVnc1tQVFBfUlRDX1NFQ10sIHRzLVxcdTAwM2V0dl9zZWMpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel9ybXcxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgUFRQX0xPQURfVElNRSwgUFRQX0xPQURfVElNRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRzd2l0Y2ggKHB0cF9kYXRhLVxcdTAwM2V0b3VfbW9kZSkge1xcbitcXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XFxuK1xcdFxcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSA9ICp0cztcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfc2V0dGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbkBAIC04OTAsMTggKzExMjksMTMgQEAgc3RhdGljIGludCBrc3pfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4rc3RhdGljIGludCBfX2tzel9wdHBfYWRqdGltZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCBzNjQgZGVsdGEpXFxuIHtcXG4tXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuLVxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4tXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbiBcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuIFxcdHMzMiBzZWMsIG5zZWM7XFxuIFxcdHUxNiBkYXRhMTY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlbG9jayk7XFxuLVxcbiBcXHQvKiBkbyBub3QgdXNlIG5zX3RvX3RpbWVzcGVjNjQoKSxcXG4gXFx0ICogYm90aCBzZWMgYW5kIG5zZWMgYXJlIHN1YnRyYWN0ZWQgYnkgaHdcXG4gXFx0ICovXFxuQEAgLTkwOSwxNSArMTE0MywxNSBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIGFicyhuc2VjKSk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdHJldCA9IGtzel9yZWFkMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIFxcdTAwMjZkYXRhMTYpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGRhdGExNiB8PSBQVFBfU1RFUF9BREo7XFxuIFxcbkBAIC05MjgsNiArMTE2Miw1NiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbiBcXHRcXHRkYXRhMTYgfD0gUFRQX1NURVBfRElSO1xcbiBcXG4gXFx0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIGRhdGExNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XFxuK1xcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGE2NCA9IG5zX3RvX3RpbWVzcGVjNjQoZGVsdGEpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0c3dpdGNoIChwdHBfZGF0YS1cXHUwMDNldG91X21vZGUpIHtcXG4rXFx0Y2FzZSBLU1pfUFRQX1RPVV9JRExFOlxcbitcXHRcXHRicmVhaztcXG4rXFxuK1xcdGNhc2UgS1NaX1BUUF9UT1VfUEVST1VUOlxcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9yZXN0YXJ0X3Blcm91dChkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNsb2NrX3RpbWUgPSB0aW1lc3BlYzY0X2FkZChwdHBfZGF0YS1cXHUwMDNlY2xvY2tfdGltZSwgZGVsdGE2NCk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlY2xvY2tfbG9jayk7XFxuK1xcbit1bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuQEAgLTk1Miw2ICsxMjM2LDI2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxcbit7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xcbitcXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzd2l0Y2ggKHJlcS1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXQgPSBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXFx1MDAyNnJlcS1cXHUwMDNlcGVyb3V0LCBvbik7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcmVxLCBpbnQgb24pXFxuIHtcXG5AQCAtMTAyOCwxNyArMTMzMiwzMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfc3RhcnRfY2xvY2soc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcXG4rXFxuK1xcdHB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuK1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5vd25lclxcdFxcdD0gVEhJU19NT0RVTEU7XFxuK1xcdHNucHJpbnRmKHB0cF9kYXRhLVxcdTAwM2VjYXBzLm5hbWUsIDE2LCBcXFwiTWljcm9jaGlwIENsb2NrXFxcIik7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm1heF9hZGpcXHRcXHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZ2V0dGltZTY0XFx0PSBrc3pfcHRwX2dldHRpbWU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnNldHRpbWU2NFxcdD0ga3N6ODQ2M19wdHBfc2V0dGltZTtcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuYWRqZmluZVxcdFxcdD0ga3N6X3B0cF9hZGpmaW5lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5hZGp0aW1lXFx0XFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5kb19hdXhfd29ya1xcdD0ga3N6X3B0cF9kb19hdXhfd29yaztcXG4rXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMuZW5hYmxlXFx0XFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XFxuK1xcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLnZlcmlmeVxcdFxcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9wZXJfb3V0O1xcbit9XFxuK1xcbit2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4tXFx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VyZWdzO1xcbiBcXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YTtcXG4tXFx0aW50IHJldDtcXG4tXFx0dTggaTtcXG4gXFxuIFxcdHB0cF9kYXRhID0gXFx1MDAyNmRldi1cXHUwMDNlcHRwX2RhdGE7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2Vsb2NrKTtcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnB0cF9kYXRhLVxcdTAwM2VjbG9ja19sb2NrKTtcXG4gXFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLm93bmVyXFx0XFx0PSBUSElTX01PRFVMRTtcXG4gXFx0c25wcmludGYocHRwX2RhdGEtXFx1MDAzZWNhcHMubmFtZSwgMTYsIFxcXCJNaWNyb2NoaXAgQ2xvY2tcXFwiKTtcXG5AQCAtMTA1MCwxNCArMTM3MCwyNyBAQCBpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdHB0cF9kYXRhLVxcdTAwM2VjYXBzLmRvX2F1eF93b3JrXFx0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xcbiBcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5lbmFibGVcXHRcXHQ9IGtzel9wdHBfZW5hYmxlO1xcbiBcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy52ZXJpZnlcXHRcXHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubl9waW5zXFx0XFx0PSBLU1pfUFRQX05fR1BJTztcXG4tXFx0cHRwX2RhdGEtXFx1MDAzZWNhcHMubl9wZXJfb3V0XFx0PSAzO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3BpbnNcXHRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zO1xcbitcXHRwdHBfZGF0YS1cXHUwMDNlY2Fwcy5uX3Blcl9vdXRcXHQ9IGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9wZXJfb3V0O1xcbit9XFxuK1xcbitpbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlZ3M7XFxuK1xcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1OCBpO1xcbitcXG4rXFx0cHRwX2RhdGEgPSBcXHUwMDI2ZGV2LVxcdTAwM2VwdHBfZGF0YTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cHRwX2RhdGEtXFx1MDAzZWNsb2NrX2xvY2spO1xcbiBcXG4gXFx0cmV0ID0ga3N6X3B0cF9zdGFydF9jbG9jayhkZXYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEtTWl9QVFBfTl9HUElPOyBpKyspIHtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbl9waW5zOyBpKyspIHtcXG4gXFx0XFx0c3RydWN0IHB0cF9waW5fZGVzYyAqcHRwX3BpbiA9IFxcdTAwMjZwdHBfZGF0YS1cXHUwMDNlcGluX2NvbmZpZ1tpXTtcXG4gXFxuIFxcdFxcdHNucHJpbnRmKHB0cF9waW4tXFx1MDAzZW5hbWUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5pbmRleCA3MDY3ZWM5YmQxZTZmLi4zODM4YTczYTgzMDJjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcXG5AQCAtMTIsNyArMTIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cXHRcXHQyXFxuKyNkZWZpbmUgS1NaX1BUUF9OX0dQSU9cXHRcXHQxMlxcbiBcXG4gZW51bSBrc3pfcHRwX3RvdV9tb2RlIHtcXG4gXFx0S1NaX1BUUF9UT1VfSURMRSxcXG5AQCAtMzMsNiArMzMsOCBAQCBzdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcXG4gXFx0c3RydWN0IHRpbWVzcGVjNjQgcGVyb3V0X3BlcmlvZDtcXG4gfTtcXG4gXFxuK3ZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxuIFxcbiB2b2lkIGtzel9wdHBfY2xvY2tfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbkBAIC02NSw2ICs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xcbiBcXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXFxuaW5kZXggNjVlYTg1NzdhZjc1NS4uMTZmMTE3ZmE1ZDQ5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHBfcmVnLmhcXG5AQCAtNTEsNiArNTEsMjIgQEBcXG4gXFxuICNkZWZpbmUgUkVHX1BUUF9VTklUX0lOREVYX180XFx0XFx0MHgwNTIwXFxuIFxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVxcdFxcdDB4MjAyXFxuKyNkZWZpbmUgS1NaODQ2M19UT1VfRU5cXHRcXHRcXHQweDIwNlxcbisjZGVmaW5lIEtTWjg0NjNfVE9VX1NXX1JTVFxcdFxcdDB4MjA4XFxuK1xcbisjZGVmaW5lIEtTWjg0NjNfVFJJR05fQ0ZHX1NJWkVcXHRcXHQweDIwXFxuKyNkZWZpbmUgS1NaODQ2M19UUklHMV9DRkdcXHRcXHQweDIyMFxcbisjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX05TRUNcXHRcXHQweDAwMFxcbisjZGVmaW5lIEtTWjg0NjNfVEFSR0VUX1NFQ1xcdFxcdDB4MDA0XFxuKyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX09GRlxcdFxcdDB4MDA4XFxuKyNkZWZpbmUgS1NaODQ2M19OT1RJRllfQklUXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgS1NaODQ2M19QQVRURVJOX01cXHRcXHRHRU5NQVNLKDYsIDQpXFxuKyNkZWZpbmUgS1NaODQ2M19QVUxTRV9XSURUSF9PRkZcXHRcXHQweDAwQVxcbisjZGVmaW5lIEtTWjg0NjNfVFJJR19QVUxTRV9XSURUSF9NXFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRlxcdFxcdDB4MDBDXFxuKyNkZWZpbmUgS1NaODQ2M19DWUNMRV9DTlRfT0ZGXFx0XFx0MHgwMTBcXG4rXFxuICNkZWZpbmUgUFRQX0dQSU9fSU5ERVhcXHRcXHRcXHRHRU5NQVNLKDE5LCAxNilcXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXFx0XFx0XFx0QklUKDgpXFxuICNkZWZpbmUgUFRQX1RPVV9JTkRFWFxcdFxcdFxcdEdFTk1BU0soMSwgMClcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXFxuQEAgLTg2Nyw2ICs4NjcsNyBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbiBcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldi1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjMwLjk4MTE2OTU0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjg0MDMwNjkyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDcwZGRmZmI5YjNlMzkwNzA5YWJkMDI2ZDM4NzMwMjY2ZTFiYjJjYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA3OjQyOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuaW5kZXggOTQxYWU5ZjY2ZjcwYi4uNmIwOGJiOGZlZDViNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY1xuQEAgLTI0NzgsNiArMjQ3OCw3IEBAIHN0YXRpYyBpbnQga3N6ODQ2M19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBmcmVlX2dpcnE7XG4gXG4rXHRcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcbiBcdFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbkBAIC0yNzc1LDYgKzI3NzYsNyBAQCBzdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4rXHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbmluZGV4IDNlZTk5NTU0NWM1NzkuLjcyNTI4YTUzYjY3ZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmNcbkBAIC0xNzgxLDYgKzE3ODEsNyBAQCBzdGF0aWMgaW50IGtzejk0Nzdfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0fVxuIFxuIFx0aWYgKGRldi1cdTAwM2VpbmZvLVx1MDAzZXB0cF9jYXBhYmxlKSB7XG4rXHRcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xuIFx0XHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGRldl9lcnIoZGV2LVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUFRQIGNsb2NrOiAlZFxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbmluZGV4IDFhOWQ2ZjgzYTAyMzIuLjllMjM0YWQ3MWI3MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmNcbkBAIC0xMTYxLDYgKzExNjEsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19taWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LnN1cHBvcnRzX3JtaWkgPSB7ZmFsc2UsIGZhbHNlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4rXHRcdC5uX3BpbnMgPSAxMixcbitcdFx0Lm5fcGVyX291dCA9IDEyLFxuIFx0fSxcbiBcbiBcdFtLU1o4NTYzXSA9IHtcbkBAIC0xMTk0LDYgKzExOTYsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4gXHRcdC53cl90YWJsZSA9IFx1MDAyNmtzejg1NjNfcmVnaXN0ZXJfc2V0LFxuIFx0XHQucmRfdGFibGUgPSBcdTAwMjZrc3o4NTYzX3JlZ2lzdGVyX3NldCxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o4Nzk1XSA9IHtcbkBAIC0xNDE0LDYgKzE0MTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zZ21paV9wb3J0ID0gNyxcbiBcdFx0LndyX3RhYmxlID0gXHUwMDI2a3N6OTQ3N19yZWdpc3Rlcl9zZXQsXG4gXHRcdC5yZF90YWJsZSA9IFx1MDAyNmtzejk0NzdfcmVnaXN0ZXJfc2V0LFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0tTWjk4OTZdID0ge1xuQEAgLTE1NDQsNiArMTU1MCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCBmYWxzZX0sXG4gXHRcdC5nYml0X2NhcGFibGUgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbS1NaODU2N10gPSB7XG5AQCAtMTU4MSw2ICsxNTg5LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsXG4gXHRcdFx0XHQgICB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtLU1o5NTY3XSA9IHtcbkBAIC0xNjE1LDYgKzE2MjUsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdFx0XHQgICB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQuZ2JpdF9jYXBhYmxlXHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45MzcwXSA9IHtcbkBAIC0xNjQ2LDYgKzE2NTgsOCBAQCBjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSBrc3pfc3dpdGNoX2NoaXBzW10gPSB7XG4gXHRcdC5zdXBwb3J0c19yZ21paSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZX0sXG4gXHRcdC5pbnRlcm5hbF9waHkgPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzFdID0ge1xuQEAgLTE2NzcsNiArMTY5MSw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LnN1cHBvcnRzX3JnbWlpID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LmludGVybmFsX3BoeSA9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9LFxuIFx0XHQucHRwX2NhcGFibGUgPSB0cnVlLFxuK1x0XHQubl9waW5zID0gMixcbitcdFx0Lm5fcGVyX291dCA9IDMsXG4gXHR9LFxuIFxuIFx0W0xBTjkzNzJdID0ge1xuQEAgLTE3MTIsNiArMTcyOCw4IEBAIGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhIGtzel9zd2l0Y2hfY2hpcHNbXSA9IHtcbiBcdFx0LmludGVybmFsX3BoeVx0PSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3M10gPSB7XG5AQCAtMTc0Nyw2ICsxNzY1LDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSxcbiBcdFx0XHRcdCAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZX0sXG4gXHRcdC5wdHBfY2FwYWJsZSA9IHRydWUsXG4rXHRcdC5uX3BpbnMgPSAyLFxuK1x0XHQubl9wZXJfb3V0ID0gMyxcbiBcdH0sXG4gXG4gXHRbTEFOOTM3NF0gPSB7XG5AQCAtMTc4Miw2ICsxODAyLDggQEAgY29uc3Qgc3RydWN0IGtzel9jaGlwX2RhdGEga3N6X3N3aXRjaF9jaGlwc1tdID0ge1xuIFx0XHQuaW50ZXJuYWxfcGh5XHQ9IHt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlLFxuIFx0XHRcdFx0ICAgZmFsc2UsIGZhbHNlLCB0cnVlLCB0cnVlfSxcbiBcdFx0LnB0cF9jYXBhYmxlID0gdHJ1ZSxcbitcdFx0Lm5fcGlucyA9IDIsXG4rXHRcdC5uX3Blcl9vdXQgPSAzLFxuIFx0fSxcbiBcbiBcdFtMQU45NjQ2XSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5pbmRleCBjYmU5ODQ5NDU3OGMzLi4xMTU1YjM5MzUwYzJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oXG5AQCAtMTM5LDYgKzEzOSw4IEBAIHN0cnVjdCBrc3pfY2hpcF9kYXRhIHtcbiBcdHU4IHNnbWlpX3BvcnQ7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqd3JfdGFibGU7XG4gXHRjb25zdCBzdHJ1Y3QgcmVnbWFwX2FjY2Vzc190YWJsZSAqcmRfdGFibGU7XG4rXHRjb25zdCB1OCBuX3BpbnM7XG4rXHRjb25zdCB1OCBuX3Blcl9vdXQ7XG4gfTtcbiBcbiBzdHJ1Y3Qga3N6X2lycSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuaW5kZXggMzljYzcwZDY1OTAwYi4uZDMzMDM0ODkyYThmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuY1xuQEAgLTI2LDYgKzI2LDcgQEBcbiAgKi9cbiAjZGVmaW5lIEtTWl9NQVhfRFJJRlRfQ09SUiA2MjQ5OTk5XG4gI2RlZmluZSBLU1pfTUFYX1BVTFNFX1dJRFRIIDEyNTAwMDAwMExMXG4rI2RlZmluZSBLU1o4NDYzX01BWF9QVUxTRV9XSURUSCA1MDAwMDBMTFxuIFxuICNkZWZpbmUgS1NaX1BUUF9JTkNfTlMgNDBVTEwgIC8qIEhXIGNsb2NrIGlzIGluY3JlbWVudGVkIGV2ZXJ5IDQwIG5zIChieSA0MCkgKi9cbiAjZGVmaW5lIEtTWl9QVFBfU1VCTlNfQklUUyAzMlxuQEAgLTYzLDYgKzY0LDE3IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfZ3BpbyhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0XHRcdCBMRURfU1JDX1BUUF9HUElPXzEgfCBMRURfU1JDX1BUUF9HUElPXzIpO1xuIH1cbiBcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3RvdV9yZXNldChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LCB1OCB1bml0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9TV19SU1QsIEJJVCh1bml0KSwgQklUKHVuaXQpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4ga3N6X3JtdzE2KGRldiwgS1NaODQ2M19UT1VfU1dfUlNULCBCSVQodW5pdCksIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4ge1xuIFx0dTMyIGRhdGE7XG5AQCAtODYsNyArOTgsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3Jlc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHU4IHVuaXQpXG4gXHRcdFx0IDApO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4rc3RhdGljIGludCBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkodTY0IHB1bHNlX25zLCB1MzIgbWFzaylcbiB7XG4gXHR1MzIgZGF0YTtcbiBcbkBAIC05NCw3ICsxMDYsNyBAQCBzdGF0aWMgaW50IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeSh1NjQgcHVsc2VfbnMpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZGF0YSA9IChwdWxzZV9ucyAvIDgpO1xuLVx0aWYgKCFGSUVMRF9GSVQoVFJJR19QVUxTRV9XSURUSF9NLCBkYXRhKSlcbitcdGlmICgobWFzayBcdTAwMjYgZGF0YSkgIT0gZGF0YSlcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0xMjAsNiArMTMyLDI4IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3VfdGFyZ2V0X3RpbWVfc2V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbit7XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfcm13MTYoZGV2LCBLU1o4NDYzX1RPVV9FTiwgQklUKHVuaXQpLCBCSVQodW5pdCkpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel9yZWFkMTYoZGV2LCBLU1o4NDYzX1RPVV9BQ1RJVkUsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghKGRhdGEgXHUwMDI2IEJJVCh1bml0KSkpIHtcbitcdFx0ZGV2X2VycihkZXYtXHUwMDNlZGV2LCBcIiVzOiBUcmlnZ2VyIHVuaXQlZCBlcnJvciFcXG5cIiwgX19mdW5jX18sXG4rXHRcdFx0dW5pdCk7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiB7XG4gXHR1MzIgZGF0YTtcbkBAIC0xNDcsNiArMTgxLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF90b3Vfc3RhcnQoc3RydWN0IGtzel9kZXZpY2UgKmRldiwgdTggdW5pdClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHRcdFx0dTMyIGN5Y2xlX3dpZHRoX25zLCB1MzIgcHVsc2Vfd2lkdGhfbnMsXG4rXHRcdFx0XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGNvbnN0ICp0YXJnZXRfdGltZSxcbitcdFx0XHRcdFx0dTggaW5kZXgpXG4re1xuK1x0c3RydWN0IHB0cF9waW5fZGVzYyAqcGluID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhLnBpbl9jb25maWdbaW5kZXhdO1xuK1x0dTE2IGNmZ19iYXNlID0gS1NaODQ2M19UUklHMV9DRkcgKyBLU1o4NDYzX1RSSUdOX0NGR19TSVpFICogcGluLVx1MDAzZWNoYW47XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBIYXJkd2FyZSBoYXMgb25seSAzMiBiaXQgKi9cbitcdGlmICgodGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjIFx1MDAyNiAweGZmZmZmZmZmKSAhPSB0YXJnZXRfdGltZS1cdTAwM2V0dl9zZWMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0ZGF0YSA9IEtTWjg0NjNfTk9USUZZX0JJVCB8XG4rXHQgICAgICAgRklFTERfUFJFUChLU1o4NDYzX1BBVFRFUk5fTSwgVFJJR19QT1NfUEVSSU9EKSB8XG4rXHQgICAgICAgcGluLVx1MDAzZWluZGV4O1xuK1x0cmV0ID0ga3N6X3dyaXRlMTYoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfUEFUVEVSTl9PRkYsIGRhdGEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel93cml0ZTMyKGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX0NZQ0xFX1dJRFRIX09GRixcbitcdFx0XHQgIGN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBTZXQgY3ljbGUgY291bnQgMCAtIEluZmluaXRlICovXG4rXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19DWUNMRV9DTlRfT0ZGLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBLU1o4NDYzIHVzZXMgYSA4IG5zIHVuaXQgdmFsdWUgdG8gY29tcHV0ZSB0aGUgcHVsc2Ugd2lkdGggKi9cbitcdGRhdGEgPSAocHVsc2Vfd2lkdGhfbnMgLyA4KTtcbitcdHJldCA9IGtzel93cml0ZTE2KGRldiwgY2ZnX2Jhc2UgKyBLU1o4NDYzX1BVTFNFX1dJRFRIX09GRiwgZGF0YSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCBjZmdfYmFzZSArIEtTWjg0NjNfVEFSR0VUX05TRUMsXG4rXHRcdFx0ICB0YXJnZXRfdGltZS1cdTAwM2V0dl9uc2VjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIGNmZ19iYXNlICsgS1NaODQ2M19UQVJHRVRfU0VDLFxuK1x0XHRcdCAgdGFyZ2V0X3RpbWUtXHUwMDNldHZfc2VjKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICB1MzIgY3ljbGVfd2lkdGhfbnMsIHUzMiBwdWxzZV93aWR0aF9ucyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgdGltZXNwZWM2NCBjb25zdCAqdGFyZ2V0X3RpbWUsXG5AQCAtMTgzLDE3ICsyNjcsMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX2NvbmZpZ3VyZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4tXHRcdFx0XHQgaW50IG9uKVxuK3N0YXRpYyBpbnQga3N6X3B0cF9nZXRfcGluKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0ICAgc3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCBjb25zdCAqcmVxdWVzdClcbiB7XG4gXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4tXHR1NjQgY3ljbGVfd2lkdGhfbnM7XG4tXHR1NjQgcHVsc2Vfd2lkdGhfbnM7XG4tXHRpbnQgcGluID0gMDtcbi1cdHUzMiBkYXRhMzI7XG4tXHRpbnQgcmV0O1xuK1x0aW50IHBpbjtcbiBcbiBcdGlmIChyZXF1ZXN0LVx1MDAzZWZsYWdzIFx1MDAyNiB+UFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG5AQCAtMjA2LDYgKzI4NCwxMTQgQEAgc3RhdGljIGludCBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbiBcdGlmIChwaW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cmV0dXJuIHBpbjtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2NvbXB1dGVfcGVyb3V0X2N5Y2xlKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHRcdHU2NCAqY3ljbGVfd2lkdGhfbnMpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfdGFyZ2V0X3RpbWVfZmlyc3QudHZfc2VjICA9IHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjO1xuK1x0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0Lm5zZWM7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X3NlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLnNlYztcbitcdHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYyA9IHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWM7XG4rXG4rXHQqY3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuK1x0aWYgKCgqY3ljbGVfd2lkdGhfbnMgXHUwMDI2IFRSSUdfQ1lDTEVfV0lEVEhfTSkgIT0gKmN5Y2xlX3dpZHRoX25zKSB7XG4rXHRcdCpjeWNsZV93aWR0aF9ucyA9IDA7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB1NjQga3N6X3B0cF9jb21wdXRlX3Blcm91dF9wdWxzZShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IGNvbnN0ICpyZXF1ZXN0LFxuK1x0XHRcdFx0XHR1NjQgbWF4X3B1bHNlX3dpZHRoKVxuK3tcbitcdHU2NCByZXFfcHVsc2Vfd2lkdGhfbnM7XG4rXG4rXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKVxuK1x0XHRyZXR1cm4gcmVxdWVzdC1cdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1x0cmVxdWVzdC1cdTAwM2Vvbi5uc2VjO1xuK1xuK1x0LyogVXNlIGEgZHV0eSBjeWNsZSBvZiA1MCUuIE1heGltdW0gcHVsc2Ugd2lkdGggc3VwcG9ydGVkIGJ5IHRoZVxuK1x0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4rXHQgKi9cbitcdHJlcV9wdWxzZV93aWR0aF9ucyA9IChyZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWMgKiBOU0VDX1BFUl9TRUMgK1xuK1x0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbitcdHJldHVybiBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucywgbWF4X3B1bHNlX3dpZHRoKTtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHQgICAgIGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdHU2NCBjeWNsZV93aWR0aF9ucztcbitcdHU2NCBwdWxzZV93aWR0aF9ucztcbitcdGludCBwaW47XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGluID0ga3N6X3B0cF9nZXRfcGluKGRldiwgcmVxdWVzdCk7XG4rXHRpZiAocGluIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcGluO1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfdG91X3Jlc2V0KGRldiwgcmVxdWVzdC1cdTAwM2VpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKCFvbikge1xuK1x0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuK1x0XHRcdFx0XHRcdCAgICAgIEtTWjg0NjNfTUFYX1BVTFNFX1dJRFRIKTtcbitcbitcdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyxcbitcdFx0XHRcdCAgICAgICBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0ga3N6ODQ2M19wdHBfY29uZmlndXJlX3Blcm91dChkZXYsIGN5Y2xlX3dpZHRoX25zLCBwdWxzZV93aWR0aF9ucyxcbitcdFx0XHRcdFx0ICAgXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LFxuK1x0XHRcdFx0XHQgICBwaW4pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGtzel9wdHBfdG91X2dwaW8oZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBrc3o4NDYzX3B0cF90b3Vfc3RhcnQoZGV2LCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX1BFUk9VVDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgY29uc3QgKnJlcXVlc3QsXG4rXHRcdFx0XHQgaW50IG9uKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gXHUwMDI2ZGV2LVx1MDAzZXB0cF9kYXRhO1xuK1x0dTY0IGN5Y2xlX3dpZHRoX25zO1xuK1x0dTY0IHB1bHNlX3dpZHRoX25zO1xuK1x0aW50IHBpbiA9IDA7XG4rXHR1MzIgZGF0YTMyO1xuK1x0aW50IHJldDtcbitcbitcdHBpbiA9IGtzel9wdHBfZ2V0X3BpbihkZXYsIHJlcXVlc3QpO1xuK1x0aWYgKHBpbiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBpbjtcbitcbiBcdGRhdGEzMiA9IEZJRUxEX1BSRVAoUFRQX0dQSU9fSU5ERVgsIHBpbikgfFxuIFx0XHQgRklFTERfUFJFUChQVFBfVE9VX0lOREVYLCByZXF1ZXN0LVx1MDAzZWluZGV4KTtcbiBcdHJldCA9IGtzel9ybXczMihkZXYsIFJFR19QVFBfVU5JVF9JTkRFWF9fNCxcbkBAIC0yMjEsMzEgKzQwNywxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfZW5hYmxlX3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuIFx0XHRwdHBfZGF0YS1cdTAwM2V0b3VfbW9kZSA9IEtTWl9QVFBfVE9VX0lETEU7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuK1x0cmV0ID0ga3N6X3B0cF9jb21wdXRlX3Blcm91dF9jeWNsZShkZXYsIHJlcXVlc3QsIFx1MDAyNmN5Y2xlX3dpZHRoX25zKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRwdWxzZV93aWR0aF9ucyA9IGtzel9wdHBfY29tcHV0ZV9wZXJvdXRfcHVsc2UoZGV2LCByZXF1ZXN0LFxuK1x0XHRcdFx0XHRcdCAgICAgIEtTWl9NQVhfUFVMU0VfV0lEVEgpO1xuIFxuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3RhcmdldF90aW1lX2ZpcnN0LnR2X3NlYyAgPSByZXF1ZXN0LVx1MDAzZXN0YXJ0LnNlYztcbi1cdHB0cF9kYXRhLVx1MDAzZXBlcm91dF90YXJnZXRfdGltZV9maXJzdC50dl9uc2VjID0gcmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjO1xuLVxuLVx0cHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5zZWM7XG4tXHRwdHBfZGF0YS1cdTAwM2VwZXJvdXRfcGVyaW9kLnR2X25zZWMgPSByZXF1ZXN0LVx1MDAzZXBlcmlvZC5uc2VjO1xuLVxuLVx0Y3ljbGVfd2lkdGhfbnMgPSB0aW1lc3BlYzY0X3RvX25zKFx1MDAyNnB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QpO1xuLVx0aWYgKChjeWNsZV93aWR0aF9ucyBcdTAwMjYgVFJJR19DWUNMRV9XSURUSF9NKSAhPSBjeWNsZV93aWR0aF9ucylcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAocmVxdWVzdC1cdTAwM2VmbGFncyBcdTAwMjYgUFRQX1BFUk9VVF9EVVRZX0NZQ0xFKSB7XG4tXHRcdHB1bHNlX3dpZHRoX25zID0gcmVxdWVzdC1cdTAwM2Vvbi5zZWMgKiBOU0VDX1BFUl9TRUMgK1xuLVx0XHRcdHJlcXVlc3QtXHUwMDNlb24ubnNlYztcbi1cdH0gZWxzZSB7XG4tXHRcdC8qIFVzZSBhIGR1dHkgY3ljbGUgb2YgNTAlLiBNYXhpbXVtIHB1bHNlIHdpZHRoIHN1cHBvcnRlZCBieSB0aGVcbi1cdFx0ICogaGFyZHdhcmUgaXMgYSBsaXR0bGUgYml0IG1vcmUgdGhhbiAxMjUgbXMuXG4tXHRcdCAqL1xuLVx0XHRyZXFfcHVsc2Vfd2lkdGhfbnMgPSAocmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICogTlNFQ19QRVJfU0VDICtcbi1cdFx0XHRcdCAgICAgIHJlcXVlc3QtXHUwMDNlcGVyaW9kLm5zZWMpIC8gMjtcbi1cdFx0cHVsc2Vfd2lkdGhfbnMgPSBtaW5fdCh1NjQsIHJlcV9wdWxzZV93aWR0aF9ucyxcbi1cdFx0XHRcdCAgICAgICBLU1pfTUFYX1BVTFNFX1dJRFRIKTtcbi1cdH1cbi1cbi1cdHJldCA9IGtzel9wdHBfdG91X3B1bHNlX3ZlcmlmeShwdWxzZV93aWR0aF9ucyk7XG4rXHRyZXQgPSBrc3pfcHRwX3RvdV9wdWxzZV92ZXJpZnkocHVsc2Vfd2lkdGhfbnMsIFRSSUdfUFVMU0VfV0lEVEhfTSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTc1NiwxMSArOTI0LDExIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9nZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGtzel9wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbitzdGF0aWMgaW50IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBwdHBfcGVyb3V0X3JlcXVlc3QgKnJlcXVlc3QpXG4ge1xuIFx0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4gXHRzNjQgbm93X25zLCBmaXJzdF9ucywgcGVyaW9kX25zLCBuZXh0X25zO1xuLVx0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuIFx0c3RydWN0IHRpbWVzcGVjNjQgbmV4dDtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcbiBcdHVuc2lnbmVkIGludCBjb3VudDtcbkBAIC03OTEsNDAgKzk1OSwxMTEgQEAgc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4gXG4gXHQvKiBSZXN0YXJ0IHBlcmlvZGljIG91dHB1dCBzaWduYWwgKi9cbiBcdG5leHQgPSBuc190b190aW1lc3BlYzY0KG5leHRfbnMpO1xuLVx0cmVxdWVzdC5zdGFydC5zZWMgID0gbmV4dC50dl9zZWM7XG4tXHRyZXF1ZXN0LnN0YXJ0Lm5zZWMgPSBuZXh0LnR2X25zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5zZWMgID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9zZWM7XG4tXHRyZXF1ZXN0LnBlcmlvZC5uc2VjID0gcHRwX2RhdGEtXHUwMDNlcGVyb3V0X3BlcmlvZC50dl9uc2VjO1xuLVx0cmVxdWVzdC5pbmRleCA9IDA7XG4tXHRyZXF1ZXN0LmZsYWdzID0gMDtcbitcdHJlcXVlc3QtXHUwMDNlc3RhcnQuc2VjICA9IG5leHQudHZfc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VzdGFydC5uc2VjID0gbmV4dC50dl9uc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VwZXJpb2Quc2VjICA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfc2VjO1xuK1x0cmVxdWVzdC1cdTAwM2VwZXJpb2QubnNlYyA9IHB0cF9kYXRhLVx1MDAzZXBlcm91dF9wZXJpb2QudHZfbnNlYztcbitcdHJlcXVlc3QtXHUwMDNlaW5kZXggPSAwO1xuK1x0cmVxdWVzdC1cdTAwM2VmbGFncyA9IDA7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX3Jlc3RhcnRfcGVyb3V0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IHB0cF9wZXJvdXRfcmVxdWVzdCByZXF1ZXN0O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHJldHVybiBrc3pfcHRwX2VuYWJsZV9wZXJvdXQoZGV2LCBcdTAwMjZyZXF1ZXN0LCAxKTtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4tXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuK3N0YXRpYyBpbnQga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4rXHRzdHJ1Y3QgcHRwX3Blcm91dF9yZXF1ZXN0IHJlcXVlc3Q7XG4gXHRpbnQgcmV0O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdHJldCA9IGtzel9wdHBfcHJlcGFyZV9yZXN0YXJ0X3Blcm91dChkZXYsIFx1MDAyNnJlcXVlc3QpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBrc3o4NDYzX3B0cF9lbmFibGVfcGVyb3V0KGRldiwgXHUwMDI2cmVxdWVzdCwgMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19rc3pfcHRwX3NldHRpbWUoc3RydWN0IGtzel9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRjb25zdCB1MTYgKnJlZ3MgPSBkZXYtXHUwMDNlaW5mby1cdTAwM2VyZWdzO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qIFdyaXRlIHRvIHNoYWRvdyByZWdpc3RlcnMgYW5kIExvYWQgUFRQIGNsb2NrICovXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX1JUQ19TVUJfTkFOT1NFQ10sIFBUUF9SVENfME5TKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfTkFOT1NFQ10sIHRzLVx1MDAzZXR2X25zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19TRUNdLCB0cy1cdTAwM2V0dl9zZWMpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcm13MTYoZGV2LCByZWdzW1BUUF9DTEtfQ1RSTF0sIFBUUF9MT0FEX1RJTUUsIFBUUF9MT0FEX1RJTUUpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGtzejg0NjNfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX3NldHRpbWUoZGV2LCB0cyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHVubG9jaztcbitcbitcdHN3aXRjaCAocHRwX2RhdGEtXHUwMDNldG91X21vZGUpIHtcbitcdGNhc2UgS1NaX1BUUF9UT1VfSURMRTpcbitcdFx0YnJlYWs7XG4rXG4rXHRjYXNlIEtTWl9QVFBfVE9VX1BFUk9VVDpcbitcdFx0cmV0ID0ga3N6ODQ2M19wdHBfcmVzdGFydF9wZXJvdXQoZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXHRwdHBfZGF0YS1cdTAwM2VjbG9ja190aW1lID0gKnRzO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuK3tcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhID0gcHRwX2NhcHNfdG9fZGF0YShwdHApO1xuK1x0c3RydWN0IGtzel9kZXZpY2UgKmRldiA9IHB0cF9kYXRhX3RvX2tzel9kZXYocHRwX2RhdGEpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXQgPSBfX2tzel9wdHBfc2V0dGltZShkZXYsIHRzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuQEAgLTg5MCwxOCArMTEyOSwxMyBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbitzdGF0aWMgaW50IF9fa3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYsIHM2NCBkZWx0YSlcbiB7XG4tXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbi1cdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbiBcdGNvbnN0IHUxNiAqcmVncyA9IGRldi1cdTAwM2VpbmZvLVx1MDAzZXJlZ3M7XG4gXHRzMzIgc2VjLCBuc2VjO1xuIFx0dTE2IGRhdGExNjtcbiBcdGludCByZXQ7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuLVxuIFx0LyogZG8gbm90IHVzZSBuc190b190aW1lc3BlYzY0KCksXG4gXHQgKiBib3RoIHNlYyBhbmQgbnNlYyBhcmUgc3VidHJhY3RlZCBieSBod1xuIFx0ICovXG5AQCAtOTA5LDE1ICsxMTQzLDE1IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUzMihkZXYsIHJlZ3NbUFRQX1JUQ19OQU5PU0VDXSwgYWJzKG5zZWMpKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0ga3N6X3dyaXRlMzIoZGV2LCByZWdzW1BUUF9SVENfU0VDXSwgYWJzKHNlYykpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSBrc3pfcmVhZDE2KGRldiwgcmVnc1tQVFBfQ0xLX0NUUkxdLCBcdTAwMjZkYXRhMTYpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRkYXRhMTYgfD0gUFRQX1NURVBfQURKO1xuIFxuQEAgLTkyOCw2ICsxMTYyLDU2IEBAIHN0YXRpYyBpbnQga3N6X3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4gXHRcdGRhdGExNiB8PSBQVFBfU1RFUF9ESVI7XG4gXG4gXHRyZXQgPSBrc3pfd3JpdGUxNihkZXYsIHJlZ3NbUFRQX0NMS19DVFJMXSwgZGF0YTE2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4re1xuK1x0c3RydWN0IGtzel9wdHBfZGF0YSAqcHRwX2RhdGEgPSBwdHBfY2Fwc190b19kYXRhKHB0cCk7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gcHRwX2RhdGFfdG9fa3N6X2RldihwdHBfZGF0YSk7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YTY0ID0gbnNfdG9fdGltZXNwZWM2NChkZWx0YSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldCA9IF9fa3N6X3B0cF9hZGp0aW1lKGRldiwgZGVsdGEpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRzd2l0Y2ggKHB0cF9kYXRhLVx1MDAzZXRvdV9tb2RlKSB7XG4rXHRjYXNlIEtTWl9QVFBfVE9VX0lETEU6XG4rXHRcdGJyZWFrO1xuK1xuK1x0Y2FzZSBLU1pfUFRQX1RPVV9QRVJPVVQ6XG4rXHRcdHJldCA9IGtzejg0NjNfcHRwX3Jlc3RhcnRfcGVyb3V0KGRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWNsb2NrX2xvY2spO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2xvY2tfdGltZSA9IHRpbWVzcGVjNjRfYWRkKHB0cF9kYXRhLVx1MDAzZWNsb2NrX3RpbWUsIGRlbHRhNjQpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cHRwX2RhdGEtXHUwMDNlY2xvY2tfbG9jayk7XG4rXG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBrc3pfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhNjQgPSBuc190b190aW1lc3BlYzY0KGRlbHRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0ID0gX19rc3pfcHRwX2FkanRpbWUoZGV2LCBkZWx0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbkBAIC05NTIsNiArMTIzNiwyNiBAQCBzdGF0aWMgaW50IGtzel9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBrc3o4NDYzX3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0ICAgICAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpyZXEsIGludCBvbilcbit7XG4rXHRzdHJ1Y3Qga3N6X3B0cF9kYXRhICpwdHBfZGF0YSA9IHB0cF9jYXBzX3RvX2RhdGEocHRwKTtcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBwdHBfZGF0YV90b19rc3pfZGV2KHB0cF9kYXRhKTtcbitcdGludCByZXQ7XG4rXG4rXHRzd2l0Y2ggKHJlcS1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIFBUUF9DTEtfUkVRX1BFUk9VVDpcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZwdHBfZGF0YS1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0ID0ga3N6ODQ2M19wdHBfZW5hYmxlX3Blcm91dChkZXYsIFx1MDAyNnJlcS1cdTAwM2VwZXJvdXQsIG9uKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnB0cF9kYXRhLVx1MDAzZWxvY2spO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQga3N6X3B0cF9lbmFibGUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4gXHRcdFx0ICBzdHJ1Y3QgcHRwX2Nsb2NrX3JlcXVlc3QgKnJlcSwgaW50IG9uKVxuIHtcbkBAIC0xMDI4LDE3ICsxMzMyLDMzIEBAIHN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit2b2lkIGtzejg0NjNfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3Qga3N6X2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1xuK1x0cHRwX2RhdGEgPSBcdTAwMjZkZXYtXHUwMDNlcHRwX2RhdGE7XG4rXG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm93bmVyXHRcdD0gVEhJU19NT0RVTEU7XG4rXHRzbnByaW50ZihwdHBfZGF0YS1cdTAwM2VjYXBzLm5hbWUsIDE2LCBcIk1pY3JvY2hpcCBDbG9ja1wiKTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubWF4X2Fkalx0XHQ9IEtTWl9NQVhfRFJJRlRfQ09SUjtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuZ2V0dGltZTY0XHQ9IGtzel9wdHBfZ2V0dGltZTtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMuc2V0dGltZTY0XHQ9IGtzejg0NjNfcHRwX3NldHRpbWU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkamZpbmVcdFx0PSBrc3pfcHRwX2FkamZpbmU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLmFkanRpbWVcdFx0PSBrc3o4NDYzX3B0cF9hZGp0aW1lO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3o4NDYzX3B0cF9lbmFibGU7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLnZlcmlmeVx0XHQ9IGtzel9wdHBfdmVyaWZ5X3BpbjtcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9waW5zXHRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9waW5zO1xuK1x0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3Blcl9vdXRcdD0gZGV2LVx1MDAzZWluZm8tXHUwMDNlbl9wZXJfb3V0O1xuK31cbitcbit2b2lkIGtzel9wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuLVx0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbiBcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuLVx0aW50IHJldDtcbi1cdHU4IGk7XG4gXG4gXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbi1cdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMub3duZXJcdFx0PSBUSElTX01PRFVMRTtcbiBcdHNucHJpbnRmKHB0cF9kYXRhLVx1MDAzZWNhcHMubmFtZSwgMTYsIFwiTWljcm9jaGlwIENsb2NrXCIpO1xuQEAgLTEwNTAsMTQgKzEzNzAsMjcgQEAgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5kb19hdXhfd29ya1x0PSBrc3pfcHRwX2RvX2F1eF93b3JrO1xuIFx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5lbmFibGVcdFx0PSBrc3pfcHRwX2VuYWJsZTtcbiBcdHB0cF9kYXRhLVx1MDAzZWNhcHMudmVyaWZ5XHRcdD0ga3N6X3B0cF92ZXJpZnlfcGluO1xuLVx0cHRwX2RhdGEtXHUwMDNlY2Fwcy5uX3BpbnNcdFx0PSBLU1pfUFRQX05fR1BJTztcbi1cdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IDM7XG4rXHRwdHBfZGF0YS1cdTAwM2VjYXBzLm5fcGluc1x0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGlucztcbitcdHB0cF9kYXRhLVx1MDAzZWNhcHMubl9wZXJfb3V0XHQ9IGRldi1cdTAwM2VpbmZvLVx1MDAzZW5fcGVyX291dDtcbit9XG4rXG4raW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuK3tcbitcdHN0cnVjdCBrc3pfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0Y29uc3QgdTE2ICpyZWdzID0gZGV2LVx1MDAzZWluZm8tXHUwMDNlcmVncztcbitcdHN0cnVjdCBrc3pfcHRwX2RhdGEgKnB0cF9kYXRhO1xuK1x0aW50IHJldDtcbitcdHU4IGk7XG4rXG4rXHRwdHBfZGF0YSA9IFx1MDAyNmRldi1cdTAwM2VwdHBfZGF0YTtcbitcdG11dGV4X2luaXQoXHUwMDI2cHRwX2RhdGEtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwdHBfZGF0YS1cdTAwM2VjbG9ja19sb2NrKTtcbiBcbiBcdHJldCA9IGtzel9wdHBfc3RhcnRfY2xvY2soZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBLU1pfUFRQX05fR1BJTzsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlaW5mby1cdTAwM2VuX3BpbnM7IGkrKykge1xuIFx0XHRzdHJ1Y3QgcHRwX3Bpbl9kZXNjICpwdHBfcGluID0gXHUwMDI2cHRwX2RhdGEtXHUwMDNlcGluX2NvbmZpZ1tpXTtcbiBcbiBcdFx0c25wcmludGYocHRwX3Bpbi1cdTAwM2VuYW1lLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbmluZGV4IDcwNjdlYzliZDFlNmYuLjM4MzhhNzNhODMwMmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmhcbkBAIC0xMiw3ICsxMiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4gXG4tI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQyXG4rI2RlZmluZSBLU1pfUFRQX05fR1BJT1x0XHQxMlxuIFxuIGVudW0ga3N6X3B0cF90b3VfbW9kZSB7XG4gXHRLU1pfUFRQX1RPVV9JRExFLFxuQEAgLTMzLDYgKzMzLDggQEAgc3RydWN0IGtzel9wdHBfZGF0YSB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBwZXJvdXRfcGVyaW9kO1xuIH07XG4gXG4rdm9pZCBrc3pfcHRwX3NldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4rdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuIGludCBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XG4gXG4gdm9pZCBrc3pfcHRwX2Nsb2NrX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbkBAIC02NSw2ICs2Nyw4IEBAIHN0cnVjdCBrc3pfcHRwX2RhdGEge1xuIFx0c3RydWN0IG11dGV4IGxvY2s7XG4gfTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaCBiL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuaW5kZXggNjVlYTg1NzdhZjc1NS4uMTZmMTE3ZmE1ZDQ5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cF9yZWcuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwX3JlZy5oXG5AQCAtNTEsNiArNTEsMjIgQEBcbiBcbiAjZGVmaW5lIFJFR19QVFBfVU5JVF9JTkRFWF9fNFx0XHQweDA1MjBcbiBcbisjZGVmaW5lIEtTWjg0NjNfVE9VX0FDVElWRVx0XHQweDIwMlxuKyNkZWZpbmUgS1NaODQ2M19UT1VfRU5cdFx0XHQweDIwNlxuKyNkZWZpbmUgS1NaODQ2M19UT1VfU1dfUlNUXHRcdDB4MjA4XG4rXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdOX0NGR19TSVpFXHRcdDB4MjBcbisjZGVmaW5lIEtTWjg0NjNfVFJJRzFfQ0ZHXHRcdDB4MjIwXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9OU0VDXHRcdDB4MDAwXG4rI2RlZmluZSBLU1o4NDYzX1RBUkdFVF9TRUNcdFx0MHgwMDRcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9PRkZcdFx0MHgwMDhcbisjZGVmaW5lIEtTWjg0NjNfTk9USUZZX0JJVFx0XHRCSVQoOClcbisjZGVmaW5lIEtTWjg0NjNfUEFUVEVSTl9NXHRcdEdFTk1BU0soNiwgNClcbisjZGVmaW5lIEtTWjg0NjNfUFVMU0VfV0lEVEhfT0ZGXHRcdDB4MDBBXG4rI2RlZmluZSBLU1o4NDYzX1RSSUdfUFVMU0VfV0lEVEhfTVx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIEtTWjg0NjNfQ1lDTEVfV0lEVEhfT0ZGXHRcdDB4MDBDXG4rI2RlZmluZSBLU1o4NDYzX0NZQ0xFX0NOVF9PRkZcdFx0MHgwMTBcbitcbiAjZGVmaW5lIFBUUF9HUElPX0lOREVYXHRcdFx0R0VOTUFTSygxOSwgMTYpXG4gI2RlZmluZSBQVFBfVFNJX0lOREVYXHRcdFx0QklUKDgpXG4gI2RlZmluZSBQVFBfVE9VX0lOREVYXHRcdFx0R0VOTUFTSygxLCAwKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMgYi9kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jXG5pbmRleCA4NmNlM2E4NjcwNWY5Li4zYTIwOTEyMmZjN2RjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uY1xuQEAgLTg2Nyw2ICs4NjcsNyBAQCBzdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHR9XG4gXHR9XG4gXG4rXHRrc3pfcHRwX3NldF9jYXBzKGRzKTtcbiBcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBUUCBjbG9jazogJWRcXG5cIixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjMwLjk4MTE3MTI4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDAwNjU0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byB0aHJvdyBzeXprYWxsZXIgYXQgaXQuIEZpcnN0LCBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBtb2RpZmllZCBmaWxlcy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBidW5jaCBvZiBNaWNyb2NoaXAgS1NaIHN3aXRjaCBkcml2ZXJzLCBzcGVjaWZpY2FsbHk6IGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguY2AsIGBkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuY2AsIGFuZCBhIGZldyByZWxhdGVkIGNvbW1vbiBmaWxlcyBsaWtlIGBrc3pfY29tbW9uLmNgIGFuZCBga3N6X3B0cC5jYCwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIGhlYWRlciBmaWxlcyBhbmQgYGxhbjkzN3hfbWFpbi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoZXNlIGFyZSBsaWtlbHkgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXJzLlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IGFzY2VydGFpbiB0aGUgaGFyZHdhcmUgY29udGV4dC4gVGhlc2UgTWljcm9jaGlwIEtTWiBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgU1BJLCBJMkMsIE1ESU8sIG9yIFNNSSBjb25uZWN0ZWQgRXRoZXJuZXQgc3dpdGNoIElDcyDigJMgdGhlIEtTWjh4eHgsIEtTWjl4eHgsIGFuZCBMQU45Mzd4IGZhbWlsaWVzLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBkcml2ZXJzIGhhdmUgYSBjbGVhciBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGJ1cyBhdHRhY2htZW50LiBBcmUgdGhleSByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnN0YW50aWF0aW9uLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBvciBwdXJlbHkgc29mdHdhcmUtYmFzZWQgcGF0aD8gSWRlYWxseSwgd2UncmUgbG9va2luZyBmb3IgaW50ZXJmYWNlcyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUga2VybmVsLCBtYWtpbmcgdGhlbSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBhY3R1YWxseSBwcm9iZWQuIEkgbmVlZCB0byBzZWFyY2ggZm9yIGhvdyBga3N6X3N3aXRjaF9jaGlwc2Agb3Igcm91dGluZXMgaW4gYGtzel9jb21tb24uY2AgYXJlIHV0aWxpemVkIHdpdGhpbiB0aGUga2VybmVsJ3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlIHByb2Nlc3Mgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIHRoYXQgc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBleHBsb2l0LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBlYXN5IGl0IHdvdWxkIGJlIHRvIHRyaWdnZXIgdGhlIHJvdXRpbmVzIGluIHRoZXNlIGZpbGVzIHRocm91Z2ggYSBzeXprYWxsZXIgcHJvZ3JhbSwgYW5kIHdoZXRoZXIgaXQncyB3b3J0aCBjcmVhdGluZyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIHRvIGRvIHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI1NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjM1LjY4MTIzOTI0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE5OTczODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3NwaV9kcml2ZXJ8bW9kdWxlX2kyY19kcml2ZXJ8a3N6X3N3aXRjaF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYz0xMzM9c3RhdGljIGludCBrc3o4ODYzX3NtaV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmMtMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYzoxNjk6XFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTc9c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUwLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYzo1MTpcXHRyZXQgPSBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jPTEzMz1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIga3N6OTQ3N19pMmNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTQ1Om1vZHVsZV9pMmNfZHJpdmVyKGtzejk0NzdfaTJjX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jLTE0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM5MTE9c3RhdGljIGludCBrc3o4NDYzX3JlbGVhc2Vfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTE2OmludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYxLX1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMxLVxcdFxcdFxcdFxcdCAgICB2b2lkICpwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMzLXZvaWQga3N6X3N3aXRjaF9yZW1vdmUoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1OlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0zNDk9c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGtzel9zcGlfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3NwaS5jOjM2MTptb2R1bGVfc3BpX2RyaXZlcihrc3pfc3BpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmMtMzYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0MjozNS43ODMyNDI1NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTU4OTkzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1pY3JvY2hpcCBLU1ogRXRoZXJuZXQgU3dpdGNoIERyaXZlcnMgYW5kIFN5emthbGxlciBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTWljcm9jaGlwIERTQSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyczogYGtzejg0NjNgLCBga3N6OGAsIGBrc3o5NDc3YCwgYGxhbjkzN3hgLiBUaGVzZSBndXlzIGF0dGFjaCB2aWEgU1BJLCBJMkMsIFNNSSwgb3IgTURJTy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMgYWx3YXlzOiBDYW4gSSBldmVuICpzZWUqIHRoZXNlIGluIGEgc3RhbmRhcmQgdmlydHVhbCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBwaHlzaWNhbCBzd2l0Y2ggaGFyZHdhcmUgYW5kIGRldmljZSB0cmVlcyBvbiBlbWJlZGRlZCBib2FyZHM/IEkgbmVlZCB0byBrbm93IGlmIEkgY2FuIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgdGhlc2UgZm9yIGZ1enppbmcuXG5cbkxldCBtZSB0aGluay4uLiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZXNlIGFyZSB1c2luZyB2aXJ0dWFsIGJ1c2VzLCBvciBjb3VsZCB0aGV5IHBvdGVudGlhbGx5IGJlIGluc3RhbnRpYXRlZCBpbiBzeXprYWxsZXI/IE9rYXksIHRpbWUgdG8gc3RlcCBiYWNrIGFuZCByZW1lbWJlciB0aGUgdHJpYWdlIHByaW5jaXBsZXM6IFwiUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEUuXCIgSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgVk1zLCBmb3JnZXQgaXQsIG5vIGZ1enppbmcsIG5vIG1hdHRlciBob3cgdGVtcHRpbmcuIFRoYXQgYnJpbmdzIHVwIHRoZSBrZXkgcG9pbnQ6IHdoYXQncyBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZT9cIiBUaGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBvciBTbWFydE5JQ3Mg4oCTIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBldGMuIGFyZSBhbGwgb3V0LiBUaGUgb3Bwb3NpdGUsIG9mIGNvdXJzZSwgaXMgcmVhY2hhYmxlLCBkcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgc3VjaCBhcyBgdmlydGlvYCwgYFVTQiBnYWRnZXRgLCBgbG9vcGJhY2tgLCBgbmV0bGlua2AsIGV0Yy5cblxuTm93LCBiYWNrIHRvIHRoZXNlIEtTWiBkcml2ZXJzLiBMZXQncyBkaWcgaW4gYSBiaXQgZGVlcGVyLiBEbyBhbnkgb2YgdGhlbSBpbnN0YW50aWF0ZSBJMkMgb3IgU1BJIGRldmljZXMsIG9yIGFyZSB0aGV5IHB1cmVseSB0aWVkIHRvIHBoeXNpY2FsIGVtYmVkZGVkIHN3aXRjaCBoYXJkd2FyZSwgbGlrZSBhIHRydWUgRFNBIHN3aXRjaD8gQ2FuIEkgZXZlbiBjcmVhdGUgSTJDIGRldmljZXMgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtWC9uZXdfZGV2aWNlYD8gVGhhdCB3b3VsZCBiZSBhIGh1Z2Ugd2luISBJIG5lZWQgdG8gc2VlIGlmIHN5emthbGxlciBpcyB1c2luZyBgaTJjLWRldmAgb3IgZHVtbXkgSTJDLCBvciBpZiB0aGUgZHJpdmVycyByZXF1aXJlIGRpcmVjdCBoYXJkd2FyZSBjb21tdW5pY2F0aW9uIGR1cmluZyB0aGUgcHJvYmUuIEkgbmVlZCB0byBsb29rIGF0IGBrc3o5NDc3X2kyY19wcm9iZWAgYW5kIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBjb2RlLCB0aGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gdGVsbCBtZSBpZiB0aGlzIGlzIGEgcGF0aCBJIGNhbiB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAxOSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo0MC43NDIyMzg1NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4NjA5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6OTQ3N19pMmNfcHJvYmV8a3N6X3N3aXRjaF9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYz0xMzM9c3RhdGljIGludCBrc3o4ODYzX3NtaV9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejg4NjNfc21pLmMtMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYzoxNjk6XFx0cmV0ID0ga3N6X3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6ODg2M19zbWkuYy0xNzAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTU9S1NaX1JFR01BUF9UQUJMRShrc3o5NDc3LCBub3RfdXNlZCwgMTYsIDAsIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xNi1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM6MTc6c3RhdGljIGludCBrc3o5NDc3X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3N19pMmMuYy0xOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtNTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjUxOlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtNTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmM9MTMzPXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBrc3o5NDc3X2kyY19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTM4LVxcdH0sXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jOjEzOTpcXHQucHJvYmUgPSBrc3o5NDc3X2kyY19wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzdfaTJjLmMtMTQwLVxcdC5yZW1vdmVcXHQ9IGtzejk0NzdfaTJjX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jPTM5MTE9c3RhdGljIGludCBrc3o4NDYzX3JlbGVhc2Vfc3RyYXBzX3NwaShzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzozOTE2OmludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtMzkxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYy00MDYxLX1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uYzo0MDYyOkVYUE9SVF9TWU1CT0woa3N6X3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmMtNDA2My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oPTQyOT1zdHJ1Y3Qga3N6X2RldmljZSAqa3N6X3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMxLVxcdFxcdFxcdFxcdCAgICB2b2lkICpwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaDo0MzI6aW50IGtzel9zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmgtNDMzLXZvaWQga3N6X3N3aXRjaF9yZW1vdmUoc3RydWN0IGtzel9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYz0xMzc9c3RhdGljIGludCBrc3pfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTQtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfc3BpLmM6MTk1OlxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9zcGkuYy0xOTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjQwLjgxOTEwNjM1NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NTUwMDY1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0czpcblxuKipEaXZpbmcgaW50byB0aGUgTWljcm9jaGlwIEtTWjk0NzcgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgS1NaOTQ3NyBzd2l0Y2ggaXMgYnJvdWdodCBvbmxpbmUgaW4gdGhlIERTQSBmcmFtZXdvcmssIHNvIEknbSBmb2N1c2luZyBvbiB0d28ga2V5IGZ1bmN0aW9uczogYGtzejk0NzdfaTJjX3Byb2JlYCBhbmQgYGtzel9zd2l0Y2hfcmVnaXN0ZXJgLiBUaGVzZSBhcmUgYWxtb3N0IGNlcnRhaW5seSB0aGUgbHluY2hwaW5zIG9mIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIERTQSBpbnRlZ3JhdGlvbiBmb3IgdGhpcyBNaWNyb2NoaXAgc3dpdGNoLiBUaGUgZmlyc3QsIGBrc3o5NDc3X2kyY19wcm9iZWAsIGluIGBrc3o5NDc3X2kyYy5jYCwgbGlrZWx5IGhhbmRsZXMgdGhlIEkyQy1zcGVjaWZpYyBhc3BlY3RzIG9mIHByb2JpbmcgZm9yIHRoZSBkZXZpY2U7IEkgbmVlZCB0byBzZWUgaG93IGl0IGlkZW50aWZpZXMgdGhlIGNoaXAsIGNvbmZpZ3VyZXMgdGhlIEkyQyBidXMsIGFuZCBwb3RlbnRpYWxseSBpbml0aWFsaXplcyB0aGUgaGFyZHdhcmUuIEl0J3MgdGhlIHBvaW50IG9mIGZpcnN0IGNvbnRhY3QuIFRoZW4sIGBrc3pfc3dpdGNoX3JlZ2lzdGVyYCBpbiBga3N6X2NvbW1vbi5jYCBpcyB3aGVyZSB0aGluZ3Mgc2hvdWxkIGdldCBpbnRlcmVzdGluZy4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBpbnRlZ3JhdGUgdGhlIEtTWjk0NzcgaW50byB0aGUgRFNBIGxheWVyLiBJdOKAmWxsIHByb2JhYmx5IGludm9sdmUgYWxsb2NhdGluZyBzd2l0Y2ggc3RydWN0dXJlcywgcmVnaXN0ZXJpbmcgaXQgd2l0aCB0aGUgRFNBIGNvcmUsIGFuZCBzZXR0aW5nIHVwIHRoZSByZWxldmFudCBjYWxsYmFja3MgZm9yIE1BQyBsZWFybmluZywgVkxBTiBmaWx0ZXJpbmcsIHBvcnQgY29uZmlndXJhdGlvbiwgYW5kIHRyYWZmaWMgY29udHJvbC4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHdpbGwgY29ubmVjdCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdG8gdGhlIGtlcm5lbCdzIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byB2ZXJpZnkgaG93IGVycm9yIGhhbmRsaW5nIGlzIGhhbmRsZWQgaW4gYm90aC4gVWx0aW1hdGVseSwgSSdsbCBwYXkgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlIHVzYWdlIGFuZCBob3cgdGhlIGRyaXZlciByZXByZXNlbnRzIHRoZSBLU1o5NDc3IGFzIGEgbmV0d29yayBzd2l0Y2ggd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDE0LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NDMuNTc0MTE1MTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3X2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0YXRpYyBpbnQga3N6OTQ3N19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYylcXG4gIDE4OlxcdHtcXG4gIDE5OlxcdFxcdGNvbnN0IHN0cnVjdCBrc3pfY2hpcF9kYXRhICpjaGlwO1xcbiAgMjA6XFx0XFx0c3RydWN0IGRldmljZSAqZGRldiA9IFxcdTAwMjZpMmMtXFx1MDAzZWRldjtcXG4gIDIxOlxcdFxcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjO1xcbiAgMjI6XFx0XFx0c3RydWN0IGtzel9kZXZpY2UgKmRldjtcXG4gIDIzOlxcdFxcdGludCBpLCByZXQ7XFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdGNoaXAgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGRldik7XFxuICAyNjpcXHRcXHRpZiAoIWNoaXApXFxuICAyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0ZGV2ID0ga3N6X3N3aXRjaF9hbGxvYyhcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIGNoaXAsIGkyYyk7XFxuICAzMDpcXHRcXHRpZiAoIWRldilcXG4gIDMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBTYXZlIGNoaXAgaWQgdG8gZG8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiB3aGVuIHByb2JpbmcuICovXFxuICAzNDpcXHRcXHRkZXYtXFx1MDAzZWNoaXBfaWQgPSBjaGlwLVxcdTAwM2VjaGlwX2lkO1xcbiAgMzU6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fS1NaX05VTV9SRUdNQVBTOyBpKyspIHtcXG4gIDM2OlxcdFxcdFxcdHJjID0ga3N6OTQ3N19yZWdtYXBfY29uZmlnW2ldO1xcbiAgMzc6XFx0XFx0XFx0cmMubG9ja19hcmcgPSBcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXg7XFxuICAzODpcXHRcXHRcXHRkZXYtXFx1MDAzZXJlZ21hcFtpXSA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgXFx1MDAyNnJjKTtcXG4gIDM5OlxcdFxcdFxcdGlmIChJU19FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pKSB7XFxuICA0MDpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcXHUwMDI2aTJjLVxcdTAwM2VkZXYsIFBUUl9FUlIoZGV2LVxcdTAwM2VyZWdtYXBbaV0pLFxcbiAgNDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVnbWFwJWlcXFxcblxcXCIsXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGtzejk0NzdfcmVnbWFwX2NvbmZpZ1tpXS52YWxfYml0cyk7XFxuICA0MzpcXHRcXHRcXHR9XFxuICA0NDpcXHRcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdGlmIChpMmMtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhKVxcbiAgNDc6XFx0XFx0XFx0ZGV2LVxcdTAwM2VwZGF0YSA9IGkyYy1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdGRldi1cXHUwMDNlaXJxID0gaTJjLVxcdTAwM2VpcnE7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IGtzel9zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG4gIDUyOlxcdFxcbiAgNTM6XFx0XFx0LyogTWFpbiBEU0EgZHJpdmVyIG1heSBub3QgYmUgc3RhcnRlZCB5ZXQuICovXFxuICA1NDpcXHRcXHRpZiAocmV0KVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0aTJjX3NldF9jbGllbnRkYXRhKGkyYywgZGV2KTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0cmV0dXJuIDA7XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NDMuNTc0MTk4MzEzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1MzM3NDMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1NaIFN3aXRjaCBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgS1NaIHN3aXRjaCBnZXRzIHJlZ2lzdGVyZWQuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBrc3pfc3dpdGNoX3JlZ2lzdGVyKGRldilgIGZ1bmN0aW9uLiBUaW1lIHRvIHB1bGwgdXAgYGRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5jYCBhbmQgZm9jdXMgb24gbGluZXMgMzkxNiB0aHJvdWdoIDQwMDAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBpbnZvbHZlZCBpbiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBjb25uZWN0aW9uIHRvIHRoZSBEU0EgZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIGludGVycnVwdCByZWdpc3RyYXRpb24gKGlmIGFueSksIGFuZCBob3cgdGhlIHN3aXRjaCBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSdyZSBoYW5kbGluZyBhbnkgcG90ZW50aWFsIGRpc2NyZXBhbmNpZXMgYmV0d2VlbiB0aGlzIG1vZGVsIG9mIHRoZSBLU1ogYW5kIG90aGVyIG1vZGVscy4gSSdsbCBiZSBsb29raW5nIGZvciB3ZWxsLXN0cnVjdHVyZWQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgdGhleSdyZSBwb3B1bGF0aW5nIHZhcmlvdXMgZmllbGRzIHJlbGF0ZWQgdG8gdGhlIERTQSBpbnRlcmZhY2UuIEFueSBjbGV2ZXIgdXNlIG9mIGRldmljZSB0cmVlIG9yIHBsYXRmb3JtIGRhdGEgd2lsbCBjYXRjaCBteSBleWUgYXMgd2VsbC4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGlzIGNsZWFuIGFuZCBhZGhlcmVzIHRvIGNvbW1vbiBjb2Rpbmcgc3RhbmRhcmRzIGluIHRoZSBuZXR3b3JraW5nIHNwaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjQ1LjgyNzU3NTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5ODc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTE2LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTE2OlxcdGludCBrc3pfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXFxuMzkxNzpcXHR7XFxuMzkxODpcXHRcXHRjb25zdCBzdHJ1Y3Qga3N6X2NoaXBfZGF0YSAqaW5mbztcXG4zOTE5OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHM7XFxuMzkyMDpcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xcbjM5MjE6XFx0XFx0dW5zaWduZWQgaW50IHBvcnRfbnVtO1xcbjM5MjI6XFx0XFx0aW50IHJldDtcXG4zOTIzOlxcdFxcdGludCBpO1xcbjM5MjQ6XFx0XFxuMzkyNTpcXHRcXHRkZXYtXFx1MDAzZXJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYtXFx1MDAzZWRldiwgXFxcInJlc2V0XFxcIixcXG4zOTI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgR1BJT0RfT1VUX0xPVyk7XFxuMzkyNzpcXHRcXHRpZiAoSVNfRVJSKGRldi1cXHUwMDNlcmVzZXRfZ3BpbykpXFxuMzkyODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihkZXYtXFx1MDAzZXJlc2V0X2dwaW8pO1xcbjM5Mjk6XFx0XFxuMzkzMDpcXHRcXHRpZiAoZGV2LVxcdTAwM2VyZXNldF9ncGlvKSB7XFxuMzkzMTpcXHRcXHRcXHRpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LVxcdTAwM2VkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJtaWNyb2NoaXAsa3N6ODQ2M1xcXCIpKSB7XFxuMzkzMjpcXHRcXHRcXHRcXHRyZXQgPSBrc3o4NDYzX2NvbmZpZ3VyZV9zdHJhcHNfc3BpKGRldik7XFxuMzkzMzpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjM5MzQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTM1OlxcdFxcdFxcdH1cXG4zOTM2OlxcdFxcbjM5Mzc6XFx0XFx0XFx0Z3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRldi1cXHUwMDNlcmVzZXRfZ3BpbywgMSk7XFxuMzkzODpcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDEyMDAwKTtcXG4zOTM5OlxcdFxcdFxcdGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZXYtXFx1MDAzZXJlc2V0X2dwaW8sIDApO1xcbjM5NDA6XFx0XFx0XFx0bXNsZWVwKDEwMCk7XFxuMzk0MTpcXHRcXG4zOTQyOlxcdFxcdFxcdGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcIm1pY3JvY2hpcCxrc3o4NDYzXFxcIikpIHtcXG4zOTQzOlxcdFxcdFxcdFxcdHJldCA9IGtzejg0NjNfcmVsZWFzZV9zdHJhcHNfc3BpKGRldik7XFxuMzk0NDpcXHRcXHRcXHRcXHRpZiAocmV0KVxcbjM5NDU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTQ2OlxcdFxcdFxcdH1cXG4zOTQ3OlxcdFxcdH1cXG4zOTQ4OlxcdFxcbjM5NDk6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfbXV0ZXgpO1xcbjM5NTA6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWdtYXBfbXV0ZXgpO1xcbjM5NTE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VhbHVfbXV0ZXgpO1xcbjM5NTI6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V2bGFuX211dGV4KTtcXG4zOTUzOlxcdFxcbjM5NTQ6XFx0XFx0cmV0ID0ga3N6X3N3aXRjaF9kZXRlY3QoZGV2KTtcXG4zOTU1OlxcdFxcdGlmIChyZXQpXFxuMzk1NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NTc6XFx0XFxuMzk1ODpcXHRcXHRpbmZvID0ga3N6X2xvb2t1cF9pbmZvKGRldi1cXHUwMDNlY2hpcF9pZCk7XFxuMzk1OTpcXHRcXHRpZiAoIWluZm8pXFxuMzk2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4zOTYxOlxcdFxcbjM5NjI6XFx0XFx0LyogVXBkYXRlIHRoZSBjb21wYXRpYmxlIGluZm8gd2l0aCB0aGUgcHJvYmVkIG9uZSAqL1xcbjM5NjM6XFx0XFx0ZGV2LVxcdTAwM2VpbmZvID0gaW5mbztcXG4zOTY0OlxcdFxcbjM5NjU6XFx0XFx0ZGV2X2luZm8oZGV2LVxcdTAwM2VkZXYsIFxcXCJmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcXFxcblxcXCIsXFxuMzk2NjpcXHRcXHRcXHQgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VkZXZfbmFtZSwgZGV2LVxcdTAwM2VjaGlwX3Jldik7XFxuMzk2NzpcXHRcXG4zOTY4OlxcdFxcdHJldCA9IGtzel9jaGVja19kZXZpY2VfaWQoZGV2KTtcXG4zOTY5OlxcdFxcdGlmIChyZXQpXFxuMzk3MDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM5NzE6XFx0XFxuMzk3MjpcXHRcXHRkZXYtXFx1MDAzZWRldl9vcHMgPSBkZXYtXFx1MDAzZWluZm8tXFx1MDAzZW9wcztcXG4zOTczOlxcdFxcbjM5NzQ6XFx0XFx0cmV0ID0gZGV2LVxcdTAwM2VkZXZfb3BzLVxcdTAwM2Vpbml0KGRldik7XFxuMzk3NTpcXHRcXHRpZiAocmV0KVxcbjM5NzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTc3OlxcdFxcbjM5Nzg6XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0cyA9IGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZWRldixcXG4zOTc5OlxcdFxcdFxcdFxcdFxcdCAgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb3J0X2NudCAqIHNpemVvZihzdHJ1Y3Qga3N6X3BvcnQpLFxcbjM5ODA6XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4zOTgxOlxcdFxcdGlmICghZGV2LVxcdTAwM2Vwb3J0cylcXG4zOTgyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5ODM6XFx0XFxuMzk4NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2Vwb3J0X2NudDsgaSsrKSB7XFxuMzk4NTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuc3RhdHM2NF9sb2NrKTtcXG4zOTg2OlxcdFxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcG9ydHNbaV0ubWliLmNudF9tdXRleCk7XFxuMzk4NzpcXHRcXHRcXHRkZXYtXFx1MDAzZXBvcnRzW2ldLm1pYi5jb3VudGVycyA9XFxuMzk4ODpcXHRcXHRcXHRcXHRkZXZtX2t6YWxsb2MoZGV2LVxcdTAwM2VkZXYsXFxuMzk4OTpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZih1NjQpICogKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlbWliX2NudCArIDEpLFxcbjM5OTA6XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4zOTkxOlxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2Vwb3J0c1tpXS5taWIuY291bnRlcnMpXFxuMzk5MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zOTkzOlxcdFxcbjM5OTQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0c1tpXS5rc3pfZGV2ID0gZGV2O1xcbjM5OTU6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3J0c1tpXS5udW0gPSBpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo0NS44Mjc5NzcwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTAzNDQwMzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1NaIFN3aXRjaCBEZXRlY3Rpb24gYW5kIERTQSBEcml2ZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGtzel9zd2l0Y2hfZGV0ZWN0KGRldilgIGFuZCBga3N6X2NoZWNrX2RldmljZV9pZChkZXYpYCBmdW5jdGlvbnMuIEknbSBmb2N1c2luZyBvbiBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBwaHlzaWNhbCBzd2l0Y2ggY2hpcC4gU3BlY2lmaWNhbGx5LCBga3N6X3N3aXRjaF9kZXRlY3QoZGV2KWAgdXNlcyBJMkMvU1BJIHRvIHJlYWQgcmVnaXN0ZXJzIGZyb20gdGhlIGhhcmR3YXJlLiBJZiB0aGF0IGhhcmR3YXJlICppc24ndCogcHJlc2VudCDigJMgYXMgeW91J2QgZXhwZWN0IGluIHN0YW5kYXJkIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIFZNcyB3aXRob3V0IGEgS1NaODQ2MywgS1NaOTQ3Nywgb3Igc2ltaWxhciBjaGlwIOKAkyB0aGVzZSByZWdpc3RlciByZWFkcyB3aWxsIGxpa2VseSBmYWlsLCB5aWVsZGluZyBpbnZhbGlkIElEcyBhbmQgYSBmYWlsZWQgcHJvYmUuIFRoYXQncyBhIGtleSBwb2ludC5cblxuSSdtIGFsc28gcmVtaW5kaW5nIG15c2VsZiB0aGF0IHRoZXNlIEtTWiBzd2l0Y2hlcyBhcmUgRFNBIEV0aGVybmV0IHN3aXRjaGVzLCBjb21tb25seSB1c2VkIGluIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBNaWNyb2NoaXAgQVNJQ3MgbGlrZSB0aGUgS1NaODQ2MywgS1NaODU2MywgS1NaODc5NSwgS1NaOTQ3NywgS1NaOTg5NiwgYW5kIExBTjkzN3guXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIFNlY3Rpb24gMiBvZiB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgYml0IGFib3V0IFwic3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIgaXMgY3JpdGljYWwgaGVyZTogdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IG5lZWQgYWN0dWFsIEFTSUMvUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG5HaXZlbiB0aGF0LCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSB2aXJ0dWFsIERTQSBkcml2ZXJzIG9yIGlmIGFueSBEU0Egc3dpdGNoZXMgY2FuIGV2ZW4gYmUgZW11bGF0ZWQuIEl0IHNlZW1zIHRoZSBvbmx5IERTQSBkcml2ZXIgd2l0aGluIHN5emthbGxlcidzIHJlYWNoIG9yIHRlc3RhYmxlIHdpdGhvdXQgaGFyZHdhcmUgaXMgdGhlIGBkc2FfbG9vcGAgZHJpdmVyLiBJdCdzIGEgbW9jayBEU0Egc3dpdGNoIGRyaXZlciB0aGF0IHVzZXMgYSBmaXhlZC1waHkuXG5cbkxldCdzIGxvb2sgYXQgdGhlIGBtaWNyb2NoaXBgIGRpcmVjdG9yeSAoYGtzel9jb21tb24uY2AsIGBrc3pfcHRwLmNgLCBga3N6OC5jYCwgYGtzejk0NzcuY2AsIGBsYW45Mzd4X21haW4uY2ApLiBJdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgZGVkaWNhdGVkIHRvIHRoZSBwaHlzaWNhbCBNaWNyb2NoaXAgc3dpdGNoIEFTSUNzIChLU1o4NDYzLCBLU1o5NDc3LCBMQU45MzcwLCBldGMuKSBvbiBTUEkvSTJDL1NNSSBidXNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY2FsbGVycyBvciB1c2FnZSBwYXR0ZXJucyB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJJ20gZ29pbmcgdG8gZ3JlcCB0aGUgZW50aXJlIGNvZGViYXNlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gYGtzejg0NjNfcHRwX3NldF9jYXBzYCwgYGtzel9wdHBfc2V0X2NhcHNgLCBga3N6X3B0cF9jbG9ja19yZWdpc3RlcmAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBrc3pfc3dpdGNoX2NoaXBzYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW55IGhvcGUgZm9yIHRlc3RpbmcgdGhlc2UgZHJpdmVycyBpbiBhIHZpcnR1YWwgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo1MC4zMzE0MjEyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODk1MDI2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3N6LipwdHBfc2V0X2NhcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjM4NT1zdGF0aWMgaW50IGtzejg0NjNfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjQ4MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyNDgxOlxcdFxcdGtzejg0NjNfcHRwX3NldF9jYXBzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yNDgyLVxcdFxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MjY0Nj1zdGF0aWMgaW50IGtzejhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc3OC1cXHRpZiAoZGV2LVxcdTAwM2VpbmZvLVxcdTAwM2VwdHBfY2FwYWJsZSkge1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI3Nzk6XFx0XFx0a3N6X3B0cF9zZXRfY2Fwcyhkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjc4MC1cXHRcXHRyZXQgPSBrc3pfcHRwX2Nsb2NrX3JlZ2lzdGVyKGRzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTE2NzA9c3RhdGljIGludCBrc3o5NDc3X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODMtXFx0aWYgKGRldi1cXHUwMDNlaW5mby1cXHUwMDNlcHRwX2NhcGFibGUpIHtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoxNzg0OlxcdFxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE3ODUtXFx0XFx0cmV0ID0ga3N6X3B0cF9jbG9ja19yZWdpc3Rlcihkcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYz0xMzE5PXN0YXRpYyBpbnQga3N6X3B0cF9zdGFydF9jbG9jayhzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTMzNC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzM1OnZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5jLTEzMzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1NS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuYzoxMzU2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmMtMTM1Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD0yMj1zdHJ1Y3Qga3N6X3B0cF9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTM1LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM2OnZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjM3OnZvaWQga3N6ODQ2M19wdHBfc2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0zOC1pbnQga3N6X3B0cF9jbG9ja19yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg9NjU9c3RydWN0IGtzel9wdHBfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC02OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaDo3MDpzdGF0aWMgaW5saW5lIHZvaWQga3N6X3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBrc3o4NDYzX3B0cF9zZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpIHsgfVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oLTcyLXN0YXRpYyBpbmxpbmUgaW50IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz03Njg9c3RhdGljIGludCBsYW45Mzd4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtODY5LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6ODcwOlxcdGtzel9wdHBfc2V0X2NhcHMoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtODcxLVxcdHJldCA9IGtzel9wdHBfY2xvY2tfcmVnaXN0ZXIoZHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNzo0Mjo1My4wMjA5MzA0MTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyNzE5MTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgZHJpdmVyJ3MgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaXRzIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyBpcyBLY29uZmlnLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgaW1wbGllZCBmb3IgdGhpcyBkcml2ZXIgdG8gY29tcGlsZSBhbmQgZnVuY3Rpb24gY29ycmVjdGx5LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsbHkgc3VidGxlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGJlaGF2aW9yIG9yIGV2ZW4gcHJldmVudCBpdCBmcm9tIGJ1aWxkaW5nIGluIGNlcnRhaW4gY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgcG90ZW50aWFsIGBkZXBlbmRzIG9uYCBjbGF1c2VzIHRoYXQgY291bGQgaW5mbHVlbmNlIGl0cyBhdmFpbGFiaWxpdHkuIFRoaXMgc2F2ZXMgYSBsb3Qgb2YgdGltZSBkb3duIHRoZSByb2FkIOKAkyBubyBwb2ludCBpbiBjaGFzaW5nIGJ1Z3MgdGhhdCBhcmUganVzdCB0aGUgcmVzdWx0IG9mIGEgbWlzc2luZyBLY29uZmlnIG9wdGlvbi4gTGV0J3Mgc2VlIHdoYXQgS2NvbmZpZyBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjk5MywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU0Ljg0ODEyNjI1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0ODg3NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9EU0FfTUlDUk9DSElQfE5FVF9EU0FfS1NaXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjI6bWVudWNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3JvY2hpcCBLU1o4WFhYL0tTWjlYWFgvTEFOOTM3WCBzZXJpZXMgc3dpdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE3OmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3X0kyQ1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiS1NaIHNlcmllcyBJMkMgY29ubmVjdGVkIHN3aXRjaCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjE5OlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBJMkNcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjAtXFx0c2VsZWN0IFJFR01BUF9JMkNcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6MjQ6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9TUElcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIktTWiBzZXJpZXMgU1BJIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTI3LVxcdHNlbGVjdCBSRUdNQVBfU1BJXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHRoZSBQVFAgY2xvY2sgb24gdGhlIEtTWjk1NjMvTEFOOTM3eCBFdGhlcm5ldCBTd2l0Y2hcXFwiXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gTkVUX0RTQV9NSUNST0NISVBfS1NaX0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIE5FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT049bSB8fCBQVFBfMTU4OF9DTE9DSz15XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDE6Y29uZmlnIE5FVF9EU0FfTUlDUk9DSElQX0tTWjg4NjNfU01JXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQyLVxcdHRyaXN0YXRlIFxcXCJLU1ogc2VyaWVzIFNNSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWc6NDM6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01JQ1JPQ0hJUF9LU1pfQ09NTU9OXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnLTQ0LVxcdHNlbGVjdCBNRElPX0JJVEJBTkdcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9DT01NT04pXFx0Kz0ga3N6X3N3aXRjaC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS0zLWtzel9zd2l0Y2gtb2JqcyA6PSBrc3pfY29tbW9uLm8ga3N6X2RjYi5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL01ha2VmaWxlPTY9a3N6X3N3aXRjaC1vYmpzICs9IGxhbjkzN3hfbWFpbi5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZS03LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6ODppZmRlZiBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaX1BUUFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtOS1rc3pfc3dpdGNoLW9ianMgKz0ga3N6X3B0cC5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGUtMTEtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaOTQ3N19JMkMpXFx0Kz0ga3N6OTQ3N19pMmMub1xcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9TUEkpXFx0XFx0Kz0ga3N6X3NwaS5vXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODg2M19TTUkpXFx0Kz0ga3N6ODg2M19zbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg9MTcxPXN0cnVjdCBrc3pfcG9ydCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9jb21tb24uaC0xOTQtXFx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfY29tbW9uLmg6MTk1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1pfUFRQKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X2NvbW1vbi5oLTE5Ni1cXHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyB0c3RhbXBfY29uZmlnO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTAtXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFApXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTItXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaD05MT1zdGF0aWMgaW5saW5lIHZvaWQga3N6ODQ2M19wdHBfaXJxX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKSB7fVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3pfcHRwLmgtMTA2LVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6X3B0cC5oOjEwNzojZW5kaWZcXHQvKiBFbmQgb2YgQ09ORklHX05FVF9EU0FfTUlDUk9DSElQX0tTWl9QVFAgKi9cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzel9wdHAuaC0xMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU0Ljk4MzAxOTkyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDAxMTk2MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgcHJvdmlkZWQgcGF0Y2ggdGFyZ2V0cyBNaWNyb2NoaXAgS1NaL0xBTiBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBQVFAgKFByZWNpc2lvbiBUaW1lIFByb3RvY29sKSBzdXBwb3J0IGZvciB0aGUgS1NaODQ2MyBzd2l0Y2ggY2hpcCwgYW5kIHJlZmFjdG9ycyBzb21lIGhlbHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3Rvcnkgc3RydWN0dXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludm9sdmVzIHNldHRpbmcgdXAgY2FwYWJpbGl0aWVzLCBlbmFibGluZyBwZXItb3V0cHV0IGNvbmZpZ3VyYXRpb25zLCBhbmQgbWFuYWdpbmcgdGltZSBhZGp1c3RtZW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGNoaXAuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGludGVncmF0ZWQgdGhyb3VnaCB0aGUgRFNBIHN3aXRjaCBzZXR1cCBjYWxsYmFja3MuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiwgYXMgYWx3YXlzIGZvciBmdXp6aW5nLCBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBDYW4gdGhpcyBiZSBwcm9iZWQgYW5kIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBhbnN3ZXIgaXMgYSBkZWZpbml0aXZlIG5vLiBUaGVzZSBhcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBJQ3MsIGNvbW11bmljYXRpbmcgdmlhIFNQSSwgSTJDLCBTTUksIG9yIE1ESU8gYnVzc2VzLiBXZSAqbmVlZCogdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGV2ZW4gcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBEU0Egc3dpdGNoLiBJdCdzIGp1c3Qgc3RydWN0dXJhbGx5IGltcG9zc2libGUgdG8gcmVhY2ggdGhpcyBjb2RlIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cblxuVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjcml0ZXJpYSBmcm9tIFNlY3Rpb24gMiBkaXJlY3RseSBkaXNxdWFsaWZpZXMgaXQgZnJvbSBmdXp6aW5nLiBUaGUgcGF0Y2ggdG91Y2hlcyBvbiBkcml2ZXIgY29kZSB0aGF0LCBpbiB0aGUgY29udGV4dCBvZiBvdXIgZXhpc3RpbmcgY2FwYWJpbGl0aWVzLCBpcyBpbmFjY2Vzc2libGUuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgcHJlY2lzZWx5OlxuXG4xLiAgSSBoYXZlIGNvbXBsZXRlZCB0aGUgYW5hbHlzaXMuXG4yLiAgSSBhbSBjZXJ0YWluIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuMy4gIEkgZG9uJ3QgaGF2ZSBhIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2Agb3IgYEVuYWJsZUNvbmZpZ3NgLlxuNC4gIEkgaGF2ZSBwcm92aWRlZCB0aGUgcmVhc29uaW5nLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyB0aGUgcmVzdWx0cyBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3MjIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA3OjQyOjU5LjM4NDIxNzg5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgUFRQIHN1cHBvcnQgYW5kIHBlci1vdXQgY29uZmlndXJhdGlvbiBmb3IgTWljcm9jaGlwIEtTWjg0NjMgYW5kIHJlbGF0ZWQgc3dpdGNoZXMgd2l0aGluIHRoZSBNaWNyb2NoaXAgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwLykuIFRoZXNlIGRyaXZlcnMgcmVxdWlyZSBwaHlzaWNhbCBNaWNyb2NoaXAgRXRoZXJuZXQgc3dpdGNoIEFTSUNzIGNvbm5lY3RlZCBvdmVyIFNQSSwgSTJDLCBvciBTTUkgYnVzZXMgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFBUUCBzdXBwb3J0IGFuZCBwZXItb3V0IGNvbmZpZ3VyYXRpb24gZm9yIE1pY3JvY2hpcCBLU1o4NDYzIGFuZCByZWxhdGVkIHN3aXRjaGVzIHdpdGhpbiB0aGUgTWljcm9jaGlwIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC8pLiBUaGVzZSBkcml2ZXJzIHJlcXVpcmUgcGh5c2ljYWwgTWljcm9jaGlwIEV0aGVybmV0IHN3aXRjaCBBU0lDcyBjb25uZWN0ZWQgb3ZlciBTUEksIEkyQywgb3IgU01JIGJ1c2VzIHdoaWNoIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDc6NDI6NTkuMzg0MjQwNzI3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv6gfj[1] Phase: Running StartedAt: 2026-09-08 07:43:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv6gfj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 07:43:10 +0000 UTC FinishedAt: 2026-09-08 07:43:15 +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,}