Name: series-workflowhhsrc Phase: Failed StartedAt: 2026-08-07 07:33:56 +0000 UTC FinishedAt: 2026-08-07 07:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhsrc[0] Phase: Succeeded StartedAt: 2026-08-07 07:33:56 +0000 UTC FinishedAt: 2026-08-07 07:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhsrc[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 07:33:56 +0000 UTC FinishedAt: 2026-08-07 07:50:23 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbmluZGV4IGI2NzliZWQ5NTJkZTMuLjc0ZGEzYzRkMDZlNGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG5AQCAtMjMsNiAmIzQzOzIzLDEyIEBAXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcdDB4MjAwMDAwXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkVcdDB4MTAwMDBcbiAjZGVmaW5lIE5QVV9EVU1QX1NJWkVcdFx0XHRcdDUxMlxuJiM0MzsvKlxuJiM0MzsgKiBNYWlsYm94IERNQSBwYXlsb2FkIHNpemUuIENvdmVycyBzaXplb2Yoc3RydWN0IHBwZV9tYm94X2RhdGEpICgyOCkgYW5kXG4mIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbiYjNDM7ICogaXMgMTYgYnl0ZXMgKElOT0RFX1RYUlhfUkVHX0FERFIpLiBLZWVwIGhlYWRyb29tIGZvciBmdXR1cmUgY29tbWFuZHMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICYjNDM7MTY2LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XG4gXHRERUNMQVJFX0ZMRVhfQVJSQVkodTgsIGQpO1xuIH07XG4gXG4tc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuLVx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbiYjNDM7c3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuJiM0MztcdFx0XHRcdCBpbnQgcmVwbHlfbGVuKVxuIHtcbi1cdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbi1cdHUzMiB2YWwsIG9mZnNldCA9IGNvcmUgXHUwMDNjXHUwMDNjIDQ7XG4tXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovXG4mIzQzO1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2UgQUlST0hBX05QVV9NQk9YX1NJWkUgfHxcbiYjNDM7XHQgICAgKHJlcGx5IFx1MDAyNlx1MDAyNiAocmVwbHlfbGVuIFx1MDAzYyAwIHx8IHJlcGx5X2xlbiBcdTAwM2UgbGVuKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbiYjNDM7XHQgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuJiM0MztcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbiYjNDM7XHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbiYjNDM7XHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGMtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7XG4tXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIHNpemUpO1xuJiM0MztcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgXHUwMDI2dmFsKTtcbiBcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyAmIzQzOzIwNCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuJiM0MztcdC8qIENvcHkgdGhlIHRyYWlsaW5nIHJlcGx5X2xlbiBieXRlcyBvZiB0aGUgcmVzcG9uc2UuICovXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuJiM0MztcdFx0bWVtY3B5KHJlcGx5LCBjLVx1MDAzZWJ1ZiAmIzQzOyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ0Miw4ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlZnVuY19pZCA9IFBQRV9GVU5DX1NFVF9XQUlUX0ZMT1dfU1RBVFNfU0VUVVA7XG4gXHRwcGVfZGF0YS1cdTAwM2VzdGF0c19pbmZvLmZvZV9zdGF0c19hZGRyID0gZm9lX3N0YXRzX2FkZHI7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDk3LDkgJiM0Mzs1MjEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuJiM0MztcdFx0XHRcdCAgICBkYXRhLCBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiAmIzQzOzc5MywxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiAmIzQzOzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4mIzQzO1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbiYjNDM7XHRcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwppbmRleCBiNjc5YmVkOTUyZGUzLi43NGRhM2M0ZDA2ZTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKQEAgLTIzLDYgJiM0MzsyMywxMiBAQAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkUJMHgyMDAwMDAKICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFCTB4MTAwMDAKICNkZWZpbmUgTlBVX0RVTVBfU0laRQkJCQk1MTIKJiM0MzsvKgomIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmQKJiM0MzsgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICYjNDM7IHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5CiYjNDM7ICogaXMgMTYgYnl0ZXMgKElOT0RFX1RYUlhfUkVHX0FERFIpLiBLZWVwIGhlYWRyb29tIGZvciBmdXR1cmUgY29tbWFuZHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRQkJCTI1NgogCiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTQkJMHgwCiAKQEAgLTE2MCwyMyAmIzQzOzE2NiwzMiBAQCBzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEgewogCURFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7CiB9OwogCi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCi0JCQkgICAgICAgdm9pZCAqcCwgaW50IHNpemUpCiYjNDM7c3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiYjNDM7CQkJCSBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLCB2b2lkICpyZXBseSwKJiM0MzsJCQkJIGludCByZXBseV9sZW4pCiB7Ci0JdTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqLwotCXUzMiB2YWwsIG9mZnNldCA9IGNvcmUgJmx0OyZsdDsgNDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gJmFtcDtucHUtJmd0O2NvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqLwomIzQzOwl1MzIgdmFsLCBvZmZzZXQgPSAwOwogCWludCByZXQ7CiAKLQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LSZndDtkZXYsIGRtYV9hZGRyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAobGVuICZndDsgQUlST0hBX05QVV9NQk9YX1NJWkUgfHwKJiM0MzsJICAgIChyZXBseSAmYW1wOyZhbXA7IChyZXBseV9sZW4gJmx0OyAwIHx8IHJlcGx5X2xlbiAmZ3Q7IGxlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwkvKgomIzQzOwkgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS4KJiM0MzsJICogT24gRU43NTgxJiM0MztNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZQomIzQzOwkgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OCiYjNDM7CSAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnQKJiM0MzsJICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFCiYjNDM7CSAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7Yy0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CW1lbWNweShjLSZndDtidWYsIGRhdGEsIGxlbik7CiAKLQlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7Ci0JcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7CiYjNDM7CXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGMtJmd0O2FkZHIpOwomIzQzOwlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBsZW4pOwogCXJlZ21hcF9yZWFkKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgJmFtcDt2YWwpOwogCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIHZhbCAmIzQzOyAxKTsKIAl2YWwgPSBGSUVMRF9QUkVQKE1CT1hfTVNHX0ZVTkNfSUQsIGZ1bmNfaWQpIHwgTUJPWF9NU0dfV0FJVF9SU1A7CkBAIC0xODksMTMgJiM0MzsyMDQsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCWlmICghcmV0ICZhbXA7JmFtcDsgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwkvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqLwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJlcGx5KQomIzQzOwkJbWVtY3B5KHJlcGx5LCBjLSZndDtidWYgJiM0MzsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pOwogCi0JZG1hX3VubWFwX3NpbmdsZShucHUtJmd0O2RldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtjLSZndDtsb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIGZ1bmNfaWQsIGRhdGEsIGxlbiwgTlVMTCwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSkKIHsKQEAgLTQ0Miw4ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfRkxPV19TVEFUU19TRVRVUDsKIAlwcGVfZGF0YS0mZ3Q7c3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCi0JCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiYjNDM7CWVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCiYjNDM7CQkJCSAgICBzaXplb2YoKnBwZV9kYXRhKSwgcHBlX2RhdGEsCiYjNDM7CQkJCSAgICBzaXplb2YoKnBwZV9kYXRhKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTQ5Nyw5ICYjNDM7NTIxLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCwKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7CiAJd2xhbl9kYXRhLSZndDtmdW5jX2lkID0gZnVuY19pZDsKIAotCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweShkYXRhLCB3bGFuX2RhdGEtJmd0O2QsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgICBkYXRhLCBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5MywxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXQmIzM5O3MgbW9kaWZ5aW5nIGhvdyBtYWlsYm94IG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCAoTlBVKS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1vdmluZyBmcm9tIHRoZSBzdGFuZGFyZCBgZG1hX21hcF9zaW5nbGVgIC8gYGRtYV91bm1hcF9zaW5nbGVgIGFwcHJvYWNoIGZvciBlYWNoIG1lc3NhZ2UgdG8gdXNpbmcgYSBwcmUtYWxsb2NhdGVkIGNvaGVyZW50IERNQSBidWZmZXIuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBtZW1vcnkgbWFuYWdlbWVudC4KClRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYF9fYWlyb2hhX25wdV9zZW5kX21zZ2AsIHdoaWNoIG5vdyB0YWtlcyBhIGByZXBseWAgYnVmZmVyIGFuZCBpdHMgbGVuZ3RoLiBBbmQgdGhlIGNvaGVyZW50IGJ1ZmZlciBpdHNlbGYgaXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgYGFpcm9oYV9ucHVfcHJvYmVgIGZ1bmN0aW9uLgoKTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHM/IENvdWxkIHRoaXMgYmUgYWN0aXZhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZHJpdmVyIGlzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBldGhlcm5ldCBkcml2ZXJzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbmF0dXJlLiBBaCwgaXQmIzM5O3MgYW4gZXRoZXJuZXQgZHJpdmVyIGZvciBBaXJvaGEgU29Dcy4gV2FpdCwgQWlyb2hhIGlzIGEgTWVkaWFUZWsgc3Vic2lkaWFyeSwgcmlnaHQ/IFRoZXkgbWFrZSBuZXR3b3JraW5nIFNvQ3MuIFRoaXMgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyBjb21tb25seSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gWWVzLCBpdCYjMzk7cyBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgU29DIC0gYSBoYXJkd2FyZSBkZXZpY2UuIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBoYXJkd2FyZSBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiBhIHR5cGljYWwga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGVzZSB0eXBlcyBvZiBkcml2ZXIgY29uZmlndXJhdGlvbnMuIEtjb25maWcgZmlsZXMgZGVmaW5lIHRoZSBidWlsZCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgdGhhdCB1c2VycyBzZWUgd2hlbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhhdCBmaWxlIHRvIHNlZSBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgQWlyb2hhLWJhc2VkIGV0aGVybmV0IGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSVJPSEFfRU43NTgxX0VUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDgwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgYXBwcm9hY2ggaGVyZSBpcyBwcmV0dHkgY2xlYXI6IEkgbmVlZCB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTm8gbmVlZCBmb3IgYW55IHByZWxpbWluYXJ5IGZsdWZmIG9yIGV4dHJhbmVvdXMgaW52ZXN0aWdhdGlvbi4gTXkgZXhwZXJ0aXNlIGlzIHN1Y2ggdGhhdCBJIGNhbiBsaWtlbHkgZ2xlYW4gYSBzaWduaWZpY2FudCBhbW91bnQgb2YgaW5mb3JtYXRpb24ganVzdCBieSBxdWlja2x5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSBhbmQgY29udGVudCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBlbGVtZW50cywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoYXQgZHJpdmVzIHRoZSBidWlsZCBhbmQgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHRydXRoIGxpZXMsIHRoZSBzb3VyY2Ugb2YgdGhlIGJ1aWxkLXRpbWUga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG4gICAzOlx0XHRib29sIFwmIzM0O0Fpcm9oYSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVUX0FJUk9IQV9OUFVcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBOUFUgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDEzOlx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxuICAxNjpcdFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5FVF9BSVJPSEFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcbiAgMjE6XHRcdHNlbGVjdCBORVRfQUlST0hBX05QVVxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxuICAyNTpcdFx0ICBBaXJvaGEgU29DIGZhbWlseS5cbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXG4gIDI4Olx0XHRkZWZhdWx0IHlcbiAgMjk6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGZsb3cgc3RhdHNcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcdTAwMjZcdTAwMjYgTkVUX0FJUk9IQV9OUFVcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgRW5hYmxlIEFpcm9oYSBmbG93dGFibGUgc3RhdGlzdGljIGNvdW50ZXJzLlxuICAzMzpcdFxuICAzNDpcdGVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgQ3JpdGVyaWEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnZvbHZlcyBhIGRyaXZlciBmb3IgYW4gQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGNvbXBvbmVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGhhcmR3YXJlIHRoaXMgZHJpdmVyIGludGVyZmFjZXMgd2l0aCBpcyBlbXVsYXRlZCB3aXRoaW4gUUVNVS4gTm9wZSwgaXQmIzM5O3MgYW4gU29DLXNwZWNpZmljIGNvbXBvbmVudCwgc3BlY2lmaWNhbGx5IHRoZSBOZXR3b3JrIFByb2Nlc3NvciBVbml0IChOUFUpLgoKVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpb24gZ2l2ZXMgbWUgYSBwcmV0dHkgY2xlYXIgbm8tZ28gb24gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgZGVtYW5kIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuIEhtbSwgYnV0IGhvbGQgb24g4oCTIHRoaXMgaXMgYW4gKlNvQyogZHJpdmVyLCBub3QgYSBQQ0llIGNhcmQgZHJpdmVyIHBlciBzZS4gSG93ZXZlciwgaXQgKmRvZXMqIHN0aWxsIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgQWlyb2hhIFNvQyBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgY29uc3RyYWludCwganVzdCBhIGRpZmZlcmVudCBidXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gdGhpcyBoYXJkd2FyZSBldmVuIGJlIHByb2JlZCBvciBhY2Nlc3NlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhdCBhbGwsIGV2ZW4gd2l0aG91dCBiZWluZyBmdWxseSBlbXVsYXRlZD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc21zIHRvIGdldCBhIHNvbGlkIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDg9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxNjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ2Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ3LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDA0CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBpbnRlcmZhY2UgdG8gaW5zdGFudGlhdGUgaXQsIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRyaWNreSB0byBnZXQgYXQgaW4gc3RhbmRhcmQgUUVNVSDigJMgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIHRob3NlIHNwZWNpZmljIG1hY2hpbmUgdHlwZXMuIFdhaXQsIGNhbiBzeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGBzeXpfZGV2X2NyZWF0ZWA/IEhtbSwgbm8sIG5vdCBlYXNpbHkuIEl0JiMzOTtzIHJlYWxseSBoYXJkIHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkIG9yIGdlbmVyaWMuCgpUaGlzIGRyaXZlciBhbHNvIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIHRoaW5ncyBsaWtlIGByZWdtYXBfd3JpdGVgIGFuZCBgcmVnbWFwX3JlYWRgLCBhbmQgaXQmIzM5O3MgZXhwZWN0aW5nIGNlcnRhaW4gaGFyZHdhcmUgYmVoYXZpb3JzLCBsaWtlIHRoYXQgYE1CT1hfTVNHX1NUQVRVU2AgdGhpbmcuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBmYWlsIHF1aWNrbHkgZHVyaW5nIHRoZSBwcm9iZSBvciB0aW1lb3V0IHNvbWV3aGVyZS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zICYjMzQ7Y29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCYjMzQ7IGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZS4gVGhpcyBpcyBhbiBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggc2NyZWFtcyBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBEZWZpbml0ZWx5IG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KCkxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQWlyb2hhIE5QVXMuLi4gTm9wZSwgbm90aGluZy4gU28sIGdpdmVuIGFsbCB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlciAoQWlyb2hhIE5QVSkgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQzLjczMTgwMTgwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTU4OTY4ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NDMuNzMxODA3MDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1MDE0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiN2RjYjQ3OTU0MTMwOTA4Y2FmYmMzOTEwMmFkZmEwODYwOTdiM2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5pbmRleCBiNjc5YmVkOTUyZGUzLi43NGRhM2M0ZDA2ZTRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXFxuQEAgLTIzLDYgKzIzLDEyIEBAXFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXFx0MHgyMDAwMDBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkVcXHQweDEwMDAwXFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVxcdFxcdFxcdFxcdDUxMlxcbisvKlxcbisgKiBNYWlsYm94IERNQSBwYXlsb2FkIHNpemUuIENvdmVycyBzaXplb2Yoc3RydWN0IHBwZV9tYm94X2RhdGEpICgyOCkgYW5kXFxuKyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgKyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cXG4rICovXFxuKyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcXHRcXHRcXHQyNTZcXG4gXFxuICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNXFx0XFx0MHgwXFxuIFxcbkBAIC0xNjAsMjMgKzE2NiwzMiBAQCBzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEge1xcbiBcXHRERUNMQVJFX0ZMRVhfQVJSQVkodTgsIGQpO1xcbiB9O1xcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbi1cXHRcXHRcXHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXFxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqcmVwbHksXFxuK1xcdFxcdFxcdFxcdCBpbnQgcmVwbHlfbGVuKVxcbiB7XFxuLVxcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cXG4tXFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbi1cXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovXFxuK1xcdHUzMiB2YWwsIG9mZnNldCA9IDA7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuLVxcdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkcik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChsZW4gXFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSB8fFxcbitcXHQgICAgKHJlcGx5IFxcdTAwMjZcXHUwMDI2IChyZXBseV9sZW4gXFx1MDAzYyAwIHx8IHJlcGx5X2xlbiBcXHUwMDNlIGxlbikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbWNweShjLVxcdTAwM2VidWYsIGRhdGEsIGxlbik7XFxuIFxcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4tXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVxcdTAwM2VhZGRyKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBsZW4pO1xcbiBcXHRyZWdtYXBfcmVhZChucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgXFx1MDAyNnZhbCk7XFxuIFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgdmFsICsgMSk7XFxuIFxcdHZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDtcXG5AQCAtMTg5LDEzICsyMDQsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbiBcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LyogQ29weSB0aGUgdHJhaWxpbmcgcmVwbHlfbGVuIGJ5dGVzIG9mIHRoZSByZXNwb25zZS4gKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVwbHkpXFxuK1xcdFxcdG1lbWNweShyZXBseSwgYy1cXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xcbiBcXG4tXFx0ZG1hX3VubWFwX3NpbmdsZShucHUtXFx1MDAzZWRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmMtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbilcXG4re1xcbitcXHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXFxuIHtcXG5AQCAtNDQyLDggKzQ2NSw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZWZ1bmNfaWQgPSBQUEVfRlVOQ19TRVRfV0FJVF9GTE9XX1NUQVRTX1NFVFVQO1xcbiBcXHRwcGVfZGF0YS1cXHUwMDNlc3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyO1xcbiBcXG4tXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCpwcGVfZGF0YSksIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ5Nyw5ICs1MjEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTc3MCw2ICs3OTMsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4rXFxuK1xcdFxcdGNvcmUtXFx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWJ1ZilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXFx1MDAyNnJlcyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XFxuIFxcdFxcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXFxuIFxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xcbitcXHRcXHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cXG4rXFx0XFx0dm9pZCAqYnVmO1xcbitcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XFxuIFxcbiBcXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQ0LjExMDAyODk1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4MTgwNzI2MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uNzRkYTNjNGQwNmU0ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICsxNjYsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuK1x0XHRcdFx0IGludCByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqL1xuK1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSB8fFxuK1x0ICAgIChyZXBseSBcdTAwMjZcdTAwMjYgKHJlcGx5X2xlbiBcdTAwM2MgMCB8fCByZXBseV9sZW4gXHUwMDNlIGxlbikpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKlxuK1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXG4rXHQgKiBPbiBFTjc1ODErTVQ3OTk2LCBzdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUwgYWdhaW5zdCB0aGVcbitcdCAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT05cbitcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbitcdCAqIGJvdW5jZSBidWZmZXIgdW5kZXIgdGhlIHBlci1jb3JlIGxvY2sgKGFsc28gdXNlZCBmcm9tIFBQRVxuK1x0ICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZjLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtY3B5KGMtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbitcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVx1MDAzZWFkZHIpO1xuK1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyArMjA0LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuK1x0XHRtZW1jcHkocmVwbHksIGMtXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKVxuK3tcbitcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIE5VTEwsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ0Miw4ICs0NjUsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfRkxPV19TVEFUU19TRVRVUDtcbiBcdHBwZV9kYXRhLVx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcbiBcbi1cdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuK1x0XHRcdFx0ICAgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSxcbitcdFx0XHRcdCAgICBzaXplb2YoKnBwZV9kYXRhKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00OTcsOSArNTIxLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCxcbiBcdHdsYW5fZGF0YS1cdTAwM2VmdW5jX3R5cGUgPSBOUFVfT1BfR0VUO1xuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFxuLVx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcbi1cdGlmICghZXJyKVxuLVx0XHRtZW1jcHkoZGF0YSwgd2xhbl9kYXRhLVx1MDAzZWQsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTc3MCw2ICs3OTMsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpKyspIHtcbitcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbitcbitcdFx0Y29yZS1cdTAwM2VidWYgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUlST0hBX05QVV9NQk9YX1NJWkUsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFjb3JlLVx1MDAzZWJ1ZilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbiBcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXHUwMDI2cmVzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiArMTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xuIFx0XHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xuIFx0XHRzcGlubG9ja190IGxvY2s7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcbitcdFx0LyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovXG4rXHRcdHZvaWQgKmJ1ZjtcbitcdFx0ZG1hX2FkZHJfdCBhZGRyO1xuIFx0fSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTtcbiBcbiBcdGludCBpcnFzW05QVV9OVU1fSVJRXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQ0LjExMDAzMDE3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDIzODY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXQncyBtb2RpZnlpbmcgaG93IG1haWxib3ggbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpLiBFc3NlbnRpYWxseSwgaXQncyBtb3ZpbmcgZnJvbSB0aGUgc3RhbmRhcmQgYGRtYV9tYXBfc2luZ2xlYCAvIGBkbWFfdW5tYXBfc2luZ2xlYCBhcHByb2FjaCBmb3IgZWFjaCBtZXNzYWdlIHRvIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBjb2hlcmVudCBETUEgYnVmZmVyLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhleSd2ZSBpbnRyb2R1Y2VkIGBfX2Fpcm9oYV9ucHVfc2VuZF9tc2dgLCB3aGljaCBub3cgdGFrZXMgYSBgcmVwbHlgIGJ1ZmZlciBhbmQgaXRzIGxlbmd0aC4gQW5kIHRoZSBjb2hlcmVudCBidWZmZXIgaXRzZWxmIGlzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGBhaXJvaGFfbnB1X3Byb2JlYCBmdW5jdGlvbi5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHM/IENvdWxkIHRoaXMgYmUgYWN0aXZhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gTGV0J3Mgc2VlLi4uIHRoZSBkcml2ZXIgaXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGV0aGVybmV0IGRyaXZlcnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBuYXR1cmUuIEFoLCBpdCdzIGFuIGV0aGVybmV0IGRyaXZlciBmb3IgQWlyb2hhIFNvQ3MuIFdhaXQsIEFpcm9oYSBpcyBhIE1lZGlhVGVrIHN1YnNpZGlhcnksIHJpZ2h0PyBUaGV5IG1ha2UgbmV0d29ya2luZyBTb0NzLiBUaGlzIGxpa2VseSBtZWFucyBpdCdzIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyBjb21tb25seSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBMZXQncyBkaWcgZGVlcGVyLiBZZXMsIGl0J3MgZm9yIHRoZSBBaXJvaGEgRU43NTgxIFNvQyAtIGEgaGFyZHdhcmUgZGV2aWNlLiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYEtjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaGFyZHdhcmUgc3VwcG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTAwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTAuODEyNDE5MDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzA1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMy1cXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTAuODU2MTI4NDUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTQ1ODc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIGEgdHlwaWNhbCBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZXNlIHR5cGVzIG9mIGRyaXZlciBjb25maWd1cmF0aW9ucy4gS2NvbmZpZyBmaWxlcyBkZWZpbmUgdGhlIGJ1aWxkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IHVzZXJzIHNlZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBsb29rIGluIHRoYXQgZmlsZSB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIEFpcm9oYS1iYXNlZCBldGhlcm5ldCBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo0OTo1NC4zNjE1ODk0MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MzczOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBSVJPSEFfRU43NTgxX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTQuNDA1MjMxMzM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNzg1MjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBhcHByb2FjaCBoZXJlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBmaWxlLiBObyBuZWVkIGZvciBhbnkgcHJlbGltaW5hcnkgZmx1ZmYgb3IgZXh0cmFuZW91cyBpbnZlc3RpZ2F0aW9uLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkgY2FuIGxpa2VseSBnbGVhbiBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBpbmZvcm1hdGlvbiBqdXN0IGJ5IHF1aWNrbHkgcGFyc2luZyB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZWxlbWVudHMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGRyaXZlcyB0aGUgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzLCB0aGUgc291cmNlIG9mIHRoZSBidWlsZC10aW1lIGtub3dsZWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjU3LjUyMzA4NjAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgMzpcXHRcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIE5QVSBzdXBwb3J0XFxcIlxcbiAgMTI6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxMzpcXHRcXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbiAgMTY6XFx0XFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBORVRfQUlST0hBXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcXG4gIDIxOlxcdFxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxcbiAgMjU6XFx0XFx0ICBBaXJvaGEgU29DIGZhbWlseS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCB5XFxuICAyOTpcXHRcXHRib29sIFxcXCJBaXJvaGEgZmxvdyBzdGF0c1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcXHUwMDI2XFx1MDAyNiBORVRfQUlST0hBX05QVVxcbiAgMzE6XFx0XFx0aGVscFxcbiAgMzI6XFx0XFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo0OTo1Ny41MjMxNTAxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzMyNzAwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV29ydGhGdXp6aW5nIENyaXRlcmlhKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIGZvciBhbiBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBOb3BlLCBpdCdzIGFuIFNvQy1zcGVjaWZpYyBjb21wb25lbnQsIHNwZWNpZmljYWxseSB0aGUgTmV0d29yayBQcm9jZXNzb3IgVW5pdCAoTlBVKS5cblxuVGhlIHByb21wdCdzIGNyaXRlcmlvbiBnaXZlcyBtZSBhIHByZXR0eSBjbGVhciBuby1nbyBvbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCBkZW1hbmQgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gSG1tLCBidXQgaG9sZCBvbiDigJMgdGhpcyBpcyBhbiAqU29DKiBkcml2ZXIsIG5vdCBhIFBDSWUgY2FyZCBkcml2ZXIgcGVyIHNlLiBIb3dldmVyLCBpdCAqZG9lcyogc3RpbGwgcmVseSBvbiB0aGUgdW5kZXJseWluZyBBaXJvaGEgU29DIGhhcmR3YXJlLCB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIEl0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgY29uc3RyYWludCwganVzdCBhIGRpZmZlcmVudCBidXMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiB0aGlzIGhhcmR3YXJlIGV2ZW4gYmUgcHJvYmVkIG9yIGFjY2Vzc2VkIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGF0IGFsbCwgZXZlbiB3aXRob3V0IGJlaW5nIGZ1bGx5IGVtdWxhdGVkPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRyaXZlcidzIHByb2JpbmcgbWVjaGFuaXNtcyB0byBnZXQgYSBzb2xpZCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDowMy4yNTU4NTI5NDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTM3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYV9ucHVfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTcwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzE2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODQ1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ2OlxcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04NDctXFx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDowMy4zNDg3OTYzNTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk0MTkzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBVbmxlc3MgdGhlcmUncyBhIHNvZnR3YXJlIGludGVyZmFjZSB0byBpbnN0YW50aWF0ZSBpdCwgaXQncyBnb2luZyB0byBiZSB0cmlja3kgdG8gZ2V0IGF0IGluIHN0YW5kYXJkIFFFTVUg4oCTIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIHRob3NlIHNwZWNpZmljIG1hY2hpbmUgdHlwZXMuIFdhaXQsIGNhbiBzeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGBzeXpfZGV2X2NyZWF0ZWA/IEhtbSwgbm8sIG5vdCBlYXNpbHkuIEl0J3MgcmVhbGx5IGhhcmQgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXkncmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCBvciBnZW5lcmljLlxuXG5UaGlzIGRyaXZlciBhbHNvIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIHRoaW5ncyBsaWtlIGByZWdtYXBfd3JpdGVgIGFuZCBgcmVnbWFwX3JlYWRgLCBhbmQgaXQncyBleHBlY3RpbmcgY2VydGFpbiBoYXJkd2FyZSBiZWhhdmlvcnMsIGxpa2UgdGhhdCBgTUJPWF9NU0dfU1RBVFVTYCB0aGluZy4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBmYWlsIHF1aWNrbHkgZHVyaW5nIHRoZSBwcm9iZSBvciB0aW1lb3V0IHNvbWV3aGVyZS5cblxuVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgXCJjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXCIgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGF0J3MgYSBodWdlIGNsdWUuIFRoaXMgaXMgYW4gQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIHNjcmVhbXMgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gRGVmaW5pdGVseSBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQWlyb2hhIE5QVXMuLi4gTm9wZSwgbm90aGluZy4gU28sIGdpdmVuIGFsbCB0aGlzLCBpdCdzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyIChBaXJvaGEgTlBVKSB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDoxMi4yOTA3MzA0ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNvQyBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhsrc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 07:33:56 +0000 UTC FinishedAt: 2026-08-07 07:50:13 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbmluZGV4IGI2NzliZWQ5NTJkZTMuLjc0ZGEzYzRkMDZlNGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG5AQCAtMjMsNiAmIzQzOzIzLDEyIEBAXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcdDB4MjAwMDAwXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkVcdDB4MTAwMDBcbiAjZGVmaW5lIE5QVV9EVU1QX1NJWkVcdFx0XHRcdDUxMlxuJiM0MzsvKlxuJiM0MzsgKiBNYWlsYm94IERNQSBwYXlsb2FkIHNpemUuIENvdmVycyBzaXplb2Yoc3RydWN0IHBwZV9tYm94X2RhdGEpICgyOCkgYW5kXG4mIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbiYjNDM7ICogaXMgMTYgYnl0ZXMgKElOT0RFX1RYUlhfUkVHX0FERFIpLiBLZWVwIGhlYWRyb29tIGZvciBmdXR1cmUgY29tbWFuZHMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICYjNDM7MTY2LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XG4gXHRERUNMQVJFX0ZMRVhfQVJSQVkodTgsIGQpO1xuIH07XG4gXG4tc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuLVx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbiYjNDM7c3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuJiM0MztcdFx0XHRcdCBpbnQgcmVwbHlfbGVuKVxuIHtcbi1cdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbi1cdHUzMiB2YWwsIG9mZnNldCA9IGNvcmUgXHUwMDNjXHUwMDNjIDQ7XG4tXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovXG4mIzQzO1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2UgQUlST0hBX05QVV9NQk9YX1NJWkUgfHxcbiYjNDM7XHQgICAgKHJlcGx5IFx1MDAyNlx1MDAyNiAocmVwbHlfbGVuIFx1MDAzYyAwIHx8IHJlcGx5X2xlbiBcdTAwM2UgbGVuKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbiYjNDM7XHQgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuJiM0MztcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbiYjNDM7XHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbiYjNDM7XHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGMtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7XG4tXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIHNpemUpO1xuJiM0MztcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgYy1cdTAwM2VhZGRyKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSAmIzQzOyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgXHUwMDI2dmFsKTtcbiBcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyAmIzQzOzIwNCwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuJiM0MztcdC8qIENvcHkgdGhlIHRyYWlsaW5nIHJlcGx5X2xlbiBieXRlcyBvZiB0aGUgcmVzcG9uc2UuICovXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuJiM0MztcdFx0bWVtY3B5KHJlcGx5LCBjLVx1MDAzZWJ1ZiAmIzQzOyBsZW4gLSByZXBseV9sZW4sIHJlcGx5X2xlbik7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBOVUxMLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ0Miw4ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlZnVuY19pZCA9IFBQRV9GVU5DX1NFVF9XQUlUX0ZMT1dfU1RBVFNfU0VUVVA7XG4gXHRwcGVfZGF0YS1cdTAwM2VzdGF0c19pbmZvLmZvZV9zdGF0c19hZGRyID0gZm9lX3N0YXRzX2FkZHI7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtNDk3LDkgJiM0Mzs1MjEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuJiM0MztcdFx0XHRcdCAgICBkYXRhLCBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiAmIzQzOzc5MywxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiAmIzQzOzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4mIzQzO1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbiYjNDM7XHRcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwppbmRleCBiNjc5YmVkOTUyZGUzLi43NGRhM2M0ZDA2ZTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKQEAgLTIzLDYgJiM0MzsyMywxMiBAQAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkUJMHgyMDAwMDAKICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFCTB4MTAwMDAKICNkZWZpbmUgTlBVX0RVTVBfU0laRQkJCQk1MTIKJiM0MzsvKgomIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmQKJiM0MzsgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICYjNDM7IHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5CiYjNDM7ICogaXMgMTYgYnl0ZXMgKElOT0RFX1RYUlhfUkVHX0FERFIpLiBLZWVwIGhlYWRyb29tIGZvciBmdXR1cmUgY29tbWFuZHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRQkJCTI1NgogCiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTQkJMHgwCiAKQEAgLTE2MCwyMyAmIzQzOzE2NiwzMiBAQCBzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEgewogCURFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7CiB9OwogCi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCi0JCQkgICAgICAgdm9pZCAqcCwgaW50IHNpemUpCiYjNDM7c3RhdGljIGludCBfX2Fpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiYjNDM7CQkJCSBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuLCB2b2lkICpyZXBseSwKJiM0MzsJCQkJIGludCByZXBseV9sZW4pCiB7Ci0JdTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqLwotCXUzMiB2YWwsIG9mZnNldCA9IGNvcmUgJmx0OyZsdDsgNDsKLQlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gJmFtcDtucHUtJmd0O2NvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqLwomIzQzOwl1MzIgdmFsLCBvZmZzZXQgPSAwOwogCWludCByZXQ7CiAKLQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LSZndDtkZXYsIGRtYV9hZGRyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAobGVuICZndDsgQUlST0hBX05QVV9NQk9YX1NJWkUgfHwKJiM0MzsJICAgIChyZXBseSAmYW1wOyZhbXA7IChyZXBseV9sZW4gJmx0OyAwIHx8IHJlcGx5X2xlbiAmZ3Q7IGxlbikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwkvKgomIzQzOwkgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS4KJiM0MzsJICogT24gRU43NTgxJiM0MztNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZQomIzQzOwkgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OCiYjNDM7CSAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnQKJiM0MzsJICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFCiYjNDM7CSAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7Yy0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CW1lbWNweShjLSZndDtidWYsIGRhdGEsIGxlbik7CiAKLQlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7Ci0JcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7CiYjNDM7CXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGMtJmd0O2FkZHIpOwomIzQzOwlyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBsZW4pOwogCXJlZ21hcF9yZWFkKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgJmFtcDt2YWwpOwogCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSAmIzQzOyBvZmZzZXQsIHZhbCAmIzQzOyAxKTsKIAl2YWwgPSBGSUVMRF9QUkVQKE1CT1hfTVNHX0ZVTkNfSUQsIGZ1bmNfaWQpIHwgTUJPWF9NU0dfV0FJVF9SU1A7CkBAIC0xODksMTMgJiM0MzsyMDQsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCWlmICghcmV0ICZhbXA7JmFtcDsgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwkvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqLwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJlcGx5KQomIzQzOwkJbWVtY3B5KHJlcGx5LCBjLSZndDtidWYgJiM0MzsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pOwogCi0JZG1hX3VubWFwX3NpbmdsZShucHUtJmd0O2RldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtjLSZndDtsb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAomIzQzOwkJCQkgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIGZ1bmNfaWQsIGRhdGEsIGxlbiwgTlVMTCwgMCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSkKIHsKQEAgLTQ0Miw4ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfRkxPV19TVEFUU19TRVRVUDsKIAlwcGVfZGF0YS0mZ3Q7c3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCi0JCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiYjNDM7CWVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCiYjNDM7CQkJCSAgICBzaXplb2YoKnBwZV9kYXRhKSwgcHBlX2RhdGEsCiYjNDM7CQkJCSAgICBzaXplb2YoKnBwZV9kYXRhKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTQ5Nyw5ICYjNDM7NTIxLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCwKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7CiAJd2xhbl9kYXRhLSZndDtmdW5jX2lkID0gZnVuY19pZDsKIAotCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweShkYXRhLCB3bGFuX2RhdGEtJmd0O2QsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgICBkYXRhLCBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5MywxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXQmIzM5O3MgbW9kaWZ5aW5nIGhvdyBtYWlsYm94IG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZSBOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCAoTlBVKS4gRXNzZW50aWFsbHksIGl0JiMzOTtzIG1vdmluZyBmcm9tIHRoZSBzdGFuZGFyZCBgZG1hX21hcF9zaW5nbGVgIC8gYGRtYV91bm1hcF9zaW5nbGVgIGFwcHJvYWNoIGZvciBlYWNoIG1lc3NhZ2UgdG8gdXNpbmcgYSBwcmUtYWxsb2NhdGVkIGNvaGVyZW50IERNQSBidWZmZXIuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBtZW1vcnkgbWFuYWdlbWVudC4KClRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYF9fYWlyb2hhX25wdV9zZW5kX21zZ2AsIHdoaWNoIG5vdyB0YWtlcyBhIGByZXBseWAgYnVmZmVyIGFuZCBpdHMgbGVuZ3RoLiBBbmQgdGhlIGNvaGVyZW50IGJ1ZmZlciBpdHNlbGYgaXMgYWxsb2NhdGVkIGR1cmluZyB0aGUgYGFpcm9oYV9ucHVfcHJvYmVgIGZ1bmN0aW9uLgoKTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHM/IENvdWxkIHRoaXMgYmUgYWN0aXZhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZHJpdmVyIGlzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBldGhlcm5ldCBkcml2ZXJzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbmF0dXJlLiBBaCwgaXQmIzM5O3MgYW4gZXRoZXJuZXQgZHJpdmVyIGZvciBBaXJvaGEgU29Dcy4gV2FpdCwgQWlyb2hhIGlzIGEgTWVkaWFUZWsgc3Vic2lkaWFyeSwgcmlnaHQ/IFRoZXkgbWFrZSBuZXR3b3JraW5nIFNvQ3MuIFRoaXMgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyBjb21tb25seSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gWWVzLCBpdCYjMzk7cyBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgU29DIC0gYSBoYXJkd2FyZSBkZXZpY2UuIEkgbmVlZCB0byBjb25zdWx0IHRoZSBgS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyB1bmRlciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBoYXJkd2FyZSBzdXBwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBpbiBhIHR5cGljYWwga2VybmVsIHNvdXJjZSB0cmVlIGZvciB0aGVzZSB0eXBlcyBvZiBkcml2ZXIgY29uZmlndXJhdGlvbnMuIEtjb25maWcgZmlsZXMgZGVmaW5lIHRoZSBidWlsZCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgdGhhdCB1c2VycyBzZWUgd2hlbiBjb25maWd1cmluZyB0aGUga2VybmVsLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gdGhhdCBmaWxlIHRvIHNlZSBleGFjdGx5IHdoYXQgcGFyYW1ldGVycyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgQWlyb2hhLWJhc2VkIGV0aGVybmV0IGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBSVJPSEFfRU43NTgxX0VUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDgwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgYXBwcm9hY2ggaGVyZSBpcyBwcmV0dHkgY2xlYXI6IEkgbmVlZCB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIEtjb25maWcgZmlsZS4gTm8gbmVlZCBmb3IgYW55IHByZWxpbWluYXJ5IGZsdWZmIG9yIGV4dHJhbmVvdXMgaW52ZXN0aWdhdGlvbi4gTXkgZXhwZXJ0aXNlIGlzIHN1Y2ggdGhhdCBJIGNhbiBsaWtlbHkgZ2xlYW4gYSBzaWduaWZpY2FudCBhbW91bnQgb2YgaW5mb3JtYXRpb24ganVzdCBieSBxdWlja2x5IHBhcnNpbmcgdGhlIHN0cnVjdHVyZSBhbmQgY29udGVudCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBlbGVtZW50cywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvdmVyYWxsIGxvZ2ljIHRoYXQgZHJpdmVzIHRoZSBidWlsZCBhbmQgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoaXMgaXMgd2hlcmUgdGhlIHRydXRoIGxpZXMsIHRoZSBzb3VyY2Ugb2YgdGhlIGJ1aWxkLXRpbWUga25vd2xlZGdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG4gICAzOlx0XHRib29sIFwmIzM0O0Fpcm9oYSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEFSQ0hfQUlST0hBIHx8IENPTVBJTEVfVEVTVFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBJZiB5b3UgaGF2ZSBhIEFpcm9oYSBTb0Mgd2l0aCBldGhlcm5ldCwgc2F5IFkuXG4gICA3Olx0XG4gICA4Olx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgTkVUX0FJUk9IQV9OUFVcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBOUFUgc3VwcG9ydFwmIzM0O1xuICAxMjpcdFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXG4gIDEzOlx0XHRzZWxlY3QgUkVHTUFQX01NSU9cbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxuICAxNjpcdFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5FVF9BSVJPSEFcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcbiAgMjE6XHRcdHNlbGVjdCBORVRfQUlST0hBX05QVVxuICAyMjpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxuICAyNTpcdFx0ICBBaXJvaGEgU29DIGZhbWlseS5cbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXG4gIDI4Olx0XHRkZWZhdWx0IHlcbiAgMjk6XHRcdGJvb2wgXCYjMzQ7QWlyb2hhIGZsb3cgc3RhdHNcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcdTAwMjZcdTAwMjYgTkVUX0FJUk9IQV9OUFVcbiAgMzE6XHRcdGhlbHBcbiAgMzI6XHRcdCAgRW5hYmxlIEFpcm9oYSBmbG93dGFibGUgc3RhdGlzdGljIGNvdW50ZXJzLlxuICAzMzpcdFxuICAzNDpcdGVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA3OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXb3J0aEZ1enppbmcgQ3JpdGVyaWEqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpbnZvbHZlcyBhIGRyaXZlciBmb3IgYW4gQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IGNvbXBvbmVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGhhcmR3YXJlIHRoaXMgZHJpdmVyIGludGVyZmFjZXMgd2l0aCBpcyBlbXVsYXRlZCB3aXRoaW4gUUVNVS4gTm9wZSwgaXQmIzM5O3MgYW4gU29DLXNwZWNpZmljIGNvbXBvbmVudCwgc3BlY2lmaWNhbGx5IHRoZSBOZXR3b3JrIFByb2Nlc3NvciBVbml0IChOUFUpLgoKVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpb24gZ2l2ZXMgbWUgYSBwcmV0dHkgY2xlYXIgbm8tZ28gb24gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgZGVtYW5kIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIFFFTVUuIEhtbSwgYnV0IGhvbGQgb24g4oCTIHRoaXMgaXMgYW4gKlNvQyogZHJpdmVyLCBub3QgYSBQQ0llIGNhcmQgZHJpdmVyIHBlciBzZS4gSG93ZXZlciwgaXQgKmRvZXMqIHN0aWxsIHJlbHkgb24gdGhlIHVuZGVybHlpbmcgQWlyb2hhIFNvQyBoYXJkd2FyZSwgd2hpY2ggaXNuJiMzOTt0IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgY29uc3RyYWludCwganVzdCBhIGRpZmZlcmVudCBidXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gdGhpcyBoYXJkd2FyZSBldmVuIGJlIHByb2JlZCBvciBhY2Nlc3NlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBhdCBhbGwsIGV2ZW4gd2l0aG91dCBiZWluZyBmdWxseSBlbXVsYXRlZD8gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc21zIHRvIGdldCBhIHNvbGlkIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDc6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDg9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxNjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ2Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ3LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDA0CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBVbmxlc3MgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBpbnRlcmZhY2UgdG8gaW5zdGFudGlhdGUgaXQsIGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRyaWNreSB0byBnZXQgYXQgaW4gc3RhbmRhcmQgUUVNVSDigJMgZXNwZWNpYWxseSBzaW5jZSBzeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIHRob3NlIHNwZWNpZmljIG1hY2hpbmUgdHlwZXMuIFdhaXQsIGNhbiBzeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGBzeXpfZGV2X2NyZWF0ZWA/IEhtbSwgbm8sIG5vdCBlYXNpbHkuIEl0JiMzOTtzIHJlYWxseSBoYXJkIHRvIGluc3RhbnRpYXRlIGFyYml0cmFyeSBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGV5JiMzOTtyZSBzcGVjaWZpY2FsbHkgc3VwcG9ydGVkIG9yIGdlbmVyaWMuCgpUaGlzIGRyaXZlciBhbHNvIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIHRoaW5ncyBsaWtlIGByZWdtYXBfd3JpdGVgIGFuZCBgcmVnbWFwX3JlYWRgLCBhbmQgaXQmIzM5O3MgZXhwZWN0aW5nIGNlcnRhaW4gaGFyZHdhcmUgYmVoYXZpb3JzLCBsaWtlIHRoYXQgYE1CT1hfTVNHX1NUQVRVU2AgdGhpbmcuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgaXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBmYWlsIHF1aWNrbHkgZHVyaW5nIHRoZSBwcm9iZSBvciB0aW1lb3V0IHNvbWV3aGVyZS4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zICYjMzQ7Y29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCYjMzQ7IGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZS4gVGhpcyBpcyBhbiBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggc2NyZWFtcyBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBEZWZpbml0ZWx5IG5vdCByZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KCkxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQWlyb2hhIE5QVXMuLi4gTm9wZSwgbm90aGluZy4gU28sIGdpdmVuIGFsbCB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcuIEkmIzM5O20gZ29pbmcgdG8gbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlciAoQWlyb2hhIE5QVSkgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwNzo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgTlBVIGRyaXZlciwgd2hpY2ggaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQzLjczMTgwMTgwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTU4OTY4ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NDMuNzMxODA3MDI3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzc1MDE0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiN2RjYjQ3OTU0MTMwOTA4Y2FmYmMzOTEwMmFkZmEwODYwOTdiM2NmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5pbmRleCBiNjc5YmVkOTUyZGUzLi43NGRhM2M0ZDA2ZTRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXFxuQEAgLTIzLDYgKzIzLDEyIEBAXFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXFx0MHgyMDAwMDBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkVcXHQweDEwMDAwXFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVxcdFxcdFxcdFxcdDUxMlxcbisvKlxcbisgKiBNYWlsYm94IERNQSBwYXlsb2FkIHNpemUuIENvdmVycyBzaXplb2Yoc3RydWN0IHBwZV9tYm94X2RhdGEpICgyOCkgYW5kXFxuKyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgKyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cXG4rICovXFxuKyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcXHRcXHRcXHQyNTZcXG4gXFxuICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNXFx0XFx0MHgwXFxuIFxcbkBAIC0xNjAsMjMgKzE2NiwzMiBAQCBzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEge1xcbiBcXHRERUNMQVJFX0ZMRVhfQVJSQVkodTgsIGQpO1xcbiB9O1xcbiBcXG4tc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbi1cXHRcXHRcXHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXFxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbitcXHRcXHRcXHRcXHQgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbiwgdm9pZCAqcmVwbHksXFxuK1xcdFxcdFxcdFxcdCBpbnQgcmVwbHlfbGVuKVxcbiB7XFxuLVxcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cXG4tXFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbi1cXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbMF07IC8qIEZJWE1FOiBjb3JlICovXFxuK1xcdHUzMiB2YWwsIG9mZnNldCA9IDA7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuLVxcdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkcik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdGlmIChsZW4gXFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSB8fFxcbitcXHQgICAgKHJlcGx5IFxcdTAwMjZcXHUwMDI2IChyZXBseV9sZW4gXFx1MDAzYyAwIHx8IHJlcGx5X2xlbiBcXHUwMDNlIGxlbikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbWNweShjLVxcdTAwM2VidWYsIGRhdGEsIGxlbik7XFxuIFxcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4tXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVxcdTAwM2VhZGRyKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBsZW4pO1xcbiBcXHRyZWdtYXBfcmVhZChucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgXFx1MDAyNnZhbCk7XFxuIFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgdmFsICsgMSk7XFxuIFxcdHZhbCA9IEZJRUxEX1BSRVAoTUJPWF9NU0dfRlVOQ19JRCwgZnVuY19pZCkgfCBNQk9YX01TR19XQUlUX1JTUDtcXG5AQCAtMTg5LDEzICsyMDQsMjEgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbiBcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXFxuIFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LyogQ29weSB0aGUgdHJhaWxpbmcgcmVwbHlfbGVuIGJ5dGVzIG9mIHRoZSByZXNwb25zZS4gKi9cXG4rXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcmVwbHkpXFxuK1xcdFxcdG1lbWNweShyZXBseSwgYy1cXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xcbiBcXG4tXFx0ZG1hX3VubWFwX3NpbmdsZShucHUtXFx1MDAzZWRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmMtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbilcXG4re1xcbitcXHRyZXR1cm4gX19haXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgZnVuY19pZCwgZGF0YSwgbGVuLCBOVUxMLCAwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIsXFxuIFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXFxuIHtcXG5AQCAtNDQyLDggKzQ2NSw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZWZ1bmNfaWQgPSBQUEVfRlVOQ19TRVRfV0FJVF9GTE9XX1NUQVRTX1NFVFVQO1xcbiBcXHRwcGVfZGF0YS1cXHUwMDNlc3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyO1xcbiBcXG4tXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCpwcGVfZGF0YSksIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTQ5Nyw5ICs1MjEsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTc3MCw2ICs3OTMsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4rXFxuK1xcdFxcdGNvcmUtXFx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWJ1ZilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXFx1MDAyNnJlcyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuaW5kZXggNzU4OWZjY2ZlZWY2ZC4uMTZhOTg4YWQ3NDY3YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXFxuQEAgLTE3Myw2ICsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7XFxuIFxcdFxcdC8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovXFxuIFxcdFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrO1xcbitcXHRcXHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cXG4rXFx0XFx0dm9pZCAqYnVmO1xcbitcXHRcXHRkbWFfYWRkcl90IGFkZHI7XFxuIFxcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XFxuIFxcbiBcXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQ0LjExMDAyODk1OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI4MTgwNzI2MzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjdkY2I0Nzk1NDEzMDkwOGNhZmJjMzkxMDJhZGZhMDg2MDk3YjNjZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMDc6NDk6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uNzRkYTNjNGQwNmU0ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYwLDIzICsxNjYsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiBcdERFQ0xBUkVfRkxFWF9BUlJBWSh1OCwgZCk7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4tXHRcdFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxuK3N0YXRpYyBpbnQgX19haXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4sIHZvaWQgKnJlcGx5LFxuK1x0XHRcdFx0IGludCByZXBseV9sZW4pXG4ge1xuLVx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuLVx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcdTAwM2NcdTAwM2MgNDtcbi1cdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzWzBdOyAvKiBGSVhNRTogY29yZSAqL1xuK1x0dTMyIHZhbCwgb2Zmc2V0ID0gMDtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAobGVuIFx1MDAzZSBBSVJPSEFfTlBVX01CT1hfU0laRSB8fFxuK1x0ICAgIChyZXBseSBcdTAwMjZcdTAwMjYgKHJlcGx5X2xlbiBcdTAwM2MgMCB8fCByZXBseV9sZW4gXHUwMDNlIGxlbikpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKlxuK1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXG4rXHQgKiBPbiBFTjc1ODErTVQ3OTk2LCBzdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUwgYWdhaW5zdCB0aGVcbitcdCAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT05cbitcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbitcdCAqIGJvdW5jZSBidWZmZXIgdW5kZXIgdGhlIHBlci1jb3JlIGxvY2sgKGFsc28gdXNlZCBmcm9tIFBQRVxuK1x0ICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZjLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtY3B5KGMtXHUwMDNlYnVmLCBkYXRhLCBsZW4pO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbitcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVx1MDAzZWFkZHIpO1xuK1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgKyBvZmZzZXQsIGxlbik7XG4gXHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xuIFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuQEAgLTE4OSwxMyArMjA0LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBGSUVMRF9HRVQoTUJPWF9NU0dfU1RBVFVTLCB2YWwpICE9IE5QVV9NQk9YX1NVQ0NFU1MpXG4gXHRcdHJldCA9IC1FSU5WQUw7XG4gXG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4rXHQvKiBDb3B5IHRoZSB0cmFpbGluZyByZXBseV9sZW4gYnl0ZXMgb2YgdGhlIHJlc3BvbnNlLiAqL1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJlcGx5KVxuK1x0XHRtZW1jcHkocmVwbHksIGMtXHUwMDNlYnVmICsgbGVuIC0gcmVwbHlfbGVuLCByZXBseV9sZW4pO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4rXHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKVxuK3tcbitcdHJldHVybiBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBmdW5jX2lkLCBkYXRhLCBsZW4sIE5VTEwsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbiBcdFx0XHRcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXG4ge1xuQEAgLTQ0Miw4ICs0NjUsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfRkxPV19TVEFUU19TRVRVUDtcbiBcdHBwZV9kYXRhLVx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcbiBcbi1cdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRlcnIgPSBfX2Fpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuK1x0XHRcdFx0ICAgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSxcbitcdFx0XHRcdCAgICBzaXplb2YoKnBwZV9kYXRhKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00OTcsOSArNTIxLDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCxcbiBcdHdsYW5fZGF0YS1cdTAwM2VmdW5jX3R5cGUgPSBOUFVfT1BfR0VUO1xuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFxuLVx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcbi1cdGlmICghZXJyKVxuLVx0XHRtZW1jcHkoZGF0YSwgd2xhbl9kYXRhLVx1MDAzZWQsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICAgIGRhdGEsIGRhdGFfbGVuKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTc3MCw2ICs3OTMsMTUgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpKyspIHtcbitcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbitcbitcdFx0Y29yZS1cdTAwM2VidWYgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUlST0hBX05QVV9NQk9YX1NJWkUsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFjb3JlLVx1MDAzZWJ1ZilcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbiBcdGVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgXHUwMDI2cmVzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiArMTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xuIFx0XHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xuIFx0XHRzcGlubG9ja190IGxvY2s7XG4gXHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcbitcdFx0LyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovXG4rXHRcdHZvaWQgKmJ1ZjtcbitcdFx0ZG1hX2FkZHJfdCBhZGRyO1xuIFx0fSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTtcbiBcbiBcdGludCBpcnFzW05QVV9OVU1fSVJRXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjQ0LjExMDAzMDE3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDIzODY2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jYC4gVGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgaXQncyBtb2RpZnlpbmcgaG93IG1haWxib3ggbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIE5ldHdvcmsgUHJvY2Vzc2luZyBVbml0IChOUFUpLiBFc3NlbnRpYWxseSwgaXQncyBtb3ZpbmcgZnJvbSB0aGUgc3RhbmRhcmQgYGRtYV9tYXBfc2luZ2xlYCAvIGBkbWFfdW5tYXBfc2luZ2xlYCBhcHByb2FjaCBmb3IgZWFjaCBtZXNzYWdlIHRvIHVzaW5nIGEgcHJlLWFsbG9jYXRlZCBjb2hlcmVudCBETUEgYnVmZmVyLiBUaGF0J3MgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuVGhleSd2ZSBpbnRyb2R1Y2VkIGBfX2Fpcm9oYV9ucHVfc2VuZF9tc2dgLCB3aGljaCBub3cgdGFrZXMgYSBgcmVwbHlgIGJ1ZmZlciBhbmQgaXRzIGxlbmd0aC4gQW5kIHRoZSBjb2hlcmVudCBidWZmZXIgaXRzZWxmIGlzIGFsbG9jYXRlZCBkdXJpbmcgdGhlIGBhaXJvaGFfbnB1X3Byb2JlYCBmdW5jdGlvbi5cblxuTm93IHRoZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGNvZGUgaW4gbXkgdGVzdGluZyBlbnZpcm9ubWVudHM/IENvdWxkIHRoaXMgYmUgYWN0aXZhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVT8gTGV0J3Mgc2VlLi4uIHRoZSBkcml2ZXIgaXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGV0aGVybmV0IGRyaXZlcnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBuYXR1cmUuIEFoLCBpdCdzIGFuIGV0aGVybmV0IGRyaXZlciBmb3IgQWlyb2hhIFNvQ3MuIFdhaXQsIEFpcm9oYSBpcyBhIE1lZGlhVGVrIHN1YnNpZGlhcnksIHJpZ2h0PyBUaGV5IG1ha2UgbmV0d29ya2luZyBTb0NzLiBUaGlzIGxpa2VseSBtZWFucyBpdCdzIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyBjb21tb25seSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBMZXQncyBkaWcgZGVlcGVyLiBZZXMsIGl0J3MgZm9yIHRoZSBBaXJvaGEgRU43NTgxIFNvQyAtIGEgaGFyZHdhcmUgZGV2aWNlLiBJIG5lZWQgdG8gY29uc3VsdCB0aGUgYEtjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMgdW5kZXIgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9gIHRvIGRldGVybWluZSB0aGUgZXhhY3QgaGFyZHdhcmUgc3VwcG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTAwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTAuODEyNDE5MDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzA1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMy1cXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTAuODU2MTI4NDUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTQ1ODc1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIHN0YW5kYXJkIGxvY2F0aW9uIGluIGEgdHlwaWNhbCBrZXJuZWwgc291cmNlIHRyZWUgZm9yIHRoZXNlIHR5cGVzIG9mIGRyaXZlciBjb25maWd1cmF0aW9ucy4gS2NvbmZpZyBmaWxlcyBkZWZpbmUgdGhlIGJ1aWxkIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IHVzZXJzIHNlZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB0aGUgcGxhY2UgdG8gc3RhcnQuIEknbSBnb2luZyB0byBsb29rIGluIHRoYXQgZmlsZSB0byBzZWUgZXhhY3RseSB3aGF0IHBhcmFtZXRlcnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIEFpcm9oYS1iYXNlZCBldGhlcm5ldCBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo0OTo1NC4zNjE1ODk0MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MzczOTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBSVJPSEFfRU43NTgxX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDc6NDk6NTQuNDA1MjMxMzM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNzg1MjI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBhcHByb2FjaCBoZXJlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZyBmaWxlLiBObyBuZWVkIGZvciBhbnkgcHJlbGltaW5hcnkgZmx1ZmYgb3IgZXh0cmFuZW91cyBpbnZlc3RpZ2F0aW9uLiBNeSBleHBlcnRpc2UgaXMgc3VjaCB0aGF0IEkgY2FuIGxpa2VseSBnbGVhbiBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBpbmZvcm1hdGlvbiBqdXN0IGJ5IHF1aWNrbHkgcGFyc2luZyB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBJJ20gbG9va2luZyBmb3IgdGhlIGNvcmUgZWxlbWVudHMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3ZlcmFsbCBsb2dpYyB0aGF0IGRyaXZlcyB0aGUgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGlzIGlzIHdoZXJlIHRoZSB0cnV0aCBsaWVzLCB0aGUgc291cmNlIG9mIHRoZSBidWlsZC10aW1lIGtub3dsZWRnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA3OjQ5OjU3LjUyMzA4NjAyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuICAgMzpcXHRcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG4gICA3OlxcdFxcbiAgIDg6XFx0aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIE5QVSBzdXBwb3J0XFxcIlxcbiAgMTI6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICAxMzpcXHRcXHRzZWxlY3QgUkVHTUFQX01NSU9cXG4gIDE0OlxcdFxcdGhlbHBcXG4gIDE1OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbiAgMTY6XFx0XFx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBORVRfQUlST0hBXFxuICAxOTpcXHRcXHR0cmlzdGF0ZSBcXFwiQWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9EU0EgfHwgIU5FVF9EU0FcXG4gIDIxOlxcdFxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbiAgMjI6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMjM6XFx0XFx0aGVscFxcbiAgMjQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxcbiAgMjU6XFx0XFx0ICBBaXJvaGEgU29DIGZhbWlseS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCB5XFxuICAyOTpcXHRcXHRib29sIFxcXCJBaXJvaGEgZmxvdyBzdGF0c1xcXCJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcXHUwMDI2XFx1MDAyNiBORVRfQUlST0hBX05QVVxcbiAgMzE6XFx0XFx0aGVscFxcbiAgMzI6XFx0XFx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo0OTo1Ny41MjMxNTAxMTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzMyNzAwMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgV29ydGhGdXp6aW5nIENyaXRlcmlhKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIGZvciBhbiBBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgY29tcG9uZW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGUgaGFyZHdhcmUgdGhpcyBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIGlzIGVtdWxhdGVkIHdpdGhpbiBRRU1VLiBOb3BlLCBpdCdzIGFuIFNvQy1zcGVjaWZpYyBjb21wb25lbnQsIHNwZWNpZmljYWxseSB0aGUgTmV0d29yayBQcm9jZXNzb3IgVW5pdCAoTlBVKS5cblxuVGhlIHByb21wdCdzIGNyaXRlcmlvbiBnaXZlcyBtZSBhIHByZXR0eSBjbGVhciBuby1nbyBvbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCBkZW1hbmQgcGh5c2ljYWwgUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gUUVNVS4gSG1tLCBidXQgaG9sZCBvbiDigJMgdGhpcyBpcyBhbiAqU29DKiBkcml2ZXIsIG5vdCBhIFBDSWUgY2FyZCBkcml2ZXIgcGVyIHNlLiBIb3dldmVyLCBpdCAqZG9lcyogc3RpbGwgcmVseSBvbiB0aGUgdW5kZXJseWluZyBBaXJvaGEgU29DIGhhcmR3YXJlLCB3aGljaCBpc24ndCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIEl0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgY29uc3RyYWludCwganVzdCBhIGRpZmZlcmVudCBidXMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiB0aGlzIGhhcmR3YXJlIGV2ZW4gYmUgcHJvYmVkIG9yIGFjY2Vzc2VkIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGF0IGFsbCwgZXZlbiB3aXRob3V0IGJlaW5nIGZ1bGx5IGVtdWxhdGVkPyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRyaXZlcidzIHByb2JpbmcgbWVjaGFuaXNtcyB0byBnZXQgYSBzb2xpZCBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDowMy4yNTU4NTI5NDJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyOTM3NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYV9ucHVfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTcwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzE2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9ODQ1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODQ2OlxcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04NDctXFx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDowMy4zNDg3OTYzNTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk0MTkzMTkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBVbmxlc3MgdGhlcmUncyBhIHNvZnR3YXJlIGludGVyZmFjZSB0byBpbnN0YW50aWF0ZSBpdCwgaXQncyBnb2luZyB0byBiZSB0cmlja3kgdG8gZ2V0IGF0IGluIHN0YW5kYXJkIFFFTVUg4oCTIGVzcGVjaWFsbHkgc2luY2Ugc3l6a2FsbGVyIGRvZXNuJ3QgdXNlIHRob3NlIHNwZWNpZmljIG1hY2hpbmUgdHlwZXMuIFdhaXQsIGNhbiBzeXprYWxsZXIgaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGBzeXpfZGV2X2NyZWF0ZWA/IEhtbSwgbm8sIG5vdCBlYXNpbHkuIEl0J3MgcmVhbGx5IGhhcmQgdG8gaW5zdGFudGlhdGUgYXJiaXRyYXJ5IHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXkncmUgc3BlY2lmaWNhbGx5IHN1cHBvcnRlZCBvciBnZW5lcmljLlxuXG5UaGlzIGRyaXZlciBhbHNvIHNlZW1zIHRvIGJlIGludGVyYWN0aW5nIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIHRoaW5ncyBsaWtlIGByZWdtYXBfd3JpdGVgIGFuZCBgcmVnbWFwX3JlYWRgLCBhbmQgaXQncyBleHBlY3RpbmcgY2VydGFpbiBoYXJkd2FyZSBiZWhhdmlvcnMsIGxpa2UgdGhhdCBgTUJPWF9NU0dfU1RBVFVTYCB0aGluZy4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSBnb2luZyB0byBmYWlsIHF1aWNrbHkgZHVyaW5nIHRoZSBwcm9iZSBvciB0aW1lb3V0IHNvbWV3aGVyZS5cblxuVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgXCJjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXCIgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBUaGF0J3MgYSBodWdlIGNsdWUuIFRoaXMgaXMgYW4gQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIHNjcmVhbXMgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gRGVmaW5pdGVseSBub3QgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgQWlyb2hhIE5QVXMuLi4gTm9wZSwgbm90aGluZy4gU28sIGdpdmVuIGFsbCB0aGlzLCBpdCdzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBpc24ndCB3b3J0aCBmdXp6aW5nLiBJJ20gZ29pbmcgdG8gbWFyayBpdCBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBTb0MgZHJpdmVyIChBaXJvaGEgTlBVKSB0aGF0IGNhbid0IGJlIHJlYWNoZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQwNCwiT3V0cHV0VG9rZW5zIjo3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwNzo1MDoxMi4yOTA3MzA0ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIE5QVSBkcml2ZXIsIHdoaWNoIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgU29DIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBOUFUgZHJpdmVyLCB3aGljaCBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNvQyBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhsrc[1] Phase: Running StartedAt: 2026-08-07 07:50:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhsrc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 07:50:23 +0000 UTC FinishedAt: 2026-08-07 07:50:27 +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,}