Name: series-workflow2mx2f Phase: Failed StartedAt: 2026-08-05 07:30:34 +0000 UTC FinishedAt: 2026-08-05 08:16:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mx2f[0] Phase: Succeeded StartedAt: 2026-08-05 07:30:34 +0000 UTC FinishedAt: 2026-08-05 08:16:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mx2f[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 07:30:34 +0000 UTC FinishedAt: 2026-08-05 08:16:37 +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+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmQyZjZjOWMwODRiODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG5AQCAtMTY2LDEyICYjNDM7MTY2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbiBcdHUzMiB2YWwsIG9mZnNldCA9IGNvcmUgXHUwMDNjXHUwMDNjIDQ7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHZvaWQgKmRtYV9idWY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4tXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXHUwMDNlZGV2LCBkbWFfYWRkcik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgc21hbGwgYW5kIGJpZGlyZWN0aW9uYWwgKENQVSBzZXRzIHRoZVxuJiM0MztcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4mIzQzO1x0ICogbWFwcGluZyByZWdyZXNzZXMgRU43NTgxJiM0MztNVDc5OTY6IE1CT1ggcmVwb3J0cyBzdWNjZXNzIGJ1dFxuJiM0MztcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXG4mIzQzO1x0ICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBcdTAwMjZkbWFfYWRkciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFkbWFfYnVmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gXG5AQCAtMTkxLDcgJiM0MzsyMDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XG4mIzQzO1x0ZG1hX2ZyZWVfY29oZXJlbnQobnB1LVx1MDAzZWRldiwgc2l6ZSwgZG1hX2J1ZiwgZG1hX2FkZHIpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwppbmRleCBiNjc5YmVkOTUyZGUzLi5kMmY2YzljMDg0Yjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKQEAgLTE2NiwxMiAmIzQzOzE2NiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiAJdTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqLwogCXUzMiB2YWwsIG9mZnNldCA9IGNvcmUgJmx0OyZsdDsgNDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl2b2lkICpkbWFfYnVmOwogCWludCByZXQ7CiAKLQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LSZndDtkZXYsIGRtYV9hZGRyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBzbWFsbCBhbmQgYmlkaXJlY3Rpb25hbCAoQ1BVIHNldHMgdGhlCiYjNDM7CSAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMCiYjNDM7CSAqIG1hcHBpbmcgcmVncmVzc2VzIEVONzU4MSYjNDM7TVQ3OTk2OiBNQk9YIHJlcG9ydHMgc3VjY2VzcyBidXQKJiM0MzsJICogV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OIHN0aWxsIHJlYWRzIGFzIDAuMC4gVXNlIGEKJiM0MzsJICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuCiYjNDM7CSAqLwomIzQzOwlkbWFfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KG5wdS0mZ3Q7ZGV2LCBzaXplLCAmYW1wO2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFkbWFfYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1lbWNweShkbWFfYnVmLCBwLCBzaXplKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiAKQEAgLTE5MSw3ICYjNDM7MjAwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwogCi0JZG1hX3VubWFwX3NpbmdsZShucHUtJmd0O2RldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQltZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7CiYjNDM7CWRtYV9mcmVlX2NvaGVyZW50KG5wdS0mZ3Q7ZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7CiAKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1haWxib3ggUGF5bG9hZCBBbGxvY2F0aW9uIENoYW5nZSBpbiB0aGUgYWlyb2hhX25wdSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGFpcm9oYV9ucHVfc2VuZF9tc2dgLCB3aGVyZSB0aGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgYGRtYV9tYXBfc2luZ2xlYCBmb3IgYGRtYV9hbGxvY19jb2hlcmVudGAgd2hlbiBkZWFsaW5nIHdpdGggdGhlIG1haWxib3ggcGF5bG9hZHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeSB0aGUgY2hhbmdlPyYjMzQ7LiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYWRkcmVzc2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBvciBwb3NzaWJseSBmaXhpbmcgYSBwb3RlbnRpYWwgY29oZXJlbmN5IHByb2JsZW0/IEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gY2hlY2sgd2hhdCB0aGUgZHJpdmVyIGFjdHVhbGx5ICppcyouIFRoaXMgaXMgYW4gYGFpcm9oYV9ucHVgIGRyaXZlciwgd2hpY2ggdG8gbXkga25vd2xlZGdlIGlzIGZhaXJseSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gY2hpcHNldC4gSSB3b25kZXIgd2hhdCB0aGUgcGFydGljdWxhciByb2xlIG9mIHRoaXMgYG5wdWAgaXMgaW4gdGhlIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyBhbiBvZmZsb2FkIGVuZ2luZT8KCkkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIE1heWJlIGV2ZW4gc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzIGZvciByZWxldmFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgdG8gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIHRoaXMgaXMgZGVzaWduZWQgZm9yLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1haWxib3ggY2hhbmdlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHNhZmUgYW5kIGlzIGJlaW5nIGRvbmUgZm9yIGEgZ29vZCByZWFzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgJiM0Mzs9IGFpcm9oYV9wcGVfZGVidWdmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICYjNDM7PSBhaXJvaGFfbnB1Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTY0NT1zdHJ1Y3QgYWlyb2hhX2V0aCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC02NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjY1MzpcdHN0cnVjdCBhaXJvaGFfbnB1IF9fcmN1ICpucHU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTY1NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTEwNT1lbnVtIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTEwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTEwOnN0cnVjdCBhaXJvaGFfbnB1X2Z3IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTExLVx0Y29uc3QgY2hhciAqbmFtZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE1OnN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE2Olx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfcnYzMjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE3Olx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTE4LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0xNTY9c3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTYzOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTY0LVx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTIwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjEwOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yMTEtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjM0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjM1OmFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZV9mcm9tX2R0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjM2LVx0XHRcdFx0ICB2b2lkIF9faW9tZW0gKmJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI0NjpcdHJldCA9IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGFkZHIsIGZ3X25hbWVzWzBdLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDctXHRcdFx0XHQgICAgICAgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjUxOlx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGJhc2UgJiM0MzsgUkVHX05QVV9MT0NBTF9TUkFNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTItXHRcdFx0XHRcdGZ3X25hbWVzWzFdLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNTY6c3RhdGljIGludCBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYmFzZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU3LVx0XHRcdFx0ICAgc3RydWN0IHJlc291cmNlICpyZXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1OTpcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI2MC1cdHZvaWQgX19pb21lbSAqYWRkcjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3NC1cdGlmIChvZl9maW5kX3Byb3BlcnR5KGRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtmaXJtd2FyZS1uYW1lXCYjMzQ7LCBOVUxMKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjc1Olx0XHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlX2Zyb21fZHRzKGRldiwgYWRkciwgYmFzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjc3LVx0LyogTG9hZCBydjMyIG5wdSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNzg6XHRyZXQgPSBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBhZGRyLCBzb2MtXHUwMDNlZndfcnYzMi5uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzktXHRcdFx0XHQgICAgICAgc29jLVx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjgzLVx0LyogTG9hZCBkYXRhIG5wdSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyODQ6XHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYmFzZSAmIzQzOyBSRUdfTlBVX0xPQ0FMX1NSQU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4NS1cdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjg5OnN0YXRpYyBpcnFyZXR1cm5fdCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpucHVfaW5zdGFuY2UpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI5MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI5MTpcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBucHVfaW5zdGFuY2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzA0OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDY6XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDc6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDgtXHR2b2lkICpkdW1wO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMTI6XHRjb3JlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUsIHdkdF93b3JrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzEzLVx0bnB1ID0gY29yZS1cdTAwM2VucHU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjMyNzpzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV93ZHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpjb3JlX2luc3RhbmNlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjk6XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gY29yZV9pbnN0YW5jZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzMwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGNvcmUtXHUwMDNlbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMzEtXHRpbnQgYyA9IGNvcmUgLSBcdTAwMjZucHUtXHUwMDNlY29yZXNbMF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM0MjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzU2Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM1Ny1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzY0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mzc1Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3Ni1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozODI6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgzLVx0XHRcdFx0XHQgICAgIGRtYV9hZGRyX3QgZm9lX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM5OTpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MDAtXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDA2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNy1cdFx0XHRcdCAgICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0MjQ6XHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDI1LVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQzMzpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MzQtXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDQxOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDQyLVx0XHRcdFx0ICAgICAgZG1hX2FkZHJfdCBmb2Vfc3RhdHNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDU2Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1Ny1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NzI6c3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MzpcdFx0XHRcdCAgICBlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGZ1bmNfaWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ3NC1cdFx0XHRcdCAgICB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4sIGdmcF90IGdmcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDg5Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDkwLVx0a2ZyZWUod2xhbl9kYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDk1OnN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ5NjpcdFx0XHRcdCAgIGVudW0gYWlyb2hhX25wdV93bGFuX2dldF9jbWQgZnVuY19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk3LVx0XHRcdFx0ICAgdm9pZCAqZGF0YSwgaW50IGRhdGFfbGVuLCBnZnBfdCBnZnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUxMTpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUxMi1cdGlmICghZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NTE5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTIwOmFpcm9oYV9ucHVfd2xhbl9zZXRfcmVzZXJ2ZWRfbWVtb3J5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUyMS1cdFx0XHRcdCAgICBpbnQgaWZpbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTIyOlx0XHRcdFx0ICAgIGVudW0gYWlyb2hhX25wdV93bGFuX3NldF9jbWQgZnVuY19pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzNC1cdHZhbCA9IHJlcy5zdGFydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTM1Olx0cmV0dXJuIGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZChucHUsIGlmaW5kZXgsIGZ1bmNfaWQsIFx1MDAyNnZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTM2LVx0XHRcdFx0XHRzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzOTpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NDAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NDE6XHRlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9OUFVfQkFORDBfT05DUFU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0Mi1cdHUzMiB2YWwgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NDU6XHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAxLCBjbWQsIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0Ni1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1MC1cdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9UWF9CVUZfQ0hFQ0tfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTUxOlx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcJiMzNDt0eC1idWZpZFwmIzM0OywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTUyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1NS1cdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9QS1RfQlVGX0FERFI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU1NjpcdGVyciA9IGFpcm9oYV9ucHVfd2xhbl9zZXRfcmVzZXJ2ZWRfbWVtb3J5KG5wdSwgMCwgXCYjMzQ7cGt0XCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NTctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTYwLVx0Y21kID0gV0xBTl9GVU5DX1NFVF9XQUlUX1RYX1BLVF9CVUZfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTYxOlx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcJiMzNDt0eC1wa3RcJiMzNDssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU2Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjctXHRcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9EUkFNX0JBX05PREVfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTY4Olx0XHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFwmIzM0O2JhXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzMtXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfSVNfRk9SQ0VfVE9fQ1BVO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NzQ6XHRyZXR1cm4gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKG5wdSwgMCwgY21kLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzUtXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Nzg6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHFpZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc5LVx0XHRcdFx0XHQgIGJvb2wgeG1pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTg3OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01ODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1OTI6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU5My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01OTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjYwMDpzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjAxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjA1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjA2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjEwOnN0cnVjdCBhaXJvaGFfbnB1ICphaXJvaGFfbnB1X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYxMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02MTMtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2MTQ6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NTg6RVhQT1JUX1NZTUJPTF9HUEwoYWlyb2hhX25wdV9nZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2MDp2b2lkIGFpcm9oYV9ucHVfcHV0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY2MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjQtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NjU6RVhQT1JUX1NZTUJPTF9HUEwoYWlyb2hhX25wdV9wdXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgZW43NTgxX25wdV9zb2NfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjY4LVx0LmZ3X3J2MzIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgYW43NTgzX25wdV9zb2NfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjc5LVx0LmZ3X3J2MzIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY4OTpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbnB1X21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5MC1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsZW43NTgxLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTMtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njk0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9ucHVfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA0OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDYtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA3Olx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA4LVx0c3RydWN0IHJlc291cmNlIHJlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyMS1cdG5wdS1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyMjpcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjM6XHRucHUtXHUwMDNlb3BzLnBwZV9kZWluaXQgPSBhaXJvaGFfbnB1X3BwZV9kZWluaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNDpcdG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI1Olx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjY6XHRucHUtXHUwMDNlb3BzLnBwZV9mb2VfY29tbWl0X2VudHJ5ID0gYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Mjc6XHRucHUtXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyODpcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI5Olx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMwOlx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzE6XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjczMjpcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMzOlx0bnB1LVx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzM0Olx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjc0ODpcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NDktXHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjc1NDpcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NjM6XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc2NC1cdFx0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7YWlyb2hhLW5wdS13ZHRcJiMzNDssIGNvcmUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Njg6XHRcdElOSVRfV09SSyhcdTAwMjZjb3JlLVx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3ODQ6XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgwNTpcdGlmICghYWlyb2hhX25wdV93bGFuX21zZ19nZXQobnB1LCAwLCBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgwNi1cdFx0XHRcdCAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgxNTpzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MTc6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxOC1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyNTpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyNjpcdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI4LVx0XHQubmFtZSA9IFwmIzM0O2Fpcm9oYS1ucHVcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyOTpcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX25wdV9tYXRjaCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMwLVx0fSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMxLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgzMjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjAzPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdF9lbnRyeV9yZXNldChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MDQ6XHRcdFx0XHRcdFx0IHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTYwNS1cdFx0XHRcdFx0XHQgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjExPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfcmVzZXQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjEyOlx0XHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjEzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTYyND1zdGF0aWMgdm9pZCBhaXJvaGFfcHBlX2ZvZV9mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MjU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjI2LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz03NjE9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc2OC1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBwcGUtXHUwMDNlZXRoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3Njk6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03NzAtXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEyOTc9dm9pZCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9nZXRfc3RhdHMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzAxLVx0aW50IHBwZV9udW1fc3RhdHNfZW50cmllcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTMwMjpcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzMDMtXHR1MzIgaW5kZXg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMzc1PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEzOTM6c3RhdGljIHN0cnVjdCBhaXJvaGFfbnB1ICphaXJvaGFfcHBlX25wdV9nZXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEzOTU6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk4LVx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDthaXJvaGEtbnB1XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5OTpcdFx0bnB1ID0gYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0Mjkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDMwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGFpcm9oYV9wcGVfbnB1X2dldChldGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDMxLVx0c3RydWN0IGFpcm9oYV9wcGUgKnBwZSA9IGV0aC1cdTAwM2VwcGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDYyLWVycm9yX25wdV9wdXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NjM6XHRhaXJvaGFfbnB1X3B1dChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDY0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTY1OD12b2lkIGFpcm9oYV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NTkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjYwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTY2MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NjgtXHRcdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjY5Olx0XHRhaXJvaGFfbnB1X3B1dChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjcwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBhaXJvaGFfbnB1YCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9ucHVgIGRyaXZlci4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlICYjMzQ7YWlyb2hhLGVuNzU4MS1ucHUmIzM0OyBhbmQgJiMzNDthaXJvaGEsYW43NTgzLW5wdSYjMzQ7IFNvQ3MuIEFpcm9oYSwgYmVpbmcgYSBNZWRpYVRlayBzdWJzaWRpYXJ5LCB0eXBpY2FsbHkgbWVhbnMgbmV0d29ya2luZyBTb0NzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgJiMzNDtDYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/JiMzNDsgUGxhdGZvcm0gZHJpdmVycyBmb3Igc3BlY2lhbGl6ZWQgbmV0d29ya2luZyBTb0NzIGxpa2UgdGhlIEVONzU4MSBvZnRlbiBkb24mIzM5O3Qgd29yayB3aXRob3V0IGEgc3BlY2lmaWMgUUVNVSBtYWNoaW5lIHR5cGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgb25lIGlzIGFuIGV4Y2VwdGlvbi4KCldhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIGEgZ3VpZGVsaW5lIGhlcmUuIEl0IHNheXMgdG8gbWFyayBwYXRjaGVzIGFzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhleSBpbmNsdWRlIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgb3IgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIGFuZCBHUFVzIHNwZWNpZmljYWxseS4gSG1tLi4uIGlzIGBhaXJvaGFfbnB1YCBpbiB0aGF0IGNhdGVnb3J5PyBJdCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy4KClNvLCAqY291bGQqIGl0IGJlIGZ1enplZCB1c2luZyBzeXprYWxsZXI/IFN5emthbGxlciBjYW4gZ2VuZXJhdGUgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIGRpcmVjdGx5IHRocm91Z2ggY2FsbHMgbGlrZSBgc3l6X2dlbl9zeXpfcGxhdGZvcm1fZGV2aWNlYCBvciBieSB0d2Vha2luZyB0aGUgZGV2aWNlIHRyZWUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgZHJpdmVyIHNlZW1zIHRvIG5lZWQgc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMgYW5kIGZpcm13YXJlIGxvYWRpbmcgdmlhIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLiBUaGF0IHJhaXNlcyBzb21lIGZsYWdzLiBJIG5lZWQgdG8gZGlnIGludG8gYGFpcm9oYV9ucHVfcHJvYmVgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZz8gVGhpcyBtaWdodCBub3QgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBtb3JlIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02OTY9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcwNDpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgyND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI1Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI2LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBleGFtaW5lIGBhaXJvaGFfbnB1X3Byb2JlYDoKCioqQW5hbHl6aW5nIGBhaXJvaGFfbnB1X3Byb2JlYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uIG9mIGBhaXJvaGFfbnB1X3Byb2JlYC4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHByb2Jpbmcgb3IgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBhbiBOUFUgKE5ldXJhbCBQcm9jZXNzaW5nIFVuaXQpIHdpdGhpbiBhIHN5c3RlbSwgc3BlY2lmaWNhbGx5IG9uZSBsaWtlbHkgbWFudWZhY3R1cmVkIGJ5IEFpcm9oYS4gVGhlICYjMzQ7cHJvYmUmIzM0OyBwYXJ0IGlzIHByZXR0eSBjbGVhciDigJMgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uLCBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIG9yIHJlYWQgaGFyZHdhcmUgcmVnaXN0ZXJzLCBwZXJoYXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dDoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyBwcm9iZT8qKiBJcyBpdCBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgbW9kdWxlIGxvYWRpbmcsIG9yIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgZXZlbnQ/IFRoZSB0aW1pbmcgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGl0cyBwdXJwb3NlLgoqICAgKipXaGF0IGRvZXMgaXQgKmRvKj8qKiBEb2VzIGl0IHNpbXBseSBjaGVjayBmb3IgdGhlIE5QVSYjMzk7cyBleGlzdGVuY2U/IERvZXMgaXQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgY29uZmlndXJlIGl0IHdpdGggYW55IHNwZWNpZmljIHNldHRpbmdzIG9yIHBhcmFtZXRlcnM/IERvZXMgaXQgcmVnaXN0ZXIgdGhlIE5QVSB3aXRoIHRoZSBvcGVyYXRpbmcgc3lzdGVtPyBUaGlzIGlzIGNydWNpYWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcywgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbnMsIGFuZCBhbnkgY2FsbHMgdG8gaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLgoqICAgKipXaGF0JiMzOTtzIHRoZSBkYXRhIGZsb3c/KiogV2hhdCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQgdG8gYW5kIGZyb20gdGhpcyBwcm9iZSBmdW5jdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZXNwb25zaWJpbGl0aWVzLiBBcmUgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXM/IEhvdyBkb2VzIGl0IHJlcG9ydCBpdHMgZmluZGluZ3MgKHN1Y2Nlc3MvZmFpbHVyZSwgZGV2aWNlIGluZm9ybWF0aW9uKT8KKiAgICoqV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8qKiBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgcGVyaXBoZXJhbHMsIG90aGVyIGRyaXZlcnMsIG9yIHN5c3RlbSBzZXJ2aWNlcz8gSWRlbnRpZnlpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCiogICAqKldoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8qKiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZXNlIHNjZW5hcmlvcz8gVW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgZXJyb3JzIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LgoqICAqKldoYXQgd291bGQgSSBleHBlY3QgdG8gc2VlIGluIHRlcm1zIG9mIGFuIG92ZXJhbGwgZGVzaWduPyoqIEdpdmVuIHRoYXQgdGhpcyBpcyBhbiBOUFUgcHJvYmUsIEkgd291bGQgZXhwZWN0IHRvIHNlZSBhIGNhcmVmdWxseSBkZXNpZ25lZCBzZXF1ZW5jZSBvZiBzdGVwcyB0aGF0IHdpbGwgZW51bWVyYXRlIHRoZSBoYXJkd2FyZSBhbmQgdGhlbiBicmluZyBpdCBpbnRvIGEgJiMzOTtyZWFkeSYjMzk7IHN0YXRlIGZvciBvcGVyYXRpb25zIHRvIGZvbGxvdy4KCkkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCBzdGFydCBhbmFseXppbmcgdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzA0Olx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzA1Olx0e1xuIDcwNjpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzA3Olx0XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuIDcwODpcdFx0c3RydWN0IHJlc291cmNlIHJlcztcbiA3MDk6XHRcdHZvaWQgX19pb21lbSAqYmFzZTtcbiA3MTA6XHRcdGludCBpLCBpcnEsIGVycjtcbiA3MTE6XHRcdHUzMiB2YWw7XG4gNzEyOlx0XG4gNzEzOlx0XHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDcxNDpcdFx0aWYgKElTX0VSUihiYXNlKSlcbiA3MTU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XG4gNzE2Olx0XG4gNzE3Olx0XHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xuIDcxODpcdFx0aWYgKCFucHUpXG4gNzE5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDcyMDpcdFxuIDcyMTpcdFx0bnB1LVx1MDAzZWRldiA9IGRldjtcbiA3MjI6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuIDcyMzpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xuIDcyNDpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuIDcyNTpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuIDcyNjpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcbiA3Mjc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9pbml0X3Jlc2VydmVkX21lbW9yeSA9IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeTtcbiA3Mjg6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbiA3Mjk6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XG4gNzMwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X3F1ZXVlX2FkZHIgPSBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQ7XG4gNzMxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG4gNzMyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XG4gNzMzOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZW5hYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlO1xuIDczNDpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuIDczNTpcdFxuIDczNjpcdFx0bnB1LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFx1MDAyNnJlZ21hcF9jb25maWcpO1xuIDczNzpcdFx0aWYgKElTX0VSUihucHUtXHUwMDNlcmVnbWFwKSlcbiA3Mzg6XHRcdFx0cmV0dXJuIFBUUl9FUlIobnB1LVx1MDAzZXJlZ21hcCk7XG4gNzM5Olx0XG4gNzQwOlx0XHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuIDc0MTpcdFx0aWYgKGVycilcbiA3NDI6XHRcdFx0cmV0dXJuIGVycjtcbiA3NDM6XHRcbiA3NDQ6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4gNzQ1Olx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc0NjpcdFx0XHRyZXR1cm4gaXJxO1xuIDc0NzpcdFxuIDc0ODpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXG4gNzQ5Olx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4gNzUwOlx0XHRpZiAoZXJyKVxuIDc1MTpcdFx0XHRyZXR1cm4gZXJyO1xuIDc1MjpcdFxuIDc1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc1NDpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc1NTpcdFxuIDc1NjpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb3JlLVx1MDAzZWxvY2spO1xuIDc1NzpcdFx0XHRjb3JlLVx1MDAzZW5wdSA9IG5wdTtcbiA3NTg6XHRcbiA3NTk6XHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICYjNDM7IDEpO1xuIDc2MDpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc2MTpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzYyOlx0XG4gNzYzOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG4gNzY0Olx0XHRcdFx0XHQgICAgICAgSVJRRl9TSEFSRUQsIFwmIzM0O2Fpcm9oYS1ucHUtd2R0XCYjMzQ7LCBjb3JlKTtcbiA3NjU6XHRcdFx0aWYgKGVycilcbiA3NjY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDc2NzpcdFxuIDc2ODpcdFx0XHRJTklUX1dPUksoXHUwMDI2Y29yZS1cdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XG4gNzY5Olx0XHR9XG4gNzcwOlx0XG4gNzcxOlx0XHQvKiB3bGFuIElSUSBsaW5lcyAqL1xuIDc3MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlaXJxcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzczOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3JlcykgJiM0MzsgMSk7XG4gNzc0Olx0XHRcdGlmIChpcnEgXHUwMDNjIDApXG4gNzc1Olx0XHRcdFx0cmV0dXJuIGlycTtcbiA3NzY6XHRcbiA3Nzc6XHRcdFx0bnB1LVx1MDAzZWlycXNbaV0gPSBpcnE7XG4gNzc4Olx0XHR9XG4gNzc5Olx0XG4gNzgwOlx0XHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcbiA3ODE6XHRcdGlmIChlcnIpXG4gNzgyOlx0XHRcdHJldHVybiBlcnI7XG4gNzgzOlx0XG4gNzg0Olx0XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gNzg1Olx0XHRpZiAoZXJyKVxuIDc4NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuIDc4NzpcdFxuIDc4ODpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcbiA3ODk6XHRcdFx0ICAgICByZXMuc3RhcnQgJiM0MzsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbiA3OTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMSksIDB4NDAwMDApOyAvKiBTUkFNIDI1NksgKi9cbiA3OTE6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xuIDc5MjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XG4gNzkzOlx0XHRtc2xlZXAoMTAwKTtcbiA3OTQ6XHRcbiA3OTU6XHRcdC8qIHNldHRpbmcgYm9vdGluZyBhZGRyZXNzICovXG4gNzk2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUFVfTlVNX0NPUkVTOyBpJiM0MzsmIzQzOylcbiA3OTc6XHRcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0JBU0UoaSksIHJlcy5zdGFydCk7XG4gNzk4Olx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gNzk5Olx0XG4gODAwOlx0XHQvKiBlbmFibGUgTlBVIGNvcmVzICovXG4gODAxOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfQ09ORklHLCAweGZmKTtcbiA4MDI6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpO1xuIDgwMzpcdFx0bXNsZWVwKDEwMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlOiB0aGUgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgZ2V0dGluZyB0aGUgZmlybXdhcmUgdXAgYW5kIHJ1bm5pbmcgb24gdGhlIEFpcm9oYSBOUFUuJiMzNDsgTmF0dXJhbGx5LCBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2hlbiB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8sICYjMzQ7T2theSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAgdG8gc2VlIHRoZSBzcGVjaWZpY3MuJiMzNDsgSSBzdXNwZWN0IGl0IGlzIHRoZSB0cmlnZ2VyIGZvciB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NjpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXG4gMjU3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcylcbiAyNTg6XHR7XG4gMjU5Olx0XHRjb25zdCBzdHJ1Y3QgYWlyb2hhX25wdV9zb2NfZGF0YSAqc29jO1xuIDI2MDpcdFx0dm9pZCBfX2lvbWVtICphZGRyO1xuIDI2MTpcdFx0aW50IHJldDtcbiAyNjI6XHRcbiAyNjM6XHRcdHNvYyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIDI2NDpcdFx0aWYgKCFzb2MpXG4gMjY1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI2NjpcdFxuIDI2NzpcdFx0YWRkciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4gMjY4Olx0XHRpZiAoSVNfRVJSKGFkZHIpKVxuIDI2OTpcdFx0XHRyZXR1cm4gUFRSX0VSUihhZGRyKTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qIFRyeSB0byBsb2FkIGZpcm13YXJlIGltYWdlcyB1c2luZyB0aGUgZmlybXdhcmUgbmFtZXMgcHJvdmlkZWQgdmlhXG4gMjcyOlx0XHQgKiBkdHMgaWYgYXZhaWxhYmxlLlxuIDI3MzpcdFx0ICovXG4gMjc0Olx0XHRpZiAob2ZfZmluZF9wcm9wZXJ0eShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZmlybXdhcmUtbmFtZVwmIzM0OywgTlVMTCkpXG4gMjc1Olx0XHRcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVfZnJvbV9kdHMoZGV2LCBhZGRyLCBiYXNlKTtcbiAyNzY6XHRcbiAyNzc6XHRcdC8qIExvYWQgcnYzMiBucHUgZmlybXdhcmUgKi9cbiAyNzg6XHRcdHJldCA9IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGFkZHIsIHNvYy1cdTAwM2Vmd19ydjMyLm5hbWUsXG4gMjc5Olx0XHRcdFx0XHQgICAgICAgc29jLVx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xuIDI4MDpcdFx0aWYgKHJldClcbiAyODE6XHRcdFx0cmV0dXJuIHJldDtcbiAyODI6XHRcbiAyODM6XHRcdC8qIExvYWQgZGF0YSBucHUgZmlybXdhcmUgKi9cbiAyODQ6XHRcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBiYXNlICYjNDM7IFJFR19OUFVfTE9DQUxfU1JBTSxcbiAyODU6XHRcdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubmFtZSxcbiAyODY6XHRcdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubWF4X3NpemUpO1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHRzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBucHVfaW5zdGFuY2U7XG4gMjkyOlx0XG4gMjkzOlx0XHQvKiBjbGVhciBtYm94IGludGVycnVwdCBzdGF0dXMgKi9cbiAyOTQ6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJPWF9JTlRfU1RBVFVTLFxuIDI5NTpcdFx0XHQgICAgIE1CT1hfSU5UX1NUQVRVU19NQVNLKTtcbiAyOTY6XHRcbiAyOTc6XHRcdC8qIGFja25vd2xlZGdlIG5wdSAqL1xuIDI5ODpcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlE4X0NUUkwoMyksXG4gMjk5Olx0XHRcdFx0ICAgTUJPWF9NU0dfU1RBVFVTIHwgTUJPWF9NU0dfRE9ORSwgTUJPWF9NU0dfRE9ORSk7XG4gMzAwOlx0XG4gMzAxOlx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdHN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDMwNTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQWlyb2hhIE5QVSBEcml2ZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZWAgZnVuY3Rpb24gYW5kIHRoZSB3YXkgaXQgdXNlcyBgcmVxdWVzdF9maXJtd2FyZWAuIFRoZSBvYnZpb3VzIGlzc3VlIGp1bXBzIG91dDogaWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCBhdmFpbGFibGUsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBjYXNlIGluIFN5emthbGxlciB1bmxlc3MgaXQmIzM5O3MgYSBzdGFuZGFyZCBmaXJtd2FyZSBvciBpZiBTeXprYWxsZXIgc3BlY2lmaWNhbGx5IG1vY2tzIGl0LCB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIGZpcm13YXJlIG1vY2tpbmcsIGJ1dCB0aGF0IHRlbmRzIHRvIGJlIG1vcmUgZm9yIGNvbW1vbiBkcml2ZXJzLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZHJpdmVyLCBzcGVjaWZpYyB0byB0aGUgQWlyb2hhIEVONzU4MSBTb0MuIE15IGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBpbnZvbHZlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgb3IgaWYgaXQgaGFzIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyB0aGlzIGBhaXJvaGFfbnB1YCBldmVuIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVT8KClN5emthbGxlciAqY2FuKiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgYHN5el9nZW5fc3l6X3BsYXRmb3JtX2RldmljZWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLCBidXQgdGhvc2UgcmVxdWlyZSBNTUlPIHJlc291cmNlcywgSVJRcywgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBvZnRlbiwgdGhlc2UgdGhpbmdzIGZhaWwgYXQgdGhlIHByb2JlIHN0YWdlIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBiZWhhdmlvci4gVGhhdCYjMzk7cyBhc3N1bWluZyBTeXprYWxsZXIgZXZlbiBzdWNjZXNzZnVsbHkgc2V0cyB1cCB0aGUgcGxhdGZvcm0gZGV2aWNlIGFuZCBnZXRzIHBhc3QgdGhlIGRldmljZS10cmVlIHN0dWZmLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBhaXJvaGFfbnB1X3Byb2JlYCBpcyBnb2luZyB0byB0cmlwIHVzIHVwIG9uIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKCWVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgJmFtcDtyZXMpOwoJaWYgKGVycikKCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpgYGAKCkFoYSEgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBjYWxscyBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYCwgd2hpY2gsIGFzIHdlJiMzOTt2ZSBhbHJlYWR5IGRpc2N1c3NlZCwgcmVsaWVzIG9uIGxvYWRpbmcgdGhlIGZpcm13YXJlLiBUaGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBibG9ja2luZyBwb2ludC4gTG9va3MgbGlrZSB0aGlzIGNvdWxkIGVhc2lseSBiZSBhbm90aGVyIGluc3RhbmNlIG9mIGEgZHJpdmVyIHdob3NlIGZpcm13YXJlIGxvYWRpbmcgbWFrZXMgaXQgYSBiYWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaW1lIHRvIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBwcm9iZSBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgb2J2aW91c2x5IGdvaW5nIHRvIGJsb2NrIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxuIDIxMTpcdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSlcbiAyMTI6XHR7XG4gMjEzOlx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIDIxNDpcdFx0aW50IHJldDtcbiAyMTU6XHRcbiAyMTY6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIGZ3X25hbWUsIGRldik7XG4gMjE3Olx0XHRpZiAocmV0KVxuIDIxODpcdFx0XHRyZXR1cm4gcmV0ID09IC1FTk9FTlQgPyAtRVBST0JFX0RFRkVSIDogcmV0O1xuIDIxOTpcdFxuIDIyMDpcdFx0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNlIGZ3X21heF9zaXplKSB7XG4gMjIxOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogZncgc2l6ZSB0b28gb3ZlcmxpbWl0ICglenUpXFxuXCYjMzQ7LFxuIDIyMjpcdFx0XHRcdGZ3X25hbWUsIGZ3LVx1MDAzZXNpemUpO1xuIDIyMzpcdFx0XHRyZXQgPSAtRTJCSUc7XG4gMjI0Olx0XHRcdGdvdG8gb3V0O1xuIDIyNTpcdFx0fVxuIDIyNjpcdFxuIDIyNzpcdFx0bWVtY3B5X3RvaW8oYWRkciwgZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG4gMjI4Olx0b3V0OlxuIDIyOTpcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZXR1cm4gcmV0O1xuIDIzMjpcdH1cbiAyMzM6XHRcbiAyMzQ6XHRzdGF0aWMgaW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgQWlyb2hhIEZpcm13YXJlIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJvdWJsZXNob290aW5nIHRoaXMgQWlyb2hhIGZpcm13YXJlIGlzc3VlLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAsIHdlJiMzOTtyZSBnZXR0aW5nIGFuIGAtRVBST0JFX0RFRkVSYC4gUmlnaHQsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuIEhvd2V2ZXIsIHRoZSBuZXh0IHRob3VnaHQgaXMgdGhlIGZpcm13YXJlIGl0c2VsZi4gU3l6a2FsbGVyIHByb2JhYmx5IGRvZXNuJiMzOTt0IGhhdmUgdGhlIEFpcm9oYSBmaXJtd2FyZSBiYWtlZCBpbnRvIGl0cyBpbWFnZSwgdW5sZXNzIGl0JiMzOTtzIGF2YWlsYWJsZSBpbiBsaW51eC1maXJtd2FyZSBhbmQgc3l6a2FsbGVyIGlzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBpdC4gRXZlbiB0aGVuLCBpdCYjMzk7cyBsaWtlbHkgdmVyeSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgU3lzdGVtLW9uLWEtQ2hpcC4KCldhaXQgYSBzZWNvbmQsIHRoaXMgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IG1vZGlmaWVzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYC4gVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgYWlyb2hhX25wdV9wcGVfaW5pdGAsIGBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmRgLCBhbmQgcHJvYmFibHkgc29tZSBvdGhlcnMuIExldCBtZSBmaW5kIG91dCBleGFjdGx5ICp3aGVyZSogYGFpcm9oYV9ucHVfc2VuZF9tc2dgIGlzIGJlaW5nIHVzZWQuIEFoLCBpdCYjMzk7cyBpbiBgYWlyb2hhX25wdV9wcGVfaW5pdGAsIGBhaXJvaGFfbnB1X3BwZV9kZWluaXRgIGFuZCBhIGZldyBvdGhlcnMuIE5vdywgYGFpcm9oYV9ucHVfcHBlX2luaXRgIGdldHMgYXNzaWduZWQgdG8gYG5wdS0mZ3Q7b3BzLnBwZV9pbml0YC4gVGhhdCYjMzk7cyBhIGdvb2QgbGVhZC4gCgpTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hvICphY3R1YWxseSogY2FsbHMgYG5wdS0mZ3Q7b3BzLnBwZV9pbml0YD8gVGltZSB0byBkaWcgaW50byBgYWlyb2hhX3BwZS5jYCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTc0PXN0YXRpYyBpbnQgYWlyb2hhX3NldF9tYWNhZGRyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTQxOlx0YWlyb2hhX3BwZV9pbml0X3VwZF9tZW0oZGV2LCBhZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTQyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTYxMj1zdGF0aWMgaW50IGFpcm9oYV9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoxNjQyOlx0ZXJyID0gYWlyb2hhX3BwZV9pbml0KGV0aCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE2NDMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg9NzM2PWludCBhaXJvaGFfcHBlX3NldHVwX3RjX2Jsb2NrX2NiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDo3Mzc6aW50IGFpcm9oYV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgtNzM4LXZvaWQgYWlyb2hhX3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjczOTp2b2lkIGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTc0MC11MzIgYWlyb2hhX3BwZV9nZXRfdG90YWxfbnVtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0zMjc9c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNDMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA0PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIxLVx0bnB1LVx1MDAzZWRldiA9IGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzIyOlx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyMy1cdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI0Olx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MjUtXHRucHUtXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDM3Olx0ZXJyID0gbnB1LVx1MDAzZW9wcy5wcGVfaW5pdChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NDctXHRpZiAocHBlX251bV9zdGF0c19lbnRyaWVzIFx1MDAzZSAwKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NDg6XHRcdGVyciA9IG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMobnB1LCBwcGUtXHUwMDNlZm9lX3N0YXRzX2RtYSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQ0OS1cdFx0XHRcdFx0ICAgICAgcHBlX251bV9zdGF0c19lbnRyaWVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE0OTM9dm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE1MTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1MTI6dm9pZCBhaXJvaGFfcHBlX2luaXRfdXBkX21lbShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE1MTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTU4NT1FWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfcHBlX3B1dF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNTg3OmludCBhaXJvaGFfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdyBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBhaXJvaGFfcHBlX2luaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgYnkgYGFpcm9oYV9od19pbml0YCwgd2hpY2ggaW4gdHVybiByZXNpZGVzIGluIGBhaXJvaGFfZXRoLmNgLiBUaGlzIGlzIHRoZSBjb3JlIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHByb2JlZCBlZmZlY3RpdmVseT8gU2luY2UgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHRoZSBjb21wYXRpYmlsaXR5IHN0cmluZyBgYWlyb2hhLGVuNzU4MS1ldGhgIGlzIGNydWNpYWwuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBjYW4gU3l6a2FsbGVyIGZ1enogdGhpcz8gSSBrbm93IFN5emthbGxlciBjYW4gZ2VuZXJhdGUgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoIOKAkyB0aGlzIGRyaXZlciByZWxpZXMgb24gc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gdGhlIE5QVSBkcml2ZXIuIFRoZSBOUFUgbmVlZHMgdG8gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCAqYmVmb3JlKiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHksIGFuZCB0aGF0IHByb2JlIGRlcGVuZHMgb24gZmlybXdhcmUgYmVpbmcgcHJlc2VudCBhbmQgbG9hZGVkIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCB0aGVyZSwgYGFpcm9oYV9ucHVfcHJvYmVgIGVpdGhlciBkZWZlcnMgb3IgZmFpbHMuCgpUaGUgZG93bnN0cmVhbSBpbXBhY3QgaXMgY3JpdGljYWwuIEEgZmFpbHVyZSBpbiBgYWlyb2hhX25wdV9wcm9iZWAgbGVhZHMgdG8gYSBmYWlsdXJlIGluIGBhaXJvaGFfbnB1X2dldGAsIHdoaWNoIHRoZW4gbWVhbnMgYGFpcm9oYV9wcGVfb2ZmbG9hZF9zZXR1cGAgZmFpbHMuIEFoLCB3YWl0IGEgbWludXRlLCBgYWlyb2hhX3BwZV9ucHVfZ2V0YCB1c2VzIGByZXF1ZXN0X21vZHVsZSgmIzM0O2Fpcm9oYS1ucHUmIzM0OylgIGFuZCB0aGVuIGNhbGxzIGBhaXJvaGFfbnB1X2dldChldGgtJmd0O2RldilgLiBTbywgdGhlIE5QVSBkcml2ZXIgKnNob3VsZCogYmUgbG9hZGVkIGFuZCBwcm9iZWQsIGlmIHRoZSBtb2R1bGUgZXhpc3RzLiBJZiB0aGUgTlBVIGlzbiYjMzk7dCBwcm9iZWQsIGBhaXJvaGFfbnB1X2dldGAgd2lsbCByZXR1cm4gYW4gZXJyb3IsIGFuZCB0aGlzIHdpbGwgcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZnVuY3Rpb25pbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFpcm9oYV9ucHVfZ2V0YCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gVGhpcyBpcyBhIHBvdGVudGlhbCB3ZWFrbmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqYWlyb2hhX25wdV9nZXQoc3RydWN0IGRldmljZSAqZGV2KVxuIDYxMTpcdHtcbiA2MTI6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4gNjEzOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuIDYxNDpcdFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbiA2MTU6XHRcbiA2MTY6XHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7YWlyb2hhLG5wdVwmIzM0OywgMCk7XG4gNjE3Olx0XHRpZiAoIW5wKVxuIDYxODpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiA2MTk6XHRcbiA2MjA6XHRcdHBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTtcbiA2MjE6XHRcbiA2MjI6XHRcdGlmICghcGRldikge1xuIDYyMzpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Y2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcXG5cJiMzNDssIG5wLVx1MDAzZW5hbWUpO1xuIDYyNDpcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4gNjI1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFx0b2Zfbm9kZV9wdXQobnApO1xuIDYyODpcdFxuIDYyOTpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHtcbiA2MzA6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGRldmljZSBkcml2ZXIgbW9kdWxlXFxuXCYjMzQ7KTtcbiA2MzE6XHRcdFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcbiA2MzI6XHRcdFx0Z290byBlcnJvcl9wZGV2X3B1dDtcbiA2MzM6XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdG5wdSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIDYzNjpcdFx0aWYgKCFucHUpIHtcbiA2Mzc6XHRcdFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcbiA2Mzg6XHRcdFx0Z290byBlcnJvcl9tb2R1bGVfcHV0O1xuIDYzOTpcdFx0fVxuIDY0MDpcdFxuIDY0MTpcdFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX1NVUFBMSUVSKSkge1xuIDY0MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDY0MzpcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIGxpbmsgdG8gY29uc3VtZXIgJXNcXG5cJiMzNDssXG4gNjQ0Olx0XHRcdFx0ZGV2X25hbWUoZGV2KSk7XG4gNjQ1Olx0XHRcdG5wdSA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gNjQ2Olx0XHRcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcbiA2NDc6XHRcdH1cbiA2NDg6XHRcbiA2NDk6XHRcdHJldHVybiBucHU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDYxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIE5QVSBEcml2ZXIgYW5kIEZpcm13YXJlIERlcGVuZGVuY3kqKgoKT2theSwgc28gdG8gZ2V0IGBhaXJvaGFfbnB1X2dldGAgd29ya2luZywgSSBuZWVkIGEgZGV2aWNlIG5vZGUgd2l0aCB0aGUgYGFpcm9oYSxucHVgIHBoYW5kbGUsIGFuZCB0aGUgTlBVIGRyaXZlciBoYXMgdG8gYmUgdXAgYW5kIHJ1bm5pbmcuIFRoYXQgbWVhbnMgYHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpYCBjYW4mIzM5O3QgYmUgTlVMTC4gRm9yIHRoZSBOUFUgZHJpdmVyIHRvIGFjdHVhbGx5IHByb2JlIGNvcnJlY3RseSwgaXQgbmVlZHMgdGhlIGZpcm13YXJlLiBBbmQsIG9mIGNvdXJzZSwgc3l6a2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZmlybXdhcmUgYXZhaWxhYmxlLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgcHJvYmUgdG8gZmFpbCByaWdodCBhd2F5LiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBtb2NrIHRoZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBnb2VzIG9uIHRvIGRvIHRoaW5ncyB0aGF0IHN1Z2dlc3QgYSBmdWxseSBvcGVyYXRpb25hbCBOUFUgaXMgcmVxdWlyZWQsIGxpa2Ugd3JpdGluZyB0byByZWdpc3RlcnMgdXNpbmcgYHJlZ21hcF93cml0ZWA6CgpgYGBjCglyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSwgLi4uKTsKCW1zbGVlcCgxMDApOwoJLyogZW5hYmxlIE5QVSBjb3JlcyAqLwoJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfQk9PVF9DT05GSUcsIDB4ZmYpOwoJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpOwoJbXNsZWVwKDEwMCk7CmBgYAoKVGhlbiwgdGhlIGRyaXZlciB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBOUFUuIFRoaXMgbG9va3MgYSBiaXQgaW52b2x2ZWQ6CgpgYGBjCglpZiAoIWFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KG5wdSwgMCwgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OLAoJCQkJICAgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIEdGUF9LRVJORUwpKQoJCWRldl9pbmZvKGRldiwgJiMzNDtOUFUgdmVyc2lvbjogJWQuJWRcbiYjMzQ7LCB2YWwgJmd0OyZndDsgMTYsIHZhbCAmYW1wOyAweGZmZmYpOwpgYGAKCldhaXQgYSBzZWNvbmQuLi4gYGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0YCBjYWxscyBgYWlyb2hhX25wdV9zZW5kX21zZ2AhIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoISBPa2F5LCBJIG5lZWQgdG8gcmV2aXNpdCBgYWlyb2hhX25wdV9zZW5kX21zZ2AgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYzOlx0c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIDE2NDpcdFx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbiAxNjU6XHR7XG4gMTY2Olx0XHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXG4gMTY3Olx0XHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuIDE2ODpcdFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiAxNjk6XHRcdHZvaWQgKmRtYV9idWY7XG4gMTcwOlx0XHRpbnQgcmV0O1xuIDE3MTpcdFxuIDE3MjpcdFx0LypcbiAxNzM6XHRcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcbiAxNzQ6XHRcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4gMTc1Olx0XHQgKiBtYXBwaW5nIHJlZ3Jlc3NlcyBFTjc1ODEmIzQzO01UNzk5NjogTUJPWCByZXBvcnRzIHN1Y2Nlc3MgYnV0XG4gMTc2Olx0XHQgKiBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04gc3RpbGwgcmVhZHMgYXMgMC4wLiBVc2UgYVxuIDE3NzpcdFx0ICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuXG4gMTc4Olx0XHQgKi9cbiAxNzk6XHRcdGRtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQobnB1LVx1MDAzZWRldiwgc2l6ZSwgXHUwMDI2ZG1hX2FkZHIsIEdGUF9BVE9NSUMpO1xuIDE4MDpcdFx0aWYgKCFkbWFfYnVmKVxuIDE4MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxODI6XHRcbiAxODM6XHRcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcbiAxODQ6XHRcbiAxODU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gMTg2Olx0XG4gMTg3Olx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTtcbiAxODg6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7XG4gMTg5Olx0XHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgXHUwMDI2dmFsKTtcbiAxOTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpO1xuIDE5MTpcdFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuIDE5MjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMykgJiM0Mzsgb2Zmc2V0LCB2YWwpO1xuIDE5MzpcdFxuIDE5NDpcdFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXHUwMDNlcmVnbWFwLFxuIDE5NTpcdFx0XHRcdFx0XHQgICAgICBSRUdfQ1JfTUJRMF9DVFJMKDMpICYjNDM7IG9mZnNldCxcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICAgdmFsLCAodmFsIFx1MDAyNiBNQk9YX01TR19ET05FKSxcbiAxOTc6XHRcdFx0XHRcdFx0ICAgICAgMTAwLCAxMDAgKiBNU0VDX1BFUl9TRUMpO1xuIDE5ODpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiAxOTk6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAyMDA6XHRcbiAyMDE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiAyMDI6XHRcbiAyMDM6XHRcdGlmICghcmV0KVxuIDIwNDpcdFx0XHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XG4gMjA1Olx0XHRkbWFfZnJlZV9jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7XG4gMjA2Olx0XG4gMjA3Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIxMQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiA5MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBgYWlyb2hhX25wdV9zZW5kX21zZ2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBpbnZvbHZlIHdyaXRpbmcgdG8gTU1JTyByZWdpc3RlcnMsIHRoZW4gd2FpdGluZyBmb3IgYSBzcGVjaWZpYyBiaXQsIGBNQk9YX01TR19ET05FYCwgdG8gYmUgc2V0LiBUaGUgaXNzdWUgaXMsIHRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gdGhlIEFpcm9oYSBFTjc1ODEgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgZW11bGF0b3IgdGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQgaW4gUUVNVS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgcG9sbGluZyBmdW5jdGlvbiB3aWxsIHRpbWUgb3V0LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuCgpJbml0aWFsbHksIEkgdGhvdWdodCBzeXprYWxsZXIsIHdpdGggaXRzIE1NSU8gcmVhZC93cml0ZSBpbmplY3Rpb24sIG1pZ2h0IHNvbWVob3cgZ2V0IGFyb3VuZCB0aGlzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBjb3VsZCBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UsIG1hcCB0aGUgTU1JTyByZWdpb24gdG8gZHVtbXkgbWVtb3J5LCBhbmQgcG90ZW50aWFsbHkgdHJpY2sgdGhlIGRyaXZlciBpbnRvIHJlYWRpbmcgYSB2YWx1ZSB3aXRoIGBNQk9YX01TR19ET05FYCBzZXQuIEJ1dCB0aGVuLCB0aGVyZSYjMzk7cyB0aGUgZmlybXdhcmUgbG9hZGluZyBpc3N1ZS4gVGhlIGBhaXJvaGFfbnB1X3Byb2JlYCByb3V0aW5lIGNhbGxzIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAsIHdoaWNoIGNhbGxzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLiBBbmQgY3J1Y2lhbGx5LCB0aGlzIHVzZXMgYHJlcXVlc3RfZmlybXdhcmVgLiBJZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscyB3aXRoIGAtRU5PRU5UYCwgd2hpY2ggbGVhZHMgdG8gYC1FUFJPQkVfREVGRVJgIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciBjYW4mIzM5O3QgcHJvdmlkZSB0aGUgZmlybXdhcmUgdW5sZXNzIGl0JiMzOTtzIGluIHRoZSBpbWFnZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGJ5cGFzcyB0aGlzIGZpcm13YXJlIGxvYWRpbmcgc3RlcC4KCkkgY2hlY2tlZCBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYCB0byBjb25maXJtIHRoYXQgaWYgYHJlcXVlc3RfZmlybXdhcmVgIGZhaWxzIHdpdGggYC1FTk9FTlRgIHRoZW4gaXQgcmV0dXJucyBgLUVQUk9CRV9ERUZFUmAuCgpUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgYSBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVuIGl0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBlbXVsYXRpb24gbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUuIEl0IGFsc28gZXhwbGljaXRseSBsaXN0cyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgYXMgZXhhbXBsZXMgb2YgY29kZSBub3Qgd29ydGggZnV6emluZywgYW5kIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuCgpUaGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgdmlydHVhbCBBaXJvaGEgTlBVIGRyaXZlciwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgY29kZSB3b3VsZCBiZSB1c2VkIGFueXdoZXJlIGVsc2UuIEl0JiMzOTtzIHVzZWQgYnkgYGFpcm9oYV9ldGhgLCB3aGljaCBpcyBhbm90aGVyIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgZXRoZXJuZXQgaGFyZHdhcmUuIFRoZXNlIGFyZSBhbGwgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyBhbGwgdGhlIGFuZ2xlcywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGFuZCB0aGF0JiMzOTtzIHRoZSBkZWNpZGluZyBmYWN0b3IuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1haWxib3ggY29tbXVuaWNhdGlvbiBsb2dpYyBpbiB0aGUgQWlyb2hhIEVONzU4MS9BTjc1ODMgTlBVIGRyaXZlciAoYWlyb2hhX25wdSkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBuZXR3b3JraW5nIFNvQyBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBmaXJtd2FyZSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNToxNS45Mzg2MjIxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODk4MTkzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MTUuOTM4NjI3MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTg2ODUwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYjg3ZDlmZThjZGIzZTIwN2NhNTkxNDhkNjFmNWE2NTZkNzA0MzdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5pbmRleCBiNjc5YmVkOTUyZGUzLi5kMmY2YzljMDg0Yjg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXFxuQEAgLTE2NiwxMiArMTY2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4gXFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbiBcXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFxcdTAwM2NcXHUwMDNjIDQ7XFxuIFxcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHZvaWQgKmRtYV9idWY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuLVxcdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkcik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcXG4rXFx0ICogcmVxdWVzdCwgTlBVIHdyaXRlcyB0aGUgcmVzcG9uc2UpLiBTdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUxcXG4rXFx0ICogbWFwcGluZyByZWdyZXNzZXMgRU43NTgxK01UNzk5NjogTUJPWCByZXBvcnRzIHN1Y2Nlc3MgYnV0XFxuK1xcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXFxuK1xcdCAqIGNvaGVyZW50IGJvdW5jZSBidWZmZXIgc28gdGhlIENQVSBhbHdheXMgc2VlcyB0aGUgTlBVIHJlc3BvbnNlLlxcbitcXHQgKi9cXG4rXFx0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXFx1MDAzZWRldiwgc2l6ZSwgXFx1MDAyNmRtYV9hZGRyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFkbWFfYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4gXFxuQEAgLTE5MSw3ICsyMDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4gXFxuLVxcdGRtYV91bm1hcF9zaW5nbGUobnB1LVxcdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XFxuK1xcdGRtYV9mcmVlX2NvaGVyZW50KG5wdS1cXHUwMDNlZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjE3LjI5ODA5ODkwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4NTM4NzA4MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZDJmNmM5YzA4NGI4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0xNjYsMTIgKzE2NiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdHZvaWQgKmRtYV9idWY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4tXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXHUwMDNlZGV2LCBkbWFfYWRkcik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcbitcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4rXHQgKiBtYXBwaW5nIHJlZ3Jlc3NlcyBFTjc1ODErTVQ3OTk2OiBNQk9YIHJlcG9ydHMgc3VjY2VzcyBidXRcbitcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXG4rXHQgKiBjb2hlcmVudCBib3VuY2UgYnVmZmVyIHNvIHRoZSBDUFUgYWx3YXlzIHNlZXMgdGhlIE5QVSByZXNwb25zZS5cbitcdCAqL1xuK1x0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBcdTAwMjZkbWFfYWRkciwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIWRtYV9idWYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWVtY3B5KGRtYV9idWYsIHAsIHNpemUpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiBcbkBAIC0xOTEsNyArMjAwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG1lbWNweShwLCBkbWFfYnVmLCBzaXplKTtcbitcdGRtYV9mcmVlX2NvaGVyZW50KG5wdS1cdTAwM2VkZXYsIHNpemUsIGRtYV9idWYsIGRtYV9hZGRyKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MTcuMjk4MTAwMTU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzOTM2OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNYWlsYm94IFBheWxvYWQgQWxsb2NhdGlvbiBDaGFuZ2UgaW4gdGhlIGFpcm9oYV9ucHUgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYWlyb2hhX25wdV9zZW5kX21zZ2AsIHdoZXJlIHRoZXkncmUgc3dhcHBpbmcgb3V0IGBkbWFfbWFwX3NpbmdsZWAgZm9yIGBkbWFfYWxsb2NfY29oZXJlbnRgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBtYWlsYm94IHBheWxvYWRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIGNoYW5nZT9cIi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYWRkcmVzc2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBvciBwb3NzaWJseSBmaXhpbmcgYSBwb3RlbnRpYWwgY29oZXJlbmN5IHByb2JsZW0/IEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gY2hlY2sgd2hhdCB0aGUgZHJpdmVyIGFjdHVhbGx5ICppcyouIFRoaXMgaXMgYW4gYGFpcm9oYV9ucHVgIGRyaXZlciwgd2hpY2ggdG8gbXkga25vd2xlZGdlIGlzIGZhaXJseSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gY2hpcHNldC4gSSB3b25kZXIgd2hhdCB0aGUgcGFydGljdWxhciByb2xlIG9mIHRoaXMgYG5wdWAgaXMgaW4gdGhlIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyBhbiBvZmZsb2FkIGVuZ2luZT9cblxuSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIE1heWJlIGV2ZW4gc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzIGZvciByZWxldmFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgdG8gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCBmb3IsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbWFpbGJveCBjaGFuZ2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZSBhbmQgaXMgYmVpbmcgZG9uZSBmb3IgYSBnb29kIHJlYXNvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjIxLjQzNzQ3Mjc0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5NTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfbnB1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgKz0gYWlyb2hhX3BwZV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICs9IGFpcm9oYV9ucHUub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD02NDU9c3RydWN0IGFpcm9oYV9ldGgge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC02NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDo2NTM6XFx0c3RydWN0IGFpcm9oYV9ucHUgX19yY3UgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTY1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MTA1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxMTA6c3RydWN0IGFpcm9oYV9ucHVfZncge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTExLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTExNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjExNTpzdHJ1Y3QgYWlyb2hhX25wdV9zb2NfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxMTY6XFx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfcnYzMjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjExNzpcXHRzdHJ1Y3QgYWlyb2hhX25wdV9mdyBmd19kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTE4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTE1Nj1zdHJ1Y3Qgd2xhbl9tYm94X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTY0LVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjEwOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjExLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTIzND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyMzU6YWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlX2Zyb21fZHRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjM2LVxcdFxcdFxcdFxcdCAgdm9pZCBfX2lvbWVtICpiYXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNDY6XFx0cmV0ID0gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYWRkciwgZndfbmFtZXNbMF0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDctXFx0XFx0XFx0XFx0ICAgICAgIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1MTpcXHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYmFzZSArIFJFR19OUFVfTE9DQUxfU1JBTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1Mi1cXHRcXHRcXHRcXHRcXHRmd19uYW1lc1sxXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjU2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlc291cmNlICpyZXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjU5OlxcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNjAtXFx0dm9pZCBfX2lvbWVtICphZGRyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzQtXFx0aWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZmlybXdhcmUtbmFtZVxcXCIsIE5VTEwpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjc1OlxcdFxcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVfZnJvbV9kdHMoZGV2LCBhZGRyLCBiYXNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ny1cXHQvKiBMb2FkIHJ2MzIgbnB1IGZpcm13YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNzg6XFx0cmV0ID0gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYWRkciwgc29jLVxcdTAwM2Vmd19ydjMyLm5hbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzktXFx0XFx0XFx0XFx0ICAgICAgIHNvYy1cXHUwMDNlZndfcnYzMi5tYXhfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4My1cXHQvKiBMb2FkIGRhdGEgbnB1IGZpcm13YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyODQ6XFx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGJhc2UgKyBSRUdfTlBVX0xPQ0FMX1NSQU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yODUtXFx0XFx0XFx0XFx0XFx0c29jLVxcdTAwM2Vmd19kYXRhLm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI4OTpzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjkwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI5MTpcXHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gbnB1X2luc3RhbmNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDQ6c3RhdGljIHZvaWQgYWlyb2hhX25wdV93ZHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzA2OlxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDc6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMwOC1cXHR2b2lkICpkdW1wO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMTI6XFx0Y29yZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlLCB3ZHRfd29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMTMtXFx0bnB1ID0gY29yZS1cXHUwMDNlbnB1O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjc6c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMyOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjk6XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IGNvcmVfaW5zdGFuY2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMzA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGNvcmUtXFx1MDAzZW5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMzMS1cXHRpbnQgYyA9IGNvcmUgLSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1swXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzU2OlxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzU3LVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM3NTpcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3Ni1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzgyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zODMtXFx0XFx0XFx0XFx0XFx0ICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozOTk6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MDAtXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQwNjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDA3LVxcdFxcdFxcdFxcdCAgICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0MjQ6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MjUtXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQzMzpcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQzNC1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDQxOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0Mi1cXHRcXHRcXHRcXHQgICAgICBkbWFfYWRkcl90IGZvZV9zdGF0c19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NTY6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NTctXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MzpcXHRcXHRcXHRcXHQgICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fc2V0X2NtZCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDc0LVxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4sIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDg5OlxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00OTAtXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDk1OnN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0OTY6XFx0XFx0XFx0XFx0ICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fZ2V0X2NtZCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk3LVxcdFxcdFxcdFxcdCAgIHZvaWQgKmRhdGEsIGludCBkYXRhX2xlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1MTE6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUxMi1cXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NTE5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUyMDphaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIxLVxcdFxcdFxcdFxcdCAgICBpbnQgaWZpbmRleCwgY29uc3QgY2hhciAqbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUyMjpcXHRcXHRcXHRcXHQgICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fc2V0X2NtZCBmdW5jX2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTM0LVxcdHZhbCA9IHJlcy5zdGFydDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzNTpcXHRyZXR1cm4gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKG5wdSwgaWZpbmRleCwgZnVuY19pZCwgXFx1MDAyNnZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzNi1cXHRcXHRcXHRcXHRcXHRzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzOTpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU0MTpcXHRlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9OUFVfQkFORDBfT05DUFU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NDItXFx0dTMyIHZhbCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU0NTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAxLCBjbWQsIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQ2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTUwLVxcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9UWF9CVUZfQ0hFQ0tfQUREUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU1MTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFxcXCJ0eC1idWZpZFxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTU1LVxcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9QS1RfQlVGX0FERFI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NTY6XFx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcXFwicGt0XFxcIiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjAtXFx0Y21kID0gV0xBTl9GVU5DX1NFVF9XQUlUX1RYX1BLVF9CVUZfQUREUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU2MTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFxcXCJ0eC1wa3RcXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTYyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU2Ny1cXHRcXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfRFJBTV9CQV9OT0RFX0FERFI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Njg6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcXFwiYmFcXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTY5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU3My1cXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfSVNfRk9SQ0VfVE9fQ1BVO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTc0OlxcdHJldHVybiBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAwLCBjbWQsIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc1LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Nzg6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHFpZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU3OS1cXHRcXHRcXHRcXHRcXHQgIGJvb2wgeG1pdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTg3OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTkyOnN0YXRpYyB1MzIgYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjAwOnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjA1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjYxMDpzdHJ1Y3QgYWlyb2hhX25wdSAqYWlyb2hhX25wdV9nZXQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjEzLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2MTQ6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjU3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY1ODpFWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfbnB1X2dldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NjA6dm9pZCBhaXJvaGFfbnB1X3B1dChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjY0LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2NTpFWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfbnB1X3B1dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhIGVuNzU4MV9ucHVfc29jX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjgtXFx0LmZ3X3J2MzIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgYW43NTgzX25wdV9zb2NfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY3OS1cXHQuZndfcnYzMiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9ucHVfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5MC1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtbnB1XFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX25wdV9zb2NfZGF0YSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTMtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY5NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9haXJvaGFfbnB1X21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA0OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwNi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA3OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDgtXFx0c3RydWN0IHJlc291cmNlIHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIxLVxcdG5wdS1cXHUwMDNlZGV2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzIyOlxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0ID0gYWlyb2hhX25wdV9wcGVfaW5pdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyMzpcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI0OlxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0X3N0YXRzID0gYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjU6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2ZsdXNoX3NyYW1fZW50cmllcyA9IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNjpcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNzpcXHRucHUtXFx1MDAzZW9wcy53bGFuX2luaXRfcmVzZXJ2ZWRfbWVtb3J5ID0gYWlyb2hhX25wdV93bGFuX2luaXRfbWVtb3J5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI4OlxcdG5wdS1cXHUwMDNlb3BzLndsYW5fc2VuZF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Mjk6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzA6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfcXVldWVfYWRkciA9IGFpcm9oYV9ucHVfd2xhbl9xdWV1ZV9hZGRyX2dldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjczMTpcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMyOlxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzM6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9lbmFibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9lbmFibGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzQ6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9kaXNhYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTczNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzQ4OlxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzQ5LVxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NTQ6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzU1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NjM6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV93ZHRfaGFuZGxlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICAgSVJRRl9TSEFSRUQsIFxcXCJhaXJvaGEtbnB1LXdkdFxcXCIsIGNvcmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Njg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZjb3JlLVxcdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3ODQ6XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MDU6XFx0aWYgKCFhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChucHUsIDAsIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgwNi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBHRlBfS0VSTkVMKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODE1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODE3OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxOC1cXHRpbnQgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI0OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI1OlxcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjY6XFx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI3LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjgtXFx0XFx0Lm5hbWUgPSBcXFwiYWlyb2hhLW5wdVxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4Mjk6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX25wdV9tYXRjaCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgzMC1cXHR9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MzI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MzMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTYwMz1zdGF0aWMgdm9pZCBhaXJvaGFfcHBlX2ZvZV9mbG93X3N0YXRfZW50cnlfcmVzZXQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjYwNDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTYwNS1cXHRcXHRcXHRcXHRcXHRcXHQgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02MTE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2VfZmxvd19zdGF0c19yZXNldChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjEyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjI0PXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MjU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjI2LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NzYxPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc2OC1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcHBlLVxcdTAwM2VldGg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3Njk6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc3MC1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTI5Nz12b2lkIGFpcm9oYV9wcGVfZm9lX2VudHJ5X2dldF9zdGF0cyhzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLCB1MzIgaGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTMwMS1cXHRpbnQgcHBlX251bV9zdGF0c19lbnRyaWVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTMwMjpcXHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTMwMy1cXHR1MzIgaW5kZXg7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEzNzU9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZsdXNoX3NyYW1fZW50cmllcyhzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5MzpzdGF0aWMgc3RydWN0IGFpcm9oYV9ucHUgKmFpcm9oYV9wcGVfbnB1X2dldChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMzk1OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBhaXJvaGFfbnB1X2dldChldGgtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk4LVxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJhaXJvaGEtbnB1XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMzk5OlxcdFxcdG5wdSA9IGFpcm9oYV9ucHVfZ2V0KGV0aC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDI5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0MzA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGFpcm9oYV9wcGVfbnB1X2dldChldGgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQzMS1cXHRzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlID0gZXRoLVxcdTAwM2VwcGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NjItZXJyb3JfbnB1X3B1dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NjM6XFx0YWlyb2hhX25wdV9wdXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE2NTg9dm9pZCBhaXJvaGFfcHBlX2RlaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTY1OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjYwOlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjY4LVxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9kZWluaXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE2Njk6XFx0XFx0YWlyb2hhX25wdV9wdXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NzAtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNToyMS40ODI2NzM0NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ3MDg5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBhaXJvaGFfbnB1YCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1YCBkcml2ZXIuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFwiYWlyb2hhLGVuNzU4MS1ucHVcIiBhbmQgXCJhaXJvaGEsYW43NTgzLW5wdVwiIFNvQ3MuIEFpcm9oYSwgYmVpbmcgYSBNZWRpYVRlayBzdWJzaWRpYXJ5LCB0eXBpY2FsbHkgbWVhbnMgbmV0d29ya2luZyBTb0NzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJDYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/XCIgUGxhdGZvcm0gZHJpdmVycyBmb3Igc3BlY2lhbGl6ZWQgbmV0d29ya2luZyBTb0NzIGxpa2UgdGhlIEVONzU4MSBvZnRlbiBkb24ndCB3b3JrIHdpdGhvdXQgYSBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgdHlwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBvbmUgaXMgYW4gZXhjZXB0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgZ3VpZGVsaW5lIGhlcmUuIEl0IHNheXMgdG8gbWFyayBwYXRjaGVzIGFzIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhleSBpbmNsdWRlIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgb3IgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIGFuZCBHUFVzIHNwZWNpZmljYWxseS4gSG1tLi4uIGlzIGBhaXJvaGFfbnB1YCBpbiB0aGF0IGNhdGVnb3J5PyBJdCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy5cblxuU28sICpjb3VsZCogaXQgYmUgZnV6emVkIHVzaW5nIHN5emthbGxlcj8gU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBjYWxscyBsaWtlIGBzeXpfZ2VuX3N5el9wbGF0Zm9ybV9kZXZpY2VgIG9yIGJ5IHR3ZWFraW5nIHRoZSBkZXZpY2UgdHJlZSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGlzIGRyaXZlciBzZWVtcyB0byBuZWVkIHNwZWNpZmljIE1NSU8gcmVnaXN0ZXJzIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gVGhhdCByYWlzZXMgc29tZSBmbGFncy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhaXJvaGFfbnB1X3Byb2JlYCBub3cgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZz8gVGhpcyBtaWdodCBub3QgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIG1vcmUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MjguNDI5NzY0NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MDQ6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MjQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjU6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyNi1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjI4LjQ3NTM4NDU5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODcyODIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgZXhhbWluZSBgYWlyb2hhX25wdV9wcm9iZWA6XG5cbioqQW5hbHl6aW5nIGBhaXJvaGFfbnB1X3Byb2JlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgYGFpcm9oYV9ucHVfcHJvYmVgLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBwcm9iaW5nIG9yIGRldGVjdGluZyB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgYW4gTlBVIChOZXVyYWwgUHJvY2Vzc2luZyBVbml0KSB3aXRoaW4gYSBzeXN0ZW0sIHNwZWNpZmljYWxseSBvbmUgbGlrZWx5IG1hbnVmYWN0dXJlZCBieSBBaXJvaGEuIFRoZSBcInByb2JlXCIgcGFydCBpcyBwcmV0dHkgY2xlYXIg4oCTIHdlJ3JlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uLCBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIG9yIHJlYWQgaGFyZHdhcmUgcmVnaXN0ZXJzLCBwZXJoYXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dDpcblxuKiAgICoqV2hhdCB0cmlnZ2VycyB0aGlzIHByb2JlPyoqIElzIGl0IGNhbGxlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBtb2R1bGUgbG9hZGluZywgb3IgaW4gcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyBldmVudD8gVGhlIHRpbWluZyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UuXG4qICAgKipXaGF0IGRvZXMgaXQgKmRvKj8qKiBEb2VzIGl0IHNpbXBseSBjaGVjayBmb3IgdGhlIE5QVSdzIGV4aXN0ZW5jZT8gRG9lcyBpdCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZT8gRG9lcyBpdCBjb25maWd1cmUgaXQgd2l0aCBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3IgcGFyYW1ldGVycz8gRG9lcyBpdCByZWdpc3RlciB0aGUgTlBVIHdpdGggdGhlIG9wZXJhdGluZyBzeXN0ZW0/IFRoaXMgaXMgY3J1Y2lhbC4gSSdsbCBiZSBsb29raW5nIGZvciByZWdpc3RlciByZWFkcy93cml0ZXMsIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGNhbGxzIHRvIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycy5cbiogICAqKldoYXQncyB0aGUgZGF0YSBmbG93PyoqIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcGFzc2VkIHRvIGFuZCBmcm9tIHRoaXMgcHJvYmUgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcmVzcG9uc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBtZWNoYW5pc21zPyBIb3cgZG9lcyBpdCByZXBvcnQgaXRzIGZpbmRpbmdzIChzdWNjZXNzL2ZhaWx1cmUsIGRldmljZSBpbmZvcm1hdGlvbik/XG4qICAgKipXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyoqIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBwZXJpcGhlcmFscywgb3RoZXIgZHJpdmVycywgb3Igc3lzdGVtIHNlcnZpY2VzPyBJZGVudGlmeWluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS5cbiogICAqKldoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8qKiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZXNlIHNjZW5hcmlvcz8gVW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgZXJyb3JzIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LlxuKiAgKipXaGF0IHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBpbiB0ZXJtcyBvZiBhbiBvdmVyYWxsIGRlc2lnbj8qKiBHaXZlbiB0aGF0IHRoaXMgaXMgYW4gTlBVIHByb2JlLCBJIHdvdWxkIGV4cGVjdCB0byBzZWUgYSBjYXJlZnVsbHkgZGVzaWduZWQgc2VxdWVuY2Ugb2Ygc3RlcHMgdGhhdCB3aWxsIGVudW1lcmF0ZSB0aGUgaGFyZHdhcmUgYW5kIHRoZW4gYnJpbmcgaXQgaW50byBhICdyZWFkeScgc3RhdGUgZm9yIG9wZXJhdGlvbnMgdG8gZm9sbG93LlxuXG5JJ20gcmVhZHkgdG8gZGlnIGluIGFuZCBzdGFydCBhbmFseXppbmcgdGhlIGNvZGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTozNC4wNjI2Njk3OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzA0OlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA3MDU6XFx0e1xcbiA3MDY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNzA3OlxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuIDcwODpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xcbiA3MDk6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlO1xcbiA3MTA6XFx0XFx0aW50IGksIGlycSwgZXJyO1xcbiA3MTE6XFx0XFx0dTMyIHZhbDtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcXG4gNzE0OlxcdFxcdGlmIChJU19FUlIoYmFzZSkpXFxuIDcxNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihiYXNlKTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0bnB1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpucHUpLCBHRlBfS0VSTkVMKTtcXG4gNzE4OlxcdFxcdGlmICghbnB1KVxcbiA3MTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcyMDpcXHRcXG4gNzIxOlxcdFxcdG5wdS1cXHUwMDNlZGV2ID0gZGV2O1xcbiA3MjI6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xcbiA3MjM6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcXG4gNzI0OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0X3N0YXRzID0gYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXA7XFxuIDcyNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xcbiA3MjY6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2ZvZV9jb21taXRfZW50cnkgPSBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnk7XFxuIDcyNzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2luaXRfcmVzZXJ2ZWRfbWVtb3J5ID0gYWlyb2hhX25wdV93bGFuX2luaXRfbWVtb3J5O1xcbiA3Mjg6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcXG4gNzI5OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0O1xcbiA3MzA6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfcXVldWVfYWRkciA9IGFpcm9oYV9ucHVfd2xhbl9xdWV1ZV9hZGRyX2dldDtcXG4gNzMxOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XFxuIDczMjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0O1xcbiA3MzM6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9lbmFibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9lbmFibGU7XFxuIDczNDpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRucHUtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFxcdTAwMjZyZWdtYXBfY29uZmlnKTtcXG4gNzM3OlxcdFxcdGlmIChJU19FUlIobnB1LVxcdTAwM2VyZWdtYXApKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobnB1LVxcdTAwM2VyZWdtYXApO1xcbiA3Mzk6XFx0XFxuIDc0MDpcXHRcXHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cXHUwMDNlb2Zfbm9kZSwgMCwgXFx1MDAyNnJlcyk7XFxuIDc0MTpcXHRcXHRpZiAoZXJyKVxcbiA3NDI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTtcXG4gNzQ1OlxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXFxuIDc0OTpcXHRcXHRcXHRcXHQgICAgICAgSVJRRl9TSEFSRUQsIFxcXCJhaXJvaGEtbnB1LW1ib3hcXFwiLCBucHUpO1xcbiA3NTA6XFx0XFx0aWYgKGVycilcXG4gNzUxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzU0OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzU1OlxcdFxcbiA3NTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNvcmUtXFx1MDAzZWxvY2spO1xcbiA3NTc6XFx0XFx0XFx0Y29yZS1cXHUwMDNlbnB1ID0gbnB1O1xcbiA3NTg6XFx0XFxuIDc1OTpcXHRcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgKyAxKTtcXG4gNzYwOlxcdFxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NjE6XFx0XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV93ZHRfaGFuZGxlcixcXG4gNzY0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtd2R0XFxcIiwgY29yZSk7XFxuIDc2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZjb3JlLVxcdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XFxuIDc2OTpcXHRcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIHdsYW4gSVJRIGxpbmVzICovXFxuIDc3MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWlycXMpOyBpKyspIHtcXG4gNzczOlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3JlcykgKyAxKTtcXG4gNzc0OlxcdFxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NzU6XFx0XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0XFx0bnB1LVxcdTAwM2VpcnFzW2ldID0gaXJxO1xcbiA3Nzg6XFx0XFx0fVxcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4gNzgxOlxcdFxcdGlmIChlcnIpXFxuIDc4MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRcXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFxcdTAwMjZyZXMpO1xcbiA3ODU6XFx0XFx0aWYgKGVycilcXG4gNzg2OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcXG4gNzg5OlxcdFxcdFxcdCAgICAgcmVzLnN0YXJ0ICsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcXG4gNzkwOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTEpLCAweDQwMDAwKTsgLyogU1JBTSAyNTZLICovXFxuIDc5MTpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEyKSwgMCk7XFxuIDc5MjpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XFxuIDc5MzpcXHRcXHRtc2xlZXAoMTAwKTtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0Lyogc2V0dGluZyBib290aW5nIGFkZHJlc3MgKi9cXG4gNzk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUFVfTlVNX0NPUkVTOyBpKyspXFxuIDc5NzpcXHRcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0JBU0UoaSksIHJlcy5zdGFydCk7XFxuIDc5ODpcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdC8qIGVuYWJsZSBOUFUgY29yZXMgKi9cXG4gODAxOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfQ09ORklHLCAweGZmKTtcXG4gODAyOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfVFJJR0dFUiwgMHgxKTtcXG4gODAzOlxcdFxcdG1zbGVlcCgxMDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTozNC4wNjI3OTI2NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIzNjIxNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIEV4ZWN1dGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlOiB0aGUgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBnZXR0aW5nIHRoZSBmaXJtd2FyZSB1cCBhbmQgcnVubmluZyBvbiB0aGUgQWlyb2hhIE5QVS5cIiBOYXR1cmFsbHksIEknZCB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2hlbiB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8sIFwiT2theSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAgdG8gc2VlIHRoZSBzcGVjaWZpY3MuXCIgSSBzdXNwZWN0IGl0IGlzIHRoZSB0cmlnZ2VyIGZvciB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MzcuMzg2NDE3MDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU2OlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcylcXG4gMjU4OlxcdHtcXG4gMjU5OlxcdFxcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XFxuIDI2MDpcXHRcXHR2b2lkIF9faW9tZW0gKmFkZHI7XFxuIDI2MTpcXHRcXHRpbnQgcmV0O1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRzb2MgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gMjY0OlxcdFxcdGlmICghc29jKVxcbiAyNjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbiAyNjg6XFx0XFx0aWYgKElTX0VSUihhZGRyKSlcXG4gMjY5OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFkZHIpO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHQvKiBUcnkgdG8gbG9hZCBmaXJtd2FyZSBpbWFnZXMgdXNpbmcgdGhlIGZpcm13YXJlIG5hbWVzIHByb3ZpZGVkIHZpYVxcbiAyNzI6XFx0XFx0ICogZHRzIGlmIGF2YWlsYWJsZS5cXG4gMjczOlxcdFxcdCAqL1xcbiAyNzQ6XFx0XFx0aWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZmlybXdhcmUtbmFtZVxcXCIsIE5VTEwpKVxcbiAyNzU6XFx0XFx0XFx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZV9mcm9tX2R0cyhkZXYsIGFkZHIsIGJhc2UpO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQvKiBMb2FkIHJ2MzIgbnB1IGZpcm13YXJlICovXFxuIDI3ODpcXHRcXHRyZXQgPSBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBhZGRyLCBzb2MtXFx1MDAzZWZ3X3J2MzIubmFtZSxcXG4gMjc5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzb2MtXFx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xcbiAyODA6XFx0XFx0aWYgKHJldClcXG4gMjgxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdC8qIExvYWQgZGF0YSBucHUgZmlybXdhcmUgKi9cXG4gMjg0OlxcdFxcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBiYXNlICsgUkVHX05QVV9MT0NBTF9TUkFNLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0c29jLVxcdTAwM2Vmd19kYXRhLm5hbWUsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHRcXHRzb2MtXFx1MDAzZWZ3X2RhdGEubWF4X3NpemUpO1xcbiAyODc6XFx0fVxcbiAyODg6XFx0XFxuIDI4OTpcXHRzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IG5wdV9pbnN0YW5jZTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0LyogY2xlYXIgbWJveCBpbnRlcnJ1cHQgc3RhdHVzICovXFxuIDI5NDpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQk9YX0lOVF9TVEFUVVMsXFxuIDI5NTpcXHRcXHRcXHQgICAgIE1CT1hfSU5UX1NUQVRVU19NQVNLKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0LyogYWNrbm93bGVkZ2UgbnB1ICovXFxuIDI5ODpcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlE4X0NUUkwoMyksXFxuIDI5OTpcXHRcXHRcXHRcXHQgICBNQk9YX01TR19TVEFUVVMgfCBNQk9YX01TR19ET05FLCBNQk9YX01TR19ET05FKTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3dkdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMzA1OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MzcuMzg2NTcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM4NzYzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIEFpcm9oYSBOUFUgRHJpdmVyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIGFuZCB0aGUgd2F5IGl0IHVzZXMgYHJlcXVlc3RfZmlybXdhcmVgLiBUaGUgb2J2aW91cyBpc3N1ZSBqdW1wcyBvdXQ6IGlmIHRoZSBmaXJtd2FyZSBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBjYXNlIGluIFN5emthbGxlciB1bmxlc3MgaXQncyBhIHN0YW5kYXJkIGZpcm13YXJlIG9yIGlmIFN5emthbGxlciBzcGVjaWZpY2FsbHkgbW9ja3MgaXQsIHRoZSBmdW5jdGlvbiBmYWlscywgYW5kIHRoZSBwcm9iZSBmYWlscy4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgZmlybXdhcmUgbW9ja2luZywgYnV0IHRoYXQgdGVuZHMgdG8gYmUgbW9yZSBmb3IgY29tbW9uIGRyaXZlcnMuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciwgc3BlY2lmaWMgdG8gdGhlIEFpcm9oYSBFTjc1ODEgU29DLiBNeSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIG9yIGlmIGl0IGhhcyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXMgdGhpcyBgYWlyb2hhX25wdWAgZXZlbiByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVU/XG5cblN5emthbGxlciAqY2FuKiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgYHN5el9nZW5fc3l6X3BsYXRmb3JtX2RldmljZWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLCBidXQgdGhvc2UgcmVxdWlyZSBNTUlPIHJlc291cmNlcywgSVJRcywgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBvZnRlbiwgdGhlc2UgdGhpbmdzIGZhaWwgYXQgdGhlIHByb2JlIHN0YWdlIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBiZWhhdmlvci4gVGhhdCdzIGFzc3VtaW5nIFN5emthbGxlciBldmVuIHN1Y2Nlc3NmdWxseSBzZXRzIHVwIHRoZSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGdldHMgcGFzdCB0aGUgZGV2aWNlLXRyZWUgc3R1ZmYuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgYWlyb2hhX25wdV9wcm9iZWAgaXMgZ29pbmcgdG8gdHJpcCB1cyB1cCBvbiB0aGlzLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cIik7XG5gYGBcblxuQWhhISBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgIGNhbGxzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLCB3aGljaCwgYXMgd2UndmUgYWxyZWFkeSBkaXNjdXNzZWQsIHJlbGllcyBvbiBsb2FkaW5nIHRoZSBmaXJtd2FyZS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSB0aGUgYmxvY2tpbmcgcG9pbnQuIExvb2tzIGxpa2UgdGhpcyBjb3VsZCBlYXNpbHkgYmUgYW5vdGhlciBpbnN0YW5jZSBvZiBhIGRyaXZlciB3aG9zZSBmaXJtd2FyZSBsb2FkaW5nIG1ha2VzIGl0IGEgYmFkIHRhcmdldCBmb3IgZnV6emluZy4gVGltZSB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcHJvYmUgYW5kIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIG9idmlvdXNseSBnb2luZyB0byBibG9jayB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTo0NS4yMjUzMzY4OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSlcXG4gMjEyOlxcdHtcXG4gMjEzOlxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuIDIxNDpcXHRcXHRpbnQgcmV0O1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZmdywgZndfbmFtZSwgZGV2KTtcXG4gMjE3OlxcdFxcdGlmIChyZXQpXFxuIDIxODpcXHRcXHRcXHRyZXR1cm4gcmV0ID09IC1FTk9FTlQgPyAtRVBST0JFX0RFRkVSIDogcmV0O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzZSBmd19tYXhfc2l6ZSkge1xcbiAyMjE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogZncgc2l6ZSB0b28gb3ZlcmxpbWl0ICglenUpXFxcXG5cXFwiLFxcbiAyMjI6XFx0XFx0XFx0XFx0ZndfbmFtZSwgZnctXFx1MDAzZXNpemUpO1xcbiAyMjM6XFx0XFx0XFx0cmV0ID0gLUUyQklHO1xcbiAyMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIyNTpcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdG1lbWNweV90b2lvKGFkZHIsIGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSk7XFxuIDIyODpcXHRvdXQ6XFxuIDIyOTpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjMyOlxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0c3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTo0NS4yMjU0NjgwNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NTk5MTYxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIHRoZSBBaXJvaGEgRmlybXdhcmUgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHRoaXMgQWlyb2hhIGZpcm13YXJlIGlzc3VlLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAsIHdlJ3JlIGdldHRpbmcgYW4gYC1FUFJPQkVfREVGRVJgLiBSaWdodCwgdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBIb3dldmVyLCB0aGUgbmV4dCB0aG91Z2h0IGlzIHRoZSBmaXJtd2FyZSBpdHNlbGYuIFN5emthbGxlciBwcm9iYWJseSBkb2Vzbid0IGhhdmUgdGhlIEFpcm9oYSBmaXJtd2FyZSBiYWtlZCBpbnRvIGl0cyBpbWFnZSwgdW5sZXNzIGl0J3MgYXZhaWxhYmxlIGluIGxpbnV4LWZpcm13YXJlIGFuZCBzeXprYWxsZXIgaXMgY29uZmlndXJlZCB0byBpbmNsdWRlIGl0LiBFdmVuIHRoZW4sIGl0J3MgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIFN5c3RlbS1vbi1hLUNoaXAuXG5cbldhaXQgYSBzZWNvbmQsIHRoaXMgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYGFpcm9oYV9ucHVfc2VuZF9tc2dgLiBUaGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGBhaXJvaGFfbnB1X3BwZV9pbml0YCwgYGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZGAsIGFuZCBwcm9iYWJseSBzb21lIG90aGVycy4gTGV0IG1lIGZpbmQgb3V0IGV4YWN0bHkgKndoZXJlKiBgYWlyb2hhX25wdV9zZW5kX21zZ2AgaXMgYmVpbmcgdXNlZC4gQWgsIGl0J3MgaW4gYGFpcm9oYV9ucHVfcHBlX2luaXRgLCBgYWlyb2hhX25wdV9wcGVfZGVpbml0YCBhbmQgYSBmZXcgb3RoZXJzLiBOb3csIGBhaXJvaGFfbnB1X3BwZV9pbml0YCBnZXRzIGFzc2lnbmVkIHRvIGBucHUtXHUwMDNlb3BzLnBwZV9pbml0YC4gVGhhdCdzIGEgZ29vZCBsZWFkLiBcblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdobyAqYWN0dWFsbHkqIGNhbGxzIGBucHUtXHUwMDNlb3BzLnBwZV9pbml0YD8gVGltZSB0byBkaWcgaW50byBgYWlyb2hhX3BwZS5jYCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6NTYuOTg1Mzg4NTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc0MzM4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTc0PXN0YXRpYyBpbnQgYWlyb2hhX3NldF9tYWNhZGRyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTQxOlxcdGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKGRldiwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTE2MTI9c3RhdGljIGludCBhaXJvaGFfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTY0MjpcXHRlcnIgPSBhaXJvaGFfcHBlX2luaXQoZXRoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE2NDMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg9NzM2PWludCBhaXJvaGFfcHBlX3NldHVwX3RjX2Jsb2NrX2NiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg6NzM3OmludCBhaXJvaGFfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC03Mzgtdm9pZCBhaXJvaGFfcHBlX2RlaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjczOTp2b2lkIGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC03NDAtdTMyIGFpcm9oYV9wcGVfZ2V0X3RvdGFsX251bV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0zMjc9c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA0PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MjEtXFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjI6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIzLVxcdG5wdS1cXHUwMDNlb3BzLnBwZV9kZWluaXQgPSBhaXJvaGFfbnB1X3BwZV9kZWluaXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjQ6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyNS1cXHRucHUtXFx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDM3OlxcdGVyciA9IG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0KG5wdSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM4LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NDctXFx0aWYgKHBwZV9udW1fc3RhdHNfZW50cmllcyBcXHUwMDNlIDApIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NDg6XFx0XFx0ZXJyID0gbnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMobnB1LCBwcGUtXFx1MDAzZWZvZV9zdGF0c19kbWEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDQ5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHBwZV9udW1fc3RhdHNfZW50cmllcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE0OTM9dm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTUxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1MTI6dm9pZCBhaXJvaGFfcHBlX2luaXRfdXBkX21lbShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTU4NT1FWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfcHBlX3B1dF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1ODc6aW50IGFpcm9oYV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjU3Ljg2Mjg0MjY3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODAwODU1MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgZm9yIHRoZSBBaXJvaGEgRU43NTgxIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgYWlyb2hhX3BwZV9pbml0YCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgYnkgYGFpcm9oYV9od19pbml0YCwgd2hpY2ggaW4gdHVybiByZXNpZGVzIGluIGBhaXJvaGFfZXRoLmNgLiBUaGlzIGlzIHRoZSBjb3JlIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHByb2JlZCBlZmZlY3RpdmVseT8gU2luY2UgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5nIGBhaXJvaGEsZW43NTgxLWV0aGAgaXMgY3J1Y2lhbC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogY2FuIFN5emthbGxlciBmdXp6IHRoaXM/IEkga25vdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHBsYXRmb3JtIGRldmljZXMsIGJ1dCBoZXJlJ3MgdGhlIGNhdGNoIOKAkyB0aGlzIGRyaXZlciByZWxpZXMgb24gc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gdGhlIE5QVSBkcml2ZXIuIFRoZSBOUFUgbmVlZHMgdG8gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCAqYmVmb3JlKiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHksIGFuZCB0aGF0IHByb2JlIGRlcGVuZHMgb24gZmlybXdhcmUgYmVpbmcgcHJlc2VudCBhbmQgbG9hZGVkIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbid0IHRoZXJlLCBgYWlyb2hhX25wdV9wcm9iZWAgZWl0aGVyIGRlZmVycyBvciBmYWlscy5cblxuVGhlIGRvd25zdHJlYW0gaW1wYWN0IGlzIGNyaXRpY2FsLiBBIGZhaWx1cmUgaW4gYGFpcm9oYV9ucHVfcHJvYmVgIGxlYWRzIHRvIGEgZmFpbHVyZSBpbiBgYWlyb2hhX25wdV9nZXRgLCB3aGljaCB0aGVuIG1lYW5zIGBhaXJvaGFfcHBlX29mZmxvYWRfc2V0dXBgIGZhaWxzLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYGFpcm9oYV9wcGVfbnB1X2dldGAgdXNlcyBgcmVxdWVzdF9tb2R1bGUoXCJhaXJvaGEtbnB1XCIpYCBhbmQgdGhlbiBjYWxscyBgYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldilgLiBTbywgdGhlIE5QVSBkcml2ZXIgKnNob3VsZCogYmUgbG9hZGVkIGFuZCBwcm9iZWQsIGlmIHRoZSBtb2R1bGUgZXhpc3RzLiBJZiB0aGUgTlBVIGlzbid0IHByb2JlZCwgYGFpcm9oYV9ucHVfZ2V0YCB3aWxsIHJldHVybiBhbiBlcnJvciwgYW5kIHRoaXMgd2lsbCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBmdW5jdGlvbmluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWlyb2hhX25wdV9nZXRgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBUaGlzIGlzIGEgcG90ZW50aWFsIHdlYWtuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNjowNC42NjM3MDA2NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKmFpcm9oYV9ucHVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldilcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuIDYxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbiA2MTQ6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0bnAgPSBvZl9wYXJzZV9waGFuZGxlKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcImFpcm9oYSxucHVcXFwiLCAwKTtcXG4gNjE3OlxcdFxcdGlmICghbnApXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAoIXBkZXYpIHtcXG4gNjIzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiY2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcXFxcblxcXCIsIG5wLVxcdTAwM2VuYW1lKTtcXG4gNjI0OlxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gNjI1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbiA2MjY6XFx0XFx0fVxcbiA2Mjc6XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xcbiA2MzA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBkZXZpY2UgZHJpdmVyIG1vZHVsZVxcXFxuXFxcIik7XFxuIDYzMTpcXHRcXHRcXHRucHUgPSBFUlJfUFRSKC1FTk9ERVYpO1xcbiA2MzI6XFx0XFx0XFx0Z290byBlcnJvcl9wZGV2X3B1dDtcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0bnB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIDYzNjpcXHRcXHRpZiAoIW5wdSkge1xcbiA2Mzc6XFx0XFx0XFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcXG4gNjM4OlxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gNjM5OlxcdFxcdH1cXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfU1VQUExJRVIpKSB7XFxuIDY0MjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDY0MzpcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgbGluayB0byBjb25zdW1lciAlc1xcXFxuXFxcIixcXG4gNjQ0OlxcdFxcdFxcdFxcdGRldl9uYW1lKGRldikpO1xcbiA2NDU6XFx0XFx0XFx0bnB1ID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gNjQ2OlxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gNjQ3OlxcdFxcdH1cXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0cmV0dXJuIG5wdTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MDQuNjYzNzgyMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMTA1Nzc0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgRmlybXdhcmUgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHRvIGdldCBgYWlyb2hhX25wdV9nZXRgIHdvcmtpbmcsIEkgbmVlZCBhIGRldmljZSBub2RlIHdpdGggdGhlIGBhaXJvaGEsbnB1YCBwaGFuZGxlLCBhbmQgdGhlIE5QVSBkcml2ZXIgaGFzIHRvIGJlIHVwIGFuZCBydW5uaW5nLiBUaGF0IG1lYW5zIGBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KWAgY2FuJ3QgYmUgTlVMTC4gRm9yIHRoZSBOUFUgZHJpdmVyIHRvIGFjdHVhbGx5IHByb2JlIGNvcnJlY3RseSwgaXQgbmVlZHMgdGhlIGZpcm13YXJlLiBBbmQsIG9mIGNvdXJzZSwgc3l6a2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZmlybXdhcmUgYXZhaWxhYmxlLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgcHJvYmUgdG8gZmFpbCByaWdodCBhd2F5LiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBtb2NrIHRoZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBnb2VzIG9uIHRvIGRvIHRoaW5ncyB0aGF0IHN1Z2dlc3QgYSBmdWxseSBvcGVyYXRpb25hbCBOUFUgaXMgcmVxdWlyZWQsIGxpa2Ugd3JpdGluZyB0byByZWdpc3RlcnMgdXNpbmcgYHJlZ21hcF93cml0ZWA6XG5cbmBgYGNcblx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSwgLi4uKTtcblx0bXNsZWVwKDEwMCk7XG5cdC8qIGVuYWJsZSBOUFUgY29yZXMgKi9cblx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0NPTkZJRywgMHhmZik7XG5cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpO1xuXHRtc2xlZXAoMTAwKTtcbmBgYFxuXG5UaGVuLCB0aGUgZHJpdmVyIHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIE5QVS4gVGhpcyBsb29rcyBhIGJpdCBpbnZvbHZlZDpcblxuYGBgY1xuXHRpZiAoIWFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KG5wdSwgMCwgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OLFxuXHRcdFx0XHQgICAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIEdGUF9LRVJORUwpKVxuXHRcdGRldl9pbmZvKGRldiwgXCJOUFUgdmVyc2lvbjogJWQuJWRcXG5cIiwgdmFsIFx1MDAzZVx1MDAzZSAxNiwgdmFsIFx1MDAyNiAweGZmZmYpO1xuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gYGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0YCBjYWxscyBgYWlyb2hhX25wdV9zZW5kX21zZ2AhIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBtb2RpZmllZCBpbiB0aGUgcGF0Y2ghIE9rYXksIEkgbmVlZCB0byByZXZpc2l0IGBhaXJvaGFfbnB1X3NlbmRfbXNnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNjoxMi45NzQzNjE5ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjMsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjM6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxcbiAxNjU6XFx0e1xcbiAxNjY6XFx0XFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbiAxNjc6XFx0XFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbiAxNjg6XFx0XFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4gMTY5OlxcdFxcdHZvaWQgKmRtYV9idWY7XFxuIDE3MDpcXHRcXHRpbnQgcmV0O1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHQvKlxcbiAxNzM6XFx0XFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgc21hbGwgYW5kIGJpZGlyZWN0aW9uYWwgKENQVSBzZXRzIHRoZVxcbiAxNzQ6XFx0XFx0ICogcmVxdWVzdCwgTlBVIHdyaXRlcyB0aGUgcmVzcG9uc2UpLiBTdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUxcXG4gMTc1OlxcdFxcdCAqIG1hcHBpbmcgcmVncmVzc2VzIEVONzU4MStNVDc5OTY6IE1CT1ggcmVwb3J0cyBzdWNjZXNzIGJ1dFxcbiAxNzY6XFx0XFx0ICogV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OIHN0aWxsIHJlYWRzIGFzIDAuMC4gVXNlIGFcXG4gMTc3OlxcdFxcdCAqIGNvaGVyZW50IGJvdW5jZSBidWZmZXIgc28gdGhlIENQVSBhbHdheXMgc2VlcyB0aGUgTlBVIHJlc3BvbnNlLlxcbiAxNzg6XFx0XFx0ICovXFxuIDE3OTpcXHRcXHRkbWFfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KG5wdS1cXHUwMDNlZGV2LCBzaXplLCBcXHUwMDI2ZG1hX2FkZHIsIEdGUF9BVE9NSUMpO1xcbiAxODA6XFx0XFx0aWYgKCFkbWFfYnVmKVxcbiAxODE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4gMTg4OlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSArIG9mZnNldCwgc2l6ZSk7XFxuIDE4OTpcXHRcXHRyZWdtYXBfcmVhZChucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgXFx1MDAyNnZhbCk7XFxuIDE5MDpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xcbiAxOTE6XFx0XFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xcbiAxOTI6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDMpICsgb2Zmc2V0LCB2YWwpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKG5wdS1cXHUwMDNlcmVnbWFwLFxcbiAxOTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUkVHX0NSX01CUTBfQ1RSTCgzKSArIG9mZnNldCxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbCwgKHZhbCBcXHUwMDI2IE1CT1hfTVNHX0RPTkUpLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMTAwLCAxMDAgKiBNU0VDX1BFUl9TRUMpO1xcbiAxOTg6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxcbiAxOTk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdGlmICghcmV0KVxcbiAyMDQ6XFx0XFx0XFx0bWVtY3B5KHAsIGRtYV9idWYsIHNpemUpO1xcbiAyMDU6XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQobnB1LVxcdTAwM2VkZXYsIHNpemUsIGRtYV9idWYsIGRtYV9hZGRyKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MTIuOTc0NDQ1NjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODYyMzIzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQWlyb2hhIE5QVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGludm9sdmUgd3JpdGluZyB0byBNTUlPIHJlZ2lzdGVycywgdGhlbiB3YWl0aW5nIGZvciBhIHNwZWNpZmljIGJpdCwgYE1CT1hfTVNHX0RPTkVgLCB0byBiZSBzZXQuIFRoZSBpc3N1ZSBpcywgdGhpcyBkcml2ZXIgaXMgdGllZCB0byB0aGUgQWlyb2hhIEVONzU4MSBoYXJkd2FyZSwgb3IgYXQgbGVhc3QgYSBzcGVjaWZpYyBlbXVsYXRvciB0aGF0J3Mgbm90IHN0YW5kYXJkIGluIFFFTVUuIElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGUgcG9sbGluZyBmdW5jdGlvbiB3aWxsIHRpbWUgb3V0LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IHN5emthbGxlciwgd2l0aCBpdHMgTU1JTyByZWFkL3dyaXRlIGluamVjdGlvbiwgbWlnaHQgc29tZWhvdyBnZXQgYXJvdW5kIHRoaXMuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2Ugc3l6a2FsbGVyIGNvdWxkIGluamVjdCBhIHBsYXRmb3JtIGRldmljZSwgbWFwIHRoZSBNTUlPIHJlZ2lvbiB0byBkdW1teSBtZW1vcnksIGFuZCBwb3RlbnRpYWxseSB0cmljayB0aGUgZHJpdmVyIGludG8gcmVhZGluZyBhIHZhbHVlIHdpdGggYE1CT1hfTVNHX0RPTkVgIHNldC4gQnV0IHRoZW4sIHRoZXJlJ3MgdGhlIGZpcm13YXJlIGxvYWRpbmcgaXNzdWUuIFRoZSBgYWlyb2hhX25wdV9wcm9iZWAgcm91dGluZSBjYWxscyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCBjYWxscyBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gQW5kIGNydWNpYWxseSwgdGhpcyB1c2VzIGByZXF1ZXN0X2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscyB3aXRoIGAtRU5PRU5UYCwgd2hpY2ggbGVhZHMgdG8gYC1FUFJPQkVfREVGRVJgIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciBjYW4ndCBwcm92aWRlIHRoZSBmaXJtd2FyZSB1bmxlc3MgaXQncyBpbiB0aGUgaW1hZ2UuIFRoZXJlJ3Mgbm8gd2F5IHRvIGJ5cGFzcyB0aGlzIGZpcm13YXJlIGxvYWRpbmcgc3RlcC5cblxuSSBjaGVja2VkIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgIHRvIGNvbmZpcm0gdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAgdGhlbiBpdCByZXR1cm5zIGAtRVBST0JFX0RFRkVSYC5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGlmIGEgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBlbXVsYXRpb24gbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUuIEl0IGFsc28gZXhwbGljaXRseSBsaXN0cyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgYXMgZXhhbXBsZXMgb2YgY29kZSBub3Qgd29ydGggZnV6emluZywgYW5kIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZpcnR1YWwgQWlyb2hhIE5QVSBkcml2ZXIsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRoaXMgY29kZSB3b3VsZCBiZSB1c2VkIGFueXdoZXJlIGVsc2UuIEl0J3MgdXNlZCBieSBgYWlyb2hhX2V0aGAsIHdoaWNoIGlzIGFub3RoZXIgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVONzU4MSBldGhlcm5ldCBoYXJkd2FyZS4gVGhlc2UgYXJlIGFsbCBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIHRoZSBhbmdsZXMsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIG1lYW5pbmdmdWxseSBmdXp6IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgYW5kIHRoYXQncyB0aGUgZGVjaWRpbmcgZmFjdG9yLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMTEsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MjUuODM2NzcyMDY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1haWxib3ggY29tbXVuaWNhdGlvbiBsb2dpYyBpbiB0aGUgQWlyb2hhIEVONzU4MS9BTjc1ODMgTlBVIGRyaXZlciAoYWlyb2hhX25wdSkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBuZXR3b3JraW5nIFNvQyBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBmaXJtd2FyZSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mx2f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 07:30:34 +0000 UTC FinishedAt: 2026-08-05 08:16:27 +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+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmQyZjZjOWMwODRiODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXG5AQCAtMTY2LDEyICYjNDM7MTY2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbiBcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbiBcdHUzMiB2YWwsIG9mZnNldCA9IGNvcmUgXHUwMDNjXHUwMDNjIDQ7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHZvaWQgKmRtYV9idWY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4tXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXHUwMDNlZGV2LCBkbWFfYWRkcik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgc21hbGwgYW5kIGJpZGlyZWN0aW9uYWwgKENQVSBzZXRzIHRoZVxuJiM0MztcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4mIzQzO1x0ICogbWFwcGluZyByZWdyZXNzZXMgRU43NTgxJiM0MztNVDc5OTY6IE1CT1ggcmVwb3J0cyBzdWNjZXNzIGJ1dFxuJiM0MztcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXG4mIzQzO1x0ICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBcdTAwMjZkbWFfYWRkciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFkbWFfYnVmKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gXG5AQCAtMTkxLDcgJiM0MzsyMDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XG4mIzQzO1x0ZG1hX2ZyZWVfY29oZXJlbnQobnB1LVx1MDAzZWRldiwgc2l6ZSwgZG1hX2J1ZiwgZG1hX2FkZHIpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwppbmRleCBiNjc5YmVkOTUyZGUzLi5kMmY2YzljMDg0Yjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKQEAgLTE2NiwxMiAmIzQzOzE2NiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCiAJdTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqLwogCXUzMiB2YWwsIG9mZnNldCA9IGNvcmUgJmx0OyZsdDsgNDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl2b2lkICpkbWFfYnVmOwogCWludCByZXQ7CiAKLQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS0mZ3Q7ZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IobnB1LSZndDtkZXYsIGRtYV9hZGRyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkvKgomIzQzOwkgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBzbWFsbCBhbmQgYmlkaXJlY3Rpb25hbCAoQ1BVIHNldHMgdGhlCiYjNDM7CSAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMCiYjNDM7CSAqIG1hcHBpbmcgcmVncmVzc2VzIEVONzU4MSYjNDM7TVQ3OTk2OiBNQk9YIHJlcG9ydHMgc3VjY2VzcyBidXQKJiM0MzsJICogV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OIHN0aWxsIHJlYWRzIGFzIDAuMC4gVXNlIGEKJiM0MzsJICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuCiYjNDM7CSAqLwomIzQzOwlkbWFfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KG5wdS0mZ3Q7ZGV2LCBzaXplLCAmYW1wO2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKJiM0MzsJaWYgKCFkbWFfYnVmKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1lbWNweShkbWFfYnVmLCBwLCBzaXplKTsKIAogCXNwaW5fbG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiAKQEAgLTE5MSw3ICYjNDM7MjAwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwogCi0JZG1hX3VubWFwX3NpbmdsZShucHUtJmd0O2RldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQltZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7CiYjNDM7CWRtYV9mcmVlX2NvaGVyZW50KG5wdS0mZ3Q7ZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7CiAKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1haWxib3ggUGF5bG9hZCBBbGxvY2F0aW9uIENoYW5nZSBpbiB0aGUgYWlyb2hhX25wdSBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGFpcm9oYV9ucHVfc2VuZF9tc2dgLCB3aGVyZSB0aGV5JiMzOTtyZSBzd2FwcGluZyBvdXQgYGRtYV9tYXBfc2luZ2xlYCBmb3IgYGRtYV9hbGxvY19jb2hlcmVudGAgd2hlbiBkZWFsaW5nIHdpdGggdGhlIG1haWxib3ggcGF5bG9hZHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doeSB0aGUgY2hhbmdlPyYjMzQ7LiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYWRkcmVzc2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBvciBwb3NzaWJseSBmaXhpbmcgYSBwb3RlbnRpYWwgY29oZXJlbmN5IHByb2JsZW0/IEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gY2hlY2sgd2hhdCB0aGUgZHJpdmVyIGFjdHVhbGx5ICppcyouIFRoaXMgaXMgYW4gYGFpcm9oYV9ucHVgIGRyaXZlciwgd2hpY2ggdG8gbXkga25vd2xlZGdlIGlzIGZhaXJseSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gY2hpcHNldC4gSSB3b25kZXIgd2hhdCB0aGUgcGFydGljdWxhciByb2xlIG9mIHRoaXMgYG5wdWAgaXMgaW4gdGhlIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyBhbiBvZmZsb2FkIGVuZ2luZT8KCkkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcmVhbGx5IGRpZyBpbnRvIHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIE1heWJlIGV2ZW4gc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzIGZvciByZWxldmFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgdG8gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGhhcmR3YXJlIHRoaXMgaXMgZGVzaWduZWQgZm9yLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG1haWxib3ggY2hhbmdlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHNhZmUgYW5kIGlzIGJlaW5nIGRvbmUgZm9yIGEgZ29vZCByZWFzb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgJiM0Mzs9IGFpcm9oYV9wcGVfZGVidWdmcy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICYjNDM7PSBhaXJvaGFfbnB1Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oPTY0NT1zdHJ1Y3QgYWlyb2hhX2V0aCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC02NTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjY1MzpcdHN0cnVjdCBhaXJvaGFfbnB1IF9fcmN1ICpucHU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTY1NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTEwNT1lbnVtIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTEwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTEwOnN0cnVjdCBhaXJvaGFfbnB1X2Z3IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTExLVx0Y29uc3QgY2hhciAqbmFtZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE1OnN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE2Olx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfcnYzMjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTE3Olx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTE4LX07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0xNTY9c3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE2Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTYzOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTY0LVx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTIwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjEwOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yMTEtXHRcdFx0XHQgICAgY29uc3QgY2hhciAqZndfbmFtZSwgaW50IGZ3X21heF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjM0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjM1OmFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZV9mcm9tX2R0cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYWRkcixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjM2LVx0XHRcdFx0ICB2b2lkIF9faW9tZW0gKmJhc2UpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI0NjpcdHJldCA9IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGFkZHIsIGZ3X25hbWVzWzBdLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDctXHRcdFx0XHQgICAgICAgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjUxOlx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGJhc2UgJiM0MzsgUkVHX05QVV9MT0NBTF9TUkFNLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTItXHRcdFx0XHRcdGZ3X25hbWVzWzFdLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNTY6c3RhdGljIGludCBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqYmFzZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU3LVx0XHRcdFx0ICAgc3RydWN0IHJlc291cmNlICpyZXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1OC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1OTpcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI2MC1cdHZvaWQgX19pb21lbSAqYWRkcjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3NC1cdGlmIChvZl9maW5kX3Byb3BlcnR5KGRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtmaXJtd2FyZS1uYW1lXCYjMzQ7LCBOVUxMKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjc1Olx0XHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlX2Zyb21fZHRzKGRldiwgYWRkciwgYmFzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjc3LVx0LyogTG9hZCBydjMyIG5wdSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNzg6XHRyZXQgPSBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBhZGRyLCBzb2MtXHUwMDNlZndfcnYzMi5uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzktXHRcdFx0XHQgICAgICAgc29jLVx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjgzLVx0LyogTG9hZCBkYXRhIG5wdSBmaXJtd2FyZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyODQ6XHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYmFzZSAmIzQzOyBSRUdfTlBVX0xPQ0FMX1NSQU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4NS1cdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubmFtZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjg5OnN0YXRpYyBpcnFyZXR1cm5fdCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpucHVfaW5zdGFuY2UpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI5MC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI5MTpcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBucHVfaW5zdGFuY2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI5Mi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzA0OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDY6XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDc6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDgtXHR2b2lkICpkdW1wO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMTI6XHRjb3JlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUsIHdkdF93b3JrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzEzLVx0bnB1ID0gY29yZS1cdTAwM2VucHU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjMyNzpzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV93ZHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpjb3JlX2luc3RhbmNlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjk6XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gY29yZV9pbnN0YW5jZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzMwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGNvcmUtXHUwMDNlbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMzEtXHRpbnQgYyA9IGNvcmUgLSBcdTAwMjZucHUtXHUwMDNlY29yZXNbMF07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM0MjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzU2Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM1Ny1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzY0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mzc1Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3Ni1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozODI6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgzLVx0XHRcdFx0XHQgICAgIGRtYV9hZGRyX3QgZm9lX2FkZHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM5OTpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MDAtXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDA2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNy1cdFx0XHRcdCAgICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0MjQ6XHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDI1LVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQzMzpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MzQtXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDQxOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDQyLVx0XHRcdFx0ICAgICAgZG1hX2FkZHJfdCBmb2Vfc3RhdHNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDU2Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1Ny1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NzI6c3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MzpcdFx0XHRcdCAgICBlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGZ1bmNfaWQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ3NC1cdFx0XHRcdCAgICB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4sIGdmcF90IGdmcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ4OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDg5Olx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDkwLVx0a2ZyZWUod2xhbl9kYXRhKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ5NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDk1OnN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ5NjpcdFx0XHRcdCAgIGVudW0gYWlyb2hhX25wdV93bGFuX2dldF9jbWQgZnVuY19pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk3LVx0XHRcdFx0ICAgdm9pZCAqZGF0YSwgaW50IGRhdGFfbGVuLCBnZnBfdCBnZnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUxMTpcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUxMi1cdGlmICghZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NTE5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTIwOmFpcm9oYV9ucHVfd2xhbl9zZXRfcmVzZXJ2ZWRfbWVtb3J5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUyMS1cdFx0XHRcdCAgICBpbnQgaWZpbmRleCwgY29uc3QgY2hhciAqbmFtZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTIyOlx0XHRcdFx0ICAgIGVudW0gYWlyb2hhX25wdV93bGFuX3NldF9jbWQgZnVuY19pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzNC1cdHZhbCA9IHJlcy5zdGFydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTM1Olx0cmV0dXJuIGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZChucHUsIGlmaW5kZXgsIGZ1bmNfaWQsIFx1MDAyNnZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTM2LVx0XHRcdFx0XHRzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzOTpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NDAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NDE6XHRlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9OUFVfQkFORDBfT05DUFU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0Mi1cdHUzMiB2YWwgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NDU6XHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAxLCBjbWQsIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0Ni1cdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1MC1cdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9UWF9CVUZfQ0hFQ0tfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTUxOlx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcJiMzNDt0eC1idWZpZFwmIzM0OywgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTUyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1NS1cdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9QS1RfQlVGX0FERFI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU1NjpcdGVyciA9IGFpcm9oYV9ucHVfd2xhbl9zZXRfcmVzZXJ2ZWRfbWVtb3J5KG5wdSwgMCwgXCYjMzQ7cGt0XCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NTctXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTYwLVx0Y21kID0gV0xBTl9GVU5DX1NFVF9XQUlUX1RYX1BLVF9CVUZfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTYxOlx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcJiMzNDt0eC1wa3RcJiMzNDssIGNtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU2Mi1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjctXHRcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9EUkFNX0JBX05PREVfQUREUjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTY4Olx0XHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFwmIzM0O2JhXCYjMzQ7LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjktXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzMtXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfSVNfRk9SQ0VfVE9fQ1BVO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NzQ6XHRyZXR1cm4gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKG5wdSwgMCwgY21kLCBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzUtXHRcdFx0XHRcdEdGUF9LRVJORUwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Nzg6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHFpZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc5LVx0XHRcdFx0XHQgIGJvb2wgeG1pdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTg3OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01ODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1OTI6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU5My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01OTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjYwMDpzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjAxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjA1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjA2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjEwOnN0cnVjdCBhaXJvaGFfbnB1ICphaXJvaGFfbnB1X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYxMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02MTMtXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2MTQ6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NTg6RVhQT1JUX1NZTUJPTF9HUEwoYWlyb2hhX25wdV9nZXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2MDp2b2lkIGFpcm9oYV9ucHVfcHV0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY2MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjQtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NjU6RVhQT1JUX1NZTUJPTF9HUEwoYWlyb2hhX25wdV9wdXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgZW43NTgxX25wdV9zb2NfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjY4LVx0LmZ3X3J2MzIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgYW43NTgzX25wdV9zb2NfZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjc5LVx0LmZ3X3J2MzIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY4OTpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbnB1X21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5MC1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsZW43NTgxLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTMtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njk0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9ucHVfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA0OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDYtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA3Olx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA4LVx0c3RydWN0IHJlc291cmNlIHJlcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyMS1cdG5wdS1cdTAwM2VkZXYgPSBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyMjpcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjM6XHRucHUtXHUwMDNlb3BzLnBwZV9kZWluaXQgPSBhaXJvaGFfbnB1X3BwZV9kZWluaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNDpcdG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI1Olx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjY6XHRucHUtXHUwMDNlb3BzLnBwZV9mb2VfY29tbWl0X2VudHJ5ID0gYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Mjc6XHRucHUtXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyODpcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI5Olx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMwOlx0bnB1LVx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzE6XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjczMjpcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX2dldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMzOlx0bnB1LVx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzM0Olx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjc0ODpcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NDktXHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NTMtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjc1NDpcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NjM6XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc2NC1cdFx0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7YWlyb2hhLW5wdS13ZHRcJiMzNDssIGNvcmUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Njg6XHRcdElOSVRfV09SSyhcdTAwMjZjb3JlLVx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzY5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3ODQ6XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc4NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgwNTpcdGlmICghYWlyb2hhX25wdV93bGFuX21zZ19nZXQobnB1LCAwLCBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgwNi1cdFx0XHRcdCAgICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgxNTpzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTYte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MTc6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxOC1cdGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjQ6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyNTpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyNjpcdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI4LVx0XHQubmFtZSA9IFwmIzM0O2Fpcm9oYS1ucHVcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgyOTpcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX25wdV9tYXRjaCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMwLVx0fSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMxLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjgzMjptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGFpcm9oYV9ucHVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjAzPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdF9lbnRyeV9yZXNldChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MDQ6XHRcdFx0XHRcdFx0IHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTYwNS1cdFx0XHRcdFx0XHQgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjExPXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfcmVzZXQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjEyOlx0XHRcdFx0XHQgICAgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjEzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTYyND1zdGF0aWMgdm9pZCBhaXJvaGFfcHBlX2ZvZV9mbG93X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MjU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjI2LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZm9lX2VudHJ5ICpod2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz03NjE9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc2OC1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBwcGUtXHUwMDNlZXRoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3Njk6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03NzAtXHRpbnQgZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEyOTc9dm9pZCBhaXJvaGFfcHBlX2ZvZV9lbnRyeV9nZXRfc3RhdHMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzAxLVx0aW50IHBwZV9udW1fc3RhdHNfZW50cmllcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTMwMjpcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzMDMtXHR1MzIgaW5kZXg7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMzc1PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEzOTM6c3RhdGljIHN0cnVjdCBhaXJvaGFfbnB1ICphaXJvaGFfcHBlX25wdV9nZXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjEzOTU6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk4LVx0XHRyZXF1ZXN0X21vZHVsZShcJiMzNDthaXJvaGEtbnB1XCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5OTpcdFx0bnB1ID0gYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0Mjkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDMwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGFpcm9oYV9wcGVfbnB1X2dldChldGgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDMxLVx0c3RydWN0IGFpcm9oYV9wcGUgKnBwZSA9IGV0aC1cdTAwM2VwcGU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDYyLWVycm9yX25wdV9wdXQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NjM6XHRhaXJvaGFfbnB1X3B1dChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDY0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTY1OD12b2lkIGFpcm9oYV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NTkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjYwOlx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTY2MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NjgtXHRcdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjY5Olx0XHRhaXJvaGFfbnB1X3B1dChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjcwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBhaXJvaGFfbnB1YCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9ucHVgIGRyaXZlci4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlICYjMzQ7YWlyb2hhLGVuNzU4MS1ucHUmIzM0OyBhbmQgJiMzNDthaXJvaGEsYW43NTgzLW5wdSYjMzQ7IFNvQ3MuIEFpcm9oYSwgYmVpbmcgYSBNZWRpYVRlayBzdWJzaWRpYXJ5LCB0eXBpY2FsbHkgbWVhbnMgbmV0d29ya2luZyBTb0NzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgJiMzNDtDYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/JiMzNDsgUGxhdGZvcm0gZHJpdmVycyBmb3Igc3BlY2lhbGl6ZWQgbmV0d29ya2luZyBTb0NzIGxpa2UgdGhlIEVONzU4MSBvZnRlbiBkb24mIzM5O3Qgd29yayB3aXRob3V0IGEgc3BlY2lmaWMgUUVNVSBtYWNoaW5lIHR5cGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgb25lIGlzIGFuIGV4Y2VwdGlvbi4KCldhaXQgYSBzZWNvbmQsIHRoZXJlJiMzOTtzIGEgZ3VpZGVsaW5lIGhlcmUuIEl0IHNheXMgdG8gbWFyayBwYXRjaGVzIGFzICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhleSBpbmNsdWRlIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgb3IgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIGFuZCBHUFVzIHNwZWNpZmljYWxseS4gSG1tLi4uIGlzIGBhaXJvaGFfbnB1YCBpbiB0aGF0IGNhdGVnb3J5PyBJdCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy4KClNvLCAqY291bGQqIGl0IGJlIGZ1enplZCB1c2luZyBzeXprYWxsZXI/IFN5emthbGxlciBjYW4gZ2VuZXJhdGUgcGxhdGZvcm0gZGV2aWNlcywgZWl0aGVyIGRpcmVjdGx5IHRocm91Z2ggY2FsbHMgbGlrZSBgc3l6X2dlbl9zeXpfcGxhdGZvcm1fZGV2aWNlYCBvciBieSB0d2Vha2luZyB0aGUgZGV2aWNlIHRyZWUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24uIEJ1dCBoZXJlJiMzOTtzIHRoZSBraWNrZXI6IHRoaXMgZHJpdmVyIHNlZW1zIHRvIG5lZWQgc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMgYW5kIGZpcm13YXJlIGxvYWRpbmcgdmlhIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLiBUaGF0IHJhaXNlcyBzb21lIGZsYWdzLiBJIG5lZWQgdG8gZGlnIGludG8gYGFpcm9oYV9ucHVfcHJvYmVgIG5vdyB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZz8gVGhpcyBtaWdodCBub3QgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSBtb3JlIGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX25wdV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02OTY9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcwNDpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgyND1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI1Olx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI2LVx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBleGFtaW5lIGBhaXJvaGFfbnB1X3Byb2JlYDoKCioqQW5hbHl6aW5nIGBhaXJvaGFfbnB1X3Byb2JlYCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uIG9mIGBhaXJvaGFfbnB1X3Byb2JlYC4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gaW1tZWRpYXRlbHkgYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHByb2Jpbmcgb3IgZGV0ZWN0aW5nIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiBhbiBOUFUgKE5ldXJhbCBQcm9jZXNzaW5nIFVuaXQpIHdpdGhpbiBhIHN5c3RlbSwgc3BlY2lmaWNhbGx5IG9uZSBsaWtlbHkgbWFudWZhY3R1cmVkIGJ5IEFpcm9oYS4gVGhlICYjMzQ7cHJvYmUmIzM0OyBwYXJ0IGlzIHByZXR0eSBjbGVhciDigJMgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uLCBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIG9yIHJlYWQgaGFyZHdhcmUgcmVnaXN0ZXJzLCBwZXJoYXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dDoKCiogICAqKldoYXQgdHJpZ2dlcnMgdGhpcyBwcm9iZT8qKiBJcyBpdCBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgbW9kdWxlIGxvYWRpbmcsIG9yIGluIHJlc3BvbnNlIHRvIGEgc3BlY2lmaWMgZXZlbnQ/IFRoZSB0aW1pbmcgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGl0cyBwdXJwb3NlLgoqICAgKipXaGF0IGRvZXMgaXQgKmRvKj8qKiBEb2VzIGl0IHNpbXBseSBjaGVjayBmb3IgdGhlIE5QVSYjMzk7cyBleGlzdGVuY2U/IERvZXMgaXQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgY29uZmlndXJlIGl0IHdpdGggYW55IHNwZWNpZmljIHNldHRpbmdzIG9yIHBhcmFtZXRlcnM/IERvZXMgaXQgcmVnaXN0ZXIgdGhlIE5QVSB3aXRoIHRoZSBvcGVyYXRpbmcgc3lzdGVtPyBUaGlzIGlzIGNydWNpYWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcywgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbnMsIGFuZCBhbnkgY2FsbHMgdG8gaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzLgoqICAgKipXaGF0JiMzOTtzIHRoZSBkYXRhIGZsb3c/KiogV2hhdCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwYXNzZWQgdG8gYW5kIGZyb20gdGhpcyBwcm9iZSBmdW5jdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZXNwb25zaWJpbGl0aWVzLiBBcmUgdGhlcmUgYW55IGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXM/IEhvdyBkb2VzIGl0IHJlcG9ydCBpdHMgZmluZGluZ3MgKHN1Y2Nlc3MvZmFpbHVyZSwgZGV2aWNlIGluZm9ybWF0aW9uKT8KKiAgICoqV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcz8qKiBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgcGVyaXBoZXJhbHMsIG90aGVyIGRyaXZlcnMsIG9yIHN5c3RlbSBzZXJ2aWNlcz8gSWRlbnRpZnlpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uCiogICAqKldoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8qKiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZXNlIHNjZW5hcmlvcz8gVW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgZXJyb3JzIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LgoqICAqKldoYXQgd291bGQgSSBleHBlY3QgdG8gc2VlIGluIHRlcm1zIG9mIGFuIG92ZXJhbGwgZGVzaWduPyoqIEdpdmVuIHRoYXQgdGhpcyBpcyBhbiBOUFUgcHJvYmUsIEkgd291bGQgZXhwZWN0IHRvIHNlZSBhIGNhcmVmdWxseSBkZXNpZ25lZCBzZXF1ZW5jZSBvZiBzdGVwcyB0aGF0IHdpbGwgZW51bWVyYXRlIHRoZSBoYXJkd2FyZSBhbmQgdGhlbiBicmluZyBpdCBpbnRvIGEgJiMzOTtyZWFkeSYjMzk7IHN0YXRlIGZvciBvcGVyYXRpb25zIHRvIGZvbGxvdy4KCkkmIzM5O20gcmVhZHkgdG8gZGlnIGluIGFuZCBzdGFydCBhbmFseXppbmcgdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzA0Olx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzA1Olx0e1xuIDcwNjpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzA3Olx0XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuIDcwODpcdFx0c3RydWN0IHJlc291cmNlIHJlcztcbiA3MDk6XHRcdHZvaWQgX19pb21lbSAqYmFzZTtcbiA3MTA6XHRcdGludCBpLCBpcnEsIGVycjtcbiA3MTE6XHRcdHUzMiB2YWw7XG4gNzEyOlx0XG4gNzEzOlx0XHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDcxNDpcdFx0aWYgKElTX0VSUihiYXNlKSlcbiA3MTU6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XG4gNzE2Olx0XG4gNzE3Olx0XHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xuIDcxODpcdFx0aWYgKCFucHUpXG4gNzE5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDcyMDpcdFxuIDcyMTpcdFx0bnB1LVx1MDAzZWRldiA9IGRldjtcbiA3MjI6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuIDcyMzpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xuIDcyNDpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuIDcyNTpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuIDcyNjpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcbiA3Mjc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9pbml0X3Jlc2VydmVkX21lbW9yeSA9IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeTtcbiA3Mjg6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbiA3Mjk6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XG4gNzMwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X3F1ZXVlX2FkZHIgPSBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQ7XG4gNzMxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG4gNzMyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XG4gNzMzOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZW5hYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlO1xuIDczNDpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuIDczNTpcdFxuIDczNjpcdFx0bnB1LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFx1MDAyNnJlZ21hcF9jb25maWcpO1xuIDczNzpcdFx0aWYgKElTX0VSUihucHUtXHUwMDNlcmVnbWFwKSlcbiA3Mzg6XHRcdFx0cmV0dXJuIFBUUl9FUlIobnB1LVx1MDAzZXJlZ21hcCk7XG4gNzM5Olx0XG4gNzQwOlx0XHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuIDc0MTpcdFx0aWYgKGVycilcbiA3NDI6XHRcdFx0cmV0dXJuIGVycjtcbiA3NDM6XHRcbiA3NDQ6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4gNzQ1Olx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc0NjpcdFx0XHRyZXR1cm4gaXJxO1xuIDc0NzpcdFxuIDc0ODpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXG4gNzQ5Olx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4gNzUwOlx0XHRpZiAoZXJyKVxuIDc1MTpcdFx0XHRyZXR1cm4gZXJyO1xuIDc1MjpcdFxuIDc1MzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc1NDpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc1NTpcdFxuIDc1NjpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb3JlLVx1MDAzZWxvY2spO1xuIDc1NzpcdFx0XHRjb3JlLVx1MDAzZW5wdSA9IG5wdTtcbiA3NTg6XHRcbiA3NTk6XHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICYjNDM7IDEpO1xuIDc2MDpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc2MTpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzYyOlx0XG4gNzYzOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG4gNzY0Olx0XHRcdFx0XHQgICAgICAgSVJRRl9TSEFSRUQsIFwmIzM0O2Fpcm9oYS1ucHUtd2R0XCYjMzQ7LCBjb3JlKTtcbiA3NjU6XHRcdFx0aWYgKGVycilcbiA3NjY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDc2NzpcdFxuIDc2ODpcdFx0XHRJTklUX1dPUksoXHUwMDI2Y29yZS1cdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XG4gNzY5Olx0XHR9XG4gNzcwOlx0XG4gNzcxOlx0XHQvKiB3bGFuIElSUSBsaW5lcyAqL1xuIDc3MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlaXJxcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzczOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3JlcykgJiM0MzsgMSk7XG4gNzc0Olx0XHRcdGlmIChpcnEgXHUwMDNjIDApXG4gNzc1Olx0XHRcdFx0cmV0dXJuIGlycTtcbiA3NzY6XHRcbiA3Nzc6XHRcdFx0bnB1LVx1MDAzZWlycXNbaV0gPSBpcnE7XG4gNzc4Olx0XHR9XG4gNzc5Olx0XG4gNzgwOlx0XHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcbiA3ODE6XHRcdGlmIChlcnIpXG4gNzgyOlx0XHRcdHJldHVybiBlcnI7XG4gNzgzOlx0XG4gNzg0Olx0XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gNzg1Olx0XHRpZiAoZXJyKVxuIDc4NjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuIDc4NzpcdFxuIDc4ODpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcbiA3ODk6XHRcdFx0ICAgICByZXMuc3RhcnQgJiM0MzsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbiA3OTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMSksIDB4NDAwMDApOyAvKiBTUkFNIDI1NksgKi9cbiA3OTE6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xuIDc5MjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XG4gNzkzOlx0XHRtc2xlZXAoMTAwKTtcbiA3OTQ6XHRcbiA3OTU6XHRcdC8qIHNldHRpbmcgYm9vdGluZyBhZGRyZXNzICovXG4gNzk2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUFVfTlVNX0NPUkVTOyBpJiM0MzsmIzQzOylcbiA3OTc6XHRcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0JBU0UoaSksIHJlcy5zdGFydCk7XG4gNzk4Olx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gNzk5Olx0XG4gODAwOlx0XHQvKiBlbmFibGUgTlBVIGNvcmVzICovXG4gODAxOlx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfQ09ORklHLCAweGZmKTtcbiA4MDI6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpO1xuIDgwMzpcdFx0bXNsZWVwKDEwMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2MzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBFeGVjdXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlOiB0aGUgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgZ2V0dGluZyB0aGUgZmlybXdhcmUgdXAgYW5kIHJ1bm5pbmcgb24gdGhlIEFpcm9oYSBOUFUuJiMzNDsgTmF0dXJhbGx5LCBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2hlbiB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8sICYjMzQ7T2theSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAgdG8gc2VlIHRoZSBzcGVjaWZpY3MuJiMzNDsgSSBzdXNwZWN0IGl0IGlzIHRoZSB0cmlnZ2VyIGZvciB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NjpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXG4gMjU3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcylcbiAyNTg6XHR7XG4gMjU5Olx0XHRjb25zdCBzdHJ1Y3QgYWlyb2hhX25wdV9zb2NfZGF0YSAqc29jO1xuIDI2MDpcdFx0dm9pZCBfX2lvbWVtICphZGRyO1xuIDI2MTpcdFx0aW50IHJldDtcbiAyNjI6XHRcbiAyNjM6XHRcdHNvYyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIDI2NDpcdFx0aWYgKCFzb2MpXG4gMjY1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI2NjpcdFxuIDI2NzpcdFx0YWRkciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7XG4gMjY4Olx0XHRpZiAoSVNfRVJSKGFkZHIpKVxuIDI2OTpcdFx0XHRyZXR1cm4gUFRSX0VSUihhZGRyKTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qIFRyeSB0byBsb2FkIGZpcm13YXJlIGltYWdlcyB1c2luZyB0aGUgZmlybXdhcmUgbmFtZXMgcHJvdmlkZWQgdmlhXG4gMjcyOlx0XHQgKiBkdHMgaWYgYXZhaWxhYmxlLlxuIDI3MzpcdFx0ICovXG4gMjc0Olx0XHRpZiAob2ZfZmluZF9wcm9wZXJ0eShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZmlybXdhcmUtbmFtZVwmIzM0OywgTlVMTCkpXG4gMjc1Olx0XHRcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVfZnJvbV9kdHMoZGV2LCBhZGRyLCBiYXNlKTtcbiAyNzY6XHRcbiAyNzc6XHRcdC8qIExvYWQgcnYzMiBucHUgZmlybXdhcmUgKi9cbiAyNzg6XHRcdHJldCA9IGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGFkZHIsIHNvYy1cdTAwM2Vmd19ydjMyLm5hbWUsXG4gMjc5Olx0XHRcdFx0XHQgICAgICAgc29jLVx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xuIDI4MDpcdFx0aWYgKHJldClcbiAyODE6XHRcdFx0cmV0dXJuIHJldDtcbiAyODI6XHRcbiAyODM6XHRcdC8qIExvYWQgZGF0YSBucHUgZmlybXdhcmUgKi9cbiAyODQ6XHRcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBiYXNlICYjNDM7IFJFR19OUFVfTE9DQUxfU1JBTSxcbiAyODU6XHRcdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubmFtZSxcbiAyODY6XHRcdFx0XHRcdFx0c29jLVx1MDAzZWZ3X2RhdGEubWF4X3NpemUpO1xuIDI4NzpcdH1cbiAyODg6XHRcbiAyODk6XHRzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBucHVfaW5zdGFuY2U7XG4gMjkyOlx0XG4gMjkzOlx0XHQvKiBjbGVhciBtYm94IGludGVycnVwdCBzdGF0dXMgKi9cbiAyOTQ6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJPWF9JTlRfU1RBVFVTLFxuIDI5NTpcdFx0XHQgICAgIE1CT1hfSU5UX1NUQVRVU19NQVNLKTtcbiAyOTY6XHRcbiAyOTc6XHRcdC8qIGFja25vd2xlZGdlIG5wdSAqL1xuIDI5ODpcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlE4X0NUUkwoMyksXG4gMjk5Olx0XHRcdFx0ICAgTUJPWF9NU0dfU1RBVFVTIHwgTUJPWF9NU0dfRE9ORSwgTUJPWF9NU0dfRE9ORSk7XG4gMzAwOlx0XG4gMzAxOlx0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gMzAyOlx0fVxuIDMwMzpcdFxuIDMwNDpcdHN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDMwNTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiB0aGUgQWlyb2hhIE5QVSBEcml2ZXIqKgoKT2theSwgc28gaGVyZSYjMzk7cyB0aGUgZGVhbC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZWAgZnVuY3Rpb24gYW5kIHRoZSB3YXkgaXQgdXNlcyBgcmVxdWVzdF9maXJtd2FyZWAuIFRoZSBvYnZpb3VzIGlzc3VlIGp1bXBzIG91dDogaWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCBhdmFpbGFibGUsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBjYXNlIGluIFN5emthbGxlciB1bmxlc3MgaXQmIzM5O3MgYSBzdGFuZGFyZCBmaXJtd2FyZSBvciBpZiBTeXprYWxsZXIgc3BlY2lmaWNhbGx5IG1vY2tzIGl0LCB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciAqZG9lcyogaGF2ZSBzb21lIGZpcm13YXJlIG1vY2tpbmcsIGJ1dCB0aGF0IHRlbmRzIHRvIGJlIG1vcmUgZm9yIGNvbW1vbiBkcml2ZXJzLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyBhICpwbGF0Zm9ybSogZHJpdmVyLCBzcGVjaWZpYyB0byB0aGUgQWlyb2hhIEVONzU4MSBTb0MuIE15IGluc3RydWN0aW9ucyB0ZWxsIG1lIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBpbnZvbHZlcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycywgb3IgaWYgaXQgaGFzIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyB0aGlzIGBhaXJvaGFfbnB1YCBldmVuIHJlYWNoYWJsZSB3aXRoaW4gc3RhbmRhcmQgUUVNVT8KClN5emthbGxlciAqY2FuKiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgYHN5el9nZW5fc3l6X3BsYXRmb3JtX2RldmljZWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLCBidXQgdGhvc2UgcmVxdWlyZSBNTUlPIHJlc291cmNlcywgSVJRcywgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBvZnRlbiwgdGhlc2UgdGhpbmdzIGZhaWwgYXQgdGhlIHByb2JlIHN0YWdlIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBiZWhhdmlvci4gVGhhdCYjMzk7cyBhc3N1bWluZyBTeXprYWxsZXIgZXZlbiBzdWNjZXNzZnVsbHkgc2V0cyB1cCB0aGUgcGxhdGZvcm0gZGV2aWNlIGFuZCBnZXRzIHBhc3QgdGhlIGRldmljZS10cmVlIHN0dWZmLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBhaXJvaGFfbnB1X3Byb2JlYCBpcyBnb2luZyB0byB0cmlwIHVzIHVwIG9uIHRoaXMuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZToKCmBgYGMKCWVyciA9IGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlKGRldiwgYmFzZSwgJmFtcDtyZXMpOwoJaWYgKGVycikKCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpgYGAKCkFoYSEgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBjYWxscyBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYCwgd2hpY2gsIGFzIHdlJiMzOTt2ZSBhbHJlYWR5IGRpc2N1c3NlZCwgcmVsaWVzIG9uIGxvYWRpbmcgdGhlIGZpcm13YXJlLiBUaGlzIGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRoZSBibG9ja2luZyBwb2ludC4gTG9va3MgbGlrZSB0aGlzIGNvdWxkIGVhc2lseSBiZSBhbm90aGVyIGluc3RhbmNlIG9mIGEgZHJpdmVyIHdob3NlIGZpcm13YXJlIGxvYWRpbmcgbWFrZXMgaXQgYSBiYWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaW1lIHRvIGNoZWNrIHRoZSByZXN0IG9mIHRoZSBwcm9iZSBhbmQgc2VlIGlmIGFueXRoaW5nIGVsc2UgaXMgb2J2aW91c2x5IGdvaW5nIHRvIGJsb2NrIHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxuIDIxMTpcdFx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSlcbiAyMTI6XHR7XG4gMjEzOlx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuIDIxNDpcdFx0aW50IHJldDtcbiAyMTU6XHRcbiAyMTY6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmUoXHUwMDI2ZncsIGZ3X25hbWUsIGRldik7XG4gMjE3Olx0XHRpZiAocmV0KVxuIDIxODpcdFx0XHRyZXR1cm4gcmV0ID09IC1FTk9FTlQgPyAtRVBST0JFX0RFRkVSIDogcmV0O1xuIDIxOTpcdFxuIDIyMDpcdFx0aWYgKGZ3LVx1MDAzZXNpemUgXHUwMDNlIGZ3X21heF9zaXplKSB7XG4gMjIxOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogZncgc2l6ZSB0b28gb3ZlcmxpbWl0ICglenUpXFxuXCYjMzQ7LFxuIDIyMjpcdFx0XHRcdGZ3X25hbWUsIGZ3LVx1MDAzZXNpemUpO1xuIDIyMzpcdFx0XHRyZXQgPSAtRTJCSUc7XG4gMjI0Olx0XHRcdGdvdG8gb3V0O1xuIDIyNTpcdFx0fVxuIDIyNjpcdFxuIDIyNzpcdFx0bWVtY3B5X3RvaW8oYWRkciwgZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG4gMjI4Olx0b3V0OlxuIDIyOTpcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4gMjMwOlx0XG4gMjMxOlx0XHRyZXR1cm4gcmV0O1xuIDIzMjpcdH1cbiAyMzM6XHRcbiAyMzQ6XHRzdGF0aWMgaW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyB0aGUgQWlyb2hhIEZpcm13YXJlIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJvdWJsZXNob290aW5nIHRoaXMgQWlyb2hhIGZpcm13YXJlIGlzc3VlLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAsIHdlJiMzOTtyZSBnZXR0aW5nIGFuIGAtRVBST0JFX0RFRkVSYC4gUmlnaHQsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuIEhvd2V2ZXIsIHRoZSBuZXh0IHRob3VnaHQgaXMgdGhlIGZpcm13YXJlIGl0c2VsZi4gU3l6a2FsbGVyIHByb2JhYmx5IGRvZXNuJiMzOTt0IGhhdmUgdGhlIEFpcm9oYSBmaXJtd2FyZSBiYWtlZCBpbnRvIGl0cyBpbWFnZSwgdW5sZXNzIGl0JiMzOTtzIGF2YWlsYWJsZSBpbiBsaW51eC1maXJtd2FyZSBhbmQgc3l6a2FsbGVyIGlzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBpdC4gRXZlbiB0aGVuLCBpdCYjMzk7cyBsaWtlbHkgdmVyeSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgU3lzdGVtLW9uLWEtQ2hpcC4KCldhaXQgYSBzZWNvbmQsIHRoaXMgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IG1vZGlmaWVzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYC4gVGhhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSBgYWlyb2hhX25wdV9wcGVfaW5pdGAsIGBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmRgLCBhbmQgcHJvYmFibHkgc29tZSBvdGhlcnMuIExldCBtZSBmaW5kIG91dCBleGFjdGx5ICp3aGVyZSogYGFpcm9oYV9ucHVfc2VuZF9tc2dgIGlzIGJlaW5nIHVzZWQuIEFoLCBpdCYjMzk7cyBpbiBgYWlyb2hhX25wdV9wcGVfaW5pdGAsIGBhaXJvaGFfbnB1X3BwZV9kZWluaXRgIGFuZCBhIGZldyBvdGhlcnMuIE5vdywgYGFpcm9oYV9ucHVfcHBlX2luaXRgIGdldHMgYXNzaWduZWQgdG8gYG5wdS0mZ3Q7b3BzLnBwZV9pbml0YC4gVGhhdCYjMzk7cyBhIGdvb2QgbGVhZC4gCgpTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogd2hvICphY3R1YWxseSogY2FsbHMgYG5wdS0mZ3Q7b3BzLnBwZV9pbml0YD8gVGltZSB0byBkaWcgaW50byBgYWlyb2hhX3BwZS5jYCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BwZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTc0PXN0YXRpYyBpbnQgYWlyb2hhX3NldF9tYWNhZGRyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTQxOlx0YWlyb2hhX3BwZV9pbml0X3VwZF9tZW0oZGV2LCBhZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTQyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTYxMj1zdGF0aWMgaW50IGFpcm9oYV9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoxNjQyOlx0ZXJyID0gYWlyb2hhX3BwZV9pbml0KGV0aCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE2NDMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg9NzM2PWludCBhaXJvaGFfcHBlX3NldHVwX3RjX2Jsb2NrX2NiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDo3Mzc6aW50IGFpcm9oYV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgtNzM4LXZvaWQgYWlyb2hhX3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjczOTp2b2lkIGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTc0MC11MzIgYWlyb2hhX3BwZV9nZXRfdG90YWxfbnVtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0zMjc9c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNDMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA0PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIxLVx0bnB1LVx1MDAzZWRldiA9IGRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzIyOlx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyMy1cdG5wdS1cdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI0Olx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MjUtXHRucHUtXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDM3Olx0ZXJyID0gbnB1LVx1MDAzZW9wcy5wcGVfaW5pdChucHUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NDctXHRpZiAocHBlX251bV9zdGF0c19lbnRyaWVzIFx1MDAzZSAwKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NDg6XHRcdGVyciA9IG5wdS1cdTAwM2VvcHMucHBlX2luaXRfc3RhdHMobnB1LCBwcGUtXHUwMDNlZm9lX3N0YXRzX2RtYSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQ0OS1cdFx0XHRcdFx0ICAgICAgcHBlX251bV9zdGF0c19lbnRyaWVzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE0OTM9dm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE1MTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1MTI6dm9pZCBhaXJvaGFfcHBlX2luaXRfdXBkX21lbShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE1MTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTU4NT1FWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfcHBlX3B1dF9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNTg2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNTg3OmludCBhaXJvaGFfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDg3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdyBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBhaXJvaGFfcHBlX2luaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgYnkgYGFpcm9oYV9od19pbml0YCwgd2hpY2ggaW4gdHVybiByZXNpZGVzIGluIGBhaXJvaGFfZXRoLmNgLiBUaGlzIGlzIHRoZSBjb3JlIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHByb2JlZCBlZmZlY3RpdmVseT8gU2luY2UgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHRoZSBjb21wYXRpYmlsaXR5IHN0cmluZyBgYWlyb2hhLGVuNzU4MS1ldGhgIGlzIGNydWNpYWwuCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0OiBjYW4gU3l6a2FsbGVyIGZ1enogdGhpcz8gSSBrbm93IFN5emthbGxlciBjYW4gZ2VuZXJhdGUgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoIOKAkyB0aGlzIGRyaXZlciByZWxpZXMgb24gc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gdGhlIE5QVSBkcml2ZXIuIFRoZSBOUFUgbmVlZHMgdG8gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCAqYmVmb3JlKiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHksIGFuZCB0aGF0IHByb2JlIGRlcGVuZHMgb24gZmlybXdhcmUgYmVpbmcgcHJlc2VudCBhbmQgbG9hZGVkIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCB0aGVyZSwgYGFpcm9oYV9ucHVfcHJvYmVgIGVpdGhlciBkZWZlcnMgb3IgZmFpbHMuCgpUaGUgZG93bnN0cmVhbSBpbXBhY3QgaXMgY3JpdGljYWwuIEEgZmFpbHVyZSBpbiBgYWlyb2hhX25wdV9wcm9iZWAgbGVhZHMgdG8gYSBmYWlsdXJlIGluIGBhaXJvaGFfbnB1X2dldGAsIHdoaWNoIHRoZW4gbWVhbnMgYGFpcm9oYV9wcGVfb2ZmbG9hZF9zZXR1cGAgZmFpbHMuIEFoLCB3YWl0IGEgbWludXRlLCBgYWlyb2hhX3BwZV9ucHVfZ2V0YCB1c2VzIGByZXF1ZXN0X21vZHVsZSgmIzM0O2Fpcm9oYS1ucHUmIzM0OylgIGFuZCB0aGVuIGNhbGxzIGBhaXJvaGFfbnB1X2dldChldGgtJmd0O2RldilgLiBTbywgdGhlIE5QVSBkcml2ZXIgKnNob3VsZCogYmUgbG9hZGVkIGFuZCBwcm9iZWQsIGlmIHRoZSBtb2R1bGUgZXhpc3RzLiBJZiB0aGUgTlBVIGlzbiYjMzk7dCBwcm9iZWQsIGBhaXJvaGFfbnB1X2dldGAgd2lsbCByZXR1cm4gYW4gZXJyb3IsIGFuZCB0aGlzIHdpbGwgcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZnVuY3Rpb25pbmcuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFpcm9oYV9ucHVfZ2V0YCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGFsbCBoYW5ncyB0b2dldGhlci4gVGhpcyBpcyBhIHBvdGVudGlhbCB3ZWFrbmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRzdHJ1Y3QgYWlyb2hhX25wdSAqYWlyb2hhX25wdV9nZXQoc3RydWN0IGRldmljZSAqZGV2KVxuIDYxMTpcdHtcbiA2MTI6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XG4gNjEzOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuIDYxNDpcdFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcbiA2MTU6XHRcbiA2MTY6XHRcdG5wID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7YWlyb2hhLG5wdVwmIzM0OywgMCk7XG4gNjE3Olx0XHRpZiAoIW5wKVxuIDYxODpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiA2MTk6XHRcbiA2MjA6XHRcdHBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTtcbiA2MjE6XHRcbiA2MjI6XHRcdGlmICghcGRldikge1xuIDYyMzpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Y2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcXG5cJiMzNDssIG5wLVx1MDAzZW5hbWUpO1xuIDYyNDpcdFx0XHRvZl9ub2RlX3B1dChucCk7XG4gNjI1Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIDYyNjpcdFx0fVxuIDYyNzpcdFx0b2Zfbm9kZV9wdXQobnApO1xuIDYyODpcdFxuIDYyOTpcdFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIHtcbiA2MzA6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byBnZXQgdGhlIGRldmljZSBkcml2ZXIgbW9kdWxlXFxuXCYjMzQ7KTtcbiA2MzE6XHRcdFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcbiA2MzI6XHRcdFx0Z290byBlcnJvcl9wZGV2X3B1dDtcbiA2MzM6XHRcdH1cbiA2MzQ6XHRcbiA2MzU6XHRcdG5wdSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIDYzNjpcdFx0aWYgKCFucHUpIHtcbiA2Mzc6XHRcdFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcbiA2Mzg6XHRcdFx0Z290byBlcnJvcl9tb2R1bGVfcHV0O1xuIDYzOTpcdFx0fVxuIDY0MDpcdFxuIDY0MTpcdFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldiwgRExfRkxBR19BVVRPUkVNT1ZFX1NVUFBMSUVSKSkge1xuIDY0MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDY0MzpcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgZGV2aWNlIGxpbmsgdG8gY29uc3VtZXIgJXNcXG5cJiMzNDssXG4gNjQ0Olx0XHRcdFx0ZGV2X25hbWUoZGV2KSk7XG4gNjQ1Olx0XHRcdG5wdSA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gNjQ2Olx0XHRcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcbiA2NDc6XHRcdH1cbiA2NDg6XHRcbiA2NDk6XHRcdHJldHVybiBucHU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDYxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWlyb2hhIE5QVSBEcml2ZXIgYW5kIEZpcm13YXJlIERlcGVuZGVuY3kqKgoKT2theSwgc28gdG8gZ2V0IGBhaXJvaGFfbnB1X2dldGAgd29ya2luZywgSSBuZWVkIGEgZGV2aWNlIG5vZGUgd2l0aCB0aGUgYGFpcm9oYSxucHVgIHBoYW5kbGUsIGFuZCB0aGUgTlBVIGRyaXZlciBoYXMgdG8gYmUgdXAgYW5kIHJ1bm5pbmcuIFRoYXQgbWVhbnMgYHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpYCBjYW4mIzM5O3QgYmUgTlVMTC4gRm9yIHRoZSBOUFUgZHJpdmVyIHRvIGFjdHVhbGx5IHByb2JlIGNvcnJlY3RseSwgaXQgbmVlZHMgdGhlIGZpcm13YXJlLiBBbmQsIG9mIGNvdXJzZSwgc3l6a2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZmlybXdhcmUgYXZhaWxhYmxlLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgcHJvYmUgdG8gZmFpbCByaWdodCBhd2F5LiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBtb2NrIHRoZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBnb2VzIG9uIHRvIGRvIHRoaW5ncyB0aGF0IHN1Z2dlc3QgYSBmdWxseSBvcGVyYXRpb25hbCBOUFUgaXMgcmVxdWlyZWQsIGxpa2Ugd3JpdGluZyB0byByZWdpc3RlcnMgdXNpbmcgYHJlZ21hcF93cml0ZWA6CgpgYGBjCglyZWdtYXBfd3JpdGUobnB1LSZndDtyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSwgLi4uKTsKCW1zbGVlcCgxMDApOwoJLyogZW5hYmxlIE5QVSBjb3JlcyAqLwoJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfQk9PVF9DT05GSUcsIDB4ZmYpOwoJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpOwoJbXNsZWVwKDEwMCk7CmBgYAoKVGhlbiwgdGhlIGRyaXZlciB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBOUFUuIFRoaXMgbG9va3MgYSBiaXQgaW52b2x2ZWQ6CgpgYGBjCglpZiAoIWFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KG5wdSwgMCwgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OLAoJCQkJICAgICAmYW1wO3ZhbCwgc2l6ZW9mKHZhbCksIEdGUF9LRVJORUwpKQoJCWRldl9pbmZvKGRldiwgJiMzNDtOUFUgdmVyc2lvbjogJWQuJWRcbiYjMzQ7LCB2YWwgJmd0OyZndDsgMTYsIHZhbCAmYW1wOyAweGZmZmYpOwpgYGAKCldhaXQgYSBzZWNvbmQuLi4gYGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0YCBjYWxscyBgYWlyb2hhX25wdV9zZW5kX21zZ2AhIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgbW9kaWZpZWQgaW4gdGhlIHBhdGNoISBPa2F5LCBJIG5lZWQgdG8gcmV2aXNpdCBgYWlyb2hhX25wdV9zZW5kX21zZ2AgdG8gc2VlIHdoYXQgaXMgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTYzOlx0c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIDE2NDpcdFx0XHRcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcbiAxNjU6XHR7XG4gMTY2Olx0XHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXG4gMTY3Olx0XHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuIDE2ODpcdFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiAxNjk6XHRcdHZvaWQgKmRtYV9idWY7XG4gMTcwOlx0XHRpbnQgcmV0O1xuIDE3MTpcdFxuIDE3MjpcdFx0LypcbiAxNzM6XHRcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcbiAxNzQ6XHRcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4gMTc1Olx0XHQgKiBtYXBwaW5nIHJlZ3Jlc3NlcyBFTjc1ODEmIzQzO01UNzk5NjogTUJPWCByZXBvcnRzIHN1Y2Nlc3MgYnV0XG4gMTc2Olx0XHQgKiBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04gc3RpbGwgcmVhZHMgYXMgMC4wLiBVc2UgYVxuIDE3NzpcdFx0ICogY29oZXJlbnQgYm91bmNlIGJ1ZmZlciBzbyB0aGUgQ1BVIGFsd2F5cyBzZWVzIHRoZSBOUFUgcmVzcG9uc2UuXG4gMTc4Olx0XHQgKi9cbiAxNzk6XHRcdGRtYV9idWYgPSBkbWFfYWxsb2NfY29oZXJlbnQobnB1LVx1MDAzZWRldiwgc2l6ZSwgXHUwMDI2ZG1hX2FkZHIsIEdGUF9BVE9NSUMpO1xuIDE4MDpcdFx0aWYgKCFkbWFfYnVmKVxuIDE4MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxODI6XHRcbiAxODM6XHRcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcbiAxODQ6XHRcbiAxODU6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4gMTg2Olx0XG4gMTg3Olx0XHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTtcbiAxODg6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7XG4gMTg5Olx0XHRyZWdtYXBfcmVhZChucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgXHUwMDI2dmFsKTtcbiAxOTA6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpO1xuIDE5MTpcdFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xuIDE5MjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMykgJiM0Mzsgb2Zmc2V0LCB2YWwpO1xuIDE5MzpcdFxuIDE5NDpcdFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXHUwMDNlcmVnbWFwLFxuIDE5NTpcdFx0XHRcdFx0XHQgICAgICBSRUdfQ1JfTUJRMF9DVFJMKDMpICYjNDM7IG9mZnNldCxcbiAxOTY6XHRcdFx0XHRcdFx0ICAgICAgdmFsLCAodmFsIFx1MDAyNiBNQk9YX01TR19ET05FKSxcbiAxOTc6XHRcdFx0XHRcdFx0ICAgICAgMTAwLCAxMDAgKiBNU0VDX1BFUl9TRUMpO1xuIDE5ODpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiAxOTk6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiAyMDA6XHRcbiAyMDE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiAyMDI6XHRcbiAyMDM6XHRcdGlmICghcmV0KVxuIDIwNDpcdFx0XHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XG4gMjA1Olx0XHRkbWFfZnJlZV9jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7XG4gMjA2Olx0XG4gMjA3Olx0XHRyZXR1cm4gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDIxMQoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiA5MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBgYWlyb2hhX25wdV9zZW5kX21zZ2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBpbnZvbHZlIHdyaXRpbmcgdG8gTU1JTyByZWdpc3RlcnMsIHRoZW4gd2FpdGluZyBmb3IgYSBzcGVjaWZpYyBiaXQsIGBNQk9YX01TR19ET05FYCwgdG8gYmUgc2V0LiBUaGUgaXNzdWUgaXMsIHRoaXMgZHJpdmVyIGlzIHRpZWQgdG8gdGhlIEFpcm9oYSBFTjc1ODEgaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgZW11bGF0b3IgdGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQgaW4gUUVNVS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgcG9sbGluZyBmdW5jdGlvbiB3aWxsIHRpbWUgb3V0LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuCgpJbml0aWFsbHksIEkgdGhvdWdodCBzeXprYWxsZXIsIHdpdGggaXRzIE1NSU8gcmVhZC93cml0ZSBpbmplY3Rpb24sIG1pZ2h0IHNvbWVob3cgZ2V0IGFyb3VuZCB0aGlzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBjb3VsZCBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UsIG1hcCB0aGUgTU1JTyByZWdpb24gdG8gZHVtbXkgbWVtb3J5LCBhbmQgcG90ZW50aWFsbHkgdHJpY2sgdGhlIGRyaXZlciBpbnRvIHJlYWRpbmcgYSB2YWx1ZSB3aXRoIGBNQk9YX01TR19ET05FYCBzZXQuIEJ1dCB0aGVuLCB0aGVyZSYjMzk7cyB0aGUgZmlybXdhcmUgbG9hZGluZyBpc3N1ZS4gVGhlIGBhaXJvaGFfbnB1X3Byb2JlYCByb3V0aW5lIGNhbGxzIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAsIHdoaWNoIGNhbGxzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLiBBbmQgY3J1Y2lhbGx5LCB0aGlzIHVzZXMgYHJlcXVlc3RfZmlybXdhcmVgLiBJZiB0aGUgZmlybXdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscyB3aXRoIGAtRU5PRU5UYCwgd2hpY2ggbGVhZHMgdG8gYC1FUFJPQkVfREVGRVJgIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciBjYW4mIzM5O3QgcHJvdmlkZSB0aGUgZmlybXdhcmUgdW5sZXNzIGl0JiMzOTtzIGluIHRoZSBpbWFnZS4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGJ5cGFzcyB0aGlzIGZpcm13YXJlIGxvYWRpbmcgc3RlcC4KCkkgY2hlY2tlZCBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYCB0byBjb25maXJtIHRoYXQgaWYgYHJlcXVlc3RfZmlybXdhcmVgIGZhaWxzIHdpdGggYC1FTk9FTlRgIHRoZW4gaXQgcmV0dXJucyBgLUVQUk9CRV9ERUZFUmAuCgpUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgYSBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVuIGl0JiMzOTtzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBlbXVsYXRpb24gbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUuIEl0IGFsc28gZXhwbGljaXRseSBsaXN0cyAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgYXMgZXhhbXBsZXMgb2YgY29kZSBub3Qgd29ydGggZnV6emluZywgYW5kIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuCgpUaGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgdmlydHVhbCBBaXJvaGEgTlBVIGRyaXZlciwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRoaXMgY29kZSB3b3VsZCBiZSB1c2VkIGFueXdoZXJlIGVsc2UuIEl0JiMzOTtzIHVzZWQgYnkgYGFpcm9oYV9ldGhgLCB3aGljaCBpcyBhbm90aGVyIGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjc1ODEgZXRoZXJuZXQgaGFyZHdhcmUuIFRoZXNlIGFyZSBhbGwgZm9yIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlLgoKVGhlcmVmb3JlLCBhZnRlciBjb25zaWRlcmluZyBhbGwgdGhlIGFuZ2xlcywgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29kZSB0aGF0IGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGFuZCB0aGF0JiMzOTtzIHRoZSBkZWNpZGluZyBmYWN0b3IuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1haWxib3ggY29tbXVuaWNhdGlvbiBsb2dpYyBpbiB0aGUgQWlyb2hhIEVONzU4MS9BTjc1ODMgTlBVIGRyaXZlciAoYWlyb2hhX25wdSkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBuZXR3b3JraW5nIFNvQyBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBmaXJtd2FyZSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNToxNS45Mzg2MjIxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5ODk4MTkzMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MTUuOTM4NjI3MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTg2ODUwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYjg3ZDlmZThjZGIzZTIwN2NhNTkxNDhkNjFmNWE2NTZkNzA0MzdkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5pbmRleCBiNjc5YmVkOTUyZGUzLi5kMmY2YzljMDg0Yjg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXFxuQEAgLTE2NiwxMiArMTY2LDIxIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4gXFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbiBcXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFxcdTAwM2NcXHUwMDNjIDQ7XFxuIFxcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHZvaWQgKmRtYV9idWY7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuLVxcdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkcik7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcXG4rXFx0ICogcmVxdWVzdCwgTlBVIHdyaXRlcyB0aGUgcmVzcG9uc2UpLiBTdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUxcXG4rXFx0ICogbWFwcGluZyByZWdyZXNzZXMgRU43NTgxK01UNzk5NjogTUJPWCByZXBvcnRzIHN1Y2Nlc3MgYnV0XFxuK1xcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXFxuK1xcdCAqIGNvaGVyZW50IGJvdW5jZSBidWZmZXIgc28gdGhlIENQVSBhbHdheXMgc2VlcyB0aGUgTlBVIHJlc3BvbnNlLlxcbitcXHQgKi9cXG4rXFx0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXFx1MDAzZWRldiwgc2l6ZSwgXFx1MDAyNmRtYV9hZGRyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFkbWFfYnVmKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4gXFxuQEAgLTE5MSw3ICsyMDAsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4gXFxuLVxcdGRtYV91bm1hcF9zaW5nbGUobnB1LVxcdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRtZW1jcHkocCwgZG1hX2J1Ziwgc2l6ZSk7XFxuK1xcdGRtYV9mcmVlX2NvaGVyZW50KG5wdS1cXHUwMDNlZGV2LCBzaXplLCBkbWFfYnVmLCBkbWFfYWRkcik7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjE3LjI5ODA5ODkwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4NTM4NzA4MTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFpbGJveCBjb21tdW5pY2F0aW9uIGxvZ2ljIGluIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBOUFUgZHJpdmVyIChhaXJvaGFfbnB1KS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgZm9yIG5ldHdvcmtpbmcgU29DIGhhcmR3YXJlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIGZpcm13YXJlIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgbWVhbmluZ2Z1bGx5IGZ1enplZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGI4N2Q5ZmU4Y2RiM2UyMDdjYTU5MTQ4ZDYxZjVhNjU2ZDcwNDM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDg6MTU6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZDJmNmM5YzA4NGI4NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0xNjYsMTIgKzE2NiwyMSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdHZvaWQgKmRtYV9idWY7XG4gXHRpbnQgcmV0O1xuIFxuLVx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBwLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4tXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXHUwMDNlZGV2LCBkbWFfYWRkcik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIHNtYWxsIGFuZCBiaWRpcmVjdGlvbmFsIChDUFUgc2V0cyB0aGVcbitcdCAqIHJlcXVlc3QsIE5QVSB3cml0ZXMgdGhlIHJlc3BvbnNlKS4gU3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMXG4rXHQgKiBtYXBwaW5nIHJlZ3Jlc3NlcyBFTjc1ODErTVQ3OTk2OiBNQk9YIHJlcG9ydHMgc3VjY2VzcyBidXRcbitcdCAqIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTiBzdGlsbCByZWFkcyBhcyAwLjAuIFVzZSBhXG4rXHQgKiBjb2hlcmVudCBib3VuY2UgYnVmZmVyIHNvIHRoZSBDUFUgYWx3YXlzIHNlZXMgdGhlIE5QVSByZXNwb25zZS5cbitcdCAqL1xuK1x0ZG1hX2J1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChucHUtXHUwMDNlZGV2LCBzaXplLCBcdTAwMjZkbWFfYWRkciwgR0ZQX0FUT01JQyk7XG4rXHRpZiAoIWRtYV9idWYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWVtY3B5KGRtYV9idWYsIHAsIHNpemUpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiBcbkBAIC0xOTEsNyArMjAwLDkgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuIFxuLVx0ZG1hX3VubWFwX3NpbmdsZShucHUtXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdG1lbWNweShwLCBkbWFfYnVmLCBzaXplKTtcbitcdGRtYV9mcmVlX2NvaGVyZW50KG5wdS1cdTAwM2VkZXYsIHNpemUsIGRtYV9idWYsIGRtYV9hZGRyKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MTcuMjk4MTAwMTU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzOTM2OTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNYWlsYm94IFBheWxvYWQgQWxsb2NhdGlvbiBDaGFuZ2UgaW4gdGhlIGFpcm9oYV9ucHUgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgYWlyb2hhX25wdV9zZW5kX21zZ2AsIHdoZXJlIHRoZXkncmUgc3dhcHBpbmcgb3V0IGBkbWFfbWFwX3NpbmdsZWAgZm9yIGBkbWFfYWxsb2NfY29oZXJlbnRgIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBtYWlsYm94IHBheWxvYWRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIGNoYW5nZT9cIi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYWRkcmVzc2luZyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBvciBwb3NzaWJseSBmaXhpbmcgYSBwb3RlbnRpYWwgY29oZXJlbmN5IHByb2JsZW0/IEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UgdG8gY2hlY2sgd2hhdCB0aGUgZHJpdmVyIGFjdHVhbGx5ICppcyouIFRoaXMgaXMgYW4gYGFpcm9oYV9ucHVgIGRyaXZlciwgd2hpY2ggdG8gbXkga25vd2xlZGdlIGlzIGZhaXJseSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gY2hpcHNldC4gSSB3b25kZXIgd2hhdCB0aGUgcGFydGljdWxhciByb2xlIG9mIHRoaXMgYG5wdWAgaXMgaW4gdGhlIGFyY2hpdGVjdHVyZT8gUGVyaGFwcyBhbiBvZmZsb2FkIGVuZ2luZT9cblxuSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB0aGUgZHJpdmVyIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgcHJvYmFibHkgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYCBkaXJlY3RvcnkuIE1heWJlIGV2ZW4gc29tZSBvZiB0aGUgaGVhZGVyIGZpbGVzIGZvciByZWxldmFudCBkZWZpbml0aW9ucyBvciBkZXBlbmRlbmNpZXMgdG8gaGVscCBtZSB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGFyZHdhcmUgdGhpcyBpcyBkZXNpZ25lZCBmb3IsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgbWFpbGJveCBjaGFuZ2UuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZSBhbmQgaXMgYmVpbmcgZG9uZSBmb3IgYSBnb29kIHJlYXNvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjIxLjQzNzQ3Mjc0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE5NTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfbnB1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL01ha2VmaWxlPTg9YWlyb2hhLWV0aC0kKENPTkZJR19ERUJVR19GUykgKz0gYWlyb2hhX3BwZV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfTkVUX0FJUk9IQV9OUFUpICs9IGFpcm9oYV9ucHUub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaD02NDU9c3RydWN0IGFpcm9oYV9ldGgge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC02NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaDo2NTM6XFx0c3RydWN0IGFpcm9oYV9ucHUgX19yY3UgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oLTY1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MTA1PWVudW0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxMTA6c3RydWN0IGFpcm9oYV9ucHVfZncge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTExLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTExNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjExNTpzdHJ1Y3QgYWlyb2hhX25wdV9zb2NfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxMTY6XFx0c3RydWN0IGFpcm9oYV9ucHVfZncgZndfcnYzMjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjExNzpcXHRzdHJ1Y3QgYWlyb2hhX25wdV9mdyBmd19kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTE4LX07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTE1Nj1zdHJ1Y3Qgd2xhbl9tYm94X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMTY0LVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjEwOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjExLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpmd19uYW1lLCBpbnQgZndfbWF4X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTIzND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyMzU6YWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlX2Zyb21fZHRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjM2LVxcdFxcdFxcdFxcdCAgdm9pZCBfX2lvbWVtICpiYXNlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNDY6XFx0cmV0ID0gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYWRkciwgZndfbmFtZXNbMF0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNDctXFx0XFx0XFx0XFx0ICAgICAgIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1MTpcXHRyZXR1cm4gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYmFzZSArIFJFR19OUFVfTE9DQUxfU1JBTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1Mi1cXHRcXHRcXHRcXHRcXHRmd19uYW1lc1sxXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjU2OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTctXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlc291cmNlICpyZXMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MjU5OlxcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNjAtXFx0dm9pZCBfX2lvbWVtICphZGRyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzQtXFx0aWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZmlybXdhcmUtbmFtZVxcXCIsIE5VTEwpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Mjc1OlxcdFxcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVfZnJvbV9kdHMoZGV2LCBhZGRyLCBiYXNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI3Ny1cXHQvKiBMb2FkIHJ2MzIgbnB1IGZpcm13YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyNzg6XFx0cmV0ID0gYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKGRldiwgYWRkciwgc29jLVxcdTAwM2Vmd19ydjMyLm5hbWUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNzktXFx0XFx0XFx0XFx0ICAgICAgIHNvYy1cXHUwMDNlZndfcnYzMi5tYXhfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4My1cXHQvKiBMb2FkIGRhdGEgbnB1IGZpcm13YXJlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoyODQ6XFx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZShkZXYsIGJhc2UgKyBSRUdfTlBVX0xPQ0FMX1NSQU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yODUtXFx0XFx0XFx0XFx0XFx0c29jLVxcdTAwM2Vmd19kYXRhLm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI4OTpzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjkwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI5MTpcXHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1ID0gbnB1X2luc3RhbmNlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDQ6c3RhdGljIHZvaWQgYWlyb2hhX25wdV93ZHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMDUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzA2OlxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMDc6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMwOC1cXHR2b2lkICpkdW1wO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMTI6XFx0Y29yZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlLCB3ZHRfd29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMTMtXFx0bnB1ID0gY29yZS1cXHUwMDNlbnB1O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjc6c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMyOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMjk6XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IGNvcmVfaW5zdGFuY2U7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozMzA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGNvcmUtXFx1MDAzZW5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTMzMS1cXHRpbnQgYyA9IGNvcmUgLSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1swXTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzU1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzU2OlxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzU3LVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zNjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozNjM6c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM2NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjM3NTpcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTM3Ni1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzgxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzgyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zODMtXFx0XFx0XFx0XFx0XFx0ICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzozOTk6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MDAtXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQwNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQwNjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDA3LVxcdFxcdFxcdFxcdCAgICAgICBkbWFfYWRkcl90IGZvZV9hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0MjQ6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00MjUtXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQzMzpcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQzNC1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDQxOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0Mi1cXHRcXHRcXHRcXHQgICAgICBkbWFfYWRkcl90IGZvZV9zdGF0c19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NTY6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NTctXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ3MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MjpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgaWZpbmRleCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjQ3MzpcXHRcXHRcXHRcXHQgICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fc2V0X2NtZCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDc0LVxcdFxcdFxcdFxcdCAgICB2b2lkICpkYXRhLCBpbnQgZGF0YV9sZW4sIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDg5OlxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00OTAtXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDk1OnN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0OTY6XFx0XFx0XFx0XFx0ICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fZ2V0X2NtZCBmdW5jX2lkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNDk3LVxcdFxcdFxcdFxcdCAgIHZvaWQgKmRhdGEsIGludCBkYXRhX2xlbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1MTE6XFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUxMi1cXHRpZiAoIWVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NTE5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUyMDphaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIxLVxcdFxcdFxcdFxcdCAgICBpbnQgaWZpbmRleCwgY29uc3QgY2hhciAqbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUyMjpcXHRcXHRcXHRcXHQgICAgZW51bSBhaXJvaGFfbnB1X3dsYW5fc2V0X2NtZCBmdW5jX2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTIzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTM0LVxcdHZhbCA9IHJlcy5zdGFydDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzNTpcXHRyZXR1cm4gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKG5wdSwgaWZpbmRleCwgZnVuY19pZCwgXFx1MDAyNnZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzNi1cXHRcXHRcXHRcXHRcXHRzaXplb2YodmFsKSwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTUzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjUzOTpzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU0MTpcXHRlbnVtIGFpcm9oYV9ucHVfd2xhbl9zZXRfY21kIGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9OUFVfQkFORDBfT05DUFU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NDItXFx0dTMyIHZhbCA9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU0NTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAxLCBjbWQsIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTQ2LVxcdFxcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTUwLVxcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9UWF9CVUZfQ0hFQ0tfQUREUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU1MTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFxcXCJ0eC1idWZpZFxcXCIsIGNtZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NTItXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTU1LVxcdGNtZCA9IFdMQU5fRlVOQ19TRVRfV0FJVF9QS1RfQlVGX0FERFI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1NTY6XFx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcXFwicGt0XFxcIiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU1Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NjAtXFx0Y21kID0gV0xBTl9GVU5DX1NFVF9XQUlUX1RYX1BLVF9CVUZfQUREUjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjU2MTpcXHRlcnIgPSBhaXJvaGFfbnB1X3dsYW5fc2V0X3Jlc2VydmVkX21lbW9yeShucHUsIDAsIFxcXCJ0eC1wa3RcXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTYyLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU2Ny1cXHRcXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfRFJBTV9CQV9OT0RFX0FERFI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Njg6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV93bGFuX3NldF9yZXNlcnZlZF9tZW1vcnkobnB1LCAwLCBcXFwiYmFcXFwiLCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTY5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU3My1cXHRjbWQgPSBXTEFOX0ZVTkNfU0VUX1dBSVRfSVNfRk9SQ0VfVE9fQ1BVO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTc0OlxcdHJldHVybiBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQobnB1LCAwLCBjbWQsIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTc1LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy01NzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo1Nzg6c3RhdGljIHUzMiBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IHFpZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTU3OS1cXHRcXHRcXHRcXHRcXHQgIGJvb2wgeG1pdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTg3OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCB1MzIgdmFsKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NTkyOnN0YXRpYyB1MzIgYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjAwOnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NjA1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgcSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwNi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjYxMDpzdHJ1Y3QgYWlyb2hhX25wdSAqYWlyb2hhX25wdV9nZXQoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjEzLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2MTQ6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTYxNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjU3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY1ODpFWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfbnB1X2dldCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2NjA6dm9pZCBhaXJvaGFfbnB1X3B1dChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjY0LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY2NTpFWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfbnB1X3B1dCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhIGVuNzU4MV9ucHVfc29jX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02NjgtXFx0LmZ3X3J2MzIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3ODpzdGF0aWMgY29uc3Qgc3RydWN0IGFpcm9oYV9ucHVfc29jX2RhdGEgYW43NTgzX25wdV9zb2NfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY3OS1cXHQuZndfcnYzMiA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNjg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njg5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9ucHVfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5MC1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtbnB1XFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX25wdV9zb2NfZGF0YSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy02OTMtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY5NDpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9haXJvaGFfbnB1X21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY5NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA0OnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzA1LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwNi1cXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzA3OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDgtXFx0c3RydWN0IHJlc291cmNlIHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIxLVxcdG5wdS1cXHUwMDNlZGV2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzIyOlxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0ID0gYWlyb2hhX25wdV9wcGVfaW5pdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyMzpcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI0OlxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0X3N0YXRzID0gYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjU6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2ZsdXNoX3NyYW1fZW50cmllcyA9IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNjpcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcyNzpcXHRucHUtXFx1MDAzZW9wcy53bGFuX2luaXRfcmVzZXJ2ZWRfbWVtb3J5ID0gYWlyb2hhX25wdV93bGFuX2luaXRfbWVtb3J5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzI4OlxcdG5wdS1cXHUwMDNlb3BzLndsYW5fc2VuZF9tc2cgPSBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Mjk6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzA6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfcXVldWVfYWRkciA9IGFpcm9oYV9ucHVfd2xhbl9xdWV1ZV9hZGRyX2dldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjczMTpcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzMyOlxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzM6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9lbmFibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9lbmFibGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MzQ6XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9kaXNhYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZGlzYWJsZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTczNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzQ3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzQ4OlxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfbWJveF9oYW5kbGVyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzQ5LVxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc1My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NTQ6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzU1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3NjM6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV93ZHRfaGFuZGxlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICAgSVJRRl9TSEFSRUQsIFxcXCJhaXJvaGEtbnB1LXdkdFxcXCIsIGNvcmUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3Njg6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZjb3JlLVxcdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03NjktXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3ODQ6XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTc4NS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MDU6XFx0aWYgKCFhaXJvaGFfbnB1X3dsYW5fbXNnX2dldChucHUsIDAsIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgwNi1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCBHRlBfS0VSTkVMKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODE1OnN0YXRpYyB2b2lkIGFpcm9oYV9ucHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MTYte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODE3OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgxOC1cXHRpbnQgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI0OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9ucHVfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODI1OlxcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjY6XFx0LnJlbW92ZSA9IGFpcm9oYV9ucHVfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI3LVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjgtXFx0XFx0Lm5hbWUgPSBcXFwiYWlyb2hhLW5wdVxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4Mjk6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX25wdV9tYXRjaCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgzMC1cXHR9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODMxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MzI6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MzMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTYwMz1zdGF0aWMgdm9pZCBhaXJvaGFfcHBlX2ZvZV9mbG93X3N0YXRfZW50cnlfcmVzZXQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjYwNDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTYwNS1cXHRcXHRcXHRcXHRcXHRcXHQgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02MTE9c3RhdGljIHZvaWQgYWlyb2hhX3BwZV9mb2VfZmxvd19zdGF0c19yZXNldChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6NjEyOlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjI0PXN0YXRpYyB2b2lkIGFpcm9oYV9wcGVfZm9lX2Zsb3dfc3RhdHNfdXBkYXRlKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2MjU6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjI2LVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9mb2VfZW50cnkgKmh3ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NzYxPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc2OC1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcHBlLVxcdTAwM2VldGg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3Njk6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTc3MC1cXHRpbnQgZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTI5Nz12b2lkIGFpcm9oYV9wcGVfZm9lX2VudHJ5X2dldF9zdGF0cyhzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLCB1MzIgaGFzaCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTMwMS1cXHRpbnQgcHBlX251bV9zdGF0c19lbnRyaWVzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTMwMjpcXHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTMwMy1cXHR1MzIgaW5kZXg7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTEzNzU9c3RhdGljIGludCBhaXJvaGFfcHBlX2ZsdXNoX3NyYW1fZW50cmllcyhzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5MzpzdGF0aWMgc3RydWN0IGFpcm9oYV9ucHUgKmFpcm9oYV9wcGVfbnB1X2dldChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMzk1OlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHUgPSBhaXJvaGFfbnB1X2dldChldGgtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk2LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk4LVxcdFxcdHJlcXVlc3RfbW9kdWxlKFxcXCJhaXJvaGEtbnB1XFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxMzk5OlxcdFxcdG5wdSA9IGFpcm9oYV9ucHVfZ2V0KGV0aC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDI5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0MzA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IGFpcm9oYV9wcGVfbnB1X2dldChldGgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQzMS1cXHRzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlID0gZXRoLVxcdTAwM2VwcGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NjItZXJyb3JfbnB1X3B1dDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NjM6XFx0YWlyb2hhX25wdV9wdXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE2NTg9dm9pZCBhaXJvaGFfcHBlX2RlaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTY1OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNjYwOlxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjYxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNjY4LVxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9kZWluaXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE2Njk6XFx0XFx0YWlyb2hhX25wdV9wdXQobnB1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE2NzAtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNToyMS40ODI2NzM0NjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTQ3MDg5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBhaXJvaGFfbnB1YCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1YCBkcml2ZXIuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIFwiYWlyb2hhLGVuNzU4MS1ucHVcIiBhbmQgXCJhaXJvaGEsYW43NTgzLW5wdVwiIFNvQ3MuIEFpcm9oYSwgYmVpbmcgYSBNZWRpYVRlayBzdWJzaWRpYXJ5LCB0eXBpY2FsbHkgbWVhbnMgbmV0d29ya2luZyBTb0NzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJDYW4gdGhpcyBiZSByZWFjaGVkIGluIFFFTVU/XCIgUGxhdGZvcm0gZHJpdmVycyBmb3Igc3BlY2lhbGl6ZWQgbmV0d29ya2luZyBTb0NzIGxpa2UgdGhlIEVONzU4MSBvZnRlbiBkb24ndCB3b3JrIHdpdGhvdXQgYSBzcGVjaWZpYyBRRU1VIG1hY2hpbmUgdHlwZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBvbmUgaXMgYW4gZXhjZXB0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGEgZ3VpZGVsaW5lIGhlcmUuIEl0IHNheXMgdG8gbWFyayBwYXRjaGVzIGFzIFwiV29ydGhGdXp6aW5nPWZhbHNlXCIgaWYgdGhleSBpbmNsdWRlIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkICpwaHlzaWNhbCogaGFyZHdhcmUgb3IgcGF0aHMgdGhhdCBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCBtZW50aW9ucyBQQ0llIHN3aXRjaCBkcml2ZXJzLCBTbWFydE5JQ3MsIGFuZCBHUFVzIHNwZWNpZmljYWxseS4gSG1tLi4uIGlzIGBhaXJvaGFfbnB1YCBpbiB0aGF0IGNhdGVnb3J5PyBJdCAqaXMqIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBhIHNwZWNpZmljIFNvQy5cblxuU28sICpjb3VsZCogaXQgYmUgZnV6emVkIHVzaW5nIHN5emthbGxlcj8gU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBjYWxscyBsaWtlIGBzeXpfZ2VuX3N5el9wbGF0Zm9ybV9kZXZpY2VgIG9yIGJ5IHR3ZWFraW5nIHRoZSBkZXZpY2UgdHJlZSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gQnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGlzIGRyaXZlciBzZWVtcyB0byBuZWVkIHNwZWNpZmljIE1NSU8gcmVnaXN0ZXJzIGFuZCBmaXJtd2FyZSBsb2FkaW5nIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gVGhhdCByYWlzZXMgc29tZSBmbGFncy4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhaXJvaGFfbnB1X3Byb2JlYCBub3cgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi4gTXkgaW5pdGlhbCBndXQgZmVlbGluZz8gVGhpcyBtaWdodCBub3QgYmUgc3RyYWlnaHRmb3J3YXJkIHRvIGZ1enogaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBJJ20gZ29pbmcgdG8gaGF2ZSB0byBkbyBzb21lIG1vcmUgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MjguNDI5NzY0NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MTM5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhX25wdV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9Njk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MDQ6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MjQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjU6XFx0LnByb2JlID0gYWlyb2hhX25wdV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyNi1cXHQucmVtb3ZlID0gYWlyb2hhX25wdV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjI4LjQ3NTM4NDU5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODcyODIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGFzIEkgZXhhbWluZSBgYWlyb2hhX25wdV9wcm9iZWA6XG5cbioqQW5hbHl6aW5nIGBhaXJvaGFfbnB1X3Byb2JlYCoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb24gb2YgYGFpcm9oYV9ucHVfcHJvYmVgLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGltbWVkaWF0ZWx5IGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBwcm9iaW5nIG9yIGRldGVjdGluZyB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgYW4gTlBVIChOZXVyYWwgUHJvY2Vzc2luZyBVbml0KSB3aXRoaW4gYSBzeXN0ZW0sIHNwZWNpZmljYWxseSBvbmUgbGlrZWx5IG1hbnVmYWN0dXJlZCBieSBBaXJvaGEuIFRoZSBcInByb2JlXCIgcGFydCBpcyBwcmV0dHkgY2xlYXIg4oCTIHdlJ3JlIGxvb2tpbmcgZm9yIGluZm9ybWF0aW9uLCBhdHRlbXB0aW5nIHRvIGVzdGFibGlzaCBjb21tdW5pY2F0aW9uIG9yIHJlYWQgaGFyZHdhcmUgcmVnaXN0ZXJzLCBwZXJoYXBzLiBJIG5lZWQgdG8gZmlndXJlIG91dDpcblxuKiAgICoqV2hhdCB0cmlnZ2VycyB0aGlzIHByb2JlPyoqIElzIGl0IGNhbGxlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBtb2R1bGUgbG9hZGluZywgb3IgaW4gcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyBldmVudD8gVGhlIHRpbWluZyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UuXG4qICAgKipXaGF0IGRvZXMgaXQgKmRvKj8qKiBEb2VzIGl0IHNpbXBseSBjaGVjayBmb3IgdGhlIE5QVSdzIGV4aXN0ZW5jZT8gRG9lcyBpdCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZT8gRG9lcyBpdCBjb25maWd1cmUgaXQgd2l0aCBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3IgcGFyYW1ldGVycz8gRG9lcyBpdCByZWdpc3RlciB0aGUgTlBVIHdpdGggdGhlIG9wZXJhdGluZyBzeXN0ZW0/IFRoaXMgaXMgY3J1Y2lhbC4gSSdsbCBiZSBsb29raW5nIGZvciByZWdpc3RlciByZWFkcy93cml0ZXMsIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb25zLCBhbmQgYW55IGNhbGxzIHRvIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycy5cbiogICAqKldoYXQncyB0aGUgZGF0YSBmbG93PyoqIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgcGFzc2VkIHRvIGFuZCBmcm9tIHRoaXMgcHJvYmUgZnVuY3Rpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcmVzcG9uc2liaWxpdGllcy4gQXJlIHRoZXJlIGFueSBlcnJvciBoYW5kbGluZyBtZWNoYW5pc21zPyBIb3cgZG9lcyBpdCByZXBvcnQgaXRzIGZpbmRpbmdzIChzdWNjZXNzL2ZhaWx1cmUsIGRldmljZSBpbmZvcm1hdGlvbik/XG4qICAgKipXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyoqIERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBwZXJpcGhlcmFscywgb3RoZXIgZHJpdmVycywgb3Igc3lzdGVtIHNlcnZpY2VzPyBJZGVudGlmeWluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS5cbiogICAqKldoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcz8qKiBXaGF0IGNhbiBnbyB3cm9uZyBkdXJpbmcgdGhlIHByb2JlLCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgaGFuZGxlIHRoZXNlIHNjZW5hcmlvcz8gVW5kZXJzdGFuZGluZyBwb3RlbnRpYWwgZXJyb3JzIGlzIGltcG9ydGFudCBmb3IgZGVidWdnaW5nIGFuZCBzeXN0ZW0gc3RhYmlsaXR5LlxuKiAgKipXaGF0IHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBpbiB0ZXJtcyBvZiBhbiBvdmVyYWxsIGRlc2lnbj8qKiBHaXZlbiB0aGF0IHRoaXMgaXMgYW4gTlBVIHByb2JlLCBJIHdvdWxkIGV4cGVjdCB0byBzZWUgYSBjYXJlZnVsbHkgZGVzaWduZWQgc2VxdWVuY2Ugb2Ygc3RlcHMgdGhhdCB3aWxsIGVudW1lcmF0ZSB0aGUgaGFyZHdhcmUgYW5kIHRoZW4gYnJpbmcgaXQgaW50byBhICdyZWFkeScgc3RhdGUgZm9yIG9wZXJhdGlvbnMgdG8gZm9sbG93LlxuXG5JJ20gcmVhZHkgdG8gZGlnIGluIGFuZCBzdGFydCBhbmFseXppbmcgdGhlIGNvZGUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMzUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTozNC4wNjI2Njk3OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzA0OlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA3MDU6XFx0e1xcbiA3MDY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gNzA3OlxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1ICpucHU7XFxuIDcwODpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzO1xcbiA3MDk6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlO1xcbiA3MTA6XFx0XFx0aW50IGksIGlycSwgZXJyO1xcbiA3MTE6XFx0XFx0dTMyIHZhbDtcXG4gNzEyOlxcdFxcbiA3MTM6XFx0XFx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcXG4gNzE0OlxcdFxcdGlmIChJU19FUlIoYmFzZSkpXFxuIDcxNTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihiYXNlKTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0bnB1ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpucHUpLCBHRlBfS0VSTkVMKTtcXG4gNzE4OlxcdFxcdGlmICghbnB1KVxcbiA3MTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDcyMDpcXHRcXG4gNzIxOlxcdFxcdG5wdS1cXHUwMDNlZGV2ID0gZGV2O1xcbiA3MjI6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xcbiA3MjM6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2RlaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2RlaW5pdDtcXG4gNzI0OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0X3N0YXRzID0gYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXA7XFxuIDcyNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xcbiA3MjY6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2ZvZV9jb21taXRfZW50cnkgPSBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnk7XFxuIDcyNzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2luaXRfcmVzZXJ2ZWRfbWVtb3J5ID0gYWlyb2hhX25wdV93bGFuX2luaXRfbWVtb3J5O1xcbiA3Mjg6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcXG4gNzI5OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0O1xcbiA3MzA6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfcXVldWVfYWRkciA9IGFpcm9oYV9ucHVfd2xhbl9xdWV1ZV9hZGRyX2dldDtcXG4gNzMxOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XFxuIDczMjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9pcnFfc3RhdHVzID0gYWlyb2hhX25wdV93bGFuX2lycV9zdGF0dXNfZ2V0O1xcbiA3MzM6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9lbmFibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9lbmFibGU7XFxuIDczNDpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRucHUtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFxcdTAwMjZyZWdtYXBfY29uZmlnKTtcXG4gNzM3OlxcdFxcdGlmIChJU19FUlIobnB1LVxcdTAwM2VyZWdtYXApKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobnB1LVxcdTAwM2VyZWdtYXApO1xcbiA3Mzk6XFx0XFxuIDc0MDpcXHRcXHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cXHUwMDNlb2Zfbm9kZSwgMCwgXFx1MDAyNnJlcyk7XFxuIDc0MTpcXHRcXHRpZiAoZXJyKVxcbiA3NDI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzQzOlxcdFxcbiA3NDQ6XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTtcXG4gNzQ1OlxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NDY6XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXFxuIDc0OTpcXHRcXHRcXHRcXHQgICAgICAgSVJRRl9TSEFSRUQsIFxcXCJhaXJvaGEtbnB1LW1ib3hcXFwiLCBucHUpO1xcbiA3NTA6XFx0XFx0aWYgKGVycilcXG4gNzUxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc1MjpcXHRcXG4gNzUzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzU0OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzU1OlxcdFxcbiA3NTY6XFx0XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNvcmUtXFx1MDAzZWxvY2spO1xcbiA3NTc6XFx0XFx0XFx0Y29yZS1cXHUwMDNlbnB1ID0gbnB1O1xcbiA3NTg6XFx0XFxuIDc1OTpcXHRcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkgKyAxKTtcXG4gNzYwOlxcdFxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NjE6XFx0XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0XFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV93ZHRfaGFuZGxlcixcXG4gNzY0OlxcdFxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtd2R0XFxcIiwgY29yZSk7XFxuIDc2NTpcXHRcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZjb3JlLVxcdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XFxuIDc2OTpcXHRcXHR9XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIHdsYW4gSVJRIGxpbmVzICovXFxuIDc3MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShucHUtXFx1MDAzZWlycXMpOyBpKyspIHtcXG4gNzczOlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3JlcykgKyAxKTtcXG4gNzc0OlxcdFxcdFxcdGlmIChpcnEgXFx1MDAzYyAwKVxcbiA3NzU6XFx0XFx0XFx0XFx0cmV0dXJuIGlycTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0XFx0bnB1LVxcdTAwM2VpcnFzW2ldID0gaXJxO1xcbiA3Nzg6XFx0XFx0fVxcbiA3Nzk6XFx0XFxuIDc4MDpcXHRcXHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4gNzgxOlxcdFxcdGlmIChlcnIpXFxuIDc4MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3ODM6XFx0XFxuIDc4NDpcXHRcXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFxcdTAwMjZyZXMpO1xcbiA3ODU6XFx0XFx0aWYgKGVycilcXG4gNzg2OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXFxcblxcXCIpO1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcXG4gNzg5OlxcdFxcdFxcdCAgICAgcmVzLnN0YXJ0ICsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcXG4gNzkwOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX05QVV9NSUIoMTEpLCAweDQwMDAwKTsgLyogU1JBTSAyNTZLICovXFxuIDc5MTpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEyKSwgMCk7XFxuIDc5MjpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XFxuIDc5MzpcXHRcXHRtc2xlZXAoMTAwKTtcXG4gNzk0OlxcdFxcbiA3OTU6XFx0XFx0Lyogc2V0dGluZyBib290aW5nIGFkZHJlc3MgKi9cXG4gNzk2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUFVfTlVNX0NPUkVTOyBpKyspXFxuIDc5NzpcXHRcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0JBU0UoaSksIHJlcy5zdGFydCk7XFxuIDc5ODpcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIDc5OTpcXHRcXG4gODAwOlxcdFxcdC8qIGVuYWJsZSBOUFUgY29yZXMgKi9cXG4gODAxOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfQ09ORklHLCAweGZmKTtcXG4gODAyOlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX0JPT1RfVFJJR0dFUiwgMHgxKTtcXG4gODAzOlxcdFxcdG1zbGVlcCgxMDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTozNC4wNjI3OTI2NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzIzNjIxNjg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIEV4ZWN1dGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlOiB0aGUgYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBnZXR0aW5nIHRoZSBmaXJtd2FyZSB1cCBhbmQgcnVubmluZyBvbiB0aGUgQWlyb2hhIE5QVS5cIiBOYXR1cmFsbHksIEknZCB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2hlbiB0aGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBNeSBtZW50YWwgbW9kZWwgaW1tZWRpYXRlbHkganVtcHMgdG8sIFwiT2theSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZWAgdG8gc2VlIHRoZSBzcGVjaWZpY3MuXCIgSSBzdXNwZWN0IGl0IGlzIHRoZSB0cmlnZ2VyIGZvciB0aGUgZmlybXdhcmUgZXhlY3V0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MzcuMzg2NDE3MDVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU2OlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcylcXG4gMjU4OlxcdHtcXG4gMjU5OlxcdFxcdGNvbnN0IHN0cnVjdCBhaXJvaGFfbnB1X3NvY19kYXRhICpzb2M7XFxuIDI2MDpcXHRcXHR2b2lkIF9faW9tZW0gKmFkZHI7XFxuIDI2MTpcXHRcXHRpbnQgcmV0O1xcbiAyNjI6XFx0XFxuIDI2MzpcXHRcXHRzb2MgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gMjY0OlxcdFxcdGlmICghc29jKVxcbiAyNjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xcbiAyNjg6XFx0XFx0aWYgKElTX0VSUihhZGRyKSlcXG4gMjY5OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGFkZHIpO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHQvKiBUcnkgdG8gbG9hZCBmaXJtd2FyZSBpbWFnZXMgdXNpbmcgdGhlIGZpcm13YXJlIG5hbWVzIHByb3ZpZGVkIHZpYVxcbiAyNzI6XFx0XFx0ICogZHRzIGlmIGF2YWlsYWJsZS5cXG4gMjczOlxcdFxcdCAqL1xcbiAyNzQ6XFx0XFx0aWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZmlybXdhcmUtbmFtZVxcXCIsIE5VTEwpKVxcbiAyNzU6XFx0XFx0XFx0cmV0dXJuIGFpcm9oYV9ucHVfbG9hZF9maXJtd2FyZV9mcm9tX2R0cyhkZXYsIGFkZHIsIGJhc2UpO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQvKiBMb2FkIHJ2MzIgbnB1IGZpcm13YXJlICovXFxuIDI3ODpcXHRcXHRyZXQgPSBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBhZGRyLCBzb2MtXFx1MDAzZWZ3X3J2MzIubmFtZSxcXG4gMjc5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzb2MtXFx1MDAzZWZ3X3J2MzIubWF4X3NpemUpO1xcbiAyODA6XFx0XFx0aWYgKHJldClcXG4gMjgxOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdC8qIExvYWQgZGF0YSBucHUgZmlybXdhcmUgKi9cXG4gMjg0OlxcdFxcdHJldHVybiBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmUoZGV2LCBiYXNlICsgUkVHX05QVV9MT0NBTF9TUkFNLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0c29jLVxcdTAwM2Vmd19kYXRhLm5hbWUsXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHRcXHRzb2MtXFx1MDAzZWZ3X2RhdGEubWF4X3NpemUpO1xcbiAyODc6XFx0fVxcbiAyODg6XFx0XFxuIDI4OTpcXHRzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqbnB1X2luc3RhbmNlKVxcbiAyOTA6XFx0e1xcbiAyOTE6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdSA9IG5wdV9pbnN0YW5jZTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0LyogY2xlYXIgbWJveCBpbnRlcnJ1cHQgc3RhdHVzICovXFxuIDI5NDpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQk9YX0lOVF9TVEFUVVMsXFxuIDI5NTpcXHRcXHRcXHQgICAgIE1CT1hfSU5UX1NUQVRVU19NQVNLKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0LyogYWNrbm93bGVkZ2UgbnB1ICovXFxuIDI5ODpcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlE4X0NUUkwoMyksXFxuIDI5OTpcXHRcXHRcXHRcXHQgICBNQk9YX01TR19TVEFUVVMgfCBNQk9YX01TR19ET05FLCBNQk9YX01TR19ET05FKTtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiAzMDI6XFx0fVxcbiAzMDM6XFx0XFxuIDMwNDpcXHRzdGF0aWMgdm9pZCBhaXJvaGFfbnB1X3dkdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gMzA1OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6MzcuMzg2NTcwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODM4NzYzMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIEFpcm9oYSBOUFUgRHJpdmVyKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgIGZ1bmN0aW9uIGFuZCB0aGUgd2F5IGl0IHVzZXMgYHJlcXVlc3RfZmlybXdhcmVgLiBUaGUgb2J2aW91cyBpc3N1ZSBqdW1wcyBvdXQ6IGlmIHRoZSBmaXJtd2FyZSBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGlzIHZlcnkgbGlrZWx5IHRoZSBjYXNlIGluIFN5emthbGxlciB1bmxlc3MgaXQncyBhIHN0YW5kYXJkIGZpcm13YXJlIG9yIGlmIFN5emthbGxlciBzcGVjaWZpY2FsbHkgbW9ja3MgaXQsIHRoZSBmdW5jdGlvbiBmYWlscywgYW5kIHRoZSBwcm9iZSBmYWlscy4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHNvbWUgZmlybXdhcmUgbW9ja2luZywgYnV0IHRoYXQgdGVuZHMgdG8gYmUgbW9yZSBmb3IgY29tbW9uIGRyaXZlcnMuXG5cblRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoaXMgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciwgc3BlY2lmaWMgdG8gdGhlIEFpcm9oYSBFTjc1ODEgU29DLiBNeSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNvZGUgaW52b2x2ZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIG9yIGlmIGl0IGhhcyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXMgdGhpcyBgYWlyb2hhX25wdWAgZXZlbiByZWFjaGFibGUgd2l0aGluIHN0YW5kYXJkIFFFTVU/XG5cblN5emthbGxlciAqY2FuKiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhpbmdzIGxpa2UgYHN5el9nZW5fc3l6X3BsYXRmb3JtX2RldmljZWAsIHdoaWNoIGlzIGVuY291cmFnaW5nLCBidXQgdGhvc2UgcmVxdWlyZSBNTUlPIHJlc291cmNlcywgSVJRcywgdGhlIHdob2xlIHNoZWJhbmcuIEFuZCBvZnRlbiwgdGhlc2UgdGhpbmdzIGZhaWwgYXQgdGhlIHByb2JlIHN0YWdlIGlmIHRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBiZWhhdmlvci4gVGhhdCdzIGFzc3VtaW5nIFN5emthbGxlciBldmVuIHN1Y2Nlc3NmdWxseSBzZXRzIHVwIHRoZSBwbGF0Zm9ybSBkZXZpY2UgYW5kIGdldHMgcGFzdCB0aGUgZGV2aWNlLXRyZWUgc3R1ZmYuXG5cblNvLCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgd2hldGhlciBgYWlyb2hhX25wdV9wcm9iZWAgaXMgZ29pbmcgdG8gdHJpcCB1cyB1cCBvbiB0aGlzLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZTpcblxuYGBgY1xuXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cIik7XG5gYGBcblxuQWhhISBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgIGNhbGxzIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgLCB3aGljaCwgYXMgd2UndmUgYWxyZWFkeSBkaXNjdXNzZWQsIHJlbGllcyBvbiBsb2FkaW5nIHRoZSBmaXJtd2FyZS4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSB0aGUgYmxvY2tpbmcgcG9pbnQuIExvb2tzIGxpa2UgdGhpcyBjb3VsZCBlYXNpbHkgYmUgYW5vdGhlciBpbnN0YW5jZSBvZiBhIGRyaXZlciB3aG9zZSBmaXJtd2FyZSBsb2FkaW5nIG1ha2VzIGl0IGEgYmFkIHRhcmdldCBmb3IgZnV6emluZy4gVGltZSB0byBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcHJvYmUgYW5kIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIG9idmlvdXNseSBnb2luZyB0byBibG9jayB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTo0NS4yMjUzMzY4OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdHN0YXRpYyBpbnQgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyLFxcbiAyMTE6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIGludCBmd19tYXhfc2l6ZSlcXG4gMjEyOlxcdHtcXG4gMjEzOlxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7XFxuIDIxNDpcXHRcXHRpbnQgcmV0O1xcbiAyMTU6XFx0XFxuIDIxNjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFxcdTAwMjZmdywgZndfbmFtZSwgZGV2KTtcXG4gMjE3OlxcdFxcdGlmIChyZXQpXFxuIDIxODpcXHRcXHRcXHRyZXR1cm4gcmV0ID09IC1FTk9FTlQgPyAtRVBST0JFX0RFRkVSIDogcmV0O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzZSBmd19tYXhfc2l6ZSkge1xcbiAyMjE6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogZncgc2l6ZSB0b28gb3ZlcmxpbWl0ICglenUpXFxcXG5cXFwiLFxcbiAyMjI6XFx0XFx0XFx0XFx0ZndfbmFtZSwgZnctXFx1MDAzZXNpemUpO1xcbiAyMjM6XFx0XFx0XFx0cmV0ID0gLUUyQklHO1xcbiAyMjQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIyNTpcXHRcXHR9XFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdG1lbWNweV90b2lvKGFkZHIsIGZ3LVxcdTAwM2VkYXRhLCBmdy1cXHUwMDNlc2l6ZSk7XFxuIDIyODpcXHRvdXQ6XFxuIDIyOTpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4gMjMwOlxcdFxcbiAyMzE6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjMyOlxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0c3RhdGljIGludFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNTo0NS4yMjU0NjgwNjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NTk5MTYxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIHRoZSBBaXJvaGEgRmlybXdhcmUgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHRoaXMgQWlyb2hhIGZpcm13YXJlIGlzc3VlLiBUaGUgY29kZSBpbmRpY2F0ZXMgdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAsIHdlJ3JlIGdldHRpbmcgYW4gYC1FUFJPQkVfREVGRVJgLiBSaWdodCwgdGhhdCdzIGV4cGVjdGVkIGJlaGF2aW9yLiBIb3dldmVyLCB0aGUgbmV4dCB0aG91Z2h0IGlzIHRoZSBmaXJtd2FyZSBpdHNlbGYuIFN5emthbGxlciBwcm9iYWJseSBkb2Vzbid0IGhhdmUgdGhlIEFpcm9oYSBmaXJtd2FyZSBiYWtlZCBpbnRvIGl0cyBpbWFnZSwgdW5sZXNzIGl0J3MgYXZhaWxhYmxlIGluIGxpbnV4LWZpcm13YXJlIGFuZCBzeXprYWxsZXIgaXMgY29uZmlndXJlZCB0byBpbmNsdWRlIGl0LiBFdmVuIHRoZW4sIGl0J3MgbGlrZWx5IHZlcnkgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIFN5c3RlbS1vbi1hLUNoaXAuXG5cbldhaXQgYSBzZWNvbmQsIHRoaXMgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYGFpcm9oYV9ucHVfc2VuZF9tc2dgLiBUaGF0IGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IGBhaXJvaGFfbnB1X3BwZV9pbml0YCwgYGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZGAsIGFuZCBwcm9iYWJseSBzb21lIG90aGVycy4gTGV0IG1lIGZpbmQgb3V0IGV4YWN0bHkgKndoZXJlKiBgYWlyb2hhX25wdV9zZW5kX21zZ2AgaXMgYmVpbmcgdXNlZC4gQWgsIGl0J3MgaW4gYGFpcm9oYV9ucHVfcHBlX2luaXRgLCBgYWlyb2hhX25wdV9wcGVfZGVpbml0YCBhbmQgYSBmZXcgb3RoZXJzLiBOb3csIGBhaXJvaGFfbnB1X3BwZV9pbml0YCBnZXRzIGFzc2lnbmVkIHRvIGBucHUtXHUwMDNlb3BzLnBwZV9pbml0YC4gVGhhdCdzIGEgZ29vZCBsZWFkLiBcblxuU28gdGhlIHJlYWwgcXVlc3Rpb24gaXM6IHdobyAqYWN0dWFsbHkqIGNhbGxzIGBucHUtXHUwMDNlb3BzLnBwZV9pbml0YD8gVGltZSB0byBkaWcgaW50byBgYWlyb2hhX3BwZS5jYCB0byB0cmFjZSB0aGF0IGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTU6NTYuOTg1Mzg4NTU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc0MzM4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTc0PXN0YXRpYyBpbnQgYWlyb2hhX3NldF9tYWNhZGRyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTQxOlxcdGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKGRldiwgYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTE2MTI9c3RhdGljIGludCBhaXJvaGFfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTY0MjpcXHRlcnIgPSBhaXJvaGFfcHBlX2luaXQoZXRoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE2NDMtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg9NzM2PWludCBhaXJvaGFfcHBlX3NldHVwX3RjX2Jsb2NrX2NiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCB2b2lkICp0eXBlX2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmg6NzM3OmludCBhaXJvaGFfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC03Mzgtdm9pZCBhaXJvaGFfcHBlX2RlaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oOjczOTp2b2lkIGFpcm9oYV9wcGVfaW5pdF91cGRfbWVtKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCBjb25zdCB1OCAqYWRkcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaC03NDAtdTMyIGFpcm9oYV9wcGVfZ2V0X3RvdGFsX251bV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0zMjc9c3RhdGljIGlycXJldHVybl90IGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqY29yZV9pbnN0YW5jZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MzQyOnN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtMzQzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA0PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy03MjEtXFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjI6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzIzLVxcdG5wdS1cXHUwMDNlb3BzLnBwZV9kZWluaXQgPSBhaXJvaGFfbnB1X3BwZV9kZWluaXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MjQ6XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcyNS1cXHRucHUtXFx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xNDI4PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9vZmZsb2FkX3NldHVwKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoxNDM3OlxcdGVyciA9IG5wdS1cXHUwMDNlb3BzLnBwZV9pbml0KG5wdSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDM4LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0NDctXFx0aWYgKHBwZV9udW1fc3RhdHNfZW50cmllcyBcXHUwMDNlIDApIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0NDg6XFx0XFx0ZXJyID0gbnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMobnB1LCBwcGUtXFx1MDAzZWZvZV9zdGF0c19kbWEsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDQ5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHBwZV9udW1fc3RhdHNfZW50cmllcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTE0OTM9dm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTUxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1MTI6dm9pZCBhaXJvaGFfcHBlX2luaXRfdXBkX21lbShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgY29uc3QgdTggKmFkZHIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTU4NT1FWFBPUlRfU1lNQk9MX0dQTChhaXJvaGFfcHBlX3B1dF9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE1ODc6aW50IGFpcm9oYV9wcGVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTU4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA4OjE1OjU3Ljg2Mjg0MjY3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODAwODU1MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlciBhbmQgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgZm9yIHRoZSBBaXJvaGEgRU43NTgxIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgYWlyb2hhX3BwZV9pbml0YCBmdW5jdGlvbi4gSXQncyBjYWxsZWQgYnkgYGFpcm9oYV9od19pbml0YCwgd2hpY2ggaW4gdHVybiByZXNpZGVzIGluIGBhaXJvaGFfZXRoLmNgLiBUaGlzIGlzIHRoZSBjb3JlIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIHByb2JlZCBlZmZlY3RpdmVseT8gU2luY2UgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5nIGBhaXJvaGEsZW43NTgxLWV0aGAgaXMgY3J1Y2lhbC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydDogY2FuIFN5emthbGxlciBmdXp6IHRoaXM/IEkga25vdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHBsYXRmb3JtIGRldmljZXMsIGJ1dCBoZXJlJ3MgdGhlIGNhdGNoIOKAkyB0aGlzIGRyaXZlciByZWxpZXMgb24gc3BlY2lmaWMgTU1JTyByZWdpc3RlcnMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBpdCBoYXMgYSBoYXJkIGRlcGVuZGVuY3kgb24gdGhlIE5QVSBkcml2ZXIuIFRoZSBOUFUgbmVlZHMgdG8gYmUgc3VjY2Vzc2Z1bGx5IHByb2JlZCAqYmVmb3JlKiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNhbiBmdW5jdGlvbiBjb3JyZWN0bHksIGFuZCB0aGF0IHByb2JlIGRlcGVuZHMgb24gZmlybXdhcmUgYmVpbmcgcHJlc2VudCBhbmQgbG9hZGVkIHZpYSBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbid0IHRoZXJlLCBgYWlyb2hhX25wdV9wcm9iZWAgZWl0aGVyIGRlZmVycyBvciBmYWlscy5cblxuVGhlIGRvd25zdHJlYW0gaW1wYWN0IGlzIGNyaXRpY2FsLiBBIGZhaWx1cmUgaW4gYGFpcm9oYV9ucHVfcHJvYmVgIGxlYWRzIHRvIGEgZmFpbHVyZSBpbiBgYWlyb2hhX25wdV9nZXRgLCB3aGljaCB0aGVuIG1lYW5zIGBhaXJvaGFfcHBlX29mZmxvYWRfc2V0dXBgIGZhaWxzLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYGFpcm9oYV9wcGVfbnB1X2dldGAgdXNlcyBgcmVxdWVzdF9tb2R1bGUoXCJhaXJvaGEtbnB1XCIpYCBhbmQgdGhlbiBjYWxscyBgYWlyb2hhX25wdV9nZXQoZXRoLVx1MDAzZWRldilgLiBTbywgdGhlIE5QVSBkcml2ZXIgKnNob3VsZCogYmUgbG9hZGVkIGFuZCBwcm9iZWQsIGlmIHRoZSBtb2R1bGUgZXhpc3RzLiBJZiB0aGUgTlBVIGlzbid0IHByb2JlZCwgYGFpcm9oYV9ucHVfZ2V0YCB3aWxsIHJldHVybiBhbiBlcnJvciwgYW5kIHRoaXMgd2lsbCBwcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBmdW5jdGlvbmluZy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWlyb2hhX25wdV9nZXRgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVyLiBUaGlzIGlzIGEgcG90ZW50aWFsIHdlYWtuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNjowNC42NjM3MDA2NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0c3RydWN0IGFpcm9oYV9ucHUgKmFpcm9oYV9ucHVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldilcXG4gNjExOlxcdHtcXG4gNjEyOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7XFxuIDYxMzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbiA2MTQ6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0bnAgPSBvZl9wYXJzZV9waGFuZGxlKGRldi1cXHUwMDNlb2Zfbm9kZSwgXFxcImFpcm9oYSxucHVcXFwiLCAwKTtcXG4gNjE3OlxcdFxcdGlmICghbnApXFxuIDYxODpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0cGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobnApO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAoIXBkZXYpIHtcXG4gNjIzOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiY2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcXFxcblxcXCIsIG5wLVxcdTAwM2VuYW1lKTtcXG4gNjI0OlxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG4gNjI1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbiA2MjY6XFx0XFx0fVxcbiA2Mjc6XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbiA2Mjg6XFx0XFxuIDYyOTpcXHRcXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkge1xcbiA2MzA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJmYWlsZWQgdG8gZ2V0IHRoZSBkZXZpY2UgZHJpdmVyIG1vZHVsZVxcXFxuXFxcIik7XFxuIDYzMTpcXHRcXHRcXHRucHUgPSBFUlJfUFRSKC1FTk9ERVYpO1xcbiA2MzI6XFx0XFx0XFx0Z290byBlcnJvcl9wZGV2X3B1dDtcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0bnB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIDYzNjpcXHRcXHRpZiAoIW5wdSkge1xcbiA2Mzc6XFx0XFx0XFx0bnB1ID0gRVJSX1BUUigtRU5PREVWKTtcXG4gNjM4OlxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gNjM5OlxcdFxcdH1cXG4gNjQwOlxcdFxcbiA2NDE6XFx0XFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfU1VQUExJRVIpKSB7XFxuIDY0MjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDY0MzpcXHRcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgbGluayB0byBjb25zdW1lciAlc1xcXFxuXFxcIixcXG4gNjQ0OlxcdFxcdFxcdFxcdGRldl9uYW1lKGRldikpO1xcbiA2NDU6XFx0XFx0XFx0bnB1ID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gNjQ2OlxcdFxcdFxcdGdvdG8gZXJyb3JfbW9kdWxlX3B1dDtcXG4gNjQ3OlxcdFxcdH1cXG4gNjQ4OlxcdFxcbiA2NDk6XFx0XFx0cmV0dXJuIG5wdTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MDQuNjYzNzgyMjg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMTA1Nzc0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlciBhbmQgRmlybXdhcmUgRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHRvIGdldCBgYWlyb2hhX25wdV9nZXRgIHdvcmtpbmcsIEkgbmVlZCBhIGRldmljZSBub2RlIHdpdGggdGhlIGBhaXJvaGEsbnB1YCBwaGFuZGxlLCBhbmQgdGhlIE5QVSBkcml2ZXIgaGFzIHRvIGJlIHVwIGFuZCBydW5uaW5nLiBUaGF0IG1lYW5zIGBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KWAgY2FuJ3QgYmUgTlVMTC4gRm9yIHRoZSBOUFUgZHJpdmVyIHRvIGFjdHVhbGx5IHByb2JlIGNvcnJlY3RseSwgaXQgbmVlZHMgdGhlIGZpcm13YXJlLiBBbmQsIG9mIGNvdXJzZSwgc3l6a2FsbGVyIG1pZ2h0IG5vdCBoYXZlIHRoYXQgZmlybXdhcmUgYXZhaWxhYmxlLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgcHJvYmUgdG8gZmFpbCByaWdodCBhd2F5LiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBtb2NrIHRoZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBnb2VzIG9uIHRvIGRvIHRoaW5ncyB0aGF0IHN1Z2dlc3QgYSBmdWxseSBvcGVyYXRpb25hbCBOUFUgaXMgcmVxdWlyZWQsIGxpa2Ugd3JpdGluZyB0byByZWdpc3RlcnMgdXNpbmcgYHJlZ21hcF93cml0ZWA6XG5cbmBgYGNcblx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSwgLi4uKTtcblx0bXNsZWVwKDEwMCk7XG5cdC8qIGVuYWJsZSBOUFUgY29yZXMgKi9cblx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9CT09UX0NPTkZJRywgMHhmZik7XG5cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfQk9PVF9UUklHR0VSLCAweDEpO1xuXHRtc2xlZXAoMTAwKTtcbmBgYFxuXG5UaGVuLCB0aGUgZHJpdmVyIHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIE5QVS4gVGhpcyBsb29rcyBhIGJpdCBpbnZvbHZlZDpcblxuYGBgY1xuXHRpZiAoIWFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KG5wdSwgMCwgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OLFxuXHRcdFx0XHQgICAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIEdGUF9LRVJORUwpKVxuXHRcdGRldl9pbmZvKGRldiwgXCJOUFUgdmVyc2lvbjogJWQuJWRcXG5cIiwgdmFsIFx1MDAzZVx1MDAzZSAxNiwgdmFsIFx1MDAyNiAweGZmZmYpO1xuYGBgXG5cbldhaXQgYSBzZWNvbmQuLi4gYGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0YCBjYWxscyBgYWlyb2hhX25wdV9zZW5kX21zZ2AhIFRoYXQncyB0aGUgZnVuY3Rpb24gSSBtb2RpZmllZCBpbiB0aGUgcGF0Y2ghIE9rYXksIEkgbmVlZCB0byByZXZpc2l0IGBhaXJvaGFfbnB1X3NlbmRfbXNnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwODoxNjoxMi45NzQzNjE5ODRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjMsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNjM6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbiAxNjQ6XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKnAsIGludCBzaXplKVxcbiAxNjU6XFx0e1xcbiAxNjY6XFx0XFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xcbiAxNjc6XFx0XFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbiAxNjg6XFx0XFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4gMTY5OlxcdFxcdHZvaWQgKmRtYV9idWY7XFxuIDE3MDpcXHRcXHRpbnQgcmV0O1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHQvKlxcbiAxNzM6XFx0XFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgc21hbGwgYW5kIGJpZGlyZWN0aW9uYWwgKENQVSBzZXRzIHRoZVxcbiAxNzQ6XFx0XFx0ICogcmVxdWVzdCwgTlBVIHdyaXRlcyB0aGUgcmVzcG9uc2UpLiBTdHJlYW1pbmcgRE1BX0JJRElSRUNUSU9OQUxcXG4gMTc1OlxcdFxcdCAqIG1hcHBpbmcgcmVncmVzc2VzIEVONzU4MStNVDc5OTY6IE1CT1ggcmVwb3J0cyBzdWNjZXNzIGJ1dFxcbiAxNzY6XFx0XFx0ICogV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OIHN0aWxsIHJlYWRzIGFzIDAuMC4gVXNlIGFcXG4gMTc3OlxcdFxcdCAqIGNvaGVyZW50IGJvdW5jZSBidWZmZXIgc28gdGhlIENQVSBhbHdheXMgc2VlcyB0aGUgTlBVIHJlc3BvbnNlLlxcbiAxNzg6XFx0XFx0ICovXFxuIDE3OTpcXHRcXHRkbWFfYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KG5wdS1cXHUwMDNlZGV2LCBzaXplLCBcXHUwMDI2ZG1hX2FkZHIsIEdGUF9BVE9NSUMpO1xcbiAxODA6XFx0XFx0aWYgKCFkbWFfYnVmKVxcbiAxODE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdG1lbWNweShkbWFfYnVmLCBwLCBzaXplKTtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xcbiAxODY6XFx0XFxuIDE4NzpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4gMTg4OlxcdFxcdHJlZ21hcF93cml0ZShucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgxKSArIG9mZnNldCwgc2l6ZSk7XFxuIDE4OTpcXHRcXHRyZWdtYXBfcmVhZChucHUtXFx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgXFx1MDAyNnZhbCk7XFxuIDE5MDpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xcbiAxOTE6XFx0XFx0dmFsID0gRklFTERfUFJFUChNQk9YX01TR19GVU5DX0lELCBmdW5jX2lkKSB8IE1CT1hfTVNHX1dBSVRfUlNQO1xcbiAxOTI6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDMpICsgb2Zmc2V0LCB2YWwpO1xcbiAxOTM6XFx0XFxuIDE5NDpcXHRcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKG5wdS1cXHUwMDNlcmVnbWFwLFxcbiAxOTU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUkVHX0NSX01CUTBfQ1RSTCgzKSArIG9mZnNldCxcXG4gMTk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbCwgKHZhbCBcXHUwMDI2IE1CT1hfTVNHX0RPTkUpLFxcbiAxOTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMTAwLCAxMDAgKiBNU0VDX1BFUl9TRUMpO1xcbiAxOTg6XFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxcbiAxOTk6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdGlmICghcmV0KVxcbiAyMDQ6XFx0XFx0XFx0bWVtY3B5KHAsIGRtYV9idWYsIHNpemUpO1xcbiAyMDU6XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQobnB1LVxcdTAwM2VkZXYsIHNpemUsIGRtYV9idWYsIGRtYV9hZGRyKTtcXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0cmV0dXJuIHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MTIuOTc0NDQ1NjE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODYyMzIzNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQWlyb2hhIE5QVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRvIGludm9sdmUgd3JpdGluZyB0byBNTUlPIHJlZ2lzdGVycywgdGhlbiB3YWl0aW5nIGZvciBhIHNwZWNpZmljIGJpdCwgYE1CT1hfTVNHX0RPTkVgLCB0byBiZSBzZXQuIFRoZSBpc3N1ZSBpcywgdGhpcyBkcml2ZXIgaXMgdGllZCB0byB0aGUgQWlyb2hhIEVONzU4MSBoYXJkd2FyZSwgb3IgYXQgbGVhc3QgYSBzcGVjaWZpYyBlbXVsYXRvciB0aGF0J3Mgbm90IHN0YW5kYXJkIGluIFFFTVUuIElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGUgcG9sbGluZyBmdW5jdGlvbiB3aWxsIHRpbWUgb3V0LCB3aGljaCBtZWFucyB0aGUgY29kZSBwYXRoIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG5cbkluaXRpYWxseSwgSSB0aG91Z2h0IHN5emthbGxlciwgd2l0aCBpdHMgTU1JTyByZWFkL3dyaXRlIGluamVjdGlvbiwgbWlnaHQgc29tZWhvdyBnZXQgYXJvdW5kIHRoaXMuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2Ugc3l6a2FsbGVyIGNvdWxkIGluamVjdCBhIHBsYXRmb3JtIGRldmljZSwgbWFwIHRoZSBNTUlPIHJlZ2lvbiB0byBkdW1teSBtZW1vcnksIGFuZCBwb3RlbnRpYWxseSB0cmljayB0aGUgZHJpdmVyIGludG8gcmVhZGluZyBhIHZhbHVlIHdpdGggYE1CT1hfTVNHX0RPTkVgIHNldC4gQnV0IHRoZW4sIHRoZXJlJ3MgdGhlIGZpcm13YXJlIGxvYWRpbmcgaXNzdWUuIFRoZSBgYWlyb2hhX25wdV9wcm9iZWAgcm91dGluZSBjYWxscyBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCBjYWxscyBgYWlyb2hhX25wdV9sb2FkX2Zpcm13YXJlYC4gQW5kIGNydWNpYWxseSwgdGhpcyB1c2VzIGByZXF1ZXN0X2Zpcm13YXJlYC4gSWYgdGhlIGZpcm13YXJlIGlzbid0IHByZXNlbnQsIGByZXF1ZXN0X2Zpcm13YXJlYCBmYWlscyB3aXRoIGAtRU5PRU5UYCwgd2hpY2ggbGVhZHMgdG8gYC1FUFJPQkVfREVGRVJgIGFuZCB0aGUgcHJvYmUgZmFpbHMuIFN5emthbGxlciBjYW4ndCBwcm92aWRlIHRoZSBmaXJtd2FyZSB1bmxlc3MgaXQncyBpbiB0aGUgaW1hZ2UuIFRoZXJlJ3Mgbm8gd2F5IHRvIGJ5cGFzcyB0aGlzIGZpcm13YXJlIGxvYWRpbmcgc3RlcC5cblxuSSBjaGVja2VkIGBhaXJvaGFfbnB1X2xvYWRfZmlybXdhcmVgIHRvIGNvbmZpcm0gdGhhdCBpZiBgcmVxdWVzdF9maXJtd2FyZWAgZmFpbHMgd2l0aCBgLUVOT0VOVGAgdGhlbiBpdCByZXR1cm5zIGAtRVBST0JFX0RFRkVSYC5cblxuVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGlmIGEgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgdGhlbiBpdCdzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5QVSBkcml2ZXIsIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWZpYyBlbXVsYXRpb24gbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUuIEl0IGFsc28gZXhwbGljaXRseSBsaXN0cyBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgYXMgZXhhbXBsZXMgb2YgY29kZSBub3Qgd29ydGggZnV6emluZywgYW5kIHRoaXMgY2xlYXJseSBmYWxscyBpbnRvIHRoYXQgY2F0ZWdvcnkuXG5cblRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZpcnR1YWwgQWlyb2hhIE5QVSBkcml2ZXIsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRoaXMgY29kZSB3b3VsZCBiZSB1c2VkIGFueXdoZXJlIGVsc2UuIEl0J3MgdXNlZCBieSBgYWlyb2hhX2V0aGAsIHdoaWNoIGlzIGFub3RoZXIgZHJpdmVyIGZvciB0aGUgQWlyb2hhIEVONzU4MSBldGhlcm5ldCBoYXJkd2FyZS4gVGhlc2UgYXJlIGFsbCBmb3Igc3BlY2lmaWMgcGh5c2ljYWwgaGFyZHdhcmUuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIHRoZSBhbmdsZXMsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIG1lYW5pbmdmdWxseSBmdXp6IGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gSXQncyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCdzIGhhcmR3YXJlLWRlcGVuZGVudCwgYW5kIHRoYXQncyB0aGUgZGVjaWRpbmcgZmFjdG9yLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyMTEsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDg6MTY6MjUuODM2NzcyMDY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1haWxib3ggY29tbXVuaWNhdGlvbiBsb2dpYyBpbiB0aGUgQWlyb2hhIEVONzU4MS9BTjc1ODMgTlBVIGRyaXZlciAoYWlyb2hhX25wdSkuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIGZvciBuZXR3b3JraW5nIFNvQyBoYXJkd2FyZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBmaXJtd2FyZSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIG1lYW5pbmdmdWxseSBmdXp6ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWlsYm94IGNvbW11bmljYXRpb24gbG9naWMgaW4gdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIE5QVSBkcml2ZXIgKGFpcm9oYV9ucHUpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciBmb3IgbmV0d29ya2luZyBTb0MgaGFyZHdhcmUgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgZmlybXdhcmUgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciBtZWFuaW5nZnVsbHkgZnV6emVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mx2f[1] Phase: Running StartedAt: 2026-08-05 08:16:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mx2f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-05 08:16:37 +0000 UTC FinishedAt: 2026-08-05 08:16:42 +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,}