Name: series-workflow2272d Phase: Failed StartedAt: 2026-08-07 11:20:52 +0000 UTC FinishedAt: 2026-08-07 11:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2272d[0] Phase: Succeeded StartedAt: 2026-08-07 11:20:52 +0000 UTC FinishedAt: 2026-08-07 11:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2272d[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 11:20:53 +0000 UTC FinishedAt: 2026-08-07 11:23:28 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8qKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFpcm9oYSBoYXJkd2FyZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzYyNDJhOTg3YWU0ZmI4ZWI2ZjYyN2JiNWYyYzRhODEzNzU2NmE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMToyMjozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkID0gcWRtYV9pZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4mIzQzO1x0XHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcbiYjNDM7XHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksXG4mIzQzO1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4mIzQzO1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4mIzQzO1x0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbiYjNDM7XHRcdHUzMiBzaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcS1cdTAwM2VuZGVzYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiYjNDM7XHRcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XG4mIzQzO1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZSk7XG4mIzQzO1x0XHRscm9fcXVldWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRlLVx1MDAzZWRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDE4ICYjNDM7NzQyLDE4OCBAQCBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBwb3J0LVx1MDAzZWRldnNbZF0gPyBwb3J0LVx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgYWdnX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4mIzQzO1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4mIzQzO1x0dTMyIG1zZzMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2czKSk7XG4mIzQzO1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBkYXRhX2xlbjtcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4mIzQzO1x0dTE2IHRjcF93aW4sIGwyX2xlbjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRoO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdGJvb2wgaXB2NCwgaXB2NjtcbiYjNDM7XG4mIzQzO1x0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XG4mIzQzO1x0aXB2NiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDZfTUFTSywgbXNnMSk7XG4mIzQzO1x0aWYgKCFpcHY0IFx1MDAyNlx1MDAyNiAhaXB2NilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRsMl9sZW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0ssIG1zZzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoaXB2NCkge1xuJiM0MztcdFx0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgbDJfbGVuICYjNDM7IHNpemVvZigqaXBoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyBsMl9sZW4pO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2VpaGwgXHUwMDNjIDUpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdHRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyB0aF9vZmYpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdGlwaC1cdTAwM2V0b3RfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gbDJfbGVuKTtcbiYjNDM7XHRcdGlwaC1cdTAwM2VjaGVjayA9IDA7XG4mIzQzO1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XG4mIzQzO1x0XHR0aF9vZmYgPSBsMl9sZW4gJiM0Mzsgc2l6ZW9mKCppcDZoKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyBsMl9sZW4pO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciAhPSBORVhUSERSX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXA2aC1cdTAwM2VwYXlsb2FkX2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIHRoX29mZik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuIFx1MDAzYyB0aF9vZmYgJiM0Mzsgc2l6ZW9mKCp0aCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyB0aF9vZmYpO1xuJiM0MztcdGlmICh0aC1cdTAwM2Vkb2ZmIFx1MDAzYyA1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7ICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzYz0gZGF0YV9vZmYpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dGNwX3dpbiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19UQ1BfV0lOX01BU0ssIG1zZzMpO1xuJiM0MztcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlZGF0YSkpO1xuJiM0MztcdHRoLVx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XG4mIzQzO1x0dGgtXHUwMDNld2luZG93ID0gY3B1X3RvX2JlMTYodGNwX3dpbik7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXG4mIzQzO1x0aWYgKHRoLVx1MDAzZWRvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkge1xuJiM0MztcdFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRvcHQgPT0gKChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcdTAwM2NcdTAwM2MgMTYpIHxcbiYjNDM7XHRcdFx0ICAgICAoVENQT1BUX1RJTUVTVEFNUCBcdTAwM2NcdTAwM2MgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCkpIHtcbiYjNDM7XHRcdFx0dTggKnB0ciA9ICh1OCAqKXRoICYjNDM7IHNpemVvZigqdGgpICYjNDM7IDIgKiBzaXplb2YoX19iZTMyKTtcbiYjNDM7XHRcdFx0X19sZTMyIHRjcF90c19yZXBseSA9IFJFQURfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXG4mIzQzO1x0XHRcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXG4mIzQzO1x0XHRcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxuJiM0MztcdFx0XHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxuJiM0MztcdFx0XHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHRjcF90c19yZXBseSlcbiYjNDM7XHRcdFx0XHRwdXRfdW5hbGlnbmVkX2JlMzIobGUzMl90b19jcHUodGNwX3RzX3JlcGx5KSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpcHY0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoZS1cdTAwM2VidWYgJiM0MzsgbDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtXHUwMDNlc2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtXHUwMDNlYnVmICYjNDM7IGwyX2xlbik7XG4mIzQzO1xuJiM0MztcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgXHUwMDI2aXA2aC1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkciwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTcGxpdCBuZXR3b3JrIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gcmVseSBvbiBHUk8uXG4mIzQzO1x0ICogV2UgbmVlZCB0byBkbyBpdCBpbiB0aGUgZHJpdmVyIHNpbmNlIHRoZSBOSUMgZG9lc1xuJiM0MztcdCAqIG5vdCBzdXBwb3J0IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnEtXHUwMDNlbmFwaSwgZGF0YV9vZmYpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1dChza2IsIGRhdGFfb2ZmKTtcbiYjNDM7XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGUtXHUwMDNlYnVmLCBkYXRhX29mZik7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShlLVx1MDAzZWJ1Zik7XG4mIzQzO1x0ZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjtcbiYjNDM7XHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4mIzQzO1x0c2tiX2FkZF9yeF9mcmFnKHNrYiwgc2hpbmZvLVx1MDAzZW5yX2ZyYWdzLCBwYWdlLFxuJiM0MztcdFx0XHRlLVx1MDAzZWJ1ZiAmIzQzOyBkYXRhX29mZiAtIHBhZ2VfYWRkcmVzcyhwYWdlKSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuJiM0MztcbiYjNDM7XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgPSBpcHY0ID8gU0tCX0dTT19UQ1BWNCA6IFNLQl9HU09fVENQVjY7XG4mIzQzO1x0LyogSFcgZG9lcyBub3QgcmVwb3J0IHRoZSBwZXItc2VnbWVudCBNU1MsIHNvIGFwcHJveGltYXRlIGl0IGFzXG4mIzQzO1x0ICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzXG4mIzQzO1x0ICogd2l0aCBhIHNob3J0ZXIgdGFpbCB0aGlzIHN0aWxsIHJlLXNlZ21lbnRzIGludG8gZXhhY3RseVxuJiM0MztcdCAqIGFnZ19jb3VudCBzZWdtZW50cywga2VlcGluZyBnc29fc2l6ZS9nc29fc2VncyBhbmQgdGhlIHBhY2tldFxuJiM0MztcdCAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBhZ2dfY291bnQpO1xuJiM0MztcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0dTMyIGxlbiwgdTMyIGFnZ19jb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBxaWQgPSBxIC0gXHUwMDI2cS1cdTAwM2VxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0aWYgKGFnZ19jb3VudCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7IC8qIExSTyAqL1xuJiM0MztcdFx0c2tiID0gYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihxLCBkZXNjLCBlLCBsZW4sIGFnZ19jb3VudCk7XG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLCBxLVx1MDAzZWJ1Zl9zaXplKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRza2JfcmVzZXJ2ZShza2IsIEFJUk9IQV9SWF9IRUFEUk9PTSk7XG4mIzQzO1x0XHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuJiM0MztcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbiYjNDM7XHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxaWQpO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNrYjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiB7XG4gXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuLVx0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgZG9uZSA9IDA7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4mIzQzO1x0XHR1MzIgaGFzaCwgcmVhc29uLCBtc2cxLCBtc2cyLCBkZXNjX2N0cmwsIGFnZ19jb3VudDtcbiBcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFx1MDAyNnEtXHUwMDNlZW50cnlbcS1cdTAwM2V0YWlsXTtcbiBcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MgPSBcdTAwMjZxLVx1MDAzZWRlc2NbcS1cdTAwM2V0YWlsXTtcbi1cdFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsO1xuIFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcbiBcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdFx0aW50IGRhdGFfbGVuLCBsZW47XG5AQCAtNjkyLDI0ICYjNDM7OTQ3LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAoIWxlbiB8fCBkYXRhX2xlbiBcdTAwM2MgbGVuKVxuIFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuIFxuJiM0MztcdFx0bXNnMiA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzIpKTtcbiYjNDM7XHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4mIzQzO1x0XHRpZiAoYWdnX2NvdW50IFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiYjNDM7XG4gXHRcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoZGV2KSlcbiBcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiBcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuIFx0XHRpZiAoIXEtXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xuLVx0XHRcdHEtXHUwMDNlc2tiID0gbmFwaV9idWlsZF9za2IoZS1cdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXG4tXHRcdFx0XHRcdFx0cS1cdTAwM2VidWZfc2l6ZSk7XG4mIzQzO1x0XHRcdHEtXHUwMDNlc2tiID0gYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHEsIGRlc2MsIGUsIG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGxlbiwgYWdnX2NvdW50KTtcbiBcdFx0XHRpZiAoIXEtXHUwMDNlc2tiKVxuIFx0XHRcdFx0Z290byBmcmVlX2ZyYWc7XG4tXG4tXHRcdFx0c2tiX3Jlc2VydmUocS1cdTAwM2Vza2IsIEFJUk9IQV9SWF9IRUFEUk9PTSk7XG4tXHRcdFx0X19za2JfcHV0KHEtXHUwMDNlc2tiLCBsZW4pO1xuLVx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtXHUwMDNlc2tiKTtcbi1cdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbi1cdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbi1cdFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHEtXHUwMDNlc2tiLCBxaWQpO1xuIFx0XHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cbiBcdFx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXHUwMDNlbnJfZnJhZ3M7XG5AQCAtODAwLDEyICYjNDM7MTA1MiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4gXHRcdC5wb29sX3NpemUgPSAyNTYsXG4gXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuIFx0XHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcbi1cdFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHRcdC5kZXYgPSBxZG1hLVx1MDAzZWV0aC1cdTAwM2VkZXYsXG4gXHRcdC5uYXBpID0gXHUwMDI2cS1cdTAwM2VuYXBpLFxuQEAgLTgxMyw5ICYjNDM7MTA2MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiBcdGludCBxaWQgPSBxIC0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4WzBdLCB0aHI7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4mIzQzO1x0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XG4gXG4gXHRxLVx1MDAzZWVudHJ5ID0gZGV2bV9remFsbG9jKGV0aC1cdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVx1MDAzZWVudHJ5KSxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuQEAgLTgyNyw2ICYjNDM7MTA3OCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0aWYgKCFxLVx1MDAzZWRlc2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbiYjNDM7XHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcHBfcGFyYW1zLm9yZGVyO1xuJiM0MztcbiBcdHEtXHUwMDNlcGFnZV9wb29sID0gcGFnZV9wb29sX2NyZWF0ZShcdTAwMjZwcF9wYXJhbXMpO1xuIFx0aWYgKElTX0VSUihxLVx1MDAzZXBhZ2VfcG9vbCkpIHtcbiBcdFx0aW50IGVyciA9IFBUUl9FUlIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuQEAgLTgzNSw2ICYjNDM7MTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdHEtXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xuIFx0cS1cdTAwM2VuZGVzYyA9IG5kZXNjO1xuIFx0bmV0aWZfbmFwaV9hZGQoZXRoLVx1MDAzZW5hcGlfZGV2LCBcdTAwMjZxLVx1MDAzZW5hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7XG4gXG5AQCAtODQ4LDcgJiM0MzsxMTAzLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XG4gXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXG4gXHRcdFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cdTAwM2VoZWFkKSk7XG4tXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XG4mIzQzO1x0aWYgKGxyb19xKVxuJiM0MztcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXG4mIzQzO1x0XHRcdFx0ICBSWF9SSU5HX1NHX0VOX01BU0spO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbiYjNDM7XHRcdFx0XHRSWF9SSU5HX1NHX0VOX01BU0spO1xuIFxuIFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcbiBcbkBAIC04NzAsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlZGF0YSwgMCk7XG5AQCAtMTg5Niw2ICYjNDM7MjE1NywzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUocG9ydC1cdTAwM2VkZXZzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXHUwMDNlZGV2c1tqXTtcbiYjNDM7XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghaXRlcl9kZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcbiYjNDM7XHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0xOTEzLDE0ICYjNDM7MjIwMiwyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbiBcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IHFkbWFfaWQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogSFcgR1JPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuXG4mIzQzO1x0ICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb25cbiYjNDM7XHQgKiB0aGUgc2FtZSBRRE1BIGlmIEhXIEdSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdFxuJiM0MztcdCAqIG9yIGlmIHRoaXMgZGV2aWNlIGhhcyBIVyBHUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZxZG1hLVx1MDAzZWV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVx1MDAzZWV0aCwgcWRtYV9pZCkgfHxcbiYjNDM7XHRcdFx0XHQobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVykpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwmIzM0O3JlcXVpcmVkIHRvIGRpc2FibGUgSFcgR1JPIG9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDYgJiM0MzsyMjQwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgJiM0MzsyMjYwLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTA0LDYgJiM0MzsyNDE0LDM0IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGV2X2NoZWNrX2h3X2dybyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcJiMzNDtIVyBHUk8gaXMgZW5hYmxlZCBvbiBRRE1BJWRcXG5cJiMzNDssIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshcWRtYV9pZF07XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl93YXJuKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0hXIEdSTyBpcyBlbmFibGVkIG9uIGRlc3RpbmF0aW9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0yMTIwLDYgJiM0MzsyNDU4LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHFkbWEtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCAmIzQzOzI0NzUsMTIgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiBcdH1cbiBcbi1cdGlmIChjdXJfcWRtYSlcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdGN1cl9xZG1hLVx1MDAzZXVzZXJzLS07XG4gXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMjg4LDYgJiM0MzsyNjMxLDM2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiYjNDM7XG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0aWYgKHFkbWEtXHUwMDNldXNlcnMgXHUwMDNlIDEpXG4mIzQzO1x0XHRmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0dST19IVztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZlYXR1cmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRuZXRkZXZfZmVhdHVyZXNfdCBkaWZmID0gbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIF4gZmVhdHVyZXM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShkaWZmIFx1MDAyNiBORVRJRl9GX0dST19IVykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICYjNDM7MzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4gXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbkBAIC0zMjEwLDYgJiM0MzszNTgzLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi9cbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gXG4gXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuQEAgLTMyMTgsNiAmIzQzOzM1OTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4gXHRcdFx0XHRcdCAgIFwmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG5AQCAtMzM0Myw2ICYjNDM7MzcyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBhaXJvaGFfZGV2X3N0b3AsXG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXG4gXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcbiYjNDM7XHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyxcbiYjNDM7XHQubmRvX3NldF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGFpcm9oYV9kZXZfeG1pdCxcbiBcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsXG5AQCAtMzQzMCwxMSAmIzQzOzM4MTAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZhaXJvaGFfZXRodG9vbF9vcHM7XG4gXHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEFJUk9IQV9NQVhfTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuLVx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfFxuLVx0XHRcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0hXX1RDO1xuLVx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbi1cdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuJiM0MztcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfR1JPX0hXO1xuJiM0MztcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIGV0aC1cdTAwM2VkZXYpO1xuIFxuIFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGZhOWE4ZWRjZTIyZmYuLjliNTVhYmM2MzA0ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNDUsNiAmIzQzOzQ1LDE4IEBAXG4gXHQgKF9uKSA9PSAxNSA/IDEyOCA6XHRcdFxcXG4gXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAxNilcbiBcbiYjNDM7I2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVJcdFx0Z2V0X29yZGVyKFNaXzE2SylcbiYjNDM7I2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXHQ4XG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1x0XHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UXHQ2NFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVx0MTAwXG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FXHQyMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1x0XHRcdFxcXG4mIzQzO1x0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcdFxcXG4mIzQzO1x0IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcdFxcXG4mIzQzO1x0IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSFdfVEMpXG4mIzQzO1xuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1x0XHRcdDEyOFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1x0XHQ2NFxuIFxuQEAgLTUzOCw3ICYjNDM7NTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8ge1xuIFxuIC8qIFJYIHF1ZXVlIHRvIElSUSBtYXBwaW5nOiBCSVQocSkgaW4gSVJRKG4pICovXG4gI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0tcdFx0XHQweDgzOWZcbi0jZGVmaW5lIFJYX0lSUTFfQkFOS19QSU5fTUFTS1x0XHRcdDB4N2ZlMDAwMDBcbiYjNDM7I2RlZmluZSBSWF9JUlExX0JBTktfUElOX01BU0tcdFx0XHQweGZmZTAwMDAwXG4gI2RlZmluZSBSWF9JUlEyX0JBTktfUElOX01BU0tcdFx0XHQweDIwXG4gI2RlZmluZSBSWF9JUlEzX0JBTktfUElOX01BU0tcdFx0XHQweDQwXG4gI2RlZmluZSBSWF9JUlFfQkFOS19QSU5fTUFTSyhfbilcdFx0XFxcbkBAIC01NjAsNiAmIzQzOzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuJiM0MztcdGludCB1c2VycztcbiYjNDM7XG4gXHRzdHJ1Y3QgYWlyb2hhX2lycV9iYW5rIGlycV9iYW5rc1tBSVJPSEFfTUFYX05VTV9JUlFfQkFOS1NdO1xuIFxuIFx0c3RydWN0IGFpcm9oYV90eF9pcnFfcXVldWUgcV90eF9pcnFbQUlST0hBX05VTV9UWF9JUlFdO1xuQEAgLTcxNCw2ICYjNDM7NzI4LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1xuJiM0MztcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbiYjNDM7XHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFx1MDAzZVxuJiM0MztcdFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXHUwMDI2IEJJVChxaWQpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBAXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVx0XFxcbiBcdEdFTk1BU0soNCAmIzQzOyAoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMyksXHQoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMykpXG4gXG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pIFx1MDAyNiAweDQpKVxuJiM0MzsjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICYjNDM7ICgoKF9uKSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDgwKVxuJiM0MzsjZGVmaW5lIExST19SWFFfRU5fTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pXHRcdChDRE1fQkFTRShfbikgJiM0MzsgMHg4NClcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0tcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODgpXG4mIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MztcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcdFx0R0RNX0JBU0UoX24pXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcdFx0QklUKDIzKVxuQEAgLTg4Nyw5ICYjNDM7OTAxLDE1IEBAXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXHRHRU5NQVNLKDI1LCAyMSlcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1x0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19QUEVfRU5UUllfTUFTS1x0R0VOTUFTSygxNSwgMClcbiYjNDM7LyogUlggTVNHMiAqL1xuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1x0R0VOTUFTSyg2LCAwKVxuJiM0MzsvKiBSWCBNU0czICovXG4mIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLXHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19UQ1BfV0lOX01BU0tcdEdFTk1BU0soMTUsIDApXG4gXG4gc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2Mge1xuLVx0X19sZTMyIHJzdjtcbiYjNDM7XHRfX2xlMzIgdGNwX3RzX3JlcGx5O1xuIFx0X19sZTMyIGN0cmw7XG4gXHRfX2xlMzIgYWRkcjtcbiBcdF9fbGUzMiBkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNjI0MmE5ODdhZTRmYjhlYjZmNjI3YmI1ZjJjNGE4MTM3NTY2YTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjIyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCkBAIC0xMCw4ICYjNDM7MTAsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91NjRfc3RhdHNfc3luYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9jaGVja3N1bS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3BwcF9kZWZzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7YWlyb2hhX3JlZ3MuaCYjMzQ7CkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAkJCQkgQ0RNX0NSU05fUVNFTF9RMSkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkLAomIzQzOwkJCQkgICAgIGludCBscm9fcXVldWVfaW5kZXgsIGludCBxaWQsCiYjNDM7CQkJCSAgICAgaW50IGJ1Zl9zaXplKQomIzQzO3sKJiM0MzsJaW50IGlkID0gcWRtYV9pZCAmIzQzOyAxOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLAomIzQzOwkJICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHwKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksCiYjNDM7CQkgICAgICBDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdFX1RJTUVfTUFTSywKJiM0MzsJCQkJIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTsKJiM0MzsJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSwKJiM0MzsJCSAgICAgIExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLAomIzQzOwkJICAgICAgX19maWVsZF9wcmVwKExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLCBxaWQpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpCiYjNDM7ewomIzQzOwlpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLAomIzQzOwkJCUNETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLAomIzQzOwkJCUNETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhaXJvaGFfZmVfZ2V0KGV0aCwgUkVHX0NETV9MUk9fRU4ocWRtYV9pZCAmIzQzOyAxKSwKJiM0MzsJCQkgICAgIExST19SWFFfRU5fTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwlpbnQgaSwgbHJvX3F1ZXVlX2luZGV4ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShxZG1hLSZndDtxX3J4KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfcXVldWUgKnEgPSAmYW1wO3FkbWEtJmd0O3FfcnhbaV07CiYjNDM7CQl1MzIgc2l6ZTsKJiM0MzsKJiM0MzsJCWlmICghcS0mZ3Q7bmRlc2MpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtJmd0O2J1Zl9zaXplKSk7CiYjNDM7CQlzaXplID0gbWluX3QodTMyLCBzaXplLCBBSVJPSEFfTUFYX1JYX1NJWkUpOwomIzQzOwkJYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLAomIzQzOwkJCQkJIHNpemUpOwomIzQzOwkJbHJvX3F1ZXVlX2luZGV4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJaW50IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiYjNDM7CiYjNDM7CWlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX2ZlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKIAlhaXJvaGFfZmVfbWFjY3JfaW5pdChldGgpOwpAQCAtNjE2LDYgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSkKIAkJZS0mZ3Q7ZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICYjNDM7IG9mZnNldDsKIAkJZS0mZ3Q7ZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS0mZ3Q7YnVmX3NpemUpKTsKIAomIzQzOwkJV1JJVEVfT05DRShkZXNjLSZndDt0Y3BfdHNfcmVwbHksIDApOwogCQl2YWwgPSBGSUVMRF9QUkVQKFFETUFfREVTQ19MRU5fTUFTSywgZS0mZ3Q7ZG1hX2xlbik7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7Y3RybCwgY3B1X3RvX2xlMzIodmFsKSk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7YWRkciwgY3B1X3RvX2xlMzIoZS0mZ3Q7ZG1hX2FkZHIpKTsKQEAgLTY1NywxOCAmIzQzOzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpCiAJcmV0dXJuIHBvcnQtJmd0O2RldnNbZF0gPyBwb3J0LSZndDtkZXZzW2RdIDogRVJSX1BUUigtRU5PREVWKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAomIzQzOwkJCQkJICAgICAgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MsCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLAomIzQzOwkJCQkJICAgICAgdTMyIGxlbiwgdTMyIGFnZ19jb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O21zZzEpKTsKJiM0MzsJdTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwl1MzIgbXNnMyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLSZndDttc2czKSk7CiYjNDM7CXUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgZGF0YV9sZW47CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbzsKJiM0MzsJdTE2IHRjcF93aW4sIGwyX2xlbjsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGg7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlib29sIGlwdjQsIGlwdjY7CiYjNDM7CiYjNDM7CWlwdjQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA0X01BU0ssIG1zZzEpOwomIzQzOwlpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTsKJiM0MzsJaWYgKCFpcHY0ICZhbXA7JmFtcDsgIWlwdjYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJbDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTsKJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7IGwyX2xlbiAmIzQzOyBzaXplb2YoKmlwaCkpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpcGggPSAoc3RydWN0IGlwaGRyICopKGUtJmd0O2J1ZiAmIzQzOyBsMl9sZW4pOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAoaXBoLSZndDtpaGwgJmx0OyA1KQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkJdGhfb2ZmID0gbDJfbGVuICYjNDM7IChpcGgtJmd0O2lobCAmbHQ7Jmx0OyAyKTsKJiM0MzsJCWlmIChsZW4gJmx0OyB0aF9vZmYpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpcGgtJmd0O3RvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pOwomIzQzOwkJaXBoLSZndDtjaGVjayA9IDA7CiYjNDM7CQlpcGgtJmd0O2NoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtJmd0O2lobCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsKJiM0MzsJCXRoX29mZiA9IGwyX2xlbiAmIzQzOyBzaXplb2YoKmlwNmgpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IHRoX29mZikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoZS0mZ3Q7YnVmICYjNDM7IGwyX2xlbik7CiYjNDM7CQlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBORVhUSERSX1RDUCkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCWlwNmgtJmd0O3BheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuICZsdDsgdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoZS0mZ3Q7YnVmICYjNDM7IHRoX29mZik7CiYjNDM7CWlmICh0aC0mZ3Q7ZG9mZiAmbHQ7IDUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLSZndDtkb2ZmICZsdDsmbHQ7IDIpOwomIzQzOwlpZiAobGVuICZsdDs9IGRhdGFfb2ZmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLCBtc2czKTsKJiM0MzsJdGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7ZGF0YSkpOwomIzQzOwl0aC0mZ3Q7YWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTsKJiM0MzsJdGgtJmd0O3dpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pOwomIzQzOwomIzQzOwkvKiBDaGVjayB0Y3AgdGltZXN0YW1wIG9wdGlvbiAqLwomIzQzOwlpZiAodGgtJmd0O2RvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkgewomIzQzOwkJdTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgJmx0OyZsdDsgMjQpIHwgKFRDUE9QVF9OT1AgJmx0OyZsdDsgMTYpIHwKJiM0MzsJCQkgICAgIChUQ1BPUFRfVElNRVNUQU1QICZsdDsmbHQ7IDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7CiYjNDM7CQkJdTggKnB0ciA9ICh1OCAqKXRoICYjNDM7IHNpemVvZigqdGgpICYjNDM7IDIgKiBzaXplb2YoX19iZTMyKTsKJiM0MzsJCQlfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtJmd0O3RjcF90c19yZXBseSk7CiYjNDM7CiYjNDM7CQkJLyogVGhlIGZpZWxkIGlzIHByZS16ZXJvZWQgaW4gdGhlIHBvc3RlZCBkZXNjcmlwdG9yLAomIzQzOwkJCSAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlCiYjNDM7CQkJICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyCiYjNDM7CQkJICogdW50b3VjaGVkIG90aGVyd2lzZSwgc2luY2UgdGhlIGhhcmR3YXJlIG1heSBub3QKJiM0MzsJCQkgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh0Y3BfdHNfcmVwbHkpCiYjNDM7CQkJCXB1dF91bmFsaWduZWRfYmUzMihsZTMyX3RvX2NwdSh0Y3BfdHNfcmVwbHkpLAomIzQzOwkJCQkJCSAgIHB0cik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShlLSZndDtidWYgJiM0MzsgbDJfbGVuKTsKJiM0MzsKJiM0MzsJCXRoLSZndDtjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtJmd0O3NhZGRyLAomIzQzOwkJCQkJICBpcGgtJmd0O2RhZGRyLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtJmd0O2J1ZiAmIzQzOyBsMl9sZW4pOwomIzQzOwomIzQzOwkJdGgtJmd0O2NoZWNrID0gfnRjcF92Nl9jaGVjayhsZW4gLSB0aF9vZmYsICZhbXA7aXA2aC0mZ3Q7c2FkZHIsCiYjNDM7CQkJCQkgICZhbXA7aXA2aC0mZ3Q7ZGFkZHIsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG5ldHdvcmsgaGVhZGVycyBhbmQgcGF5bG9hZCB0byByZWx5IG9uIEdSTy4KJiM0MzsJICogV2UgbmVlZCB0byBkbyBpdCBpbiB0aGUgZHJpdmVyIHNpbmNlIHRoZSBOSUMgZG9lcwomIzQzOwkgKiBub3Qgc3VwcG9ydCBpdC4KJiM0MzsJICovCiYjNDM7CXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7cS0mZ3Q7bmFwaSwgZGF0YV9vZmYpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBkYXRhX29mZik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGUtJmd0O2J1ZiwgZGF0YV9vZmYpOwomIzQzOwomIzQzOwlwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoZS0mZ3Q7YnVmKTsKJiM0MzsJZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjsKJiM0MzsJc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwomIzQzOwlza2JfYWRkX3J4X2ZyYWcoc2tiLCBzaGluZm8tJmd0O25yX2ZyYWdzLCBwYWdlLAomIzQzOwkJCWUtJmd0O2J1ZiAmIzQzOyBkYXRhX29mZiAtIHBhZ2VfYWRkcmVzcyhwYWdlKSwgZGF0YV9sZW4sCiYjNDM7CQkJcS0mZ3Q7YnVmX3NpemUpOwomIzQzOwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2OwomIzQzOwkvKiBIVyBkb2VzIG5vdCByZXBvcnQgdGhlIHBlci1zZWdtZW50IE1TUywgc28gYXBwcm94aW1hdGUgaXQgYXMKJiM0MzsJICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzCiYjNDM7CSAqIHdpdGggYSBzaG9ydGVyIHRhaWwgdGhpcyBzdGlsbCByZS1zZWdtZW50cyBpbnRvIGV4YWN0bHkKJiM0MzsJICogYWdnX2NvdW50IHNlZ21lbnRzLCBrZWVwaW5nIGdzb19zaXplL2dzb19zZWdzIGFuZCB0aGUgcGFja2V0CiYjNDM7CSAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuCiYjNDM7CSAqLwomIzQzOwlzaGluZm8tJmd0O2dzb19zaXplID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBhZ2dfY291bnQpOwomIzQzOwlzaGluZm8tJmd0O2dzb19zZWdzID0gYWdnX2NvdW50OwomIzQzOwomIzQzOwlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiYjNDM7CXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9idWlsZF9yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKJiM0MzsJCQkJCQlzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYywKJiM0MzsJCQkJCQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLAomIzQzOwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkJdTMyIGxlbiwgdTMyIGFnZ19jb3VudCkKJiM0Mzt7CiYjNDM7CWludCBxaWQgPSBxIC0gJmFtcDtxLSZndDtxZG1hLSZndDtxX3J4WzBdOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoYWdnX2NvdW50ICZndDsgMSAmYW1wOyZhbXA7IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkgeyAvKiBMUk8gKi8KJiM0MzsJCXNrYiA9IGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgZSwgbGVuLCBhZ2dfY291bnQpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlza2IgPSBuYXBpX2J1aWxkX3NrYihlLSZndDtidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sIHEtJmd0O2J1Zl9zaXplKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkJc2tiX3Jlc2VydmUoc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pOwomIzQzOwkJX19za2JfcHV0KHNrYiwgbGVuKTsKJiM0MzsJCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTsKJiM0MzsJc2tiLSZndDtkZXYgPSBkZXY7CiYjNDM7CXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxaWQpOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gc2tiOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogewogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLSZndDtwYWdlX3Bvb2wpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IHEtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKLQlpbnQgcWlkID0gcSAtICZhbXA7cWRtYS0mZ3Q7cV9yeFswXTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtJmd0O3FkbWEtJmd0O2V0aDsKIAlpbnQgZG9uZSA9IDA7CiAKIAl3aGlsZSAoZG9uZSAmbHQ7IGJ1ZGdldCkgewomIzQzOwkJdTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgbXNnMiwgZGVzY19jdHJsLCBhZ2dfY291bnQ7CiAJCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSAmYW1wO3EtJmd0O2VudHJ5W3EtJmd0O3RhaWxdOwogCQlzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyA9ICZhbXA7cS0mZ3Q7ZGVzY1txLSZndDt0YWlsXTsKLQkJdTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsOwogCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAkJaW50IGRhdGFfbGVuLCBsZW47CkBAIC02OTIsMjQgJiM0Mzs5NDcsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpCiAJCWlmICghbGVuIHx8IGRhdGFfbGVuICZsdDsgbGVuKQogCQkJZ290byBmcmVlX2ZyYWc7CiAKJiM0MzsJCW1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwkJYWdnX2NvdW50ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLLCBtc2cyKTsKJiM0MzsJCWlmIChhZ2dfY291bnQgJmd0OyBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKQomIzQzOwkJCWdvdG8gZnJlZV9mcmFnOwomIzQzOwogCQlkZXYgPSBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihldGgsIGRlc2MpOwogCQlpZiAoSVNfRVJSKGRldikpCiAJCQlnb3RvIGZyZWVfZnJhZzsKIAogCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CiAJCWlmICghcS0mZ3Q7c2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqLwotCQkJcS0mZ3Q7c2tiID0gbmFwaV9idWlsZF9za2IoZS0mZ3Q7YnVmIC0gQUlST0hBX1JYX0hFQURST09NLAotCQkJCQkJcS0mZ3Q7YnVmX3NpemUpOwomIzQzOwkJCXEtJmd0O3NrYiA9IGFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihxLCBkZXNjLCBlLCBuZXRkZXYsCiYjNDM7CQkJCQkJCSAgbGVuLCBhZ2dfY291bnQpOwogCQkJaWYgKCFxLSZndDtza2IpCiAJCQkJZ290byBmcmVlX2ZyYWc7Ci0KLQkJCXNrYl9yZXNlcnZlKHEtJmd0O3NrYiwgQUlST0hBX1JYX0hFQURST09NKTsKLQkJCV9fc2tiX3B1dChxLSZndDtza2IsIGxlbik7Ci0JCQlza2JfbWFya19mb3JfcmVjeWNsZShxLSZndDtza2IpOwotCQkJcS0mZ3Q7c2tiLSZndDtkZXYgPSBuZXRkZXY7Ci0JCQlxLSZndDtza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS0mZ3Q7c2tiLCBuZXRkZXYpOwotCQkJcS0mZ3Q7c2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCXNrYl9yZWNvcmRfcnhfcXVldWUocS0mZ3Q7c2tiLCBxaWQpOwogCQl9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi8KIAkJCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8ocS0mZ3Q7c2tiKTsKIAkJCWludCBucl9mcmFncyA9IHNoaW5mby0mZ3Q7bnJfZnJhZ3M7CkBAIC04MDAsMTIgJiM0MzsxMDUyLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQkJCSAgICAgc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgbmRlc2MpCiB7Ci0JY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewotCQkub3JkZXIgPSAwLAomIzQzOwlzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7CiAJCS5wb29sX3NpemUgPSAyNTYsCiAJCS5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLAogCQkuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSwKLQkJLm1heF9sZW4gPSBQQUdFX1NJWkUsCiAJCS5uaWQgPSBOVU1BX05PX05PREUsCiAJCS5kZXYgPSBxZG1hLSZndDtldGgtJmd0O2RldiwKIAkJLm5hcGkgPSAmYW1wO3EtJmd0O25hcGksCkBAIC04MTMsOSAmIzQzOzEwNjMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKIAlpbnQgcWlkID0gcSAtICZhbXA7cWRtYS0mZ3Q7cV9yeFswXSwgdGhyOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CWJvb2wgbHJvX3E7CiAKLQlxLSZndDtidWZfc2l6ZSA9IFBBR0VfU0laRSAvIDI7CiAJcS0mZ3Q7cWRtYSA9IHFkbWE7CiYjNDM7CWxyb19xID0gYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpOwogCiAJcS0mZ3Q7ZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLSZndDtkZXYsIG5kZXNjICogc2l6ZW9mKCpxLSZndDtlbnRyeSksCiAJCQkJR0ZQX0tFUk5FTCk7CkBAIC04MjcsNiAmIzQzOzEwNzgsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAlpZiAoIXEtJmd0O2Rlc2MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDsKJiM0MzsJcHBfcGFyYW1zLm1heF9sZW4gPSBQQUdFX1NJWkUgJmx0OyZsdDsgcHBfcGFyYW1zLm9yZGVyOwomIzQzOwogCXEtJmd0O3BhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoJmFtcDtwcF9wYXJhbXMpOwogCWlmIChJU19FUlIocS0mZ3Q7cGFnZV9wb29sKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihxLSZndDtwYWdlX3Bvb2wpOwpAQCAtODM1LDYgJiM0MzsxMDg5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CXEtJmd0O2J1Zl9zaXplID0gbHJvX3EgPyBwcF9wYXJhbXMubWF4X2xlbiA6IHBwX3BhcmFtcy5tYXhfbGVuIC8gMjsKIAlxLSZndDtuZGVzYyA9IG5kZXNjOwogCW5ldGlmX25hcGlfYWRkKGV0aC0mZ3Q7bmFwaV9kZXYsICZhbXA7cS0mZ3Q7bmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTsKIApAQCAtODQ4LDcgJiM0MzsxMTAzLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQkJRklFTERfUFJFUChSWF9SSU5HX1RIUl9NQVNLLCB0aHIpKTsKIAlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssCiAJCQlGSUVMRF9QUkVQKFJYX1JJTkdfRE1BX0lEWF9NQVNLLCBxLSZndDtoZWFkKSk7Ci0JYWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spOwomIzQzOwlpZiAobHJvX3EpCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSwKJiM0MzsJCQkJICBSWF9SSU5HX1NHX0VOX01BU0spOwomIzQzOwllbHNlCiYjNDM7CQlhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksCiYjNDM7CQkJCVJYX1JJTkdfU0dfRU5fTUFTSyk7CiAKIAlhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHEpOwogCkBAIC04NzAsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQkJCXBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLSZndDtwYWdlX3Bvb2wpKTsKIAkJcGFnZV9wb29sX3B1dF9mdWxsX3BhZ2UocS0mZ3Q7cGFnZV9wb29sLCBwYWdlLCBmYWxzZSk7CiAJCS8qIFJlc2V0IERNQSBkZXNjcmlwdG9yICovCiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O3RjcF90c19yZXBseSwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7Y3RybCwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7YWRkciwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7ZGF0YSwgMCk7CkBAIC0xODk2LDYgJiM0MzsyMTU3LDM0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfaHdfc3RhdHMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJc3Bpbl91bmxvY2soJmFtcDtwb3J0LSZndDtzdGF0c19sb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZXRoLSZndDtwb3J0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLSZndDtwb3J0c1tpXTsKJiM0MzsJCWludCBqOwomIzQzOwomIzQzOwkJaWYgKCFwb3J0KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUocG9ydC0mZ3Q7ZGV2cyk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtJmd0O2RldnNbal07CiYjNDM7CQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJCQlpZiAoIWl0ZXJfZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTsKJiM0MzsJCQlpZiAobmV0ZGV2LSZndDtyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTE5MTMsMTQgJiM0MzsyMjAyLDI4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAl1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxOwogCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKLQlpbnQgZXJyOwomIzQzOwlpbnQgcWRtYV9pZCwgZXJyOwomIzQzOwomIzQzOwkvKiBIVyBHUk8gaXMgY29uZmlndXJlZCBvbiB0aGUgUURNQSBhbmQgaXQgaXMgc2hhcmVkIGJldHdlZW4KJiM0MzsJICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24KJiM0MzsJICogdGhlIHNhbWUgUURNQSBpZiBIVyBHUk8gaXMgZW5hYmxlZCBvbiBhbnkgZGV2aWNlIHNoYXJpbmcgaXQKJiM0MzsJICogb3IgaWYgdGhpcyBkZXZpY2UgaGFzIEhXIEdSTyBlbmFibGVkIGluIGl0cyBmZWF0dXJlIHNldC4KJiM0MzsJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlxZG1hX2lkID0gcWRtYSAtICZhbXA7cWRtYS0mZ3Q7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxICZhbXA7JmFtcDsgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLSZndDtldGgsIHFkbWFfaWQpIHx8CiYjNDM7CQkJCShuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfR1JPX0hXKSkpIHsKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwgJiMzNDtyZXF1aXJlZCB0byBkaXNhYmxlIEhXIEdSTyBvbiBRRE1BJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBxZG1hX2lkKTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAllcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKQogCQlhaXJvaGFfZmVfc2V0KHFkbWEtJmd0O2V0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LSZndDtpZCksCiAJCQkgICAgICBHRE1fU1RBR19FTl9NQVNLKTsKQEAgLTE5MzcsNiAmIzQzOzIyNDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJICAgIHBzZV9wb3J0KTsKIAomIzQzOwlpZiAobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19IVykKJiM0MzsJCWFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xOTU0LDYgJiM0MzsyMjYwLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fSFcpCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMDQsNiAmIzQzOzI0MTQsMzQgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGV2X2NoZWNrX2h3X2dybyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CiYjNDM7CiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsICYjMzQ7SFcgR1JPIGlzIGVuYWJsZWQgb24gUURNQSVkXG4mIzM0OywgcWRtYV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CXFkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshcWRtYV9pZF07CiYjNDM7CXFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkgewomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtIVyBHUk8gaXMgZW5hYmxlZCBvbiBkZXN0aW5hdGlvbiBRRE1BJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBxZG1hX2lkKTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwpAQCAtMjEyMCw2ICYjNDM7MjQ1OCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKIAluZXRkZXYtJmd0O2lycSA9IHFkbWEtJmd0O2lycV9iYW5rc1swXS5pcnE7CiYjNDM7CXFkbWEtJmd0O3VzZXJzJiM0MzsmIzQzOzsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwpAQCAtMjEzNiw4ICYjNDM7MjQ3NSwxMiBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKIAl9CiAKLQlpZiAoY3VyX3FkbWEpCiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJY3VyX3FkbWEtJmd0O3VzZXJzLS07CiAJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yMjg4LDYgJiM0MzsyNjMxLDM2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJfQogfQogCiYjNDM7c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkJIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiYjNDM7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxKQomIzQzOwkJZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX0dST19IVzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZlYXR1cmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJbmV0ZGV2X2ZlYXR1cmVzX3QgZGlmZiA9IG5ldGRldi0mZ3Q7ZmVhdHVyZXMgXiBmZWF0dXJlczsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIShkaWZmICZhbXA7IE5FVElGX0ZfR1JPX0hXKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fSFcpCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTMxOTksNyAmIzQzOzM1NzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IGVyciA9IC1FQlVTWTsKJiM0MzsJaW50IGVycjsKIAogCWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwogCSAgICBwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHsKQEAgLTMyMTAsNiAmIzQzOzM1ODMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi8KIAkJcmV0dXJuIDA7CiAKJiM0MzsJZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiAKIAl3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpOwpAQCAtMzIxOCw2ICYjNDM7MzU5NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiAJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBlcnJvcl91bmxvY2s7CiAJCX0KIAkJYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTsKQEAgLTMzNDMsNiAmIzQzOzM3MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcAkJPSBhaXJvaGFfZGV2X3N0b3AsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9oYV9kZXZfY2hhbmdlX210dSwKIAkubmRvX3NlbGVjdF9xdWV1ZQk9IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlLAomIzQzOwkubmRvX2ZpeF9mZWF0dXJlcwk9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLAomIzQzOwkubmRvX3NldF9mZWF0dXJlcwk9IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBhaXJvaGFfZGV2X3htaXQsCiAJLm5kb19nZXRfc3RhdHM2NCAgICAgICAgPSBhaXJvaGFfZGV2X2dldF9zdGF0czY0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb2hhX2Rldl9zZXRfbWFjYWRkciwKQEAgLTM0MzAsMTEgJiM0MzszODEwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO2Fpcm9oYV9ldGh0b29sX29wczsKIAluZXRkZXYtJmd0O21heF9tdHUgPSBBSVJPSEFfTUFYX01UVTsKIAluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwotCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPNiB8Ci0JCQkgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8Ci0JCQkgICAgICBORVRJRl9GX0hXX1RDOwotCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKLQluZXRkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzOwomIzQzOwluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9HUk9fSFc7CiYjNDM7CW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTOwomIzQzOwluZXRkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7CiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtJmd0O2Rldik7CiAKIAkvKiByZXNlcnZlIGh3IHF1ZXVlcyBmb3IgSFRCIG9mZmxvYWRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZhOWE4ZWRjZTIyZmYuLjliNTVhYmM2MzA0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNDUsNiAmIzQzOzQ1LDE4IEBACiAJIChfbikgPT0gMTUgPyAxMjggOgkJXAogCSAoX24pID09ICAwID8gMTAyNCA6IDE2KQogCiYjNDM7I2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVIJCWdldF9vcmRlcihTWl8xNkspCiYjNDM7I2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTCTgKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0sJCUdFTk1BU0soMzEsIDI0KQomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVAk2NAomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19USU1FCTEwMAomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FCTIwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFUwkJCVwKJiM0MzsJKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwJXAomIzQzOwkgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9JUFY2X0NTVU0gfAlcCiYjNDM7CSBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKQomIzQzOwogI2RlZmluZSBQU0VfUlNWX1BBR0VTCQkJMTI4CiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVMJCTY0CiAKQEAgLTUzOCw3ICYjNDM7NTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gewogCiAvKiBSWCBxdWV1ZSB0byBJUlEgbWFwcGluZzogQklUKHEpIGluIElSUShuKSAqLwogI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0sJCQkweDgzOWYKLSNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLCQkJMHg3ZmUwMDAwMAomIzQzOyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLCQkJMHhmZmUwMDAwMAogI2RlZmluZSBSWF9JUlEyX0JBTktfUElOX01BU0sJCQkweDIwCiAjZGVmaW5lIFJYX0lSUTNfQkFOS19QSU5fTUFTSwkJCTB4NDAKICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pCQlcCkBAIC01NjAsNiAmIzQzOzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKJiM0MzsJaW50IHVzZXJzOwomIzQzOwogCXN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107CiAKIAlzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07CkBAIC03MTQsNiAmIzQzOzcyOCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAlyZXR1cm4gZXRoLSZndDtzb2MtJmd0O3ZlcnNpb24gPT0gMHg3NTgzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS0mZ3Q7cWRtYTsKJiM0MzsJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07CiYjNDM7CiYjNDM7CS8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi8KJiM0MzsJQlVJTERfQlVHX09OKGh3ZWlnaHQzMihBSVJPSEFfUlhRX0xST19FTl9NQVNLKSAmZ3Q7CiYjNDM7CQkgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpOwomIzQzOwomIzQzOwlyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyAmYW1wOyBCSVQocWlkKSk7CiYjNDM7fQomIzQzOwogaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJCQkgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBACiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pCVwKIAlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICUgNCkgJmx0OyZsdDsgMyksCSgoKF9uKSAlIDQpICZsdDsmbHQ7IDMpKQogCiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pICZhbXA7IDB4NCkpCiYjNDM7I2RlZmluZSBMUk9fUlhRX01BU0soX24pCQlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMyksICgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMykKJiM0MzsKJiM0MzsjZGVmaW5lIFJFR19DRE1fTFJPX0VOKF9uKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDgwKQomIzQzOyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pCQkoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODQpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTSwkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0sJCUdFTk1BU0soMTUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19BR0VfVElNRShfbikJKENETV9CQVNFKF9uKSAmIzQzOyAweDg4KQomIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTSwkJR0VOTUFTSygxNSwgMCkKJiM0MzsKICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKQkJR0RNX0JBU0UoX24pCiAjZGVmaW5lIEdETV9QQURfRU5fTUFTSwkJCUJJVCgyOCkKICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLCQlCSVQoMjMpCkBAIC04ODcsOSAmIzQzOzkwMSwxNSBAQAogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLCUdFTk1BU0soMjUsIDIxKQogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0sJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLCUdFTk1BU0soMTUsIDApCiYjNDM7LyogUlggTVNHMiAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMjQpCiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSwlHRU5NQVNLKDYsIDApCiYjNDM7LyogUlggTVNHMyAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLCUdFTk1BU0soMTUsIDApCiAKIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjIHsKLQlfX2xlMzIgcnN2OwomIzQzOwlfX2xlMzIgdGNwX3RzX3JlcGx5OwogCV9fbGUzMiBjdHJsOwogCV9fbGUzMiBhZGRyOwogCV9fbGUzMiBkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCwgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4KCkl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIChMUk8pLCBvciBIVyBHUk8gc3VwcG9ydCwgYmVpbmcgYWRkZWQgdG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIuIFRoZSBzcGVjaWZpYyBmaWxlcyBtb2RpZmllZCDigJMgYGFpcm9oYV9ldGguY2AsIGAuaGAsIGFuZCBgYWlyb2hhX3JlZ3MuaGAg4oCTIGNvbmZpcm0gdGhpcy4gT2theSwgSSBzZWUgdGhlIG5ldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgTFJPIGF0IHRoZSBSWCBxdWV1ZSBhbmQgZGV2aWNlIGxldmVsOiBgYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlYCwgYGFpcm9oYV9mZV9scm9fZGlzYWJsZWAsIGBhaXJvaGFfZGV2X2xyb19lbmFibGVgLCBhbmQgYGFpcm9oYV9kZXZfbHJvX2Rpc2FibGVgLiBUaGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMgdG8gYnVpbGQgYW5kIGhhbmRsZSB0aGUgU0tCcyDigJMgYGFpcm9oYV9xZG1hX2xyb19yeF9za2JgLCBhbmQgYGFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYmDigJMsIGFuZCBjcml0aWNhbCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzYCwgYGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWVgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZGV2X2luaXRgLCBgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXNgLCBhbmQgYGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIGFsbCBzaWducyBvZiBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgUlggcGF0aC4KCk15IG5leHQgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIFRoaXMgaXMgdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciBrbm93bGVkZ2UsIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBFTjc1ODEgU29DLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIG9yIGEgUENJIGRyaXZlci4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBhaXJvaGFfZXRoYCBvciBgYWlyb2hhX3Byb2JlYCB0byBmaWd1cmUgdGhpcyBvdXQuIElmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCByZWFjaGluZyBpdCBpbiBhIHN0YW5kYXJkIFZNIHNldHVwIG1pZ2h0IGJlIHRyaWNraWVyLCBidXQgY2VydGFpbmx5IG5vdCBpbXBvc3NpYmxlLiBJZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHRoYXQmIzM5O3MgYmV0dGVyLCBzaW5jZSBpdCYjMzk7cyBsaWtlbHkgd2UgY2FuIGFzc2lnbiB0aGUgZW11bGF0ZWQgZGV2aWNlIHRvIHRoZSBWTS4gSWYgaXQmIzM5O3Mgbm90IGVhc2lseSByZWFjaGFibGUsIHRoZW4gaXQgZHJvcHMgaW4gcHJpb3JpdHkgZm9yIHRoaXMga2luZCBvZiBldmFsdWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYS4qcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkzOD1zdGF0aWMgaW50IGFpcm9oYV9yZWdpc3Rlcl9nZG1fZGV2aWNlcyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NzpzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTY4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQzMzI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDMzMzpcdC5wcm9iZSA9IGFpcm9oYV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMzNC1cdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2OTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgxNDpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxNS1cdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGFyZ2V0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBgcGxhdGZvcm1fZHJpdmVyYCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIFNvQy1zcGVjaWZpYywgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBhIHBhcnRpY3VsYXIgU29DLCBsaWtlIHRoaXMgQWlyb2hhIEVONzU4MSwgYXJlIHVzdWFsbHkgYSBuby1nbyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1bmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBjdXN0b20gZW11bGF0b3Igc2V0dXAgZm9yIGl0LCBvciBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBtb3JlIGdlbmVyaWMuIEdpdmVuIHRoZSBsaWtlbHkgcGxhdGZvcm0gZGVwZW5kZW5jZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeSDigJMgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgZGVwZW5kZW5jaWVzLCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBvciBhbnkgaW5kaWNhdGlvbiBvZiBicm9hZGVyIHN1cHBvcnQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBLY29uZmlnIFJldmlldyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIEtjb25maWcuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCwgaXNuJiMzOTt0IGl0PyBCZWZvcmUgYW55IHNlcmlvdXMgd29yayBiZWdpbnMsIHlvdSAqYWx3YXlzKiBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgYXJlIHdlIGV2ZW4gc3RhcnRpbmcgZnJvbT8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8mIzM0OwoKTXkgbWluZCYjMzk7cyBhbHJlYWR5IHNpZnRpbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzLiBJJiMzOTttIHdvbmRlcmluZzoKCiogICBJcyB0aGlzIGEgZnJlc2ggS2NvbmZpZywgb3Igb25lIEkmIzM5O20gZmFtaWxpYXIgd2l0aD8gVGhhdCBpbmZvcm1zIG15IGFwcHJvYWNoLiBJZiBJIGtub3cgaXQsIEkmIzM5O2xsIGdvIGZvciBxdWljayBzcGVjaWZpYyBjaGVja3MgZm9yIGNlcnRhaW4gdmFyaWFibGVzLgoqICAgQXJlIHRoZXJlIGFueSBpbmNsdWRlIGRpcmVjdGl2ZXM/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHksIGFuZCBkZXRlcm1pbmUgd2hldGhlciBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBLY29uZmlnIGZpbGVzLgoqICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgZGVmaW5lZD8gSXMgaXQgZm9yIGEgc3BlY2lmaWMgQ1BVLCBib2FyZCwgb3IgYnVpbGQgY29uZmlndXJhdGlvbj8gSSB3YW50IHRvIGNvbnRleHR1YWxpemUgdGhpcyBpbW1lZGlhdGVseS4KKiAgIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMsIG9yIGZlYXR1cmVzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCB0byBraWNrIGluIG15IGludGVybmFsIGNvbmZsaWN0IHJlc29sdXRpb24gY29kZSBmb3IgcG90ZW50aWFsIHByb2JsZW1zLgoqICAgQW0gSSBsb29raW5nIHRvIGNoYW5nZSBzb21ldGhpbmc/IE9yIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUuIFRoYXQgaGVscHMgdG8gZm9jdXMgbXkgaW5pdGlhbCByZXZpZXcuCgpTbywgSSYjMzk7bSBtZW50YWxseSBza2V0Y2hpbmcgb3V0IGEgcGxhbi4gSXQmIzM5O3MgdGltZSB0byBmaW5kIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG4gICAzOlx0XHRib29sIFwmIzM0O0Fpcm9oYSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVUX0FJUk9IQV9OUFVcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBOUFUgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDEzOlx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxuICAxNjpcdFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5FVF9BSVJPSEFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2MQoJCQkJCQkJb3V0cHV0OiA5NgoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIEFpcm9oYSBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoTkVUX0FJUk9IQSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFpcm9oYSBTb0MuIFNpbmNlIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBpdCAqbmVlZHMqIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBvciBzb21lIGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbiB0byBwcm9iZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGV4ZWN1dGUgdGhlIGNvZGUgdGhpcyBwYXRjaCB0b3VjaGVzLgoKSW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHRoZXJlJiMzOTtzIG5vIEFpcm9oYSBTb0MgZW11bGF0aW9uIGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBwcm9iZWAgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyICp3aWxsIG5vdCogYmUgY2FsbGVkLiBBbGwgdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBgYWlyb2hhX3FkbWFfcnhfcHJvY2Vzc2AsIGBhaXJvaGFfZGV2X29wZW5gLCBldGMuLCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUuCgpDb3VsZCBTeXprYWxsZXIgc29tZWhvdyBjcmVhdGUgaXQ/IE1heWJlLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBQb3NzaWJseSwgaWYgaXQgd2FzIGdlbmVyaWNhbGx5IHN1cHBvcnRlZCwgb3IgYSB2aXJ0dWFsIGRldmljZSBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZldGhgLiBCdXQgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGxpa2UgdGhhdCBoZXJlLiBQbHVzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIGl0JiMzOTtzIGEgbm8tZ28uCgpUaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEl0JiMzOTtzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyLCBzbywgaXQmIzM5O3MgZ29pbmcgdG8gZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIEl04oCZcyBhbGwgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCwgc3BlY2lmaWNhbGx5IGBhaXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYC4gRGVmaW5pdGVseSBqdXN0IHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciwgbm90aGluZyBnZW5lcmljLgoKU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBBaXJvaGEgU29DIGRyaXZlciBpcyBwbGF0Zm9ybS1zcGVjaWZpYy4gVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4KCkkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8qKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFpcm9oYSBoYXJkd2FyZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKiksIHdoaWNoIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyIGZvciBBaXJvaGEgaGFyZHdhcmUuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzYuMTE5NjE5NzE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNzA3NjQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzYuMTE5NjI3NDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM1MTAzODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2M2MjQyYTk4N2FlNGZiOGViNmY2MjdiYjVmMmM0YTgxMzc1NjZhN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjIyOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC0xMCw4ICsxMCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9yZWdzLmhcXFwiXFxuQEAgLTQ5MSw2ICs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdFxcdFxcdFxcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBidWZfc2l6ZSlcXG4re1xcbitcXHRpbnQgaWQgPSBxZG1hX2lkICsgMTtcXG4rXFxuK1xcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXFxuK1xcdFxcdCAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19OVU1fTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0FHRV9USU1FKGlkKSxcXG4rXFx0XFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdFX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fUlhRKGlkLCBscm9fcXVldWVfaW5kZXgpLFxcbitcXHRcXHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcXG4rXFx0XFx0ICAgICAgX19maWVsZF9wcmVwKExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLCBxaWQpKTtcXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXFxuK3tcXG4rXFx0aW50IGksIGlkID0gcWRtYV9pZCArIDE7XFxuK1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcXG4rXFx0XFx0XFx0Q0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0spO1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXFxuK1xcdFxcdFxcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpKyspXFxuK1xcdFxcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcXG4re1xcbitcXHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgKyAxKSxcXG4rXFx0XFx0XFx0ICAgICBMUk9fUlhRX0VOX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19lbmFibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0aW50IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFx0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XFxuK1xcbitcXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4W2ldO1xcbitcXHRcXHR1MzIgc2l6ZTtcXG4rXFxuK1xcdFxcdGlmICghcS1cXHUwMDNlbmRlc2MpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cXHUwMDNlYnVmX3NpemUpKTtcXG4rXFx0XFx0c2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTtcXG4rXFx0XFx0YWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLFxcbitcXHRcXHRcXHRcXHRcXHQgc2l6ZSk7XFxuK1xcdFxcdGxyb19xdWV1ZV9pbmRleCsrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0aW50IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFxuK1xcdGlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG4gXFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcXG5AQCAtNjE2LDYgKzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRlLVxcdTAwM2VkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSkgKyBvZmZzZXQ7XFxuIFxcdFxcdGUtXFx1MDAzZWRtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuIFxcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSwgMCk7XFxuIFxcdFxcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVxcdTAwM2VkbWFfbGVuKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VjdHJsLCBjcHVfdG9fbGUzMih2YWwpKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVxcdTAwM2VkbWFfYWRkcikpO1xcbkBAIC02NTcsMTggKzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpXFxuIFxcdHJldHVybiBwb3J0LVxcdTAwM2VkZXZzW2RdID8gcG9ydC1cXHUwMDNlZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIGxlbiwgdTMyIGFnZ19jb3VudClcXG4re1xcbitcXHR1MzIgbXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuK1xcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzIpKTtcXG4rXFx0dTMyIG1zZzMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlbXNnMykpO1xcbitcXHR1MzIgdGhfb2ZmLCB0Y3BfYWNrX3NlcSwgZGF0YV9vZmYsIGRhdGFfbGVuO1xcbitcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XFxuK1xcdHUxNiB0Y3Bfd2luLCBsMl9sZW47XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRoO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXG4rXFx0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XFxuK1xcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xcbitcXHRpZiAoIWlwdjQgXFx1MDAyNlxcdTAwMjYgIWlwdjYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcXG4rXFxuK1xcdGlmIChpcHY0KSB7XFxuK1xcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIGwyX2xlbiArIHNpemVvZigqaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcdFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlmIChpcGgtXFx1MDAzZWlobCBcXHUwMDNjIDUpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0XFx0dGhfb2ZmID0gbDJfbGVuICsgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2NcXHUwMDNjIDIpO1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgdGhfb2ZmKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlwaC1cXHUwMDNldG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7XFxuK1xcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbitcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtXFx1MDAzZWlobCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbitcXG4rXFx0XFx0dGhfb2ZmID0gbDJfbGVuICsgc2l6ZW9mKCppcDZoKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIHRoX29mZilcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcdFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIHRoX29mZiArIHNpemVvZigqdGgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoZS1cXHUwMDNlYnVmICsgdGhfb2ZmKTtcXG4rXFx0aWYgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2MgNSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cXHUwMDNlZG9mZiBcXHUwMDNjXFx1MDAzYyAyKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjPSBkYXRhX29mZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSywgbXNnMyk7XFxuK1xcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZWRhdGEpKTtcXG4rXFx0dGgtXFx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XFxuK1xcdHRoLVxcdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXFxuK1xcdGlmICh0aC1cXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcXG4rXFx0XFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggKyAxKTtcXG4rXFxuK1xcdFxcdGlmICh0b3B0ID09ICgoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbitcXHRcXHRcXHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFxcdTAwM2NcXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XFxuK1xcdFxcdFxcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xcbitcXHRcXHRcXHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSk7XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXFxuK1xcdFxcdFxcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXFxuK1xcdFxcdFxcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxcbitcXHRcXHRcXHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxcbitcXHRcXHRcXHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRjcF90c19yZXBseSlcXG4rXFx0XFx0XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlwdjQpIHtcXG4rXFx0XFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcbitcXHRcXHR0aC1cXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoZS1cXHUwMDNlYnVmICsgbDJfbGVuKTtcXG4rXFxuK1xcdFxcdHRoLVxcdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcXHUwMDI2aXA2aC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3BsaXQgbmV0d29yayBoZWFkZXJzIGFuZCBwYXlsb2FkIHRvIHJlbHkgb24gR1JPLlxcbitcXHQgKiBXZSBuZWVkIHRvIGRvIGl0IGluIHRoZSBkcml2ZXIgc2luY2UgdGhlIE5JQyBkb2VzXFxuK1xcdCAqIG5vdCBzdXBwb3J0IGl0LlxcbitcXHQgKi9cXG4rXFx0c2tiID0gbmFwaV9hbGxvY19za2IoXFx1MDAyNnEtXFx1MDAzZW5hcGksIGRhdGFfb2ZmKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0X19za2JfcHV0KHNrYiwgZGF0YV9vZmYpO1xcbitcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBlLVxcdTAwM2VidWYsIGRhdGFfb2ZmKTtcXG4rXFxuK1xcdHBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShlLVxcdTAwM2VidWYpO1xcbitcXHRkYXRhX2xlbiA9IGxlbiAtIGRhdGFfb2ZmO1xcbitcXHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XFxuK1xcdHNrYl9hZGRfcnhfZnJhZyhza2IsIHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MsIHBhZ2UsXFxuK1xcdFxcdFxcdGUtXFx1MDAzZWJ1ZiArIGRhdGFfb2ZmIC0gcGFnZV9hZGRyZXNzKHBhZ2UpLCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0cS1cXHUwMDNlYnVmX3NpemUpO1xcbitcXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcXG4rXFx0LyogSFcgZG9lcyBub3QgcmVwb3J0IHRoZSBwZXItc2VnbWVudCBNU1MsIHNvIGFwcHJveGltYXRlIGl0IGFzXFxuK1xcdCAqIHRoZSBhdmVyYWdlIHNlZ21lbnQgc2l6ZS4gRm9yIGEgc3RyZWFtIG9mIE1TUy1zaXplZCBzZWdtZW50c1xcbitcXHQgKiB3aXRoIGEgc2hvcnRlciB0YWlsIHRoaXMgc3RpbGwgcmUtc2VnbWVudHMgaW50byBleGFjdGx5XFxuK1xcdCAqIGFnZ19jb3VudCBzZWdtZW50cywga2VlcGluZyBnc29fc2l6ZS9nc29fc2VncyBhbmQgdGhlIHBhY2tldFxcbitcXHQgKiBhY2NvdW50aW5nIGNvaGVyZW50LCB3aGlsZSBuZXZlciBvdmVyZXN0aW1hdGluZyB0aGUgTVNTLlxcbitcXHQgKi9cXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgYWdnX2NvdW50KTtcXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcXG4rXFxuK1xcdHNrYi1cXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsgdGhfb2ZmO1xcbitcXHRza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTMyIGxlbiwgdTMyIGFnZ19jb3VudClcXG4re1xcbitcXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxLVxcdTAwM2VxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0aWYgKGFnZ19jb3VudCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7IC8qIExSTyAqL1xcbitcXHRcXHRza2IgPSBhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIGUsIGxlbiwgYWdnX2NvdW50KTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sIHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pO1xcbitcXHRcXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xcbitcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbitcXHR9XFxuK1xcbitcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbitcXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0c2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHFpZCk7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4ge1xcbiBcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cXHUwMDNlcGFnZV9wb29sKTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cXHUwMDNlcWRtYTtcXG4tXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHFpZCA9IHEgLSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFswXTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXFx1MDAzZXFkbWEtXFx1MDAzZWV0aDtcXG4gXFx0aW50IGRvbmUgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4rXFx0XFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgbXNnMiwgZGVzY19jdHJsLCBhZ2dfY291bnQ7XFxuIFxcdFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcXHUwMDI2cS1cXHUwMDNlZW50cnlbcS1cXHUwMDNldGFpbF07XFxuIFxcdFxcdHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjID0gXFx1MDAyNnEtXFx1MDAzZWRlc2NbcS1cXHUwMDNldGFpbF07XFxuLVxcdFxcdHUzMiBoYXNoLCByZWFzb24sIG1zZzEsIGRlc2NfY3RybDtcXG4gXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XFxuIFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdFxcdGludCBkYXRhX2xlbiwgbGVuO1xcbkBAIC02OTIsMjQgKzk0NywyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4gXFx0XFx0aWYgKCFsZW4gfHwgZGF0YV9sZW4gXFx1MDAzYyBsZW4pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9mcmFnO1xcbiBcXG4rXFx0XFx0bXNnMiA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cyKSk7XFxuK1xcdFxcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XFxuK1xcdFxcdGlmIChhZ2dfY291bnQgXFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfZnJhZztcXG4rXFxuIFxcdFxcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX2ZyYWc7XFxuIFxcbiBcXHRcXHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuIFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRxLVxcdTAwM2Vza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG4rXFx0XFx0XFx0cS1cXHUwMDNlc2tiID0gYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHEsIGRlc2MsIGUsIG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sIGFnZ19jb3VudCk7XFxuIFxcdFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZnJhZztcXG4tXFxuLVxcdFxcdFxcdHNrYl9yZXNlcnZlKHEtXFx1MDAzZXNrYiwgQUlST0hBX1JYX0hFQURST09NKTtcXG4tXFx0XFx0XFx0X19za2JfcHV0KHEtXFx1MDAzZXNrYiwgbGVuKTtcXG4tXFx0XFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUocS1cXHUwMDNlc2tiKTtcXG4tXFx0XFx0XFx0cS1cXHUwMDNlc2tiLVxcdTAwM2VkZXYgPSBuZXRkZXY7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVxcdTAwM2Vza2IsIG5ldGRldik7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuLVxcdFxcdFxcdHNrYl9yZWNvcmRfcnhfcXVldWUocS1cXHUwMDNlc2tiLCBxaWQpO1xcbiBcXHRcXHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cXG4gXFx0XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzO1xcbkBAIC04MDAsMTIgKzEwNTIsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBuZGVzYylcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XFxuLVxcdFxcdC5vcmRlciA9IDAsXFxuK1xcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcXG4gXFx0XFx0LnBvb2xfc2l6ZSA9IDI1NixcXG4gXFx0XFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXFxuIFxcdFxcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxcbi1cXHRcXHQubWF4X2xlbiA9IFBBR0VfU0laRSxcXG4gXFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG4gXFx0XFx0LmRldiA9IHFkbWEtXFx1MDAzZWV0aC1cXHUwMDNlZGV2LFxcbiBcXHRcXHQubmFwaSA9IFxcdTAwMjZxLVxcdTAwM2VuYXBpLFxcbkBAIC04MTMsOSArMTA2MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4gXFx0aW50IHFpZCA9IHEgLSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFswXSwgdGhyO1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHRib29sIGxyb19xO1xcbiBcXG4tXFx0cS1cXHUwMDNlYnVmX3NpemUgPSBQQUdFX1NJWkUgLyAyO1xcbiBcXHRxLVxcdTAwM2VxZG1hID0gcWRtYTtcXG4rXFx0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XFxuIFxcbiBcXHRxLVxcdTAwM2VlbnRyeSA9IGRldm1fa3phbGxvYyhldGgtXFx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXFx1MDAzZWVudHJ5KSxcXG4gXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuQEAgLTgyNyw2ICsxMDc4LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdGlmICghcS1cXHUwMDNlZGVzYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRwcF9wYXJhbXMub3JkZXIgPSBscm9fcSA/IEFJUk9IQV9MUk9fUEFHRV9PUkRFUiA6IDA7XFxuK1xcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIHBwX3BhcmFtcy5vcmRlcjtcXG4rXFxuIFxcdHEtXFx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXFx1MDAyNnBwX3BhcmFtcyk7XFxuIFxcdGlmIChJU19FUlIocS1cXHUwMDNlcGFnZV9wb29sKSkge1xcbiBcXHRcXHRpbnQgZXJyID0gUFRSX0VSUihxLVxcdTAwM2VwYWdlX3Bvb2wpO1xcbkBAIC04MzUsNiArMTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRxLVxcdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XFxuIFxcdHEtXFx1MDAzZW5kZXNjID0gbmRlc2M7XFxuIFxcdG5ldGlmX25hcGlfYWRkKGV0aC1cXHUwMDNlbmFwaV9kZXYsIFxcdTAwMjZxLVxcdTAwM2VuYXBpLCBhaXJvaGFfcWRtYV9yeF9uYXBpX3BvbGwpO1xcbiBcXG5AQCAtODQ4LDcgKzExMDMsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdFxcdFxcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XFxuIFxcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfUlhfRE1BX0lEWChxaWQpLCBSWF9SSU5HX0RNQV9JRFhfTUFTSyxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cXHUwMDNlaGVhZCkpO1xcbi1cXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuK1xcdGlmIChscm9fcSlcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXFxuK1xcdFxcdFxcdFxcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXFxuK1xcdFxcdFxcdFxcdFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHEpO1xcbiBcXG5AQCAtODcwLDYgKzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXFxuIFxcdFxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVxcdTAwM2VwYWdlX3Bvb2wpKTtcXG4gXFx0XFx0cGFnZV9wb29sX3B1dF9mdWxsX3BhZ2UocS1cXHUwMDNlcGFnZV9wb29sLCBwYWdlLCBmYWxzZSk7XFxuIFxcdFxcdC8qIFJlc2V0IERNQSBkZXNjcmlwdG9yICovXFxuK1xcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VjdHJsLCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VhZGRyLCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VkYXRhLCAwKTtcXG5AQCAtMTg5Niw2ICsyMTU3LDM0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfaHdfc3RhdHMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGV0aC1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdGludCBqO1xcbitcXG4rXFx0XFx0aWYgKCFwb3J0KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXFx1MDAzZWRldnMpOyBqKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXFx1MDAzZWRldnNbal07XFxuK1xcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWl0ZXJfZGV2KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoaXRlcl9kZXYpO1xcbitcXHRcXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbkBAIC0xOTEzLDE0ICsyMjAyLDI4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4tXFx0aW50IGVycjtcXG4rXFx0aW50IHFkbWFfaWQsIGVycjtcXG4rXFxuK1xcdC8qIEhXIEdSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlblxcbitcXHQgKiBhbGwgdGhlIGRldmljZXMgdXNpbmcgaXQuIFJlZnVzZSB0byBvcGVuIGEgc2Vjb25kIGRldmljZSBvblxcbitcXHQgKiB0aGUgc2FtZSBRRE1BIGlmIEhXIEdSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdFxcbitcXHQgKiBvciBpZiB0aGlzIGRldmljZSBoYXMgSFcgR1JPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxcbitcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNnFkbWEtXFx1MDAzZWV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVxcdTAwM2VldGgsIHFkbWFfaWQpIHx8XFxuK1xcdFxcdFxcdFxcdChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKSkge1xcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsIFxcXCJyZXF1aXJlZCB0byBkaXNhYmxlIEhXIEdSTyBvbiBRRE1BJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBxZG1hX2lkKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNiArMjI0MCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuIFxcbitcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xOTU0LDYgKzIyNjAsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cXHUwMDNlZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xcbitcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19IVylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIxMDQsNiArMjQxNCwzNCBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9kZXZfY2hlY2tfaHdfZ3JvKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldiwgXFxcIkhXIEdSTyBpcyBlbmFibGVkIG9uIFFETUElZFxcXFxuXFxcIiwgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdHFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFxZG1hX2lkXTtcXG4rXFx0cWRtYV9pZCA9IHFkbWEgLSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWzBdO1xcbitcXG4rXFx0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuK1xcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiSFcgR1JPIGlzIGVuYWJsZWQgb24gZGVzdGluYXRpb24gUURNQSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuQEAgLTIxMjAsNiArMjQ1OCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRxZG1hLVxcdTAwM2V1c2VycysrO1xcbiBcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG5AQCAtMjEzNiw4ICsyNDc1LDEyIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRpZiAoY3VyX3FkbWEpIHtcXG4rXFx0XFx0Y3VyX3FkbWEtXFx1MDAzZXVzZXJzLS07XFxuIFxcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMjg4LDYgKzI2MzEsMzYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEpXFxuK1xcdFxcdGZlYXR1cmVzIFxcdTAwMjY9IH5ORVRJRl9GX0dST19IVztcXG4rXFxuK1xcdHJldHVybiBmZWF0dXJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4re1xcbitcXHRuZXRkZXZfZmVhdHVyZXNfdCBkaWZmID0gbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAoIShkaWZmIFxcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuQEAgLTMxOTksNyArMzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IGVyciA9IC1FQlVTWTtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWCkge1xcbkBAIC0zMjEwLDYgKzM1ODMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIFxcbiBcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbkBAIC0zMjE4LDYgKzM1OTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XFxuQEAgLTMzNDMsNiArMzcyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcFxcdFxcdD0gYWlyb2hhX2Rldl9zdG9wLFxcbiBcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IGFpcm9oYV9kZXZfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zZWxlY3RfcXVldWVcXHQ9IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlLFxcbitcXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMsXFxuK1xcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBhaXJvaGFfZGV2X3htaXQsXFxuIFxcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCxcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsXFxuQEAgLTM0MzAsMTEgKzM4MTAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4tXFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcXG4tXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfFxcbi1cXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX1RDO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuLVxcdG5ldGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuK1xcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVMgfCBORVRJRl9GX0dST19IVztcXG4rXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBBSVJPSEFfSFdfRkVBVFVSRVM7XFxuK1xcdG5ldGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUztcXG4gXFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXFx1MDAzZWRldik7XFxuIFxcbiBcXHQvKiByZXNlcnZlIGh3IHF1ZXVlcyBmb3IgSFRCIG9mZmxvYWRpbmcgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBmYTlhOGVkY2UyMmZmLi45YjU1YWJjNjMwNDg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuQEAgLTQ1LDYgKzQ1LDE4IEBAXFxuIFxcdCAoX24pID09IDE1ID8gMTI4IDpcXHRcXHRcXFxcXFxuIFxcdCAoX24pID09ICAwID8gMTAyNCA6IDE2KVxcbiBcXG4rI2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVJcXHRcXHRnZXRfb3JkZXIoU1pfMTZLKVxcbisjZGVmaW5lIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVNcXHQ4XFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1xcdFxcdEdFTk1BU0soMzEsIDI0KVxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlRcXHQ2NFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVxcdDEwMFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRVxcdDIwMDBcXG4rXFxuKyNkZWZpbmUgQUlST0hBX0hXX0ZFQVRVUkVTXFx0XFx0XFx0XFxcXFxcbitcXHQoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxcdFxcXFxcXG4rXFx0IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcXHRcXFxcXFxuK1xcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxcbitcXG4gI2RlZmluZSBQU0VfUlNWX1BBR0VTXFx0XFx0XFx0MTI4XFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1xcdFxcdDY0XFxuIFxcbkBAIC01MzgsNyArNTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8ge1xcbiBcXG4gLyogUlggcXVldWUgdG8gSVJRIG1hcHBpbmc6IEJJVChxKSBpbiBJUlEobikgKi9cXG4gI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDgzOWZcXG4tI2RlZmluZSBSWF9JUlExX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDdmZTAwMDAwXFxuKyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXFx0XFx0XFx0MHhmZmUwMDAwMFxcbiAjZGVmaW5lIFJYX0lSUTJfQkFOS19QSU5fTUFTS1xcdFxcdFxcdDB4MjBcXG4gI2RlZmluZSBSWF9JUlEzX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDQwXFxuICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pXFx0XFx0XFxcXFxcbkBAIC01NjAsNiArNTcyLDggQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFx0dm9pZCBfX2lvbWVtICpyZWdzO1xcbiBcXG4rXFx0aW50IHVzZXJzO1xcbitcXG4gXFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcXG4gXFxuIFxcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcXG5AQCAtNzE0LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4gXFx0cmV0dXJuIGV0aC1cXHUwMDNlc29jLVxcdTAwM2V2ZXJzaW9uID09IDB4NzU4MztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IHEtXFx1MDAzZXFkbWE7XFxuK1xcdGludCBxaWQgPSBxIC0gXFx1MDAyNnFkbWEtXFx1MDAzZXFfcnhbMF07XFxuK1xcbitcXHQvKiBFTjc1ODEgU29DIHN1cHBvcnRzIGF0IG1vc3QgOCBMUk8gcnggcXVldWVzICovXFxuK1xcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXFx1MDAzZVxcbitcXHRcXHQgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpO1xcbitcXG4rXFx0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXFx1MDAyNiBCSVQocWlkKSk7XFxuK31cXG4rXFxuIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVxcdFxcXFxcXG4gXFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXFx1MDAzY1xcdTAwM2MgMyksXFx0KCgoX24pICUgNCkgXFx1MDAzY1xcdTAwM2MgMykpXFxuIFxcbisjZGVmaW5lIFJFR19DRE1fTFJPX1JYUShfbiwgX20pXFx0XFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcXHUwMDI2IDB4NCkpXFxuKyNkZWZpbmUgTFJPX1JYUV9NQVNLKF9uKVxcdFxcdEdFTk1BU0soNCArICgoKF9uKSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwMjYgMHgzKSBcXHUwMDNjXFx1MDAzYyAzKVxcbitcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcXHRcXHQoQ0RNX0JBU0UoX24pICsgMHg4MClcXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIFJFR19DRE1fTFJPX0xJTUlUKF9uKVxcdFxcdChDRE1fQkFTRShfbikgKyAweDg0KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX05VTV9NQVNLXFx0XFx0R0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0dfU0laRV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMClcXG4rXFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXFx0KENETV9CQVNFKF9uKSArIDB4ODgpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0dfVElNRV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMClcXG4rXFxuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVxcdFxcdEdETV9CQVNFKF9uKVxcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1xcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcXHRcXHRCSVQoMjMpXFxuQEAgLTg4Nyw5ICs5MDEsMTUgQEBcXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXFx0R0VOTUFTSygyNSwgMjEpXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQ1JTTl9NQVNLXFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcXHRHRU5NQVNLKDE1LCAwKVxcbisvKiBSWCBNU0cyICovXFxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcXHRHRU5NQVNLKDMxLCAyNClcXG4rI2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1xcdEdFTk1BU0soNiwgMClcXG4rLyogUlggTVNHMyAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTS1xcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XFxuLVxcdF9fbGUzMiByc3Y7XFxuK1xcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XFxuIFxcdF9fbGUzMiBjdHJsO1xcbiBcXHRfX2xlMzIgYWRkcjtcXG4gXFx0X19sZTMyIGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjM3LjQ1NTQ0NzI1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNzM0OTE5Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2M2MjQyYTk4N2FlNGZiOGViNmY2MjdiYjVmMmM0YTgxMzc1NjZhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6MjI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyb2hhX3JlZ3MuaFwiXG5AQCAtNDkxLDYgKzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCxcbitcdFx0XHRcdCAgICAgaW50IGxyb19xdWV1ZV9pbmRleCwgaW50IHFpZCxcbitcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuK3tcbitcdGludCBpZCA9IHFkbWFfaWQgKyAxO1xuK1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcbitcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfU0laRV9NQVNLLCBidWZfc2l6ZSkgfFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX05VTV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4rXHRcdCAgICAgIENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyxcbitcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4rXHRcdFx0XHQgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FKSB8XG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSxcbitcdFx0ICAgICAgTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksXG4rXHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0NETV9MUk9fRU4oaWQpLCBCSVQobHJvX3F1ZXVlX2luZGV4KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcbit7XG4rXHRpbnQgaSwgaWQgPSBxZG1hX2lkICsgMTtcbitcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcbitcdFx0XHRDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4rXHRcdFx0Q0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVM7IGkrKylcbitcdFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fUlhRKGlkLCBpKSwgTFJPX1JYUV9NQVNLKGkpKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKVxuK3tcbitcdHJldHVybiBhaXJvaGFfZmVfZ2V0KGV0aCwgUkVHX0NETV9MUk9fRU4ocWRtYV9pZCArIDEpLFxuK1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcdGludCBpLCBscm9fcXVldWVfaW5kZXggPSAwO1xuK1xuK1x0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXHUwMDNlcV9yeCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxID0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4W2ldO1xuK1x0XHR1MzIgc2l6ZTtcbitcbitcdFx0aWYgKCFxLVx1MDAzZW5kZXNjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuK1x0XHRzaXplID0gbWluX3QodTMyLCBzaXplLCBBSVJPSEFfTUFYX1JYX1NJWkUpO1xuK1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4rXHRcdFx0XHRcdCBzaXplKTtcbitcdFx0bHJvX3F1ZXVlX2luZGV4Kys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbitcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuK1xuK1x0aWYgKCFhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWlyb2hhX2ZlX2xyb19kaXNhYmxlKGV0aCwgcWRtYV9pZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX2ZlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG4gXHRhaXJvaGFfZmVfbWFjY3JfaW5pdChldGgpO1xuQEAgLTYxNiw2ICs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0ZS1cdTAwM2VkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSkgKyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0dmFsID0gRklFTERfUFJFUChRRE1BX0RFU0NfTEVOX01BU0ssIGUtXHUwMDNlZG1hX2xlbik7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCBjcHVfdG9fbGUzMih2YWwpKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIGNwdV90b19sZTMyKGUtXHUwMDNlZG1hX2FkZHIpKTtcbkBAIC02NTcsMTggKzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpXG4gXHRyZXR1cm4gcG9ydC1cdTAwM2VkZXZzW2RdID8gcG9ydC1cdTAwM2VkZXZzW2RdIDogRVJSX1BUUigtRU5PREVWKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLFxuK1x0XHRcdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgYWdnX2NvdW50KVxuK3tcbitcdHUzMiBtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMSkpO1xuK1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHR1MzIgbXNnMyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzMpKTtcbitcdHUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgZGF0YV9sZW47XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4rXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHN0cnVjdCB0Y3BoZHIgKnRoO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRib29sIGlwdjQsIGlwdjY7XG4rXG4rXHRpcHY0ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNF9NQVNLLCBtc2cxKTtcbitcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xuK1x0aWYgKCFpcHY0IFx1MDAyNlx1MDAyNiAhaXB2NilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRsMl9sZW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0ssIG1zZzIpO1xuK1xuK1x0aWYgKGlwdjQpIHtcbitcdFx0c3RydWN0IGlwaGRyICppcGg7XG4rXG4rXHRcdGlmIChsZW4gXHUwMDNjIGwyX2xlbiArIHNpemVvZigqaXBoKSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXHRcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1xuK1x0XHR0aF9vZmYgPSBsMl9sZW4gKyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4rXHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXBoLVx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXG4rXHRcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gTkVYVEhEUl9UQ1ApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSB0aF9vZmYpO1xuK1x0fVxuK1xuK1x0aWYgKGxlbiBcdTAwM2MgdGhfb2ZmICsgc2l6ZW9mKCp0aCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShlLVx1MDAzZWJ1ZiArIHRoX29mZik7XG4rXHRpZiAodGgtXHUwMDNlZG9mZiBcdTAwM2MgNSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbitcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSywgbXNnMyk7XG4rXHR0Y3BfYWNrX3NlcSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZWRhdGEpKTtcbitcdHRoLVx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XG4rXHR0aC1cdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcbitcbitcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXG4rXHRpZiAodGgtXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcbitcdFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggKyAxKTtcbitcbitcdFx0aWYgKHRvcHQgPT0gKChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcdTAwM2NcdTAwM2MgMTYpIHxcbitcdFx0XHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFx1MDAzY1x1MDAzYyA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKSkge1xuK1x0XHRcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xuK1x0XHRcdF9fbGUzMiB0Y3BfdHNfcmVwbHkgPSBSRUFEX09OQ0UoZGVzYy1cdTAwM2V0Y3BfdHNfcmVwbHkpO1xuK1xuK1x0XHRcdC8qIFRoZSBmaWVsZCBpcyBwcmUtemVyb2VkIGluIHRoZSBwb3N0ZWQgZGVzY3JpcHRvcixcbitcdFx0XHQgKiBzbyBhIG5vbi16ZXJvIHZhbHVlIGlzIHRoZSBoYXJkd2FyZSBjb25maXJtaW5nIHRoZVxuK1x0XHRcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxuK1x0XHRcdCAqIHVudG91Y2hlZCBvdGhlcndpc2UsIHNpbmNlIHRoZSBoYXJkd2FyZSBtYXkgbm90XG4rXHRcdFx0ICogcG9wdWxhdGUgaXQgZm9yIGV2ZXJ5IGFnZ3JlZ2F0ZS5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAodGNwX3RzX3JlcGx5KVxuK1x0XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXG4rXHRcdFx0XHRcdFx0ICAgcHRyKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGlwdjQpIHtcbitcdFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGUtXHUwMDNlYnVmICsgbDJfbGVuKTtcbitcbitcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXG4rXHRcdHRoLVx1MDAzZWNoZWNrID0gfnRjcF92Nl9jaGVjayhsZW4gLSB0aF9vZmYsIFx1MDAyNmlwNmgtXHUwMDNlc2FkZHIsXG4rXHRcdFx0XHRcdCAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkciwgMCk7XG4rXHR9XG4rXG4rXHQvKiBTcGxpdCBuZXR3b3JrIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gcmVseSBvbiBHUk8uXG4rXHQgKiBXZSBuZWVkIHRvIGRvIGl0IGluIHRoZSBkcml2ZXIgc2luY2UgdGhlIE5JQyBkb2VzXG4rXHQgKiBub3Qgc3VwcG9ydCBpdC5cbitcdCAqL1xuK1x0c2tiID0gbmFwaV9hbGxvY19za2IoXHUwMDI2cS1cdTAwM2VuYXBpLCBkYXRhX29mZik7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRfX3NrYl9wdXQoc2tiLCBkYXRhX29mZik7XG4rXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGUtXHUwMDNlYnVmLCBkYXRhX29mZik7XG4rXG4rXHRwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoZS1cdTAwM2VidWYpO1xuK1x0ZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjtcbitcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbitcdHNrYl9hZGRfcnhfZnJhZyhza2IsIHNoaW5mby1cdTAwM2Vucl9mcmFncywgcGFnZSxcbitcdFx0XHRlLVx1MDAzZWJ1ZiArIGRhdGFfb2ZmIC0gcGFnZV9hZGRyZXNzKHBhZ2UpLCBkYXRhX2xlbixcbitcdFx0XHRxLVx1MDAzZWJ1Zl9zaXplKTtcbitcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcbitcdC8qIEhXIGRvZXMgbm90IHJlcG9ydCB0aGUgcGVyLXNlZ21lbnQgTVNTLCBzbyBhcHByb3hpbWF0ZSBpdCBhc1xuK1x0ICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzXG4rXHQgKiB3aXRoIGEgc2hvcnRlciB0YWlsIHRoaXMgc3RpbGwgcmUtc2VnbWVudHMgaW50byBleGFjdGx5XG4rXHQgKiBhZ2dfY291bnQgc2VnbWVudHMsIGtlZXBpbmcgZ3NvX3NpemUvZ3NvX3NlZ3MgYW5kIHRoZSBwYWNrZXRcbitcdCAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuXG4rXHQgKi9cbitcdHNoaW5mby1cdTAwM2Vnc29fc2l6ZSA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgYWdnX2NvdW50KTtcbitcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbitcbitcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgKyB0aF9vZmY7XG4rXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdHUzMiBsZW4sIHUzMiBhZ2dfY291bnQpXG4re1xuK1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxLVx1MDAzZXFkbWEtXHUwMDNlcV9yeFswXTtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoYWdnX2NvdW50IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHsgLyogTFJPICovXG4rXHRcdHNrYiA9IGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgZSwgbGVuLCBhZ2dfY291bnQpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH0gZWxzZSB7XG4rXHRcdHNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLCBxLVx1MDAzZWJ1Zl9zaXplKTtcbitcdFx0aWYgKCFza2IpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdHNrYl9yZXNlcnZlKHNrYiwgQUlST0hBX1JYX0hFQURST09NKTtcbitcdFx0X19za2JfcHV0KHNrYiwgbGVuKTtcbitcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuK1x0fVxuK1xuK1x0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbitcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4rXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcWlkKTtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCk7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4tXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxLVx1MDAzZXFkbWEtXHUwMDNlZXRoO1xuIFx0aW50IGRvbmUgPSAwO1xuIFxuIFx0d2hpbGUgKGRvbmUgXHUwMDNjIGJ1ZGdldCkge1xuK1x0XHR1MzIgaGFzaCwgcmVhc29uLCBtc2cxLCBtc2cyLCBkZXNjX2N0cmwsIGFnZ19jb3VudDtcbiBcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFx1MDAyNnEtXHUwMDNlZW50cnlbcS1cdTAwM2V0YWlsXTtcbiBcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MgPSBcdTAwMjZxLVx1MDAzZWRlc2NbcS1cdTAwM2V0YWlsXTtcbi1cdFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsO1xuIFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcbiBcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdFx0aW50IGRhdGFfbGVuLCBsZW47XG5AQCAtNjkyLDI0ICs5NDcsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdGlmICghbGVuIHx8IGRhdGFfbGVuIFx1MDAzYyBsZW4pXG4gXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4gXG4rXHRcdG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4rXHRcdGlmIChhZ2dfY291bnQgXHUwMDNlIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpXG4rXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4rXG4gXHRcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoZGV2KSlcbiBcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiBcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuIFx0XHRpZiAoIXEtXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xuLVx0XHRcdHEtXHUwMDNlc2tiID0gbmFwaV9idWlsZF9za2IoZS1cdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXG4tXHRcdFx0XHRcdFx0cS1cdTAwM2VidWZfc2l6ZSk7XG4rXHRcdFx0cS1cdTAwM2Vza2IgPSBhaXJvaGFfcWRtYV9idWlsZF9yeF9za2IocSwgZGVzYywgZSwgbmV0ZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICBsZW4sIGFnZ19jb3VudCk7XG4gXHRcdFx0aWYgKCFxLVx1MDAzZXNrYilcbiBcdFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuLVxuLVx0XHRcdHNrYl9yZXNlcnZlKHEtXHUwMDNlc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pO1xuLVx0XHRcdF9fc2tiX3B1dChxLVx1MDAzZXNrYiwgbGVuKTtcbi1cdFx0XHRza2JfbWFya19mb3JfcmVjeWNsZShxLVx1MDAzZXNrYik7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuLVx0XHRcdHEtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cdTAwM2Vza2IsIG5ldGRldik7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4tXHRcdFx0c2tiX3JlY29yZF9yeF9xdWV1ZShxLVx1MDAzZXNrYiwgcWlkKTtcbiBcdFx0fSBlbHNlIHsgLyogc2NhdHRlcmVkIGZyYW1lICovXG4gXHRcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVx1MDAzZXNrYik7XG4gXHRcdFx0aW50IG5yX2ZyYWdzID0gc2hpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuQEAgLTgwMCwxMiArMTA1MiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbitcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiBcdFx0LnBvb2xfc2l6ZSA9IDI1NixcbiBcdFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXG4gXHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuLVx0XHQubWF4X2xlbiA9IFBBR0VfU0laRSxcbiBcdFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcbiBcdFx0LmRldiA9IHFkbWEtXHUwMDNlZXRoLVx1MDAzZWRldixcbiBcdFx0Lm5hcGkgPSBcdTAwMjZxLVx1MDAzZW5hcGksXG5AQCAtODEzLDkgKzEwNjMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXSwgdGhyO1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4rXHRscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTtcbiBcbiBcdHEtXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXHUwMDNlZW50cnkpLFxuIFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5AQCAtODI3LDYgKzEwNzgsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdGlmICghcS1cdTAwM2VkZXNjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbitcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBwcF9wYXJhbXMub3JkZXI7XG4rXG4gXHRxLVx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiBcdGlmIChJU19FUlIocS1cdTAwM2VwYWdlX3Bvb2wpKSB7XG4gXHRcdGludCBlcnIgPSBQVFJfRVJSKHEtXHUwMDNlcGFnZV9wb29sKTtcbkBAIC04MzUsNiArMTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0cS1cdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XG4gXHRxLVx1MDAzZW5kZXNjID0gbmRlc2M7XG4gXHRuZXRpZl9uYXBpX2FkZChldGgtXHUwMDNlbmFwaV9kZXYsIFx1MDAyNnEtXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcbiBcbkBAIC04NDgsNyArMTEwMywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdFx0XHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xuIFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXHUwMDNlaGVhZCkpO1xuLVx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xuK1x0aWYgKGxyb19xKVxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbitcdFx0XHRcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxuK1x0XHRcdFx0UlhfUklOR19TR19FTl9NQVNLKTtcbiBcbiBcdGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUocSk7XG4gXG5AQCAtODcwLDYgKzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWN0cmwsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlYWRkciwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VkYXRhLCAwKTtcbkBAIC0xODk2LDYgKzIxNTcsMzQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9od19zdGF0cyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlc3RhdHNfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLVx1MDAzZXBvcnRzW2ldO1xuK1x0XHRpbnQgajtcbitcbitcdFx0aWYgKCFwb3J0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXHUwMDNlZGV2cyk7IGorKykge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVx1MDAzZWRldnNbal07XG4rXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdFx0XHRpZiAoIWl0ZXJfZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7XG4rXHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTE5MTMsMTQgKzIyMDIsMjggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4gXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4tXHRpbnQgZXJyO1xuK1x0aW50IHFkbWFfaWQsIGVycjtcbitcbitcdC8qIEhXIEdSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlblxuK1x0ICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb25cbitcdCAqIHRoZSBzYW1lIFFETUEgaWYgSFcgR1JPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0XG4rXHQgKiBvciBpZiB0aGlzIGRldmljZSBoYXMgSFcgR1JPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxuK1x0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2cWRtYS1cdTAwM2VldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChxZG1hLVx1MDAzZXVzZXJzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHFkbWEtXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxuK1x0XHRcdFx0KG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKSkge1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwicmVxdWlyZWQgdG8gZGlzYWJsZSBIVyBHUk8gb24gUURNQSVkXFxuXCIsXG4rXHRcdFx0ICAgIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkzNyw2ICsyMjQwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgKzIyNjAsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEwNCw2ICsyNDE0LDM0IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW50IGFpcm9oYV9kZXZfY2hlY2tfaHdfZ3JvKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuK1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwiSFcgR1JPIGlzIGVuYWJsZWQgb24gUURNQSVkXFxuXCIsIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFxZG1hX2lkXTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4rXG4rXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbitcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdCAgICBcIkhXIEdSTyBpcyBlbmFibGVkIG9uIGRlc3RpbmF0aW9uIFFETUElZFxcblwiLFxuK1x0XHRcdCAgICBxZG1hX2lkKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMjEyMCw2ICsyNDU4LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYS1cdTAwM2V1c2VycysrO1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCArMjQ3NSwxMiBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4gXHR9XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Y3VyX3FkbWEtXHUwMDNldXNlcnMtLTtcbiBcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4rXG4rXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiArMjYzMSwzNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbitcdFx0ZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9HUk9fSFc7XG4rXG4rXHRyZXR1cm4gZmVhdHVyZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuK3tcbitcdG5ldGRldl9mZWF0dXJlc190IGRpZmYgPSBuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmICghKGRpZmYgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuQEAgLTMxOTksNyArMzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWCkge1xuQEAgLTMyMTAsNiArMzU4MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gXG4gXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuQEAgLTMyMTgsNiArMzU5NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdFx0ICAgXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwiKTtcbitcdFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4gXHRcdH1cbiBcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbkBAIC0zMzQzLDYgKzM3MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wXHRcdD0gYWlyb2hhX2Rldl9zdG9wLFxuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gYWlyb2hhX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zZWxlY3RfcXVldWVcdD0gYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUsXG4rXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyxcbitcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYWlyb2hhX2Rldl94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgPSBhaXJvaGFfZGV2X2dldF9zdGF0czY0LFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gYWlyb2hhX2Rldl9zZXRfbWFjYWRkcixcbkBAIC0zNDMwLDExICszODEwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcbiBcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbi1cdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8XG4tXHRcdFx0ICAgICAgTkVUSUZfRl9IV19UQztcbi1cdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG4tXHRuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbitcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfR1JPX0hXO1xuK1x0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IEFJUk9IQV9IV19GRUFUVVJFUztcbitcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXHUwMDNlZGV2KTtcbiBcbiBcdC8qIHJlc2VydmUgaHcgcXVldWVzIGZvciBIVEIgb2ZmbG9hZGluZyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmYTlhOGVkY2UyMmZmLi45YjU1YWJjNjMwNDg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTQ1LDYgKzQ1LDE4IEBAXG4gXHQgKF9uKSA9PSAxNSA/IDEyOCA6XHRcdFxcXG4gXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAxNilcbiBcbisjZGVmaW5lIEFJUk9IQV9MUk9fUEFHRV9PUkRFUlx0XHRnZXRfb3JkZXIoU1pfMTZLKVxuKyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFU1x0OFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1x0XHRHRU5NQVNLKDMxLCAyNClcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlRcdDY0XG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcdDEwMFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FXHQyMDAwXG4rXG4rI2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVNcdFx0XHRcXFxuK1x0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcdFxcXG4rXHQgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9JUFY2X0NTVU0gfFx0XFxcbitcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxuK1xuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1x0XHRcdDEyOFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1x0XHQ2NFxuIFxuQEAgLTUzOCw3ICs1NTAsNyBAQCBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyB7XG4gXG4gLyogUlggcXVldWUgdG8gSVJRIG1hcHBpbmc6IEJJVChxKSBpbiBJUlEobikgKi9cbiAjZGVmaW5lIFJYX0lSUTBfQkFOS19QSU5fTUFTS1x0XHRcdDB4ODM5ZlxuLSNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXHRcdFx0MHg3ZmUwMDAwMFxuKyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXHRcdFx0MHhmZmUwMDAwMFxuICNkZWZpbmUgUlhfSVJRMl9CQU5LX1BJTl9NQVNLXHRcdFx0MHgyMFxuICNkZWZpbmUgUlhfSVJRM19CQU5LX1BJTl9NQVNLXHRcdFx0MHg0MFxuICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pXHRcdFxcXG5AQCAtNTYwLDYgKzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuK1x0aW50IHVzZXJzO1xuK1xuIFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcbkBAIC03MTQsNiArNzI4LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4rXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcbitcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbitcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXHUwMDNlXG4rXHRcdCAgICAgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUyk7XG4rXG4rXHRyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyBcdTAwMjYgQklUKHFpZCkpO1xuK31cbitcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcbiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pXHRcXFxuIFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpLFx0KCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpKVxuIFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcdTAwMjYgMHg0KSlcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICsgKCgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDI2IDB4MykgXHUwMDNjXHUwMDNjIDMpXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODApXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODQpXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICsgMHg4OClcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVx0XHRHRE1fQkFTRShfbilcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1x0XHRcdEJJVCgyOClcbiAjZGVmaW5lIEdETV9EUk9QX0NSQ19FUlJfTUFTS1x0XHRCSVQoMjMpXG5AQCAtODg3LDkgKzkwMSwxNSBAQFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1x0R0VOTUFTSygyNSwgMjEpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0tcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcdEdFTk1BU0soMTUsIDApXG4rLyogUlggTVNHMiAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcdEdFTk1BU0soNiwgMClcbisvKiBSWCBNU0czICovXG4rI2RlZmluZSBRRE1BX0VUSF9SWE1TR19BR0dfTEVOX01BU0tcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLXHRHRU5NQVNLKDE1LCAwKVxuIFxuIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjIHtcbi1cdF9fbGUzMiByc3Y7XG4rXHRfX2xlMzIgdGNwX3RzX3JlcGx5O1xuIFx0X19sZTMyIGN0cmw7XG4gXHRfX2xlMzIgYWRkcjtcbiBcdF9fbGUzMiBkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzcuNDU1NDQ5MTkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxMDI1ODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AsIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuXG5cbkl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTyksIG9yIEhXIEdSTyBzdXBwb3J0LCBiZWluZyBhZGRlZCB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIG1vZGlmaWVkIOKAkyBgYWlyb2hhX2V0aC5jYCwgYC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYCDigJMgY29uZmlybSB0aGlzLiBPa2F5LCBJIHNlZSB0aGUgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVuYWJsaW5nL2Rpc2FibGluZyBMUk8gYXQgdGhlIFJYIHF1ZXVlIGFuZCBkZXZpY2UgbGV2ZWw6IGBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGVgLCBgYWlyb2hhX2ZlX2xyb19kaXNhYmxlYCwgYGFpcm9oYV9kZXZfbHJvX2VuYWJsZWAsIGFuZCBgYWlyb2hhX2Rldl9scm9fZGlzYWJsZWAuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyB0byBidWlsZCBhbmQgaGFuZGxlIHRoZSBTS0JzIOKAkyBgYWlyb2hhX3FkbWFfbHJvX3J4X3NrYmAsIGFuZCBgYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiYOKAkywgYW5kIGNyaXRpY2FsIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3NgLCBgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZWAsIGBhaXJvaGFfZGV2X29wZW5gLCBgYWlyb2hhX2Rldl9zdG9wYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3NldF9mZWF0dXJlc2AsIGFuZCBgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXNgLiBUaGVzZSBhcmUgYWxsIHNpZ25zIG9mIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBSWCBwYXRoLlxuXG5NeSBuZXh0IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBUaGlzIGlzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBhbmQgYmFzZWQgb24gbXkgcHJpb3Iga25vd2xlZGdlLCBpdCdzIHNwZWNpZmljIHRvIHRoZSBFTjc1ODEgU29DLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIG9yIGEgUENJIGRyaXZlci4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBhaXJvaGFfZXRoYCBvciBgYWlyb2hhX3Byb2JlYCB0byBmaWd1cmUgdGhpcyBvdXQuIElmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHJlYWNoaW5nIGl0IGluIGEgc3RhbmRhcmQgVk0gc2V0dXAgbWlnaHQgYmUgdHJpY2tpZXIsIGJ1dCBjZXJ0YWlubHkgbm90IGltcG9zc2libGUuIElmIGl0J3MgYSBQQ0kgZHJpdmVyLCB0aGF0J3MgYmV0dGVyLCBzaW5jZSBpdCdzIGxpa2VseSB3ZSBjYW4gYXNzaWduIHRoZSBlbXVsYXRlZCBkZXZpY2UgdG8gdGhlIFZNLiBJZiBpdCdzIG5vdCBlYXNpbHkgcmVhY2hhYmxlLCB0aGVuIGl0IGRyb3BzIGluIHByaW9yaXR5IGZvciB0aGlzIGtpbmQgb2YgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo0Ni44NjU3MTA0NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNzg2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhLipwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkzOD1zdGF0aWMgaW50IGFpcm9oYV9yZWdpc3Rlcl9nZG1fZGV2aWNlcyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NzpzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQzMzI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQzMzM6XFx0LnByb2JlID0gYWlyb2hhX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMzNC1cXHQucmVtb3ZlID0gYWlyb2hhX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2OTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MTQ6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxNS1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjQ2Ljk2Mzk5NTc1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTE3MjU4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBgcGxhdGZvcm1fZHJpdmVyYCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIFNvQy1zcGVjaWZpYywgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBhIHBhcnRpY3VsYXIgU29DLCBsaWtlIHRoaXMgQWlyb2hhIEVONzU4MSwgYXJlIHVzdWFsbHkgYSBuby1nbyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1bmxlc3MgdGhlcmUncyBzb21lIGN1c3RvbSBlbXVsYXRvciBzZXR1cCBmb3IgaXQsIG9yIGl0J3MgZGVzaWduZWQgdG8gYmUgbW9yZSBnZW5lcmljLiBHaXZlbiB0aGUgbGlrZWx5IHBsYXRmb3JtIGRlcGVuZGVuY2UsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHN0b3J5IOKAkyBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMsIG9yIGFueSBpbmRpY2F0aW9uIG9mIGJyb2FkZXIgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo1Mi4wNzU3MjM5ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NTg2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyOmNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiQWlyb2hhIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjUyLjE1NzU4Njc0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDEwMDQ3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEtjb25maWcgUmV2aWV3KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBcIkxldCdzIHJlYWQgdGhlIEtjb25maWcuXCIgVGhhdCdzIHRoZSBmaXJzdCBzdGVwLCBpc24ndCBpdD8gQmVmb3JlIGFueSBzZXJpb3VzIHdvcmsgYmVnaW5zLCB5b3UgKmFsd2F5cyogbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgYXJlIHdlIGV2ZW4gc3RhcnRpbmcgZnJvbT8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj9cIlxuXG5NeSBtaW5kJ3MgYWxyZWFkeSBzaWZ0aW5nIHRocm91Z2ggcG9zc2liaWxpdGllcy4gSSdtIHdvbmRlcmluZzpcblxuKiAgIElzIHRoaXMgYSBmcmVzaCBLY29uZmlnLCBvciBvbmUgSSdtIGZhbWlsaWFyIHdpdGg/IFRoYXQgaW5mb3JtcyBteSBhcHByb2FjaC4gSWYgSSBrbm93IGl0LCBJJ2xsIGdvIGZvciBxdWljayBzcGVjaWZpYyBjaGVja3MgZm9yIGNlcnRhaW4gdmFyaWFibGVzLlxuKiAgIEFyZSB0aGVyZSBhbnkgaW5jbHVkZSBkaXJlY3RpdmVzPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHksIGFuZCBkZXRlcm1pbmUgd2hldGhlciBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBLY29uZmlnIGZpbGVzLlxuKiAgIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIGRlZmluZWQ/IElzIGl0IGZvciBhIHNwZWNpZmljIENQVSwgYm9hcmQsIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEkgd2FudCB0byBjb250ZXh0dWFsaXplIHRoaXMgaW1tZWRpYXRlbHkuXG4qICAgQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgb3IgZmVhdHVyZXMsIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGFib3V0IHRvIGtpY2sgaW4gbXkgaW50ZXJuYWwgY29uZmxpY3QgcmVzb2x1dGlvbiBjb2RlIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuXG4qICAgQW0gSSBsb29raW5nIHRvIGNoYW5nZSBzb21ldGhpbmc/IE9yIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUuIFRoYXQgaGVscHMgdG8gZm9jdXMgbXkgaW5pdGlhbCByZXZpZXcuXG5cblNvLCBJJ20gbWVudGFsbHkgc2tldGNoaW5nIG91dCBhIHBsYW4uIEl0J3MgdGltZSB0byBmaW5kIHRoZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjU3LjI1ODU5MzgxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo1Ny4yNTg2ODc0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzMTYzNTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBBaXJvaGEgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKE5FVF9BSVJPSEEpLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgU29DLiBTaW5jZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBpdCAqbmVlZHMqIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBvciBzb21lIGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbiB0byBwcm9iZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGV4ZWN1dGUgdGhlIGNvZGUgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5JbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSwgdGhlcmUncyBubyBBaXJvaGEgU29DIGVtdWxhdGlvbiBieSBkZWZhdWx0LiBUaGF0IG1lYW5zIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGZvciB0aGlzIGRyaXZlciAqd2lsbCBub3QqIGJlIGNhbGxlZC4gQWxsIHRoZXNlIG1vZGlmaWNhdGlvbnMgdG8gYGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3NgLCBgYWlyb2hhX2Rldl9vcGVuYCwgZXRjLiwgYXJlIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlLlxuXG5Db3VsZCBTeXprYWxsZXIgc29tZWhvdyBjcmVhdGUgaXQ/IE1heWJlLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBQb3NzaWJseSwgaWYgaXQgd2FzIGdlbmVyaWNhbGx5IHN1cHBvcnRlZCwgb3IgYSB2aXJ0dWFsIGRldmljZSBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZldGhgLiBCdXQgSSBkb24ndCBzZWUgYW55dGhpbmcgbGlrZSB0aGF0IGhlcmUuIFBsdXMsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQncyBhIG5vLWdvLlxuXG5UaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEl0J3MgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIsIHNvLCBpdCdzIGdvaW5nIHRvIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiLlxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIGp1c3QgdG8gYmUgZXh0cmEgc3VyZS4gSXTigJlzIGFsbCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gLCBzcGVjaWZpY2FsbHkgYGFpcm9oYV9ldGguY2AsIGBhaXJvaGFfZXRoLmhgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBEZWZpbml0ZWx5IGp1c3QgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBub3RoaW5nIGdlbmVyaWMuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgQWlyb2hhIFNvQyBkcml2ZXIgaXMgcGxhdGZvcm0tc3BlY2lmaWMuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuXG5cbkknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjEsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMzowOC4xOTAzMjYwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKiksIHdoaWNoIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyIGZvciBBaXJvaGEgaGFyZHdhcmUuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjM6MDguMTkwMzY4ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2272d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 11:20:53 +0000 UTC FinishedAt: 2026-08-07 11:23:18 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8qKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFpcm9oYSBoYXJkd2FyZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTE6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYzYyNDJhOTg3YWU0ZmI4ZWI2ZjYyN2JiNWYyYzRhODEzNzU2NmE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMToyMjozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkID0gcWRtYV9pZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4mIzQzO1x0XHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcbiYjNDM7XHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksXG4mIzQzO1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4mIzQzO1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4mIzQzO1x0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbiYjNDM7XHRcdHUzMiBzaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcS1cdTAwM2VuZGVzYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiYjNDM7XHRcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XG4mIzQzO1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZSk7XG4mIzQzO1x0XHRscm9fcXVldWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRlLVx1MDAzZWRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDE4ICYjNDM7NzQyLDE4OCBAQCBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBwb3J0LVx1MDAzZWRldnNbZF0gPyBwb3J0LVx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgYWdnX2NvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4mIzQzO1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4mIzQzO1x0dTMyIG1zZzMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2czKSk7XG4mIzQzO1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBkYXRhX2xlbjtcbiYjNDM7XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4mIzQzO1x0dTE2IHRjcF93aW4sIGwyX2xlbjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHN0cnVjdCB0Y3BoZHIgKnRoO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdGJvb2wgaXB2NCwgaXB2NjtcbiYjNDM7XG4mIzQzO1x0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XG4mIzQzO1x0aXB2NiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDZfTUFTSywgbXNnMSk7XG4mIzQzO1x0aWYgKCFpcHY0IFx1MDAyNlx1MDAyNiAhaXB2NilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRsMl9sZW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0ssIG1zZzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoaXB2NCkge1xuJiM0MztcdFx0c3RydWN0IGlwaGRyICppcGg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGxlbiBcdTAwM2MgbDJfbGVuICYjNDM7IHNpemVvZigqaXBoKSlcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyBsMl9sZW4pO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2VpaGwgXHUwMDNjIDUpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdHRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyB0aF9vZmYpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdGlwaC1cdTAwM2V0b3RfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gbDJfbGVuKTtcbiYjNDM7XHRcdGlwaC1cdTAwM2VjaGVjayA9IDA7XG4mIzQzO1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcbiYjNDM7XG4mIzQzO1x0XHR0aF9vZmYgPSBsMl9sZW4gJiM0Mzsgc2l6ZW9mKCppcDZoKTtcbiYjNDM7XHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyBsMl9sZW4pO1xuJiM0MztcdFx0aWYgKGlwNmgtXHUwMDNlbmV4dGhkciAhPSBORVhUSERSX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aXA2aC1cdTAwM2VwYXlsb2FkX2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIHRoX29mZik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGVuIFx1MDAzYyB0aF9vZmYgJiM0Mzsgc2l6ZW9mKCp0aCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShlLVx1MDAzZWJ1ZiAmIzQzOyB0aF9vZmYpO1xuJiM0MztcdGlmICh0aC1cdTAwM2Vkb2ZmIFx1MDAzYyA1KVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7ICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbiYjNDM7XHRpZiAobGVuIFx1MDAzYz0gZGF0YV9vZmYpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0dGNwX3dpbiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19UQ1BfV0lOX01BU0ssIG1zZzMpO1xuJiM0MztcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlZGF0YSkpO1xuJiM0MztcdHRoLVx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XG4mIzQzO1x0dGgtXHUwMDNld2luZG93ID0gY3B1X3RvX2JlMTYodGNwX3dpbik7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXG4mIzQzO1x0aWYgKHRoLVx1MDAzZWRvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkge1xuJiM0MztcdFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRvcHQgPT0gKChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcdTAwM2NcdTAwM2MgMTYpIHxcbiYjNDM7XHRcdFx0ICAgICAoVENQT1BUX1RJTUVTVEFNUCBcdTAwM2NcdTAwM2MgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCkpIHtcbiYjNDM7XHRcdFx0dTggKnB0ciA9ICh1OCAqKXRoICYjNDM7IHNpemVvZigqdGgpICYjNDM7IDIgKiBzaXplb2YoX19iZTMyKTtcbiYjNDM7XHRcdFx0X19sZTMyIHRjcF90c19yZXBseSA9IFJFQURfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXG4mIzQzO1x0XHRcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXG4mIzQzO1x0XHRcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxuJiM0MztcdFx0XHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxuJiM0MztcdFx0XHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKHRjcF90c19yZXBseSlcbiYjNDM7XHRcdFx0XHRwdXRfdW5hbGlnbmVkX2JlMzIobGUzMl90b19jcHUodGNwX3RzX3JlcGx5KSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgcHRyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpcHY0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoZS1cdTAwM2VidWYgJiM0MzsgbDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtXHUwMDNlc2FkZHIsXG4mIzQzO1x0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtXHUwMDNlYnVmICYjNDM7IGwyX2xlbik7XG4mIzQzO1xuJiM0MztcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgXHUwMDI2aXA2aC1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkciwgMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTcGxpdCBuZXR3b3JrIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gcmVseSBvbiBHUk8uXG4mIzQzO1x0ICogV2UgbmVlZCB0byBkbyBpdCBpbiB0aGUgZHJpdmVyIHNpbmNlIHRoZSBOSUMgZG9lc1xuJiM0MztcdCAqIG5vdCBzdXBwb3J0IGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnEtXHUwMDNlbmFwaSwgZGF0YV9vZmYpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdF9fc2tiX3B1dChza2IsIGRhdGFfb2ZmKTtcbiYjNDM7XHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGUtXHUwMDNlYnVmLCBkYXRhX29mZik7XG4mIzQzO1xuJiM0MztcdHBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShlLVx1MDAzZWJ1Zik7XG4mIzQzO1x0ZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjtcbiYjNDM7XHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4mIzQzO1x0c2tiX2FkZF9yeF9mcmFnKHNrYiwgc2hpbmZvLVx1MDAzZW5yX2ZyYWdzLCBwYWdlLFxuJiM0MztcdFx0XHRlLVx1MDAzZWJ1ZiAmIzQzOyBkYXRhX29mZiAtIHBhZ2VfYWRkcmVzcyhwYWdlKSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuJiM0MztcbiYjNDM7XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgPSBpcHY0ID8gU0tCX0dTT19UQ1BWNCA6IFNLQl9HU09fVENQVjY7XG4mIzQzO1x0LyogSFcgZG9lcyBub3QgcmVwb3J0IHRoZSBwZXItc2VnbWVudCBNU1MsIHNvIGFwcHJveGltYXRlIGl0IGFzXG4mIzQzO1x0ICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzXG4mIzQzO1x0ICogd2l0aCBhIHNob3J0ZXIgdGFpbCB0aGlzIHN0aWxsIHJlLXNlZ21lbnRzIGludG8gZXhhY3RseVxuJiM0MztcdCAqIGFnZ19jb3VudCBzZWdtZW50cywga2VlcGluZyBnc29fc2l6ZS9nc29fc2VncyBhbmQgdGhlIHBhY2tldFxuJiM0MztcdCAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBhZ2dfY291bnQpO1xuJiM0MztcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0dTMyIGxlbiwgdTMyIGFnZ19jb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBxaWQgPSBxIC0gXHUwMDI2cS1cdTAwM2VxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XG4mIzQzO1x0aWYgKGFnZ19jb3VudCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7IC8qIExSTyAqL1xuJiM0MztcdFx0c2tiID0gYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihxLCBkZXNjLCBlLCBsZW4sIGFnZ19jb3VudCk7XG4mIzQzO1x0XHRpZiAoIXNrYilcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLCBxLVx1MDAzZWJ1Zl9zaXplKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRza2JfcmVzZXJ2ZShza2IsIEFJUk9IQV9SWF9IRUFEUk9PTSk7XG4mIzQzO1x0XHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xuJiM0MztcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbiYjNDM7XHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxaWQpO1xuJiM0MztcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHNrYjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiB7XG4gXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuLVx0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgZG9uZSA9IDA7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4mIzQzO1x0XHR1MzIgaGFzaCwgcmVhc29uLCBtc2cxLCBtc2cyLCBkZXNjX2N0cmwsIGFnZ19jb3VudDtcbiBcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFx1MDAyNnEtXHUwMDNlZW50cnlbcS1cdTAwM2V0YWlsXTtcbiBcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MgPSBcdTAwMjZxLVx1MDAzZWRlc2NbcS1cdTAwM2V0YWlsXTtcbi1cdFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsO1xuIFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcbiBcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdFx0aW50IGRhdGFfbGVuLCBsZW47XG5AQCAtNjkyLDI0ICYjNDM7OTQ3LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAoIWxlbiB8fCBkYXRhX2xlbiBcdTAwM2MgbGVuKVxuIFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuIFxuJiM0MztcdFx0bXNnMiA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzIpKTtcbiYjNDM7XHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4mIzQzO1x0XHRpZiAoYWdnX2NvdW50IFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiYjNDM7XG4gXHRcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoZGV2KSlcbiBcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiBcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuIFx0XHRpZiAoIXEtXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xuLVx0XHRcdHEtXHUwMDNlc2tiID0gbmFwaV9idWlsZF9za2IoZS1cdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXG4tXHRcdFx0XHRcdFx0cS1cdTAwM2VidWZfc2l6ZSk7XG4mIzQzO1x0XHRcdHEtXHUwMDNlc2tiID0gYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHEsIGRlc2MsIGUsIG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIGxlbiwgYWdnX2NvdW50KTtcbiBcdFx0XHRpZiAoIXEtXHUwMDNlc2tiKVxuIFx0XHRcdFx0Z290byBmcmVlX2ZyYWc7XG4tXG4tXHRcdFx0c2tiX3Jlc2VydmUocS1cdTAwM2Vza2IsIEFJUk9IQV9SWF9IRUFEUk9PTSk7XG4tXHRcdFx0X19za2JfcHV0KHEtXHUwMDNlc2tiLCBsZW4pO1xuLVx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtXHUwMDNlc2tiKTtcbi1cdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbi1cdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbi1cdFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHEtXHUwMDNlc2tiLCBxaWQpO1xuIFx0XHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cbiBcdFx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXHUwMDNlbnJfZnJhZ3M7XG5AQCAtODAwLDEyICYjNDM7MTA1MiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4gXHRcdC5wb29sX3NpemUgPSAyNTYsXG4gXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuIFx0XHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcbi1cdFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHRcdC5kZXYgPSBxZG1hLVx1MDAzZWV0aC1cdTAwM2VkZXYsXG4gXHRcdC5uYXBpID0gXHUwMDI2cS1cdTAwM2VuYXBpLFxuQEAgLTgxMyw5ICYjNDM7MTA2MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiBcdGludCBxaWQgPSBxIC0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4WzBdLCB0aHI7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4mIzQzO1x0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XG4gXG4gXHRxLVx1MDAzZWVudHJ5ID0gZGV2bV9remFsbG9jKGV0aC1cdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVx1MDAzZWVudHJ5KSxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuQEAgLTgyNyw2ICYjNDM7MTA3OCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0aWYgKCFxLVx1MDAzZWRlc2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbiYjNDM7XHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcHBfcGFyYW1zLm9yZGVyO1xuJiM0MztcbiBcdHEtXHUwMDNlcGFnZV9wb29sID0gcGFnZV9wb29sX2NyZWF0ZShcdTAwMjZwcF9wYXJhbXMpO1xuIFx0aWYgKElTX0VSUihxLVx1MDAzZXBhZ2VfcG9vbCkpIHtcbiBcdFx0aW50IGVyciA9IFBUUl9FUlIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuQEAgLTgzNSw2ICYjNDM7MTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdHEtXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xuIFx0cS1cdTAwM2VuZGVzYyA9IG5kZXNjO1xuIFx0bmV0aWZfbmFwaV9hZGQoZXRoLVx1MDAzZW5hcGlfZGV2LCBcdTAwMjZxLVx1MDAzZW5hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7XG4gXG5AQCAtODQ4LDcgJiM0MzsxMTAzLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XG4gXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXG4gXHRcdFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cdTAwM2VoZWFkKSk7XG4tXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XG4mIzQzO1x0aWYgKGxyb19xKVxuJiM0MztcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXG4mIzQzO1x0XHRcdFx0ICBSWF9SSU5HX1NHX0VOX01BU0spO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbiYjNDM7XHRcdFx0XHRSWF9SSU5HX1NHX0VOX01BU0spO1xuIFxuIFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcbiBcbkBAIC04NzAsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlZGF0YSwgMCk7XG5AQCAtMTg5Niw2ICYjNDM7MjE1NywzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUocG9ydC1cdTAwM2VkZXZzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXHUwMDNlZGV2c1tqXTtcbiYjNDM7XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghaXRlcl9kZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcbiYjNDM7XHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0xOTEzLDE0ICYjNDM7MjIwMiwyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbiBcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IHFkbWFfaWQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogSFcgR1JPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuXG4mIzQzO1x0ICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb25cbiYjNDM7XHQgKiB0aGUgc2FtZSBRRE1BIGlmIEhXIEdSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdFxuJiM0MztcdCAqIG9yIGlmIHRoaXMgZGV2aWNlIGhhcyBIVyBHUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZxZG1hLVx1MDAzZWV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVx1MDAzZWV0aCwgcWRtYV9pZCkgfHxcbiYjNDM7XHRcdFx0XHQobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVykpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwmIzM0O3JlcXVpcmVkIHRvIGRpc2FibGUgSFcgR1JPIG9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDYgJiM0MzsyMjQwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgJiM0MzsyMjYwLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTA0LDYgJiM0MzsyNDE0LDM0IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGV2X2NoZWNrX2h3X2dybyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcJiMzNDtIVyBHUk8gaXMgZW5hYmxlZCBvbiBRRE1BJWRcXG5cJiMzNDssIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshcWRtYV9pZF07XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl93YXJuKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0hXIEdSTyBpcyBlbmFibGVkIG9uIGRlc3RpbmF0aW9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbkBAIC0yMTIwLDYgJiM0MzsyNDU4LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHFkbWEtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCAmIzQzOzI0NzUsMTIgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiBcdH1cbiBcbi1cdGlmIChjdXJfcWRtYSlcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdGN1cl9xZG1hLVx1MDAzZXVzZXJzLS07XG4gXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMjg4LDYgJiM0MzsyNjMxLDM2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiYjNDM7XG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0aWYgKHFkbWEtXHUwMDNldXNlcnMgXHUwMDNlIDEpXG4mIzQzO1x0XHRmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0dST19IVztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZlYXR1cmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRuZXRkZXZfZmVhdHVyZXNfdCBkaWZmID0gbmV0ZGV2LVx1MDAzZWZlYXR1cmVzIF4gZmVhdHVyZXM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShkaWZmIFx1MDAyNiBORVRJRl9GX0dST19IVykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19IVylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICYjNDM7MzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4gXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbkBAIC0zMjEwLDYgJiM0MzszNTgzLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi9cbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gXG4gXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuQEAgLTMyMTgsNiAmIzQzOzM1OTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHQgICAgd2FuX2Rldi1cdTAwM2Vwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4gXHRcdFx0XHRcdCAgIFwmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVCVVNZO1xuIFx0XHRcdGdvdG8gZXJyb3JfdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XG5AQCAtMzM0Myw2ICYjNDM7MzcyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBhaXJvaGFfZGV2X3N0b3AsXG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXG4gXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcbiYjNDM7XHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyxcbiYjNDM7XHQubmRvX3NldF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGFpcm9oYV9kZXZfeG1pdCxcbiBcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsXG5AQCAtMzQzMCwxMSAmIzQzOzM4MTAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZhaXJvaGFfZXRodG9vbF9vcHM7XG4gXHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEFJUk9IQV9NQVhfTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuLVx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfFxuLVx0XHRcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0hXX1RDO1xuLVx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbi1cdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuJiM0MztcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfR1JPX0hXO1xuJiM0MztcdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4mIzQzO1x0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIGV0aC1cdTAwM2VkZXYpO1xuIFxuIFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGZhOWE4ZWRjZTIyZmYuLjliNTVhYmM2MzA0ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNDUsNiAmIzQzOzQ1LDE4IEBAXG4gXHQgKF9uKSA9PSAxNSA/IDEyOCA6XHRcdFxcXG4gXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAxNilcbiBcbiYjNDM7I2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVJcdFx0Z2V0X29yZGVyKFNaXzE2SylcbiYjNDM7I2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXHQ4XG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1x0XHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UXHQ2NFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVx0MTAwXG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FXHQyMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1x0XHRcdFxcXG4mIzQzO1x0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcdFxcXG4mIzQzO1x0IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcdFxcXG4mIzQzO1x0IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSFdfVEMpXG4mIzQzO1xuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1x0XHRcdDEyOFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1x0XHQ2NFxuIFxuQEAgLTUzOCw3ICYjNDM7NTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8ge1xuIFxuIC8qIFJYIHF1ZXVlIHRvIElSUSBtYXBwaW5nOiBCSVQocSkgaW4gSVJRKG4pICovXG4gI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0tcdFx0XHQweDgzOWZcbi0jZGVmaW5lIFJYX0lSUTFfQkFOS19QSU5fTUFTS1x0XHRcdDB4N2ZlMDAwMDBcbiYjNDM7I2RlZmluZSBSWF9JUlExX0JBTktfUElOX01BU0tcdFx0XHQweGZmZTAwMDAwXG4gI2RlZmluZSBSWF9JUlEyX0JBTktfUElOX01BU0tcdFx0XHQweDIwXG4gI2RlZmluZSBSWF9JUlEzX0JBTktfUElOX01BU0tcdFx0XHQweDQwXG4gI2RlZmluZSBSWF9JUlFfQkFOS19QSU5fTUFTSyhfbilcdFx0XFxcbkBAIC01NjAsNiAmIzQzOzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuJiM0MztcdGludCB1c2VycztcbiYjNDM7XG4gXHRzdHJ1Y3QgYWlyb2hhX2lycV9iYW5rIGlycV9iYW5rc1tBSVJPSEFfTUFYX05VTV9JUlFfQkFOS1NdO1xuIFxuIFx0c3RydWN0IGFpcm9oYV90eF9pcnFfcXVldWUgcV90eF9pcnFbQUlST0hBX05VTV9UWF9JUlFdO1xuQEAgLTcxNCw2ICYjNDM7NzI4LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1xuJiM0MztcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbiYjNDM7XHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFx1MDAzZVxuJiM0MztcdFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXHUwMDI2IEJJVChxaWQpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBAXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVx0XFxcbiBcdEdFTk1BU0soNCAmIzQzOyAoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMyksXHQoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMykpXG4gXG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pIFx1MDAyNiAweDQpKVxuJiM0MzsjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICYjNDM7ICgoKF9uKSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDgwKVxuJiM0MzsjZGVmaW5lIExST19SWFFfRU5fTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pXHRcdChDRE1fQkFTRShfbikgJiM0MzsgMHg4NClcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0tcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODgpXG4mIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MztcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcdFx0R0RNX0JBU0UoX24pXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcdFx0QklUKDIzKVxuQEAgLTg4Nyw5ICYjNDM7OTAxLDE1IEBAXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXHRHRU5NQVNLKDI1LCAyMSlcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1x0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19QUEVfRU5UUllfTUFTS1x0R0VOTUFTSygxNSwgMClcbiYjNDM7LyogUlggTVNHMiAqL1xuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1x0R0VOTUFTSyg2LCAwKVxuJiM0MzsvKiBSWCBNU0czICovXG4mIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLXHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19UQ1BfV0lOX01BU0tcdEdFTk1BU0soMTUsIDApXG4gXG4gc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2Mge1xuLVx0X19sZTMyIHJzdjtcbiYjNDM7XHRfX2xlMzIgdGNwX3RzX3JlcGx5O1xuIFx0X19sZTMyIGN0cmw7XG4gXHRfX2xlMzIgYWRkcjtcbiBcdF9fbGUzMiBkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNjNjI0MmE5ODdhZTRmYjhlYjZmNjI3YmI1ZjJjNGE4MTM3NTY2YTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDExOjIyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCkBAIC0xMCw4ICYjNDM7MTAsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91NjRfc3RhdHNfc3luYy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9jaGVja3N1bS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC90Y3AuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L3BwcF9kZWZzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7YWlyb2hhX3JlZ3MuaCYjMzQ7CkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAkJCQkgQ0RNX0NSU05fUVNFTF9RMSkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkLAomIzQzOwkJCQkgICAgIGludCBscm9fcXVldWVfaW5kZXgsIGludCBxaWQsCiYjNDM7CQkJCSAgICAgaW50IGJ1Zl9zaXplKQomIzQzO3sKJiM0MzsJaW50IGlkID0gcWRtYV9pZCAmIzQzOyAxOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLAomIzQzOwkJICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHwKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksCiYjNDM7CQkgICAgICBDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdFX1RJTUVfTUFTSywKJiM0MzsJCQkJIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTsKJiM0MzsJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSwKJiM0MzsJCSAgICAgIExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLAomIzQzOwkJICAgICAgX19maWVsZF9wcmVwKExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLCBxaWQpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpCiYjNDM7ewomIzQzOwlpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLAomIzQzOwkJCUNETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLAomIzQzOwkJCUNETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBhaXJvaGFfZmVfZ2V0KGV0aCwgUkVHX0NETV9MUk9fRU4ocWRtYV9pZCAmIzQzOyAxKSwKJiM0MzsJCQkgICAgIExST19SWFFfRU5fTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwlpbnQgaSwgbHJvX3F1ZXVlX2luZGV4ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShxZG1hLSZndDtxX3J4KTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfcXVldWUgKnEgPSAmYW1wO3FkbWEtJmd0O3FfcnhbaV07CiYjNDM7CQl1MzIgc2l6ZTsKJiM0MzsKJiM0MzsJCWlmICghcS0mZ3Q7bmRlc2MpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtJmd0O2J1Zl9zaXplKSk7CiYjNDM7CQlzaXplID0gbWluX3QodTMyLCBzaXplLCBBSVJPSEFfTUFYX1JYX1NJWkUpOwomIzQzOwkJYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLAomIzQzOwkJCQkJIHNpemUpOwomIzQzOwkJbHJvX3F1ZXVlX2luZGV4JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJaW50IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiYjNDM7CiYjNDM7CWlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX2ZlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKIAlhaXJvaGFfZmVfbWFjY3JfaW5pdChldGgpOwpAQCAtNjE2LDYgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSkKIAkJZS0mZ3Q7ZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICYjNDM7IG9mZnNldDsKIAkJZS0mZ3Q7ZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS0mZ3Q7YnVmX3NpemUpKTsKIAomIzQzOwkJV1JJVEVfT05DRShkZXNjLSZndDt0Y3BfdHNfcmVwbHksIDApOwogCQl2YWwgPSBGSUVMRF9QUkVQKFFETUFfREVTQ19MRU5fTUFTSywgZS0mZ3Q7ZG1hX2xlbik7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7Y3RybCwgY3B1X3RvX2xlMzIodmFsKSk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7YWRkciwgY3B1X3RvX2xlMzIoZS0mZ3Q7ZG1hX2FkZHIpKTsKQEAgLTY1NywxOCAmIzQzOzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpCiAJcmV0dXJuIHBvcnQtJmd0O2RldnNbZF0gPyBwb3J0LSZndDtkZXZzW2RdIDogRVJSX1BUUigtRU5PREVWKTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAomIzQzOwkJCQkJICAgICAgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MsCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLAomIzQzOwkJCQkJICAgICAgdTMyIGxlbiwgdTMyIGFnZ19jb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O21zZzEpKTsKJiM0MzsJdTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwl1MzIgbXNnMyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLSZndDttc2czKSk7CiYjNDM7CXUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgZGF0YV9sZW47CiYjNDM7CXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbzsKJiM0MzsJdTE2IHRjcF93aW4sIGwyX2xlbjsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJc3RydWN0IHRjcGhkciAqdGg7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlib29sIGlwdjQsIGlwdjY7CiYjNDM7CiYjNDM7CWlwdjQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA0X01BU0ssIG1zZzEpOwomIzQzOwlpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTsKJiM0MzsJaWYgKCFpcHY0ICZhbXA7JmFtcDsgIWlwdjYpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJbDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTsKJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoOwomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7IGwyX2xlbiAmIzQzOyBzaXplb2YoKmlwaCkpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpcGggPSAoc3RydWN0IGlwaGRyICopKGUtJmd0O2J1ZiAmIzQzOyBsMl9sZW4pOwomIzQzOwkJaWYgKGlwaC0mZ3Q7cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpZiAoaXBoLSZndDtpaGwgJmx0OyA1KQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkJdGhfb2ZmID0gbDJfbGVuICYjNDM7IChpcGgtJmd0O2lobCAmbHQ7Jmx0OyAyKTsKJiM0MzsJCWlmIChsZW4gJmx0OyB0aF9vZmYpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlpcGgtJmd0O3RvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pOwomIzQzOwkJaXBoLSZndDtjaGVjayA9IDA7CiYjNDM7CQlpcGgtJmd0O2NoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtJmd0O2lobCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKJiM0MzsKJiM0MzsJCXRoX29mZiA9IGwyX2xlbiAmIzQzOyBzaXplb2YoKmlwNmgpOwomIzQzOwkJaWYgKGxlbiAmbHQ7IHRoX29mZikKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCWlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoZS0mZ3Q7YnVmICYjNDM7IGwyX2xlbik7CiYjNDM7CQlpZiAoaXA2aC0mZ3Q7bmV4dGhkciAhPSBORVhUSERSX1RDUCkKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJCWlwNmgtJmd0O3BheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGVuICZsdDsgdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoZS0mZ3Q7YnVmICYjNDM7IHRoX29mZik7CiYjNDM7CWlmICh0aC0mZ3Q7ZG9mZiAmbHQ7IDUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLSZndDtkb2ZmICZsdDsmbHQ7IDIpOwomIzQzOwlpZiAobGVuICZsdDs9IGRhdGFfb2ZmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLCBtc2czKTsKJiM0MzsJdGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7ZGF0YSkpOwomIzQzOwl0aC0mZ3Q7YWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTsKJiM0MzsJdGgtJmd0O3dpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pOwomIzQzOwomIzQzOwkvKiBDaGVjayB0Y3AgdGltZXN0YW1wIG9wdGlvbiAqLwomIzQzOwlpZiAodGgtJmd0O2RvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkgewomIzQzOwkJdTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7CiYjNDM7CiYjNDM7CQlpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgJmx0OyZsdDsgMjQpIHwgKFRDUE9QVF9OT1AgJmx0OyZsdDsgMTYpIHwKJiM0MzsJCQkgICAgIChUQ1BPUFRfVElNRVNUQU1QICZsdDsmbHQ7IDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7CiYjNDM7CQkJdTggKnB0ciA9ICh1OCAqKXRoICYjNDM7IHNpemVvZigqdGgpICYjNDM7IDIgKiBzaXplb2YoX19iZTMyKTsKJiM0MzsJCQlfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtJmd0O3RjcF90c19yZXBseSk7CiYjNDM7CiYjNDM7CQkJLyogVGhlIGZpZWxkIGlzIHByZS16ZXJvZWQgaW4gdGhlIHBvc3RlZCBkZXNjcmlwdG9yLAomIzQzOwkJCSAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlCiYjNDM7CQkJICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyCiYjNDM7CQkJICogdW50b3VjaGVkIG90aGVyd2lzZSwgc2luY2UgdGhlIGhhcmR3YXJlIG1heSBub3QKJiM0MzsJCQkgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmICh0Y3BfdHNfcmVwbHkpCiYjNDM7CQkJCXB1dF91bmFsaWduZWRfYmUzMihsZTMyX3RvX2NwdSh0Y3BfdHNfcmVwbHkpLAomIzQzOwkJCQkJCSAgIHB0cik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShlLSZndDtidWYgJiM0MzsgbDJfbGVuKTsKJiM0MzsKJiM0MzsJCXRoLSZndDtjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtJmd0O3NhZGRyLAomIzQzOwkJCQkJICBpcGgtJmd0O2RhZGRyLCAwKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtJmd0O2J1ZiAmIzQzOyBsMl9sZW4pOwomIzQzOwomIzQzOwkJdGgtJmd0O2NoZWNrID0gfnRjcF92Nl9jaGVjayhsZW4gLSB0aF9vZmYsICZhbXA7aXA2aC0mZ3Q7c2FkZHIsCiYjNDM7CQkJCQkgICZhbXA7aXA2aC0mZ3Q7ZGFkZHIsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNwbGl0IG5ldHdvcmsgaGVhZGVycyBhbmQgcGF5bG9hZCB0byByZWx5IG9uIEdSTy4KJiM0MzsJICogV2UgbmVlZCB0byBkbyBpdCBpbiB0aGUgZHJpdmVyIHNpbmNlIHRoZSBOSUMgZG9lcwomIzQzOwkgKiBub3Qgc3VwcG9ydCBpdC4KJiM0MzsJICovCiYjNDM7CXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7cS0mZ3Q7bmFwaSwgZGF0YV9vZmYpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlfX3NrYl9wdXQoc2tiLCBkYXRhX29mZik7CiYjNDM7CW1lbWNweShza2ItJmd0O2RhdGEsIGUtJmd0O2J1ZiwgZGF0YV9vZmYpOwomIzQzOwomIzQzOwlwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoZS0mZ3Q7YnVmKTsKJiM0MzsJZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjsKJiM0MzsJc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwomIzQzOwlza2JfYWRkX3J4X2ZyYWcoc2tiLCBzaGluZm8tJmd0O25yX2ZyYWdzLCBwYWdlLAomIzQzOwkJCWUtJmd0O2J1ZiAmIzQzOyBkYXRhX29mZiAtIHBhZ2VfYWRkcmVzcyhwYWdlKSwgZGF0YV9sZW4sCiYjNDM7CQkJcS0mZ3Q7YnVmX3NpemUpOwomIzQzOwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2OwomIzQzOwkvKiBIVyBkb2VzIG5vdCByZXBvcnQgdGhlIHBlci1zZWdtZW50IE1TUywgc28gYXBwcm94aW1hdGUgaXQgYXMKJiM0MzsJICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzCiYjNDM7CSAqIHdpdGggYSBzaG9ydGVyIHRhaWwgdGhpcyBzdGlsbCByZS1zZWdtZW50cyBpbnRvIGV4YWN0bHkKJiM0MzsJICogYWdnX2NvdW50IHNlZ21lbnRzLCBrZWVwaW5nIGdzb19zaXplL2dzb19zZWdzIGFuZCB0aGUgcGFja2V0CiYjNDM7CSAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuCiYjNDM7CSAqLwomIzQzOwlzaGluZm8tJmd0O2dzb19zaXplID0gRElWX1JPVU5EX1VQKGRhdGFfbGVuLCBhZ2dfY291bnQpOwomIzQzOwlzaGluZm8tJmd0O2dzb19zZWdzID0gYWdnX2NvdW50OwomIzQzOwomIzQzOwlza2ItJmd0O2NzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiYjNDM7CXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9idWlsZF9yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKJiM0MzsJCQkJCQlzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYywKJiM0MzsJCQkJCQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLAomIzQzOwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCQkJdTMyIGxlbiwgdTMyIGFnZ19jb3VudCkKJiM0Mzt7CiYjNDM7CWludCBxaWQgPSBxIC0gJmFtcDtxLSZndDtxZG1hLSZndDtxX3J4WzBdOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwomIzQzOwlpZiAoYWdnX2NvdW50ICZndDsgMSAmYW1wOyZhbXA7IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkgeyAvKiBMUk8gKi8KJiM0MzsJCXNrYiA9IGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgZSwgbGVuLCBhZ2dfY291bnQpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlza2IgPSBuYXBpX2J1aWxkX3NrYihlLSZndDtidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sIHEtJmd0O2J1Zl9zaXplKTsKJiM0MzsJCWlmICghc2tiKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkJc2tiX3Jlc2VydmUoc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pOwomIzQzOwkJX19za2JfcHV0KHNrYiwgbGVuKTsKJiM0MzsJCXNrYi0mZ3Q7aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTsKJiM0MzsJc2tiLSZndDtkZXYgPSBkZXY7CiYjNDM7CXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBxaWQpOwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gc2tiOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogewogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLSZndDtwYWdlX3Bvb2wpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IHEtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKLQlpbnQgcWlkID0gcSAtICZhbXA7cWRtYS0mZ3Q7cV9yeFswXTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtJmd0O3FkbWEtJmd0O2V0aDsKIAlpbnQgZG9uZSA9IDA7CiAKIAl3aGlsZSAoZG9uZSAmbHQ7IGJ1ZGdldCkgewomIzQzOwkJdTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgbXNnMiwgZGVzY19jdHJsLCBhZ2dfY291bnQ7CiAJCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSAmYW1wO3EtJmd0O2VudHJ5W3EtJmd0O3RhaWxdOwogCQlzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyA9ICZhbXA7cS0mZ3Q7ZGVzY1txLSZndDt0YWlsXTsKLQkJdTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsOwogCQlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAkJaW50IGRhdGFfbGVuLCBsZW47CkBAIC02OTIsMjQgJiM0Mzs5NDcsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpCiAJCWlmICghbGVuIHx8IGRhdGFfbGVuICZsdDsgbGVuKQogCQkJZ290byBmcmVlX2ZyYWc7CiAKJiM0MzsJCW1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwkJYWdnX2NvdW50ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLLCBtc2cyKTsKJiM0MzsJCWlmIChhZ2dfY291bnQgJmd0OyBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKQomIzQzOwkJCWdvdG8gZnJlZV9mcmFnOwomIzQzOwogCQlkZXYgPSBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihldGgsIGRlc2MpOwogCQlpZiAoSVNfRVJSKGRldikpCiAJCQlnb3RvIGZyZWVfZnJhZzsKIAogCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CiAJCWlmICghcS0mZ3Q7c2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqLwotCQkJcS0mZ3Q7c2tiID0gbmFwaV9idWlsZF9za2IoZS0mZ3Q7YnVmIC0gQUlST0hBX1JYX0hFQURST09NLAotCQkJCQkJcS0mZ3Q7YnVmX3NpemUpOwomIzQzOwkJCXEtJmd0O3NrYiA9IGFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihxLCBkZXNjLCBlLCBuZXRkZXYsCiYjNDM7CQkJCQkJCSAgbGVuLCBhZ2dfY291bnQpOwogCQkJaWYgKCFxLSZndDtza2IpCiAJCQkJZ290byBmcmVlX2ZyYWc7Ci0KLQkJCXNrYl9yZXNlcnZlKHEtJmd0O3NrYiwgQUlST0hBX1JYX0hFQURST09NKTsKLQkJCV9fc2tiX3B1dChxLSZndDtza2IsIGxlbik7Ci0JCQlza2JfbWFya19mb3JfcmVjeWNsZShxLSZndDtza2IpOwotCQkJcS0mZ3Q7c2tiLSZndDtkZXYgPSBuZXRkZXY7Ci0JCQlxLSZndDtza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS0mZ3Q7c2tiLCBuZXRkZXYpOwotCQkJcS0mZ3Q7c2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCXNrYl9yZWNvcmRfcnhfcXVldWUocS0mZ3Q7c2tiLCBxaWQpOwogCQl9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi8KIAkJCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8ocS0mZ3Q7c2tiKTsKIAkJCWludCBucl9mcmFncyA9IHNoaW5mby0mZ3Q7bnJfZnJhZ3M7CkBAIC04MDAsMTIgJiM0MzsxMDUyLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQkJCSAgICAgc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgbmRlc2MpCiB7Ci0JY29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewotCQkub3JkZXIgPSAwLAomIzQzOwlzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7CiAJCS5wb29sX3NpemUgPSAyNTYsCiAJCS5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLAogCQkuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSwKLQkJLm1heF9sZW4gPSBQQUdFX1NJWkUsCiAJCS5uaWQgPSBOVU1BX05PX05PREUsCiAJCS5kZXYgPSBxZG1hLSZndDtldGgtJmd0O2RldiwKIAkJLm5hcGkgPSAmYW1wO3EtJmd0O25hcGksCkBAIC04MTMsOSAmIzQzOzEwNjMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKIAlpbnQgcWlkID0gcSAtICZhbXA7cWRtYS0mZ3Q7cV9yeFswXSwgdGhyOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CWJvb2wgbHJvX3E7CiAKLQlxLSZndDtidWZfc2l6ZSA9IFBBR0VfU0laRSAvIDI7CiAJcS0mZ3Q7cWRtYSA9IHFkbWE7CiYjNDM7CWxyb19xID0gYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpOwogCiAJcS0mZ3Q7ZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLSZndDtkZXYsIG5kZXNjICogc2l6ZW9mKCpxLSZndDtlbnRyeSksCiAJCQkJR0ZQX0tFUk5FTCk7CkBAIC04MjcsNiAmIzQzOzEwNzgsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAlpZiAoIXEtJmd0O2Rlc2MpCiAJCXJldHVybiAtRU5PTUVNOwogCiYjNDM7CXBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDsKJiM0MzsJcHBfcGFyYW1zLm1heF9sZW4gPSBQQUdFX1NJWkUgJmx0OyZsdDsgcHBfcGFyYW1zLm9yZGVyOwomIzQzOwogCXEtJmd0O3BhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoJmFtcDtwcF9wYXJhbXMpOwogCWlmIChJU19FUlIocS0mZ3Q7cGFnZV9wb29sKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihxLSZndDtwYWdlX3Bvb2wpOwpAQCAtODM1LDYgJiM0MzsxMDg5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJCXJldHVybiBlcnI7CiAJfQogCiYjNDM7CXEtJmd0O2J1Zl9zaXplID0gbHJvX3EgPyBwcF9wYXJhbXMubWF4X2xlbiA6IHBwX3BhcmFtcy5tYXhfbGVuIC8gMjsKIAlxLSZndDtuZGVzYyA9IG5kZXNjOwogCW5ldGlmX25hcGlfYWRkKGV0aC0mZ3Q7bmFwaV9kZXYsICZhbXA7cS0mZ3Q7bmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTsKIApAQCAtODQ4LDcgJiM0MzsxMTAzLDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQkJRklFTERfUFJFUChSWF9SSU5HX1RIUl9NQVNLLCB0aHIpKTsKIAlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssCiAJCQlGSUVMRF9QUkVQKFJYX1JJTkdfRE1BX0lEWF9NQVNLLCBxLSZndDtoZWFkKSk7Ci0JYWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spOwomIzQzOwlpZiAobHJvX3EpCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSwKJiM0MzsJCQkJICBSWF9SSU5HX1NHX0VOX01BU0spOwomIzQzOwllbHNlCiYjNDM7CQlhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksCiYjNDM7CQkJCVJYX1JJTkdfU0dfRU5fTUFTSyk7CiAKIAlhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHEpOwogCkBAIC04NzAsNiAmIzQzOzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQkJCXBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLSZndDtwYWdlX3Bvb2wpKTsKIAkJcGFnZV9wb29sX3B1dF9mdWxsX3BhZ2UocS0mZ3Q7cGFnZV9wb29sLCBwYWdlLCBmYWxzZSk7CiAJCS8qIFJlc2V0IERNQSBkZXNjcmlwdG9yICovCiYjNDM7CQlXUklURV9PTkNFKGRlc2MtJmd0O3RjcF90c19yZXBseSwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7Y3RybCwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7YWRkciwgMCk7CiAJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7ZGF0YSwgMCk7CkBAIC0xODk2LDYgJiM0MzsyMTU3LDM0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfaHdfc3RhdHMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJc3Bpbl91bmxvY2soJmFtcDtwb3J0LSZndDtzdGF0c19sb2NrKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoZXRoLSZndDtwb3J0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLSZndDtwb3J0c1tpXTsKJiM0MzsJCWludCBqOwomIzQzOwomIzQzOwkJaWYgKCFwb3J0KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUocG9ydC0mZ3Q7ZGV2cyk7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtJmd0O2RldnNbal07CiYjNDM7CQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKJiM0MzsKJiM0MzsJCQlpZiAoIWl0ZXJfZGV2KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTsKJiM0MzsJCQlpZiAobmV0ZGV2LSZndDtyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCW5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTE5MTMsMTQgJiM0MzsyMjAyLDI4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAl1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxOwogCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKLQlpbnQgZXJyOwomIzQzOwlpbnQgcWRtYV9pZCwgZXJyOwomIzQzOwomIzQzOwkvKiBIVyBHUk8gaXMgY29uZmlndXJlZCBvbiB0aGUgUURNQSBhbmQgaXQgaXMgc2hhcmVkIGJldHdlZW4KJiM0MzsJICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24KJiM0MzsJICogdGhlIHNhbWUgUURNQSBpZiBIVyBHUk8gaXMgZW5hYmxlZCBvbiBhbnkgZGV2aWNlIHNoYXJpbmcgaXQKJiM0MzsJICogb3IgaWYgdGhpcyBkZXZpY2UgaGFzIEhXIEdSTyBlbmFibGVkIGluIGl0cyBmZWF0dXJlIHNldC4KJiM0MzsJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlxZG1hX2lkID0gcWRtYSAtICZhbXA7cWRtYS0mZ3Q7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxICZhbXA7JmFtcDsgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLSZndDtldGgsIHFkbWFfaWQpIHx8CiYjNDM7CQkJCShuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfR1JPX0hXKSkpIHsKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwgJiMzNDtyZXF1aXJlZCB0byBkaXNhYmxlIEhXIEdSTyBvbiBRRE1BJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBxZG1hX2lkKTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAllcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJaWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKQogCQlhaXJvaGFfZmVfc2V0KHFkbWEtJmd0O2V0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LSZndDtpZCksCiAJCQkgICAgICBHRE1fU1RBR19FTl9NQVNLKTsKQEAgLTE5MzcsNiAmIzQzOzIyNDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJICAgIHBzZV9wb3J0KTsKIAomIzQzOwlpZiAobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19IVykKJiM0MzsJCWFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xOTU0LDYgJiM0MzsyMjYwLDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiAJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKIAkJCQkJICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LSZndDtpZCksCiAJCQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fSFcpCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxMDQsNiAmIzQzOzI0MTQsMzQgQEAgYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKQogCXJldHVybiBOVUxMOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGV2X2NoZWNrX2h3X2dybyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CiYjNDM7CiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsICYjMzQ7SFcgR1JPIGlzIGVuYWJsZWQgb24gUURNQSVkXG4mIzM0OywgcWRtYV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CXFkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshcWRtYV9pZF07CiYjNDM7CXFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkgewomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtIVyBHUk8gaXMgZW5hYmxlZCBvbiBkZXN0aW5hdGlvbiBRRE1BJWRcbiYjMzQ7LAomIzQzOwkJCSAgICBxZG1hX2lkKTsKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwpAQCAtMjEyMCw2ICYjNDM7MjQ1OCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKIAluZXRkZXYtJmd0O2lycSA9IHFkbWEtJmd0O2lycV9iYW5rc1swXS5pcnE7CiYjNDM7CXFkbWEtJmd0O3VzZXJzJiM0MzsmIzQzOzsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwpAQCAtMjEzNiw4ICYjNDM7MjQ3NSwxMiBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKIAl9CiAKLQlpZiAoY3VyX3FkbWEpCiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJY3VyX3FkbWEtJmd0O3VzZXJzLS07CiAJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yMjg4LDYgJiM0MzsyNjMxLDM2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJfQogfQogCiYjNDM7c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkJIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiYjNDM7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxKQomIzQzOwkJZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX0dST19IVzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZlYXR1cmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJbmV0ZGV2X2ZlYXR1cmVzX3QgZGlmZiA9IG5ldGRldi0mZ3Q7ZmVhdHVyZXMgXiBmZWF0dXJlczsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoIShkaWZmICZhbXA7IE5FVElGX0ZfR1JPX0hXKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fSFcpCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTMxOTksNyAmIzQzOzM1NzIsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IGVyciA9IC1FQlVTWTsKJiM0MzsJaW50IGVycjsKIAogCWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwogCSAgICBwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHsKQEAgLTMyMTAsNiAmIzQzOzM1ODMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlpZiAoIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpKSAvKiBBbHJlYWR5IGVuYWJsZWQgKi8KIAkJcmV0dXJuIDA7CiAKJiM0MzsJZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiAKIAl3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpOwpAQCAtMzIxOCw2ICYjNDM7MzU5NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCSAgICB3YW5fZGV2LSZndDtwb3J0LSZndDtpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiAJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBlcnJvcl91bmxvY2s7CiAJCX0KIAkJYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTsKQEAgLTMzNDMsNiAmIzQzOzM3MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0gewogCS5uZG9fc3RvcAkJPSBhaXJvaGFfZGV2X3N0b3AsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9oYV9kZXZfY2hhbmdlX210dSwKIAkubmRvX3NlbGVjdF9xdWV1ZQk9IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlLAomIzQzOwkubmRvX2ZpeF9mZWF0dXJlcwk9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLAomIzQzOwkubmRvX3NldF9mZWF0dXJlcwk9IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBhaXJvaGFfZGV2X3htaXQsCiAJLm5kb19nZXRfc3RhdHM2NCAgICAgICAgPSBhaXJvaGFfZGV2X2dldF9zdGF0czY0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb2hhX2Rldl9zZXRfbWFjYWRkciwKQEAgLTM0MzAsMTEgJiM0MzszODEwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLAogCW5ldGRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO2Fpcm9oYV9ldGh0b29sX29wczsKIAluZXRkZXYtJmd0O21heF9tdHUgPSBBSVJPSEFfTUFYX01UVTsKIAluZXRkZXYtJmd0O3dhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwotCW5ldGRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPNiB8Ci0JCQkgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8Ci0JCQkgICAgICBORVRJRl9GX0hXX1RDOwotCW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKLQluZXRkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzOwomIzQzOwluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9HUk9fSFc7CiYjNDM7CW5ldGRldi0mZ3Q7ZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTOwomIzQzOwluZXRkZXYtJmd0O3ZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7CiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtJmd0O2Rldik7CiAKIAkvKiByZXNlcnZlIGh3IHF1ZXVlcyBmb3IgSFRCIG9mZmxvYWRpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCmluZGV4IGZhOWE4ZWRjZTIyZmYuLjliNTVhYmM2MzA0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNDUsNiAmIzQzOzQ1LDE4IEBACiAJIChfbikgPT0gMTUgPyAxMjggOgkJXAogCSAoX24pID09ICAwID8gMTAyNCA6IDE2KQogCiYjNDM7I2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVIJCWdldF9vcmRlcihTWl8xNkspCiYjNDM7I2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTCTgKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0sJCUdFTk1BU0soMzEsIDI0KQomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVAk2NAomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19USU1FCTEwMAomIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FCTIwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFUwkJCVwKJiM0MzsJKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwJXAomIzQzOwkgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9JUFY2X0NTVU0gfAlcCiYjNDM7CSBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKQomIzQzOwogI2RlZmluZSBQU0VfUlNWX1BBR0VTCQkJMTI4CiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVMJCTY0CiAKQEAgLTUzOCw3ICYjNDM7NTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8gewogCiAvKiBSWCBxdWV1ZSB0byBJUlEgbWFwcGluZzogQklUKHEpIGluIElSUShuKSAqLwogI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0sJCQkweDgzOWYKLSNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLCQkJMHg3ZmUwMDAwMAomIzQzOyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLCQkJMHhmZmUwMDAwMAogI2RlZmluZSBSWF9JUlEyX0JBTktfUElOX01BU0sJCQkweDIwCiAjZGVmaW5lIFJYX0lSUTNfQkFOS19QSU5fTUFTSwkJCTB4NDAKICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pCQlcCkBAIC01NjAsNiAmIzQzOzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKJiM0MzsJaW50IHVzZXJzOwomIzQzOwogCXN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107CiAKIAlzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07CkBAIC03MTQsNiAmIzQzOzcyOCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAlyZXR1cm4gZXRoLSZndDtzb2MtJmd0O3ZlcnNpb24gPT0gMHg3NTgzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS0mZ3Q7cWRtYTsKJiM0MzsJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07CiYjNDM7CiYjNDM7CS8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi8KJiM0MzsJQlVJTERfQlVHX09OKGh3ZWlnaHQzMihBSVJPSEFfUlhRX0xST19FTl9NQVNLKSAmZ3Q7CiYjNDM7CQkgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpOwomIzQzOwomIzQzOwlyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyAmYW1wOyBCSVQocWlkKSk7CiYjNDM7fQomIzQzOwogaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJCQkgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBACiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pCVwKIAlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICUgNCkgJmx0OyZsdDsgMyksCSgoKF9uKSAlIDQpICZsdDsmbHQ7IDMpKQogCiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pICZhbXA7IDB4NCkpCiYjNDM7I2RlZmluZSBMUk9fUlhRX01BU0soX24pCQlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMyksICgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMykKJiM0MzsKJiM0MzsjZGVmaW5lIFJFR19DRE1fTFJPX0VOKF9uKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDgwKQomIzQzOyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pCQkoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODQpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTSwkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0sJCUdFTk1BU0soMTUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19BR0VfVElNRShfbikJKENETV9CQVNFKF9uKSAmIzQzOyAweDg4KQomIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTSwkJR0VOTUFTSygxNSwgMCkKJiM0MzsKICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKQkJR0RNX0JBU0UoX24pCiAjZGVmaW5lIEdETV9QQURfRU5fTUFTSwkJCUJJVCgyOCkKICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLCQlCSVQoMjMpCkBAIC04ODcsOSAmIzQzOzkwMSwxNSBAQAogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLCUdFTk1BU0soMjUsIDIxKQogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0sJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLCUdFTk1BU0soMTUsIDApCiYjNDM7LyogUlggTVNHMiAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMjQpCiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSwlHRU5NQVNLKDYsIDApCiYjNDM7LyogUlggTVNHMyAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLCUdFTk1BU0soMTUsIDApCiAKIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjIHsKLQlfX2xlMzIgcnN2OwomIzQzOwlfX2xlMzIgdGNwX3RzX3JlcGx5OwogCV9fbGUzMiBjdHJsOwogCV9fbGUzMiBhZGRyOwogCV9fbGUzMiBkYXRhOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBjaGFuZ2VzIHRvIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCwgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4KCkl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIChMUk8pLCBvciBIVyBHUk8gc3VwcG9ydCwgYmVpbmcgYWRkZWQgdG8gdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIuIFRoZSBzcGVjaWZpYyBmaWxlcyBtb2RpZmllZCDigJMgYGFpcm9oYV9ldGguY2AsIGAuaGAsIGFuZCBgYWlyb2hhX3JlZ3MuaGAg4oCTIGNvbmZpcm0gdGhpcy4gT2theSwgSSBzZWUgdGhlIG5ldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBlbmFibGluZy9kaXNhYmxpbmcgTFJPIGF0IHRoZSBSWCBxdWV1ZSBhbmQgZGV2aWNlIGxldmVsOiBgYWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlYCwgYGFpcm9oYV9mZV9scm9fZGlzYWJsZWAsIGBhaXJvaGFfZGV2X2xyb19lbmFibGVgLCBhbmQgYGFpcm9oYV9kZXZfbHJvX2Rpc2FibGVgLiBUaGVyZSBhcmUgYWxzbyBmdW5jdGlvbnMgdG8gYnVpbGQgYW5kIGhhbmRsZSB0aGUgU0tCcyDigJMgYGFpcm9oYV9xZG1hX2xyb19yeF9za2JgLCBhbmQgYGFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYmDigJMsIGFuZCBjcml0aWNhbCBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzYCwgYGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWVgLCBgYWlyb2hhX2Rldl9vcGVuYCwgYGFpcm9oYV9kZXZfc3RvcGAsIGBhaXJvaGFfZGV2X2luaXRgLCBgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXNgLCBhbmQgYGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzYC4gVGhlc2UgYXJlIGFsbCBzaWducyBvZiBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgUlggcGF0aC4KCk15IG5leHQgY29uY2VybiBpcyByZWFjaGFiaWxpdHkuIFRoaXMgaXMgdGhlIEFpcm9oYSBldGhlcm5ldCBkcml2ZXIsIGFuZCBiYXNlZCBvbiBteSBwcmlvciBrbm93bGVkZ2UsIGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSBFTjc1ODEgU29DLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIG9yIGEgUENJIGRyaXZlci4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBhaXJvaGFfZXRoYCBvciBgYWlyb2hhX3Byb2JlYCB0byBmaWd1cmUgdGhpcyBvdXQuIElmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCByZWFjaGluZyBpdCBpbiBhIHN0YW5kYXJkIFZNIHNldHVwIG1pZ2h0IGJlIHRyaWNraWVyLCBidXQgY2VydGFpbmx5IG5vdCBpbXBvc3NpYmxlLiBJZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHRoYXQmIzM5O3MgYmV0dGVyLCBzaW5jZSBpdCYjMzk7cyBsaWtlbHkgd2UgY2FuIGFzc2lnbiB0aGUgZW11bGF0ZWQgZGV2aWNlIHRvIHRoZSBWTS4gSWYgaXQmIzM5O3Mgbm90IGVhc2lseSByZWFjaGFibGUsIHRoZW4gaXQgZHJvcHMgaW4gcHJpb3JpdHkgZm9yIHRoaXMga2luZCBvZiBldmFsdWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYS4qcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkzOD1zdGF0aWMgaW50IGFpcm9oYV9yZWdpc3Rlcl9nZG1fZGV2aWNlcyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NzpzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTY4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQzMzI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDMzMzpcdC5wcm9iZSA9IGFpcm9oYV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMzNC1cdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2OTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgxNDpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxNS1cdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGFyZ2V0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBgcGxhdGZvcm1fZHJpdmVyYCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIFNvQy1zcGVjaWZpYywgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBhIHBhcnRpY3VsYXIgU29DLCBsaWtlIHRoaXMgQWlyb2hhIEVONzU4MSwgYXJlIHVzdWFsbHkgYSBuby1nbyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1bmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBjdXN0b20gZW11bGF0b3Igc2V0dXAgZm9yIGl0LCBvciBpdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBtb3JlIGdlbmVyaWMuIEdpdmVuIHRoZSBsaWtlbHkgcGxhdGZvcm0gZGVwZW5kZW5jZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBzdG9yeSDigJMgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgZGVwZW5kZW5jaWVzLCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBvciBhbnkgaW5kaWNhdGlvbiBvZiBicm9hZGVyIHN1cHBvcnQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfVkVORE9SX0FJUk9IQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBLY29uZmlnIFJldmlldyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uICYjMzQ7TGV0JiMzOTtzIHJlYWQgdGhlIEtjb25maWcuJiMzNDsgVGhhdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCwgaXNuJiMzOTt0IGl0PyBCZWZvcmUgYW55IHNlcmlvdXMgd29yayBiZWdpbnMsIHlvdSAqYWx3YXlzKiBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgYXJlIHdlIGV2ZW4gc3RhcnRpbmcgZnJvbT8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8mIzM0OwoKTXkgbWluZCYjMzk7cyBhbHJlYWR5IHNpZnRpbmcgdGhyb3VnaCBwb3NzaWJpbGl0aWVzLiBJJiMzOTttIHdvbmRlcmluZzoKCiogICBJcyB0aGlzIGEgZnJlc2ggS2NvbmZpZywgb3Igb25lIEkmIzM5O20gZmFtaWxpYXIgd2l0aD8gVGhhdCBpbmZvcm1zIG15IGFwcHJvYWNoLiBJZiBJIGtub3cgaXQsIEkmIzM5O2xsIGdvIGZvciBxdWljayBzcGVjaWZpYyBjaGVja3MgZm9yIGNlcnRhaW4gdmFyaWFibGVzLgoqICAgQXJlIHRoZXJlIGFueSBpbmNsdWRlIGRpcmVjdGl2ZXM/IEl0JiMzOTtzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHksIGFuZCBkZXRlcm1pbmUgd2hldGhlciBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBLY29uZmlnIGZpbGVzLgoqICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMgZGVmaW5lZD8gSXMgaXQgZm9yIGEgc3BlY2lmaWMgQ1BVLCBib2FyZCwgb3IgYnVpbGQgY29uZmlndXJhdGlvbj8gSSB3YW50IHRvIGNvbnRleHR1YWxpemUgdGhpcyBpbW1lZGlhdGVseS4KKiAgIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMsIG9yIGZlYXR1cmVzLCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBpcyBhYm91dCB0byBraWNrIGluIG15IGludGVybmFsIGNvbmZsaWN0IHJlc29sdXRpb24gY29kZSBmb3IgcG90ZW50aWFsIHByb2JsZW1zLgoqICAgQW0gSSBsb29raW5nIHRvIGNoYW5nZSBzb21ldGhpbmc/IE9yIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUuIFRoYXQgaGVscHMgdG8gZm9jdXMgbXkgaW5pdGlhbCByZXZpZXcuCgpTbywgSSYjMzk7bSBtZW50YWxseSBza2V0Y2hpbmcgb3V0IGEgcGxhbi4gSXQmIzM5O3MgdGltZSB0byBmaW5kIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG4gICAzOlx0XHRib29sIFwmIzM0O0Fpcm9oYSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVUX0FJUk9IQV9OUFVcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBOUFUgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDEzOlx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxuICAxNjpcdFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5FVF9BSVJPSEFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI2MQoJCQkJCQkJb3V0cHV0OiA5NgoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgdGhlIEFpcm9oYSBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAoTkVUX0FJUk9IQSksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFpcm9oYSBTb0MuIFNpbmNlIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBpdCAqbmVlZHMqIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBvciBzb21lIGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbiB0byBwcm9iZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGV4ZWN1dGUgdGhlIGNvZGUgdGhpcyBwYXRjaCB0b3VjaGVzLgoKSW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHRoZXJlJiMzOTtzIG5vIEFpcm9oYSBTb0MgZW11bGF0aW9uIGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBwcm9iZWAgZnVuY3Rpb24gZm9yIHRoaXMgZHJpdmVyICp3aWxsIG5vdCogYmUgY2FsbGVkLiBBbGwgdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBgYWlyb2hhX3FkbWFfcnhfcHJvY2Vzc2AsIGBhaXJvaGFfZGV2X29wZW5gLCBldGMuLCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUuCgpDb3VsZCBTeXprYWxsZXIgc29tZWhvdyBjcmVhdGUgaXQ/IE1heWJlLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBQb3NzaWJseSwgaWYgaXQgd2FzIGdlbmVyaWNhbGx5IHN1cHBvcnRlZCwgb3IgYSB2aXJ0dWFsIGRldmljZSBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZldGhgLiBCdXQgSSBkb24mIzM5O3Qgc2VlIGFueXRoaW5nIGxpa2UgdGhhdCBoZXJlLiBQbHVzLCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIGl0JiMzOTtzIGEgbm8tZ28uCgpUaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEl0JiMzOTtzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyLCBzbywgaXQmIzM5O3MgZ29pbmcgdG8gZmFsbCBpbnRvIHRoYXQgY2F0ZWdvcnkgb2YgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsuCgpJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGlmZiBqdXN0IHRvIGJlIGV4dHJhIHN1cmUuIEl04oCZcyBhbGwgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCwgc3BlY2lmaWNhbGx5IGBhaXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYC4gRGVmaW5pdGVseSBqdXN0IHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciwgbm90aGluZyBnZW5lcmljLgoKU28sIHRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBBaXJvaGEgU29DIGRyaXZlciBpcyBwbGF0Zm9ybS1zcGVjaWZpYy4gVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4KCkkmIzM5O20gY2FsbGluZyBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDExOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8qKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgZm9yIEFpcm9oYSBoYXJkd2FyZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKiksIHdoaWNoIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyIGZvciBBaXJvaGEgaGFyZHdhcmUuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMToyMzwvdGQ+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+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzYuMTE5NjE5NzE2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNzA3NjQyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzYuMTE5NjI3NDU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM1MTAzODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2M2MjQyYTk4N2FlNGZiOGViNmY2MjdiYjVmMmM0YTgxMzc1NjZhN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDExOjIyOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC0xMCw4ICsxMCwxMCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9wcHBfZGVmcy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImFpcm9oYV9yZWdzLmhcXFwiXFxuQEAgLTQ5MSw2ICs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdFxcdFxcdFxcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBidWZfc2l6ZSlcXG4re1xcbitcXHRpbnQgaWQgPSBxZG1hX2lkICsgMTtcXG4rXFxuK1xcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXFxuK1xcdFxcdCAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19OVU1fTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0FHRV9USU1FKGlkKSxcXG4rXFx0XFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdFX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1RJTUVfTUFTSyxcXG4rXFx0XFx0XFx0XFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fUlhRKGlkLCBscm9fcXVldWVfaW5kZXgpLFxcbitcXHRcXHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcXG4rXFx0XFx0ICAgICAgX19maWVsZF9wcmVwKExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLCBxaWQpKTtcXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXFxuK3tcXG4rXFx0aW50IGksIGlkID0gcWRtYV9pZCArIDE7XFxuK1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcXG4rXFx0XFx0XFx0Q0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0spO1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXFxuK1xcdFxcdFxcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpKyspXFxuK1xcdFxcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcXG4re1xcbitcXHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgKyAxKSxcXG4rXFx0XFx0XFx0ICAgICBMUk9fUlhRX0VOX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19lbmFibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0aW50IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFx0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XFxuK1xcbitcXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4W2ldO1xcbitcXHRcXHR1MzIgc2l6ZTtcXG4rXFxuK1xcdFxcdGlmICghcS1cXHUwMDNlbmRlc2MpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cXHUwMDNlYnVmX3NpemUpKTtcXG4rXFx0XFx0c2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTtcXG4rXFx0XFx0YWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLFxcbitcXHRcXHRcXHRcXHRcXHQgc2l6ZSk7XFxuK1xcdFxcdGxyb19xdWV1ZV9pbmRleCsrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4rXFx0aW50IHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFxuK1xcdGlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG4gXFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcXG5AQCAtNjE2LDYgKzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRlLVxcdTAwM2VkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSkgKyBvZmZzZXQ7XFxuIFxcdFxcdGUtXFx1MDAzZWRtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuIFxcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSwgMCk7XFxuIFxcdFxcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVxcdTAwM2VkbWFfbGVuKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VjdHJsLCBjcHVfdG9fbGUzMih2YWwpKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVxcdTAwM2VkbWFfYWRkcikpO1xcbkBAIC02NTcsMTggKzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpXFxuIFxcdHJldHVybiBwb3J0LVxcdTAwM2VkZXZzW2RdID8gcG9ydC1cXHUwMDNlZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIGxlbiwgdTMyIGFnZ19jb3VudClcXG4re1xcbitcXHR1MzIgbXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuK1xcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzIpKTtcXG4rXFx0dTMyIG1zZzMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cXHUwMDNlbXNnMykpO1xcbitcXHR1MzIgdGhfb2ZmLCB0Y3BfYWNrX3NlcSwgZGF0YV9vZmYsIGRhdGFfbGVuO1xcbitcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XFxuK1xcdHUxNiB0Y3Bfd2luLCBsMl9sZW47XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHN0cnVjdCB0Y3BoZHIgKnRoO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXG4rXFx0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XFxuK1xcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xcbitcXHRpZiAoIWlwdjQgXFx1MDAyNlxcdTAwMjYgIWlwdjYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcXG4rXFxuK1xcdGlmIChpcHY0KSB7XFxuK1xcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbitcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIGwyX2xlbiArIHNpemVvZigqaXBoKSlcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRpcGggPSAoc3RydWN0IGlwaGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcdFxcdGlmIChpcGgtXFx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlmIChpcGgtXFx1MDAzZWlobCBcXHUwMDNjIDUpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0XFx0dGhfb2ZmID0gbDJfbGVuICsgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2NcXHUwMDNjIDIpO1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2MgdGhfb2ZmKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlwaC1cXHUwMDNldG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7XFxuK1xcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbitcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtXFx1MDAzZWlobCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xcbitcXG4rXFx0XFx0dGhfb2ZmID0gbDJfbGVuICsgc2l6ZW9mKCppcDZoKTtcXG4rXFx0XFx0aWYgKGxlbiBcXHUwMDNjIHRoX29mZilcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcdFxcdGlmIChpcDZoLVxcdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdFxcdGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlbiBcXHUwMDNjIHRoX29mZiArIHNpemVvZigqdGgpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoZS1cXHUwMDNlYnVmICsgdGhfb2ZmKTtcXG4rXFx0aWYgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2MgNSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cXHUwMDNlZG9mZiBcXHUwMDNjXFx1MDAzYyAyKTtcXG4rXFx0aWYgKGxlbiBcXHUwMDNjPSBkYXRhX29mZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSywgbXNnMyk7XFxuK1xcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZWRhdGEpKTtcXG4rXFx0dGgtXFx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XFxuK1xcdHRoLVxcdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXFxuK1xcdGlmICh0aC1cXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcXG4rXFx0XFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggKyAxKTtcXG4rXFxuK1xcdFxcdGlmICh0b3B0ID09ICgoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbitcXHRcXHRcXHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFxcdTAwM2NcXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XFxuK1xcdFxcdFxcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xcbitcXHRcXHRcXHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSk7XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXFxuK1xcdFxcdFxcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXFxuK1xcdFxcdFxcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxcbitcXHRcXHRcXHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxcbitcXHRcXHRcXHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRjcF90c19yZXBseSlcXG4rXFx0XFx0XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlwdjQpIHtcXG4rXFx0XFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGUtXFx1MDAzZWJ1ZiArIGwyX2xlbik7XFxuK1xcbitcXHRcXHR0aC1cXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoZS1cXHUwMDNlYnVmICsgbDJfbGVuKTtcXG4rXFxuK1xcdFxcdHRoLVxcdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcXHUwMDI2aXA2aC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3BsaXQgbmV0d29yayBoZWFkZXJzIGFuZCBwYXlsb2FkIHRvIHJlbHkgb24gR1JPLlxcbitcXHQgKiBXZSBuZWVkIHRvIGRvIGl0IGluIHRoZSBkcml2ZXIgc2luY2UgdGhlIE5JQyBkb2VzXFxuK1xcdCAqIG5vdCBzdXBwb3J0IGl0LlxcbitcXHQgKi9cXG4rXFx0c2tiID0gbmFwaV9hbGxvY19za2IoXFx1MDAyNnEtXFx1MDAzZW5hcGksIGRhdGFfb2ZmKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0X19za2JfcHV0KHNrYiwgZGF0YV9vZmYpO1xcbitcXHRtZW1jcHkoc2tiLVxcdTAwM2VkYXRhLCBlLVxcdTAwM2VidWYsIGRhdGFfb2ZmKTtcXG4rXFxuK1xcdHBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZShlLVxcdTAwM2VidWYpO1xcbitcXHRkYXRhX2xlbiA9IGxlbiAtIGRhdGFfb2ZmO1xcbitcXHRzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XFxuK1xcdHNrYl9hZGRfcnhfZnJhZyhza2IsIHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MsIHBhZ2UsXFxuK1xcdFxcdFxcdGUtXFx1MDAzZWJ1ZiArIGRhdGFfb2ZmIC0gcGFnZV9hZGRyZXNzKHBhZ2UpLCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0cS1cXHUwMDNlYnVmX3NpemUpO1xcbitcXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcXG4rXFx0LyogSFcgZG9lcyBub3QgcmVwb3J0IHRoZSBwZXItc2VnbWVudCBNU1MsIHNvIGFwcHJveGltYXRlIGl0IGFzXFxuK1xcdCAqIHRoZSBhdmVyYWdlIHNlZ21lbnQgc2l6ZS4gRm9yIGEgc3RyZWFtIG9mIE1TUy1zaXplZCBzZWdtZW50c1xcbitcXHQgKiB3aXRoIGEgc2hvcnRlciB0YWlsIHRoaXMgc3RpbGwgcmUtc2VnbWVudHMgaW50byBleGFjdGx5XFxuK1xcdCAqIGFnZ19jb3VudCBzZWdtZW50cywga2VlcGluZyBnc29fc2l6ZS9nc29fc2VncyBhbmQgdGhlIHBhY2tldFxcbitcXHQgKiBhY2NvdW50aW5nIGNvaGVyZW50LCB3aGlsZSBuZXZlciBvdmVyZXN0aW1hdGluZyB0aGUgTVNTLlxcbitcXHQgKi9cXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fc2l6ZSA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgYWdnX2NvdW50KTtcXG4rXFx0c2hpbmZvLVxcdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcXG4rXFxuK1xcdHNrYi1cXHUwMDNlY3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsgdGhfb2ZmO1xcbitcXHRza2ItXFx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFpcm9oYV9xZG1hX2J1aWxkX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dTMyIGxlbiwgdTMyIGFnZ19jb3VudClcXG4re1xcbitcXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxLVxcdTAwM2VxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXG4rXFx0aWYgKGFnZ19jb3VudCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7IC8qIExSTyAqL1xcbitcXHRcXHRza2IgPSBhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIGUsIGxlbiwgYWdnX2NvdW50KTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sIHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pO1xcbitcXHRcXHRfX3NrYl9wdXQoc2tiLCBsZW4pO1xcbitcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xcbitcXHR9XFxuK1xcbitcXHRza2JfbWFya19mb3JfcmVjeWNsZShza2IpO1xcbitcXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0c2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHFpZCk7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4ge1xcbiBcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cXHUwMDNlcGFnZV9wb29sKTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cXHUwMDNlcWRtYTtcXG4tXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4tXFx0aW50IHFpZCA9IHEgLSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFswXTtcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXFx1MDAzZXFkbWEtXFx1MDAzZWV0aDtcXG4gXFx0aW50IGRvbmUgPSAwO1xcbiBcXG4gXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4rXFx0XFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgbXNnMiwgZGVzY19jdHJsLCBhZ2dfY291bnQ7XFxuIFxcdFxcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcXHUwMDI2cS1cXHUwMDNlZW50cnlbcS1cXHUwMDNldGFpbF07XFxuIFxcdFxcdHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjID0gXFx1MDAyNnEtXFx1MDAzZWRlc2NbcS1cXHUwMDNldGFpbF07XFxuLVxcdFxcdHUzMiBoYXNoLCByZWFzb24sIG1zZzEsIGRlc2NfY3RybDtcXG4gXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXY7XFxuIFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuIFxcdFxcdGludCBkYXRhX2xlbiwgbGVuO1xcbkBAIC02OTIsMjQgKzk0NywyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4gXFx0XFx0aWYgKCFsZW4gfHwgZGF0YV9sZW4gXFx1MDAzYyBsZW4pXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9mcmFnO1xcbiBcXG4rXFx0XFx0bXNnMiA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cyKSk7XFxuK1xcdFxcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XFxuK1xcdFxcdGlmIChhZ2dfY291bnQgXFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfZnJhZztcXG4rXFxuIFxcdFxcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XFxuIFxcdFxcdGlmIChJU19FUlIoZGV2KSlcXG4gXFx0XFx0XFx0Z290byBmcmVlX2ZyYWc7XFxuIFxcbiBcXHRcXHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuIFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xcbi1cXHRcXHRcXHRxLVxcdTAwM2Vza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG4rXFx0XFx0XFx0cS1cXHUwMDNlc2tiID0gYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHEsIGRlc2MsIGUsIG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sIGFnZ19jb3VudCk7XFxuIFxcdFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZnJhZztcXG4tXFxuLVxcdFxcdFxcdHNrYl9yZXNlcnZlKHEtXFx1MDAzZXNrYiwgQUlST0hBX1JYX0hFQURST09NKTtcXG4tXFx0XFx0XFx0X19za2JfcHV0KHEtXFx1MDAzZXNrYiwgbGVuKTtcXG4tXFx0XFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUocS1cXHUwMDNlc2tiKTtcXG4tXFx0XFx0XFx0cS1cXHUwMDNlc2tiLVxcdTAwM2VkZXYgPSBuZXRkZXY7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVxcdTAwM2Vza2IsIG5ldGRldik7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuLVxcdFxcdFxcdHNrYl9yZWNvcmRfcnhfcXVldWUocS1cXHUwMDNlc2tiLCBxaWQpO1xcbiBcXHRcXHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cXG4gXFx0XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzO1xcbkBAIC04MDAsMTIgKzEwNTIsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBuZGVzYylcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XFxuLVxcdFxcdC5vcmRlciA9IDAsXFxuK1xcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcXG4gXFx0XFx0LnBvb2xfc2l6ZSA9IDI1NixcXG4gXFx0XFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXFxuIFxcdFxcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxcbi1cXHRcXHQubWF4X2xlbiA9IFBBR0VfU0laRSxcXG4gXFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG4gXFx0XFx0LmRldiA9IHFkbWEtXFx1MDAzZWV0aC1cXHUwMDNlZGV2LFxcbiBcXHRcXHQubmFwaSA9IFxcdTAwMjZxLVxcdTAwM2VuYXBpLFxcbkBAIC04MTMsOSArMTA2MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXFx1MDAzZWV0aDtcXG4gXFx0aW50IHFpZCA9IHEgLSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFswXSwgdGhyO1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHRib29sIGxyb19xO1xcbiBcXG4tXFx0cS1cXHUwMDNlYnVmX3NpemUgPSBQQUdFX1NJWkUgLyAyO1xcbiBcXHRxLVxcdTAwM2VxZG1hID0gcWRtYTtcXG4rXFx0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XFxuIFxcbiBcXHRxLVxcdTAwM2VlbnRyeSA9IGRldm1fa3phbGxvYyhldGgtXFx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXFx1MDAzZWVudHJ5KSxcXG4gXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuQEAgLTgyNyw2ICsxMDc4LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdGlmICghcS1cXHUwMDNlZGVzYylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbitcXHRwcF9wYXJhbXMub3JkZXIgPSBscm9fcSA/IEFJUk9IQV9MUk9fUEFHRV9PUkRFUiA6IDA7XFxuK1xcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIHBwX3BhcmFtcy5vcmRlcjtcXG4rXFxuIFxcdHEtXFx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXFx1MDAyNnBwX3BhcmFtcyk7XFxuIFxcdGlmIChJU19FUlIocS1cXHUwMDNlcGFnZV9wb29sKSkge1xcbiBcXHRcXHRpbnQgZXJyID0gUFRSX0VSUihxLVxcdTAwM2VwYWdlX3Bvb2wpO1xcbkBAIC04MzUsNiArMTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbitcXHRxLVxcdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XFxuIFxcdHEtXFx1MDAzZW5kZXNjID0gbmRlc2M7XFxuIFxcdG5ldGlmX25hcGlfYWRkKGV0aC1cXHUwMDNlbmFwaV9kZXYsIFxcdTAwMjZxLVxcdTAwM2VuYXBpLCBhaXJvaGFfcWRtYV9yeF9uYXBpX3BvbGwpO1xcbiBcXG5AQCAtODQ4LDcgKzExMDMsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdFxcdFxcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XFxuIFxcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfUlhfRE1BX0lEWChxaWQpLCBSWF9SSU5HX0RNQV9JRFhfTUFTSyxcXG4gXFx0XFx0XFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cXHUwMDNlaGVhZCkpO1xcbi1cXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuK1xcdGlmIChscm9fcSlcXG4rXFx0XFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXFxuK1xcdFxcdFxcdFxcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXFxuK1xcdFxcdFxcdFxcdFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHEpO1xcbiBcXG5AQCAtODcwLDYgKzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXFxuIFxcdFxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVxcdTAwM2VwYWdlX3Bvb2wpKTtcXG4gXFx0XFx0cGFnZV9wb29sX3B1dF9mdWxsX3BhZ2UocS1cXHUwMDNlcGFnZV9wb29sLCBwYWdlLCBmYWxzZSk7XFxuIFxcdFxcdC8qIFJlc2V0IERNQSBkZXNjcmlwdG9yICovXFxuK1xcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VjdHJsLCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VhZGRyLCAwKTtcXG4gXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2VkYXRhLCAwKTtcXG5AQCAtMTg5Niw2ICsyMTU3LDM0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfaHdfc3RhdHMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZwb3J0LVxcdTAwM2VzdGF0c19sb2NrKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cXHUwMDNlZXRoO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGV0aC1cXHUwMDNlcG9ydHNbaV07XFxuK1xcdFxcdGludCBqO1xcbitcXG4rXFx0XFx0aWYgKCFwb3J0KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXFx1MDAzZWRldnMpOyBqKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXFx1MDAzZWRldnNbal07XFxuK1xcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuK1xcbitcXHRcXHRcXHRpZiAoIWl0ZXJfZGV2KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoaXRlcl9kZXYpO1xcbitcXHRcXHRcXHRpZiAobmV0ZGV2LVxcdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhuZXRkZXYpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbkBAIC0xOTEzLDE0ICsyMjAyLDI4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4tXFx0aW50IGVycjtcXG4rXFx0aW50IHFkbWFfaWQsIGVycjtcXG4rXFxuK1xcdC8qIEhXIEdSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlblxcbitcXHQgKiBhbGwgdGhlIGRldmljZXMgdXNpbmcgaXQuIFJlZnVzZSB0byBvcGVuIGEgc2Vjb25kIGRldmljZSBvblxcbitcXHQgKiB0aGUgc2FtZSBRRE1BIGlmIEhXIEdSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdFxcbitcXHQgKiBvciBpZiB0aGlzIGRldmljZSBoYXMgSFcgR1JPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxcbitcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHFkbWFfaWQgPSBxZG1hIC0gXFx1MDAyNnFkbWEtXFx1MDAzZWV0aC1cXHUwMDNlcWRtYVswXTtcXG4rXFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVxcdTAwM2VldGgsIHFkbWFfaWQpIHx8XFxuK1xcdFxcdFxcdFxcdChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKSkge1xcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsIFxcXCJyZXF1aXJlZCB0byBkaXNhYmxlIEhXIEdSTyBvbiBRRE1BJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBxZG1hX2lkKTtcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MzcsNiArMjI0MCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdCAgICBwc2VfcG9ydCk7XFxuIFxcbitcXHRpZiAobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xOTU0LDYgKzIyNjAsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cXHUwMDNlZXRoLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xcbitcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19IVylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTIxMDQsNiArMjQxNCwzNCBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9kZXZfY2hlY2tfaHdfZ3JvKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcXG4rXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldiwgXFxcIkhXIEdSTyBpcyBlbmFibGVkIG9uIFFETUElZFxcXFxuXFxcIiwgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdHFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFxZG1hX2lkXTtcXG4rXFx0cWRtYV9pZCA9IHFkbWEgLSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWzBdO1xcbitcXG4rXFx0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKSB7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuK1xcbitcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiSFcgR1JPIGlzIGVuYWJsZWQgb24gZGVzdGluYXRpb24gUURNQSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XFxuQEAgLTIxMjAsNiArMjQ1OCw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hLCBxZG1hKTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2VpcnEgPSBxZG1hLVxcdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xcbitcXHRxZG1hLVxcdTAwM2V1c2VycysrO1xcbiBcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG5AQCAtMjEzNiw4ICsyNDc1LDEyIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdFxcdFxcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcXHUwMDNjXFx1MDAzYyAxKSArIDEpKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN1cl9xZG1hKVxcbitcXHRpZiAoY3VyX3FkbWEpIHtcXG4rXFx0XFx0Y3VyX3FkbWEtXFx1MDAzZXVzZXJzLS07XFxuIFxcdFxcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMjg4LDYgKzI2MzEsMzYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEpXFxuK1xcdFxcdGZlYXR1cmVzIFxcdTAwMjY9IH5ORVRJRl9GX0dST19IVztcXG4rXFxuK1xcdHJldHVybiBmZWF0dXJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4re1xcbitcXHRuZXRkZXZfZmVhdHVyZXNfdCBkaWZmID0gbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBeIGZlYXR1cmVzO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAoIShkaWZmIFxcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuQEAgLTMxOTksNyArMzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4tXFx0aW50IGVyciA9IC1FQlVTWTtcXG4rXFx0aW50IGVycjtcXG4gXFxuIFxcdGlmIChwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWCkge1xcbkBAIC0zMjEwLDYgKzM1ODMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuIFxcbiBcXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xcbkBAIC0zMjE4LDYgKzM1OTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdGdvdG8gZXJyb3JfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7XFxuQEAgLTMzNDMsNiArMzcyMSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fc3RvcFxcdFxcdD0gYWlyb2hhX2Rldl9zdG9wLFxcbiBcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IGFpcm9oYV9kZXZfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19zZWxlY3RfcXVldWVcXHQ9IGFpcm9oYV9kZXZfc2VsZWN0X3F1ZXVlLFxcbitcXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMsXFxuK1xcdC5uZG9fc2V0X2ZlYXR1cmVzXFx0PSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBhaXJvaGFfZGV2X3htaXQsXFxuIFxcdC5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCxcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsXFxuQEAgLTM0MzAsMTEgKzM4MTAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdG5ldGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xcbiBcXHRuZXRkZXYtXFx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcXG4gXFx0bmV0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcXG4tXFx0bmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcXG4tXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfFxcbi1cXHRcXHRcXHQgICAgICBORVRJRl9GX0hXX1RDO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuLVxcdG5ldGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuK1xcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVMgfCBORVRJRl9GX0dST19IVztcXG4rXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBBSVJPSEFfSFdfRkVBVFVSRVM7XFxuK1xcdG5ldGRldi1cXHUwMDNldmxhbl9mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUztcXG4gXFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXFx1MDAzZWRldik7XFxuIFxcbiBcXHQvKiByZXNlcnZlIGh3IHF1ZXVlcyBmb3IgSFRCIG9mZmxvYWRpbmcgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG5pbmRleCBmYTlhOGVkY2UyMmZmLi45YjU1YWJjNjMwNDg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuQEAgLTQ1LDYgKzQ1LDE4IEBAXFxuIFxcdCAoX24pID09IDE1ID8gMTI4IDpcXHRcXHRcXFxcXFxuIFxcdCAoX24pID09ICAwID8gMTAyNCA6IDE2KVxcbiBcXG4rI2RlZmluZSBBSVJPSEFfTFJPX1BBR0VfT1JERVJcXHRcXHRnZXRfb3JkZXIoU1pfMTZLKVxcbisjZGVmaW5lIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVNcXHQ4XFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1xcdFxcdEdFTk1BU0soMzEsIDI0KVxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlRcXHQ2NFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVxcdDEwMFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRVxcdDIwMDBcXG4rXFxuKyNkZWZpbmUgQUlST0hBX0hXX0ZFQVRVUkVTXFx0XFx0XFx0XFxcXFxcbitcXHQoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFxcdFxcXFxcXG4rXFx0IE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHxcXHRcXFxcXFxuK1xcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxcbitcXG4gI2RlZmluZSBQU0VfUlNWX1BBR0VTXFx0XFx0XFx0MTI4XFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1xcdFxcdDY0XFxuIFxcbkBAIC01MzgsNyArNTUwLDcgQEAgc3RydWN0IGFpcm9oYV93ZG1hX2luZm8ge1xcbiBcXG4gLyogUlggcXVldWUgdG8gSVJRIG1hcHBpbmc6IEJJVChxKSBpbiBJUlEobikgKi9cXG4gI2RlZmluZSBSWF9JUlEwX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDgzOWZcXG4tI2RlZmluZSBSWF9JUlExX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDdmZTAwMDAwXFxuKyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXFx0XFx0XFx0MHhmZmUwMDAwMFxcbiAjZGVmaW5lIFJYX0lSUTJfQkFOS19QSU5fTUFTS1xcdFxcdFxcdDB4MjBcXG4gI2RlZmluZSBSWF9JUlEzX0JBTktfUElOX01BU0tcXHRcXHRcXHQweDQwXFxuICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pXFx0XFx0XFxcXFxcbkBAIC01NjAsNiArNTcyLDggQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aDtcXG4gXFx0dm9pZCBfX2lvbWVtICpyZWdzO1xcbiBcXG4rXFx0aW50IHVzZXJzO1xcbitcXG4gXFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcXG4gXFxuIFxcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcXG5AQCAtNzE0LDYgKzcyOCwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4gXFx0cmV0dXJuIGV0aC1cXHUwMDNlc29jLVxcdTAwM2V2ZXJzaW9uID09IDB4NzU4MztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IHEtXFx1MDAzZXFkbWE7XFxuK1xcdGludCBxaWQgPSBxIC0gXFx1MDAyNnFkbWEtXFx1MDAzZXFfcnhbMF07XFxuK1xcbitcXHQvKiBFTjc1ODEgU29DIHN1cHBvcnRzIGF0IG1vc3QgOCBMUk8gcnggcXVldWVzICovXFxuK1xcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXFx1MDAzZVxcbitcXHRcXHQgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpO1xcbitcXG4rXFx0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXFx1MDAyNiBCSVQocWlkKSk7XFxuK31cXG4rXFxuIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVxcdFxcXFxcXG4gXFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXFx1MDAzY1xcdTAwM2MgMyksXFx0KCgoX24pICUgNCkgXFx1MDAzY1xcdTAwM2MgMykpXFxuIFxcbisjZGVmaW5lIFJFR19DRE1fTFJPX1JYUShfbiwgX20pXFx0XFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcXHUwMDI2IDB4NCkpXFxuKyNkZWZpbmUgTFJPX1JYUV9NQVNLKF9uKVxcdFxcdEdFTk1BU0soNCArICgoKF9uKSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgMyksICgoX24pIFxcdTAwMjYgMHgzKSBcXHUwMDNjXFx1MDAzYyAzKVxcbitcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcXHRcXHQoQ0RNX0JBU0UoX24pICsgMHg4MClcXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuK1xcbisjZGVmaW5lIFJFR19DRE1fTFJPX0xJTUlUKF9uKVxcdFxcdChDRE1fQkFTRShfbikgKyAweDg0KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX05VTV9NQVNLXFx0XFx0R0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0dfU0laRV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMClcXG4rXFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXFx0KENETV9CQVNFKF9uKSArIDB4ODgpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgQ0RNX0xST19BR0dfVElNRV9NQVNLXFx0XFx0R0VOTUFTSygxNSwgMClcXG4rXFxuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVxcdFxcdEdETV9CQVNFKF9uKVxcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1xcdFxcdFxcdEJJVCgyOClcXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcXHRcXHRCSVQoMjMpXFxuQEAgLTg4Nyw5ICs5MDEsMTUgQEBcXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXFx0R0VOTUFTSygyNSwgMjEpXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQ1JTTl9NQVNLXFx0R0VOTUFTSygyMCwgMTYpXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcXHRHRU5NQVNLKDE1LCAwKVxcbisvKiBSWCBNU0cyICovXFxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcXHRHRU5NQVNLKDMxLCAyNClcXG4rI2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1xcdEdFTk1BU0soNiwgMClcXG4rLyogUlggTVNHMyAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTS1xcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XFxuLVxcdF9fbGUzMiByc3Y7XFxuK1xcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XFxuIFxcdF9fbGUzMiBjdHJsO1xcbiBcXHRfX2xlMzIgYWRkcjtcXG4gXFx0X19sZTMyIGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjM3LjQ1NTQ0NzI1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMwNzM0OTE5Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2M2MjQyYTk4N2FlNGZiOGViNmY2MjdiYjVmMmM0YTgxMzc1NjZhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTE6MjI6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uZTBkNzRkMGNiMzZiYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICsxMCwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BrdF9jbHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiYWlyb2hhX3JlZ3MuaFwiXG5AQCAtNDkxLDYgKzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCxcbitcdFx0XHRcdCAgICAgaW50IGxyb19xdWV1ZV9pbmRleCwgaW50IHFpZCxcbitcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuK3tcbitcdGludCBpZCA9IHFkbWFfaWQgKyAxO1xuK1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcbitcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfU0laRV9NQVNLLCBidWZfc2l6ZSkgfFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX05VTV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4rXHRcdCAgICAgIENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyxcbitcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4rXHRcdFx0XHQgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FKSB8XG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSxcbitcdFx0ICAgICAgTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksXG4rXHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0NETV9MUk9fRU4oaWQpLCBCSVQobHJvX3F1ZXVlX2luZGV4KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcbit7XG4rXHRpbnQgaSwgaWQgPSBxZG1hX2lkICsgMTtcbitcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSxcbitcdFx0XHRDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4rXHRcdFx0Q0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVM7IGkrKylcbitcdFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fUlhRKGlkLCBpKSwgTFJPX1JYUV9NQVNLKGkpKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKVxuK3tcbitcdHJldHVybiBhaXJvaGFfZmVfZ2V0KGV0aCwgUkVHX0NETV9MUk9fRU4ocWRtYV9pZCArIDEpLFxuK1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcdGludCBpLCBscm9fcXVldWVfaW5kZXggPSAwO1xuK1xuK1x0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXHUwMDNlcV9yeCk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxID0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4W2ldO1xuK1x0XHR1MzIgc2l6ZTtcbitcbitcdFx0aWYgKCFxLVx1MDAzZW5kZXNjKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2l6ZSA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuK1x0XHRzaXplID0gbWluX3QodTMyLCBzaXplLCBBSVJPSEFfTUFYX1JYX1NJWkUpO1xuK1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4rXHRcdFx0XHRcdCBzaXplKTtcbitcdFx0bHJvX3F1ZXVlX2luZGV4Kys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbitcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuK1xuK1x0aWYgKCFhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWlyb2hhX2ZlX2xyb19kaXNhYmxlKGV0aCwgcWRtYV9pZCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX2ZlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG4gXHRhaXJvaGFfZmVfbWFjY3JfaW5pdChldGgpO1xuQEAgLTYxNiw2ICs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0ZS1cdTAwM2VkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocGFnZSkgKyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0dmFsID0gRklFTERfUFJFUChRRE1BX0RFU0NfTEVOX01BU0ssIGUtXHUwMDNlZG1hX2xlbik7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCBjcHVfdG9fbGUzMih2YWwpKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIGNwdV90b19sZTMyKGUtXHUwMDNlZG1hX2FkZHIpKTtcbkBAIC02NTcsMTggKzc0MiwxODggQEAgYWlyb2hhX3FkbWFfZ2V0X2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgc3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MpXG4gXHRyZXR1cm4gcG9ydC1cdTAwM2VkZXZzW2RdID8gcG9ydC1cdTAwM2VkZXZzW2RdIDogRVJSX1BUUigtRU5PREVWKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBza19idWZmICphaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplLFxuK1x0XHRcdFx0XHQgICAgICB1MzIgbGVuLCB1MzIgYWdnX2NvdW50KVxuK3tcbitcdHUzMiBtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMSkpO1xuK1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHR1MzIgbXNnMyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzMpKTtcbitcdHUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgZGF0YV9sZW47XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4rXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHN0cnVjdCB0Y3BoZHIgKnRoO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRib29sIGlwdjQsIGlwdjY7XG4rXG4rXHRpcHY0ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNF9NQVNLLCBtc2cxKTtcbitcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xuK1x0aWYgKCFpcHY0IFx1MDAyNlx1MDAyNiAhaXB2NilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRsMl9sZW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0ssIG1zZzIpO1xuK1xuK1x0aWYgKGlwdjQpIHtcbitcdFx0c3RydWN0IGlwaGRyICppcGg7XG4rXG4rXHRcdGlmIChsZW4gXHUwMDNjIGwyX2xlbiArIHNpemVvZigqaXBoKSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXHRcdGlmIChpcGgtXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdGlmIChpcGgtXHUwMDNlaWhsIFx1MDAzYyA1KVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1xuK1x0XHR0aF9vZmYgPSBsMl9sZW4gKyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4rXHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXBoLVx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXG4rXHRcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XG4rXHRcdGlmIChsZW4gXHUwMDNjIHRoX29mZilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcbitcdFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXHRcdGlmIChpcDZoLVx1MDAzZW5leHRoZHIgIT0gTkVYVEhEUl9UQ1ApXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdGlwNmgtXHUwMDNlcGF5bG9hZF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSB0aF9vZmYpO1xuK1x0fVxuK1xuK1x0aWYgKGxlbiBcdTAwM2MgdGhfb2ZmICsgc2l6ZW9mKCp0aCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShlLVx1MDAzZWJ1ZiArIHRoX29mZik7XG4rXHRpZiAodGgtXHUwMDNlZG9mZiBcdTAwM2MgNSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbitcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSywgbXNnMyk7XG4rXHR0Y3BfYWNrX3NlcSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZWRhdGEpKTtcbitcdHRoLVx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XG4rXHR0aC1cdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcbitcbitcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXG4rXHRpZiAodGgtXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcbitcdFx0dTMyIHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggKyAxKTtcbitcbitcdFx0aWYgKHRvcHQgPT0gKChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcdTAwM2NcdTAwM2MgMTYpIHxcbitcdFx0XHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFx1MDAzY1x1MDAzYyA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKSkge1xuK1x0XHRcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xuK1x0XHRcdF9fbGUzMiB0Y3BfdHNfcmVwbHkgPSBSRUFEX09OQ0UoZGVzYy1cdTAwM2V0Y3BfdHNfcmVwbHkpO1xuK1xuK1x0XHRcdC8qIFRoZSBmaWVsZCBpcyBwcmUtemVyb2VkIGluIHRoZSBwb3N0ZWQgZGVzY3JpcHRvcixcbitcdFx0XHQgKiBzbyBhIG5vbi16ZXJvIHZhbHVlIGlzIHRoZSBoYXJkd2FyZSBjb25maXJtaW5nIHRoZVxuK1x0XHRcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxuK1x0XHRcdCAqIHVudG91Y2hlZCBvdGhlcndpc2UsIHNpbmNlIHRoZSBoYXJkd2FyZSBtYXkgbm90XG4rXHRcdFx0ICogcG9wdWxhdGUgaXQgZm9yIGV2ZXJ5IGFnZ3JlZ2F0ZS5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAodGNwX3RzX3JlcGx5KVxuK1x0XHRcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXG4rXHRcdFx0XHRcdFx0ICAgcHRyKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGlwdjQpIHtcbitcdFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKGUtXHUwMDNlYnVmICsgbDJfbGVuKTtcbitcbitcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVx1MDAzZXNhZGRyLFxuK1x0XHRcdFx0XHQgIGlwaC1cdTAwM2VkYWRkciwgMCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShlLVx1MDAzZWJ1ZiArIGwyX2xlbik7XG4rXG4rXHRcdHRoLVx1MDAzZWNoZWNrID0gfnRjcF92Nl9jaGVjayhsZW4gLSB0aF9vZmYsIFx1MDAyNmlwNmgtXHUwMDNlc2FkZHIsXG4rXHRcdFx0XHRcdCAgXHUwMDI2aXA2aC1cdTAwM2VkYWRkciwgMCk7XG4rXHR9XG4rXG4rXHQvKiBTcGxpdCBuZXR3b3JrIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gcmVseSBvbiBHUk8uXG4rXHQgKiBXZSBuZWVkIHRvIGRvIGl0IGluIHRoZSBkcml2ZXIgc2luY2UgdGhlIE5JQyBkb2VzXG4rXHQgKiBub3Qgc3VwcG9ydCBpdC5cbitcdCAqL1xuK1x0c2tiID0gbmFwaV9hbGxvY19za2IoXHUwMDI2cS1cdTAwM2VuYXBpLCBkYXRhX29mZik7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRfX3NrYl9wdXQoc2tiLCBkYXRhX29mZik7XG4rXHRtZW1jcHkoc2tiLVx1MDAzZWRhdGEsIGUtXHUwMDNlYnVmLCBkYXRhX29mZik7XG4rXG4rXHRwYWdlID0gdmlydF90b19oZWFkX3BhZ2UoZS1cdTAwM2VidWYpO1xuK1x0ZGF0YV9sZW4gPSBsZW4gLSBkYXRhX29mZjtcbitcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbitcdHNrYl9hZGRfcnhfZnJhZyhza2IsIHNoaW5mby1cdTAwM2Vucl9mcmFncywgcGFnZSxcbitcdFx0XHRlLVx1MDAzZWJ1ZiArIGRhdGFfb2ZmIC0gcGFnZV9hZGRyZXNzKHBhZ2UpLCBkYXRhX2xlbixcbitcdFx0XHRxLVx1MDAzZWJ1Zl9zaXplKTtcbitcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcbitcdC8qIEhXIGRvZXMgbm90IHJlcG9ydCB0aGUgcGVyLXNlZ21lbnQgTVNTLCBzbyBhcHByb3hpbWF0ZSBpdCBhc1xuK1x0ICogdGhlIGF2ZXJhZ2Ugc2VnbWVudCBzaXplLiBGb3IgYSBzdHJlYW0gb2YgTVNTLXNpemVkIHNlZ21lbnRzXG4rXHQgKiB3aXRoIGEgc2hvcnRlciB0YWlsIHRoaXMgc3RpbGwgcmUtc2VnbWVudHMgaW50byBleGFjdGx5XG4rXHQgKiBhZ2dfY291bnQgc2VnbWVudHMsIGtlZXBpbmcgZ3NvX3NpemUvZ3NvX3NlZ3MgYW5kIHRoZSBwYWNrZXRcbitcdCAqIGFjY291bnRpbmcgY29oZXJlbnQsIHdoaWxlIG5ldmVyIG92ZXJlc3RpbWF0aW5nIHRoZSBNU1MuXG4rXHQgKi9cbitcdHNoaW5mby1cdTAwM2Vnc29fc2l6ZSA9IERJVl9ST1VORF9VUChkYXRhX2xlbiwgYWdnX2NvdW50KTtcbitcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbitcbitcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ID0gc2tiX2hlYWRyb29tKHNrYikgKyB0aF9vZmY7XG4rXHRza2ItXHUwMDNlY3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7XG4rXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSxcbitcdFx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdHUzMiBsZW4sIHUzMiBhZ2dfY291bnQpXG4re1xuK1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxLVx1MDAzZXFkbWEtXHUwMDNlcV9yeFswXTtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXG4rXHRpZiAoYWdnX2NvdW50IFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHsgLyogTFJPICovXG4rXHRcdHNrYiA9IGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgZSwgbGVuLCBhZ2dfY291bnQpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH0gZWxzZSB7XG4rXHRcdHNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLCBxLVx1MDAzZWJ1Zl9zaXplKTtcbitcdFx0aWYgKCFza2IpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRcdHNrYl9yZXNlcnZlKHNrYiwgQUlST0hBX1JYX0hFQURST09NKTtcbitcdFx0X19za2JfcHV0KHNrYiwgbGVuKTtcbitcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZO1xuK1x0fVxuK1xuK1x0c2tiX21hcmtfZm9yX3JlY3ljbGUoc2tiKTtcbitcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4rXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcWlkKTtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCk7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4tXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxLVx1MDAzZXFkbWEtXHUwMDNlZXRoO1xuIFx0aW50IGRvbmUgPSAwO1xuIFxuIFx0d2hpbGUgKGRvbmUgXHUwMDNjIGJ1ZGdldCkge1xuK1x0XHR1MzIgaGFzaCwgcmVhc29uLCBtc2cxLCBtc2cyLCBkZXNjX2N0cmwsIGFnZ19jb3VudDtcbiBcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFx1MDAyNnEtXHUwMDNlZW50cnlbcS1cdTAwM2V0YWlsXTtcbiBcdFx0c3RydWN0IGFpcm9oYV9xZG1hX2Rlc2MgKmRlc2MgPSBcdTAwMjZxLVx1MDAzZWRlc2NbcS1cdTAwM2V0YWlsXTtcbi1cdFx0dTMyIGhhc2gsIHJlYXNvbiwgbXNnMSwgZGVzY19jdHJsO1xuIFx0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldjtcbiBcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdFx0aW50IGRhdGFfbGVuLCBsZW47XG5AQCAtNjkyLDI0ICs5NDcsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdGlmICghbGVuIHx8IGRhdGFfbGVuIFx1MDAzYyBsZW4pXG4gXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4gXG4rXHRcdG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4rXHRcdGlmIChhZ2dfY291bnQgXHUwMDNlIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpXG4rXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4rXG4gXHRcdGRldiA9IGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KGV0aCwgZGVzYyk7XG4gXHRcdGlmIChJU19FUlIoZGV2KSlcbiBcdFx0XHRnb3RvIGZyZWVfZnJhZztcbiBcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuIFx0XHRpZiAoIXEtXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xuLVx0XHRcdHEtXHUwMDNlc2tiID0gbmFwaV9idWlsZF9za2IoZS1cdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXG4tXHRcdFx0XHRcdFx0cS1cdTAwM2VidWZfc2l6ZSk7XG4rXHRcdFx0cS1cdTAwM2Vza2IgPSBhaXJvaGFfcWRtYV9idWlsZF9yeF9za2IocSwgZGVzYywgZSwgbmV0ZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICBsZW4sIGFnZ19jb3VudCk7XG4gXHRcdFx0aWYgKCFxLVx1MDAzZXNrYilcbiBcdFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuLVxuLVx0XHRcdHNrYl9yZXNlcnZlKHEtXHUwMDNlc2tiLCBBSVJPSEFfUlhfSEVBRFJPT00pO1xuLVx0XHRcdF9fc2tiX3B1dChxLVx1MDAzZXNrYiwgbGVuKTtcbi1cdFx0XHRza2JfbWFya19mb3JfcmVjeWNsZShxLVx1MDAzZXNrYik7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuLVx0XHRcdHEtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cdTAwM2Vza2IsIG5ldGRldik7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4tXHRcdFx0c2tiX3JlY29yZF9yeF9xdWV1ZShxLVx1MDAzZXNrYiwgcWlkKTtcbiBcdFx0fSBlbHNlIHsgLyogc2NhdHRlcmVkIGZyYW1lICovXG4gXHRcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVx1MDAzZXNrYik7XG4gXHRcdFx0aW50IG5yX2ZyYWdzID0gc2hpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuQEAgLTgwMCwxMiArMTA1MiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbitcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiBcdFx0LnBvb2xfc2l6ZSA9IDI1NixcbiBcdFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXG4gXHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuLVx0XHQubWF4X2xlbiA9IFBBR0VfU0laRSxcbiBcdFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcbiBcdFx0LmRldiA9IHFkbWEtXHUwMDNlZXRoLVx1MDAzZWRldixcbiBcdFx0Lm5hcGkgPSBcdTAwMjZxLVx1MDAzZW5hcGksXG5AQCAtODEzLDkgKzEwNjMsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXSwgdGhyO1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4rXHRscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTtcbiBcbiBcdHEtXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXHUwMDNlZW50cnkpLFxuIFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5AQCAtODI3LDYgKzEwNzgsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdGlmICghcS1cdTAwM2VkZXNjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbitcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBwcF9wYXJhbXMub3JkZXI7XG4rXG4gXHRxLVx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiBcdGlmIChJU19FUlIocS1cdTAwM2VwYWdlX3Bvb2wpKSB7XG4gXHRcdGludCBlcnIgPSBQVFJfRVJSKHEtXHUwMDNlcGFnZV9wb29sKTtcbkBAIC04MzUsNiArMTA4OSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0cS1cdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XG4gXHRxLVx1MDAzZW5kZXNjID0gbmRlc2M7XG4gXHRuZXRpZl9uYXBpX2FkZChldGgtXHUwMDNlbmFwaV9kZXYsIFx1MDAyNnEtXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcbiBcbkBAIC04NDgsNyArMTEwMywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdFx0XHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xuIFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXHUwMDNlaGVhZCkpO1xuLVx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xuK1x0aWYgKGxyb19xKVxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbitcdFx0XHRcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxuK1x0XHRcdFx0UlhfUklOR19TR19FTl9NQVNLKTtcbiBcbiBcdGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUocSk7XG4gXG5AQCAtODcwLDYgKzExMzAsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWN0cmwsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlYWRkciwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VkYXRhLCAwKTtcbkBAIC0xODk2LDYgKzIxNTcsMzQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9od19zdGF0cyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlc3RhdHNfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLVx1MDAzZXBvcnRzW2ldO1xuK1x0XHRpbnQgajtcbitcbitcdFx0aWYgKCFwb3J0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXHUwMDNlZGV2cyk7IGorKykge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVx1MDAzZWRldnNbal07XG4rXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdFx0XHRpZiAoIWl0ZXJfZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7XG4rXHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTE5MTMsMTQgKzIyMDIsMjggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4gXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4tXHRpbnQgZXJyO1xuK1x0aW50IHFkbWFfaWQsIGVycjtcbitcbitcdC8qIEhXIEdSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlblxuK1x0ICogYWxsIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb25cbitcdCAqIHRoZSBzYW1lIFFETUEgaWYgSFcgR1JPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0XG4rXHQgKiBvciBpZiB0aGlzIGRldmljZSBoYXMgSFcgR1JPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxuK1x0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2cWRtYS1cdTAwM2VldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChxZG1hLVx1MDAzZXVzZXJzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHFkbWEtXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxuK1x0XHRcdFx0KG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fSFcpKSkge1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwicmVxdWlyZWQgdG8gZGlzYWJsZSBIVyBHUk8gb24gUURNQSVkXFxuXCIsXG4rXHRcdFx0ICAgIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkzNyw2ICsyMjQwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgKzIyNjAsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjEwNCw2ICsyNDE0LDM0IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW50IGFpcm9oYV9kZXZfY2hlY2tfaHdfZ3JvKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkge1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuK1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwiSFcgR1JPIGlzIGVuYWJsZWQgb24gUURNQSVkXFxuXCIsIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuK1xuK1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFxZG1hX2lkXTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4rXG4rXHRpZiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpIHtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbitcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdCAgICBcIkhXIEdSTyBpcyBlbmFibGVkIG9uIGRlc3RpbmF0aW9uIFFETUElZFxcblwiLFxuK1x0XHRcdCAgICBxZG1hX2lkKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7XG5AQCAtMjEyMCw2ICsyNDU4LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYS1cdTAwM2V1c2VycysrO1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCArMjQ3NSwxMiBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4gXHR9XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Y3VyX3FkbWEtXHUwMDNldXNlcnMtLTtcbiBcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4rXG4rXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiArMjYzMSwzNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbitcdFx0ZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9HUk9fSFc7XG4rXG4rXHRyZXR1cm4gZmVhdHVyZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuK3tcbitcdG5ldGRldl9mZWF0dXJlc190IGRpZmYgPSBuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXiBmZWF0dXJlcztcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmICghKGRpZmYgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0hXKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuQEAgLTMxOTksNyArMzU3Miw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWCkge1xuQEAgLTMyMTAsNiArMzU4MywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0ZXJyID0gYWlyb2hhX2Rldl9jaGVja19od19ncm8oZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4gXG4gXHR3YW5fZGV2ID0gYWlyb2hhX2dldF93YW5fZ2RtX2RldihldGgpO1xuQEAgLTMyMTgsNiArMzU5NSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiBcdFx0XHRcdFx0ICAgXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwiKTtcbitcdFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4gXHRcdH1cbiBcdFx0YWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChuZXRkZXZfZnJvbV9wcml2KHdhbl9kZXYpKTtcbkBAIC0zMzQzLDYgKzM3MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wXHRcdD0gYWlyb2hhX2Rldl9zdG9wLFxuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gYWlyb2hhX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zZWxlY3RfcXVldWVcdD0gYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUsXG4rXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyxcbitcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19zdGFydF94bWl0XHRcdD0gYWlyb2hhX2Rldl94bWl0LFxuIFx0Lm5kb19nZXRfc3RhdHM2NCAgICAgICAgPSBhaXJvaGFfZGV2X2dldF9zdGF0czY0LFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gYWlyb2hhX2Rldl9zZXRfbWFjYWRkcixcbkBAIC0zNDMwLDExICszODEwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcbiBcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbi1cdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8XG4tXHRcdFx0ICAgICAgTkVUSUZfRl9IV19UQztcbi1cdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG4tXHRuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbitcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfR1JPX0hXO1xuK1x0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IEFJUk9IQV9IV19GRUFUVVJFUztcbitcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXHUwMDNlZGV2KTtcbiBcbiBcdC8qIHJlc2VydmUgaHcgcXVldWVzIGZvciBIVEIgb2ZmbG9hZGluZyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBmYTlhOGVkY2UyMmZmLi45YjU1YWJjNjMwNDg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTQ1LDYgKzQ1LDE4IEBAXG4gXHQgKF9uKSA9PSAxNSA/IDEyOCA6XHRcdFxcXG4gXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAxNilcbiBcbisjZGVmaW5lIEFJUk9IQV9MUk9fUEFHRV9PUkRFUlx0XHRnZXRfb3JkZXIoU1pfMTZLKVxuKyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFU1x0OFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fRU5fTUFTS1x0XHRHRU5NQVNLKDMxLCAyNClcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlRcdDY0XG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcdDEwMFxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHRV9USU1FXHQyMDAwXG4rXG4rI2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVNcdFx0XHRcXFxuK1x0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcdFxcXG4rXHQgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9JUFY2X0NTVU0gfFx0XFxcbitcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxuK1xuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1x0XHRcdDEyOFxuICNkZWZpbmUgUFNFX1FVRVVFX1JTVl9QQUdFU1x0XHQ2NFxuIFxuQEAgLTUzOCw3ICs1NTAsNyBAQCBzdHJ1Y3QgYWlyb2hhX3dkbWFfaW5mbyB7XG4gXG4gLyogUlggcXVldWUgdG8gSVJRIG1hcHBpbmc6IEJJVChxKSBpbiBJUlEobikgKi9cbiAjZGVmaW5lIFJYX0lSUTBfQkFOS19QSU5fTUFTS1x0XHRcdDB4ODM5ZlxuLSNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXHRcdFx0MHg3ZmUwMDAwMFxuKyNkZWZpbmUgUlhfSVJRMV9CQU5LX1BJTl9NQVNLXHRcdFx0MHhmZmUwMDAwMFxuICNkZWZpbmUgUlhfSVJRMl9CQU5LX1BJTl9NQVNLXHRcdFx0MHgyMFxuICNkZWZpbmUgUlhfSVJRM19CQU5LX1BJTl9NQVNLXHRcdFx0MHg0MFxuICNkZWZpbmUgUlhfSVJRX0JBTktfUElOX01BU0soX24pXHRcdFxcXG5AQCAtNTYwLDYgKzU3Miw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuK1x0aW50IHVzZXJzO1xuK1xuIFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcbkBAIC03MTQsNiArNzI4LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4rXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcbitcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbitcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXHUwMDNlXG4rXHRcdCAgICAgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUyk7XG4rXG4rXHRyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyBcdTAwMjYgQklUKHFpZCkpO1xuK31cbitcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMGVjNDFjM2I0YzA2NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcbiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pXHRcXFxuIFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpLFx0KCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpKVxuIFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcdTAwMjYgMHg0KSlcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICsgKCgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDI2IDB4MykgXHUwMDNjXHUwMDNjIDMpXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODApXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODQpXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICsgMHg4OClcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVx0XHRHRE1fQkFTRShfbilcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1x0XHRcdEJJVCgyOClcbiAjZGVmaW5lIEdETV9EUk9QX0NSQ19FUlJfTUFTS1x0XHRCSVQoMjMpXG5AQCAtODg3LDkgKzkwMSwxNSBAQFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1x0R0VOTUFTSygyNSwgMjEpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0tcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcdEdFTk1BU0soMTUsIDApXG4rLyogUlggTVNHMiAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcdEdFTk1BU0soNiwgMClcbisvKiBSWCBNU0czICovXG4rI2RlZmluZSBRRE1BX0VUSF9SWE1TR19BR0dfTEVOX01BU0tcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLXHRHRU5NQVNLKDE1LCAwKVxuIFxuIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjIHtcbi1cdF9fbGUzMiByc3Y7XG4rXHRfX2xlMzIgdGNwX3RzX3JlcGx5O1xuIFx0X19sZTMyIGN0cmw7XG4gXHRfX2xlMzIgYWRkcjtcbiBcdF9fbGUzMiBkYXRhO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjI6MzcuNDU1NDQ5MTkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQxMDI1ODgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgY2hhbmdlcyB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AsIGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRvIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuXG5cbkl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBMYXJnZSBSZWNlaXZlIE9mZmxvYWQgKExSTyksIG9yIEhXIEdSTyBzdXBwb3J0LCBiZWluZyBhZGRlZCB0byB0aGUgQWlyb2hhIGV0aGVybmV0IGRyaXZlci4gVGhlIHNwZWNpZmljIGZpbGVzIG1vZGlmaWVkIOKAkyBgYWlyb2hhX2V0aC5jYCwgYC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYCDigJMgY29uZmlybSB0aGlzLiBPa2F5LCBJIHNlZSB0aGUgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGVuYWJsaW5nL2Rpc2FibGluZyBMUk8gYXQgdGhlIFJYIHF1ZXVlIGFuZCBkZXZpY2UgbGV2ZWw6IGBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGVgLCBgYWlyb2hhX2ZlX2xyb19kaXNhYmxlYCwgYGFpcm9oYV9kZXZfbHJvX2VuYWJsZWAsIGFuZCBgYWlyb2hhX2Rldl9scm9fZGlzYWJsZWAuIFRoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyB0byBidWlsZCBhbmQgaGFuZGxlIHRoZSBTS0JzIOKAkyBgYWlyb2hhX3FkbWFfbHJvX3J4X3NrYmAsIGFuZCBgYWlyb2hhX3FkbWFfYnVpbGRfcnhfc2tiYOKAkywgYW5kIGNyaXRpY2FsIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3NgLCBgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZWAsIGBhaXJvaGFfZGV2X29wZW5gLCBgYWlyb2hhX2Rldl9zdG9wYCwgYGFpcm9oYV9kZXZfaW5pdGAsIGBhaXJvaGFfZGV2X3NldF9mZWF0dXJlc2AsIGFuZCBgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXNgLiBUaGVzZSBhcmUgYWxsIHNpZ25zIG9mIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBSWCBwYXRoLlxuXG5NeSBuZXh0IGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LiBUaGlzIGlzIHRoZSBBaXJvaGEgZXRoZXJuZXQgZHJpdmVyLCBhbmQgYmFzZWQgb24gbXkgcHJpb3Iga25vd2xlZGdlLCBpdCdzIHNwZWNpZmljIHRvIHRoZSBFTjc1ODEgU29DLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIG9yIGEgUENJIGRyaXZlci4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGBhaXJvaGFfZXRoYCBvciBgYWlyb2hhX3Byb2JlYCB0byBmaWd1cmUgdGhpcyBvdXQuIElmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHJlYWNoaW5nIGl0IGluIGEgc3RhbmRhcmQgVk0gc2V0dXAgbWlnaHQgYmUgdHJpY2tpZXIsIGJ1dCBjZXJ0YWlubHkgbm90IGltcG9zc2libGUuIElmIGl0J3MgYSBQQ0kgZHJpdmVyLCB0aGF0J3MgYmV0dGVyLCBzaW5jZSBpdCdzIGxpa2VseSB3ZSBjYW4gYXNzaWduIHRoZSBlbXVsYXRlZCBkZXZpY2UgdG8gdGhlIFZNLiBJZiBpdCdzIG5vdCBlYXNpbHkgcmVhY2hhYmxlLCB0aGVuIGl0IGRyb3BzIGluIHByaW9yaXR5IGZvciB0aGlzIGtpbmQgb2YgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo0Ni44NjU3MTA0NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNzg2ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhLipwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkzOD1zdGF0aWMgaW50IGFpcm9oYV9yZWdpc3Rlcl9nZG1fZGV2aWNlcyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zOTY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzk2NzpzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzk2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQzMzI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQzMzM6XFx0LnByb2JlID0gYWlyb2hhX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMzNC1cXHQucmVtb3ZlID0gYWlyb2hhX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2OTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MTQ6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxNS1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjQ2Ljk2Mzk5NTc1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTE3MjU4NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBgcGxhdGZvcm1fZHJpdmVyYCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIFNvQy1zcGVjaWZpYywgb3IgYXQgbGVhc3QgaGlnaGx5IGludGVncmF0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBwbGF0Zm9ybSBkcml2ZXJzIGZvciBhIHBhcnRpY3VsYXIgU29DLCBsaWtlIHRoaXMgQWlyb2hhIEVONzU4MSwgYXJlIHVzdWFsbHkgYSBuby1nbyBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1bmxlc3MgdGhlcmUncyBzb21lIGN1c3RvbSBlbXVsYXRvciBzZXR1cCBmb3IgaXQsIG9yIGl0J3MgZGVzaWduZWQgdG8gYmUgbW9yZSBnZW5lcmljLiBHaXZlbiB0aGUgbGlrZWx5IHBsYXRmb3JtIGRlcGVuZGVuY2UsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4gVGhhdCdzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIHN0b3J5IOKAkyBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBhYm91dCBkZXBlbmRlbmNpZXMsIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMsIG9yIGFueSBpbmRpY2F0aW9uIG9mIGJyb2FkZXIgc3VwcG9ydC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgc2F5cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo1Mi4wNzU3MjM5ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4NTg2MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyOmNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiQWlyb2hhIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjUyLjE1NzU4Njc0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDEwMDQ3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEtjb25maWcgUmV2aWV3KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBcIkxldCdzIHJlYWQgdGhlIEtjb25maWcuXCIgVGhhdCdzIHRoZSBmaXJzdCBzdGVwLCBpc24ndCBpdD8gQmVmb3JlIGFueSBzZXJpb3VzIHdvcmsgYmVnaW5zLCB5b3UgKmFsd2F5cyogbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLiBJJ20gdGhpbmtpbmcsIFwiV2hlcmUgYXJlIHdlIGV2ZW4gc3RhcnRpbmcgZnJvbT8gV2hhdCBhcmUgdGhlIGtleSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBmbGFncyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj9cIlxuXG5NeSBtaW5kJ3MgYWxyZWFkeSBzaWZ0aW5nIHRocm91Z2ggcG9zc2liaWxpdGllcy4gSSdtIHdvbmRlcmluZzpcblxuKiAgIElzIHRoaXMgYSBmcmVzaCBLY29uZmlnLCBvciBvbmUgSSdtIGZhbWlsaWFyIHdpdGg/IFRoYXQgaW5mb3JtcyBteSBhcHByb2FjaC4gSWYgSSBrbm93IGl0LCBJJ2xsIGdvIGZvciBxdWljayBzcGVjaWZpYyBjaGVja3MgZm9yIGNlcnRhaW4gdmFyaWFibGVzLlxuKiAgIEFyZSB0aGVyZSBhbnkgaW5jbHVkZSBkaXJlY3RpdmVzPyBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBvcmdhbml6YXRpb25hbCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHksIGFuZCBkZXRlcm1pbmUgd2hldGhlciBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBLY29uZmlnIGZpbGVzLlxuKiAgIEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIGRlZmluZWQ/IElzIGl0IGZvciBhIHNwZWNpZmljIENQVSwgYm9hcmQsIG9yIGJ1aWxkIGNvbmZpZ3VyYXRpb24/IEkgd2FudCB0byBjb250ZXh0dWFsaXplIHRoaXMgaW1tZWRpYXRlbHkuXG4qICAgQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcywgb3IgZmVhdHVyZXMsIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzIGFib3V0IHRvIGtpY2sgaW4gbXkgaW50ZXJuYWwgY29uZmxpY3QgcmVzb2x1dGlvbiBjb2RlIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMuXG4qICAgQW0gSSBsb29raW5nIHRvIGNoYW5nZSBzb21ldGhpbmc/IE9yIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUuIFRoYXQgaGVscHMgdG8gZm9jdXMgbXkgaW5pdGlhbCByZXZpZXcuXG5cblNvLCBJJ20gbWVudGFsbHkgc2tldGNoaW5nIG91dCBhIHBsYW4uIEl0J3MgdGltZSB0byBmaW5kIHRoZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDExOjIyOjU3LjI1ODU5MzgxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMjo1Ny4yNTg2ODc0NTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzMTYzNTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmc9ZmFsc2U6IEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRoZSBBaXJvaGEgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgKE5FVF9BSVJPSEEpLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgU29DLiBTaW5jZSBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBpdCAqbmVlZHMqIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSBvciBzb21lIGtpbmQgb2YgcGxhdGZvcm0gZGV2aWNlIHJlZ2lzdHJhdGlvbiB0byBwcm9iZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGV4ZWN1dGUgdGhlIGNvZGUgdGhpcyBwYXRjaCB0b3VjaGVzLlxuXG5JbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSwgdGhlcmUncyBubyBBaXJvaGEgU29DIGVtdWxhdGlvbiBieSBkZWZhdWx0LiBUaGF0IG1lYW5zIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGZvciB0aGlzIGRyaXZlciAqd2lsbCBub3QqIGJlIGNhbGxlZC4gQWxsIHRoZXNlIG1vZGlmaWNhdGlvbnMgdG8gYGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3NgLCBgYWlyb2hhX2Rldl9vcGVuYCwgZXRjLiwgYXJlIGNvbXBsZXRlbHkgaW5hY2Nlc3NpYmxlLlxuXG5Db3VsZCBTeXprYWxsZXIgc29tZWhvdyBjcmVhdGUgaXQ/IE1heWJlLCB1c2luZyBgc3l6X2Rldl9jcmVhdGVgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBQb3NzaWJseSwgaWYgaXQgd2FzIGdlbmVyaWNhbGx5IHN1cHBvcnRlZCwgb3IgYSB2aXJ0dWFsIGRldmljZSBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYHZldGhgLiBCdXQgSSBkb24ndCBzZWUgYW55dGhpbmcgbGlrZSB0aGF0IGhlcmUuIFBsdXMsIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSwgaXQncyBhIG5vLWdvLlxuXG5UaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuIEl0J3MgYSBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIsIHNvLCBpdCdzIGdvaW5nIHRvIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5IG9mIFwiaW1wb3NzaWJsZSB0byByZWFjaFwiLlxuXG5JJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBkaWZmIGp1c3QgdG8gYmUgZXh0cmEgc3VyZS4gSXTigJlzIGFsbCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gLCBzcGVjaWZpY2FsbHkgYGFpcm9oYV9ldGguY2AsIGBhaXJvaGFfZXRoLmhgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBEZWZpbml0ZWx5IGp1c3QgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBub3RoaW5nIGdlbmVyaWMuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgQWlyb2hhIFNvQyBkcml2ZXIgaXMgcGxhdGZvcm0tc3BlY2lmaWMuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuXG5cbkknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyNjEsIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMToyMzowOC4xOTAzMjYwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKiksIHdoaWNoIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgZHJpdmVyIGZvciBBaXJvaGEgaGFyZHdhcmUuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyopLCB3aGljaCBpcyBhIHBsYXRmb3JtLXNwZWNpZmljIGRyaXZlciBmb3IgQWlyb2hhIGhhcmR3YXJlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTE6MjM6MDguMTkwMzY4ODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow2272d[1] Phase: Running StartedAt: 2026-08-07 11:23:28 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2272d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 11:23:28 +0000 UTC FinishedAt: 2026-08-07 11:23:33 +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,}