Name: series-workflowrl5gl Phase: Failed StartedAt: 2026-08-21 15:38:32 +0000 UTC FinishedAt: 2026-08-21 15:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl5gl[0] Phase: Succeeded StartedAt: 2026-08-21 15:38:32 +0000 UTC FinishedAt: 2026-08-21 15:41:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl5gl[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 15:38:32 +0000 UTC FinishedAt: 2026-08-21 15:41:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3YTAxOTEwZjQzOGNhODU0ZWMwNzJkN2E3OThiZTFlY2U3MjYwN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5pbmRleCA4NWE3NGNkNmVhMWYzLi5mNjc3NDk4MDY1MmZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtODksNiAmIzQzOzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTTUExL1UuRkwxIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqfFNNQTEgUlggRW5hYmxlICB8ICAgICAgIDAgICAgIHwgICAgICB4ICAgICB8XG4mIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8XG4mIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKlxuJiM0MzsgKiBTTUEyL1UuRkwyIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxuJiM0MzsgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKi9cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXG5AQCAtNDQzLDYgJiM0Mzs0NjYsNDAgQEAgaWNlX2RwbGxfc3dfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZC1cdTAwM2VwcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4mIzQzO1x0XHRyZXR1cm4gZC1cdTAwM2VwcHMuZHBsbF9pZHg7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0YXJnZXQtXHUwMDNlc3RhdGVbZC1cdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbiYjNDM7XHRcdHJldHVybiBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGljZV9kcGxsX3BpbiAqKnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0KnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHQqcGVlcl90eXBlID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwZWVyLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiYjNDM7XHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlb3V0cHV0O1xuJiM0MztcdFx0KnBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuJiM0MztcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiYjNDM7XHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiAmIzQzOzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbiYjNDM7ICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbiYjNDM7ICpcbiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuJiM0MzsgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuJiM0MzsgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuJiM0MzsgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4mIzQzO1xuJiM0MztcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuJiM0MztcdGlmIChwZWVyLVx1MDAzZXBpbilcbiYjNDM7XHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxuQEAgLTcxMSw2ICYjNDM7NzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cGluLVx1MDAzZXN0YXRlW2ldID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcbiBcdHN3aXRjaCAocGluX3R5cGUpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XG4gXHRcdHJldCA9IGljZV9hcV9nZXRfaW5wdXRfcGluX2NmZyhcdTAwMjZwZi1cdTAwM2VodywgcGluLVx1MDAzZWlkeCwgXHUwMDI2cGluLVx1MDAzZXN0YXR1cyxcbkBAIC03MjAsMjUgJiM0Mzs4MDMsMzEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcdFx0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbiYjNDM7XHRcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbiYjNDM7XHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiYjNDM7XHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiYjNDM7XHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuJiM0MztcdFx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG5AQCAtNzUwLDE5ICYjNDM7ODM5LDIzIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcbiBcbiBcdFx0cGFyZW50IFx1MDAyNj0gSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfRFBMTF9TUkNfU0VMO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4mIzQzO1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4mIzQzO1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XG5AQCAtMTE2MywzMCAmIzQzOzEyNTYsODUgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0MztzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGVkO1xuJiM0MztcdHU4IGRwbGxfaWR4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuJiM0MztcdFx0Y29uZmlnLVx1MDAzZWVuYWJsZWQgPSB0YXJnZXQtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICBJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU47XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTjtcbiYjNDM7XHRcdGlmICghY29uZmlnLVx1MDAzZWVuYWJsZWQpIHtcbiYjNDM7XHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgdGFyZ2V0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcbiYjNDM7XHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4mIzQzO1x0XHRyZXR1cm4gcmVzdG9yZV9lcnIgPyByZXN0b3JlX2VyciA6IHVwZGF0ZV9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBpbml0X2VycilcbiYjNDM7e1xuJiM0MztcdGludCByZXN0b3JlX2VycjtcbiYjNDM7XG4mIzQzO1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRpZiAoIXJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2Vycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN0b3JlX2VycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTIwOCwyOCAmIzQzOzEzNTYsMzcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIHtcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbi1cdHU4IGRhdGE7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiYjNDM7XHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4mIzQzO1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4gXG4gXHRpZiAocC1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWFjdGl2ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuJiM0MztcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbkBAIC0xMjQxLDcgJiM0MzsxMzk4LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcbiBcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcbiBcdCAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dFxuQEAgLTEyNTAsMjUgJiM0MzsxNDA3LDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XG4gXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cbiBcdCAqL1xuLVx0cGVlciA9IFx1MDAyNmQtXHUwMDNldWZsW3AtXHUwMDNlaWR4XTtcbiYjNDM7XHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGVlci1cdTAwM2VpbnB1dCkge1xuIFx0XHRcdHRhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCxcbi1cdFx0XHRcdFx0ICBkLVx1MDAzZWVlYy5kcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbi1cdFx0aWYgKCFyZXQpXG4tXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVx1MDAzZXBmLCB0YXJnZXQsXG4tXHRcdFx0XHRcdFx0XHR0eXBlLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9wZWVyOlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLVx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNnBlZXJfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWE6XG4mIzQzO1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTUsMTMgJiM0MzsxNDczLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbiYjNDM7XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHAtXHUwMDNlcGY7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuJiM0MztcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0dTggZGF0YTtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG5AQCAtMTMxMSwxNCAmIzQzOzE0OTMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cbiBcdFx0XHQgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZVxuIFx0XHRcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXG5AQCAtMTMyOSwxOCAmIzQzOzE1MTQsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgJiM0MzsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzY0LDIzICYjNDM7MTU1Myw3NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXG4gXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoaHcsIGRhdGEpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRSxcbiBcdFx0XHRcdFx0ZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXG4gXHRpZiAoZW5hYmxlKVxuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgcC1cdTAwM2VtdXhlZCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCwgXHUwMDI2cGVlcl90eXBlKTtcbiYjNDM7XHRcdGlmICghcGVlcl90YXJnZXQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgcGVlcl90YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHQgIHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztyZXN0b3JlX3BlZXI6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4mIzQzO3Jlc3RvcmVfdGFyZ2V0OlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHApO1xuJiM0MztcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2NCw0MyAmIzQzOzE3MDQsMTY3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXHUwMDNlcGY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4mIzQzO1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbi1cdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4mIzQzO1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgJiM0MzsgT1VUUFVUXG4mIzQzO1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbiYjNDM7XHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbmFibGUgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XG4mIzQzO1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCAmIzQzOyBJTlBVVFxuJiM0MztcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4mIzQzO1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuJiM0MztcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuLVx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlaW5wdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4tXHRpZiAoZW5hYmxlKVxuJiM0MztcdGlmICghc21hLVx1MDAzZWFjdGl2ZSkge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHR1OCBkYXRhO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0b2xkX2RhdGEgPSBkYXRhO1xuJiM0MztcdFx0c3dpdGNoIChzbWEtXHUwMDNlaWR4KSB7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2b2xkX2NvbmZpZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0LyogUmVmcmVzaCB0YXJnZXQgc3RhdGUgYmVmb3JlIHBlZXItc2lkZSBvcGVyYXRpb25zLiAqL1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHNtYS1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZwZWVyX3R5cGUpO1xuJiM0MztcdFx0XHRpZiAoIXBlZXJfdGFyZ2V0KSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPVxuJiM0MztcdFx0XHRcdGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHBlZXJfdGFyZ2V0KTtcbiYjNDM7XHRcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgIHBlZXJfZHBsbF9pZHgsIHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO3Jlc3RvcmVfcGVlcjpcbiYjNDM7XHRyZXN0b3JlX2VyciA9XG4mIzQzO1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV90YXJnZXQ6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuJiM0MztyZXN0b3JlX3NtYV9jdHJsOlxuJiM0MztcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgc21hKTtcbiYjNDM7XHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTY5Nyw3ICYjNDM7MjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbiYjNDM7XHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ1MTksNiAmIzQzOzQ4ODMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRpZiAocGluLVx1MDAzZWlucHV0LVx1MDAzZXJlZl9zeW5jKVxuIFx0XHRcdHBpbi1cdTAwM2VyZWZfc3luYyA9IHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYyAtIHBpbl9hYnNfaWR4O1xuIFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTtcbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuJiM0MztcbiBcdFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFx1MDAyNnBpbi1cdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkmIzQzOyYjNDM7KSB7XG5AQCAtNDUyOCw3ICYjNDM7NDg5NCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XG4gXHRcdHBpbi1cdTAwM2VwZiA9IHBmO1xuIFx0XHRwaW4tXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XG4tXHRcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuJiM0MztcdFx0c3dpdGNoIChpKSB7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTM4LDcgJiM0Mzs0OTA1LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRcdHBpbi1cdTAwM2VpbnB1dCA9IE5VTEw7XG4gXHRcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XG4tXHRcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSAmIzQzO1xuIFx0XHRcdFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcbkBAIC00NTUxLDcgJiM0Mzs0OTE5LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID1cbiBcdFx0XHRcdChEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8XG4gXHRcdFx0XHQgY2Fwcyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7SW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuJiM0MztcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5AQCAtNDc0Myw2ICYjNDM7NTExNiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXG4gXHRkZS1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XG4gXHRkcC1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XG4mIzQzO1x0aWYgKGRlLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8XG4mIzQzO1x0ICAgIGRwLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHRcJiMzNDtpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkZS1cdTAwM2VkcGxsX2lkeCwgZHAtXHUwMDNlZHBsbF9pZHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0ZC1cdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XG4gXHRkLVx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xuIFx0ZC1cdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFx1MDAyNlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbkBAIC03Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcbiBcdHMzMiBwaGFzZV9hZGp1c3Q7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcbiBcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiBcdHM2NCBwaGFzZV9vZmZzZXQ7XG4gXHR1OCBzdGF0dXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2EwMTkxMGY0MzhjYTg1NGVjMDcyZDdhNzk4YmUxZWNlNzI2MDdmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTU6NDA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmY2Nzc0OTgwNjUyZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC04OSw2ICYjNDM7ODksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlCiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHwKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKnxTTUExIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfAomIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8CiYjNDM7ICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwKJiM0MzsgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqCiYjNDM7ICogU01BMi9VLkZMMiBNVVggdGFibGUKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8dS5GTDIgUlggRW5hYmxlIHwgICAgICAgMSAgICAgfCAgICAgIHggICAgIHwgICAgIDAgICAgICB8CiYjNDM7ICp8U01BMiBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIDEgICAgICB8CiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKi8KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1cKICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmUKQEAgLTQ0Myw2ICYjNDM7NDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCkKJiM0Mzt7CiYjNDM7CWlmIChkLSZndDtwcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtwcHMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtwcHMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CWlmIChkLSZndDtlZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsCiYjNDM7CQkJCSAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKQomIzQzO3sKJiM0MzsJKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJKnBlZXJfdHlwZSA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGVlci0mZ3Q7ZGlyZWN0aW9uKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDoKJiM0MzsJCSpwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiYjNDM7CQkqcGVlcl90YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX3Bpbl9lbmFibGUgLSBlbmFibGUgYSBwaW4gb24gZHBsbHMKICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmUKQEAgLTUzOCw2ICYjNDM7NTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZQomIzQzOyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCiYjNDM7ICoKJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCiYjNDM7ICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2UKJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCiYjNDM7ICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCiYjNDM7ICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKJiM0MzsKJiM0MzsJcGVlciA9IGNoYW5nZWQtJmd0O211eGVkOwomIzQzOwlpZiAocGVlci0mZ3Q7cGluKQomIzQzOwkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItJmd0O3Bpbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmcKICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW4KQEAgLTcxMSw2ICYjNDM7NzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLAogCXU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUOwogCWludCByZXQ7CiAKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJcGluLSZndDtzdGF0ZVtpXSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsKIAlzd2l0Y2ggKHBpbl90eXBlKSB7CiAJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDoKIAkJcmV0ID0gaWNlX2FxX2dldF9pbnB1dF9waW5fY2ZnKCZhbXA7cGYtJmd0O2h3LCBwaW4tJmd0O2lkeCwgJmFtcDtwaW4tJmd0O3N0YXR1cywKQEAgLTcyMCwyNSAmIzQzOzgwMywzMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJCQlnb3RvIGVycjsKIAkJaWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiAmYW1wOyBwaW4tJmd0O2ZsYWdzWzBdKSB7CiAJCQlpZiAocGluLSZndDtwaW4pIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwotCQkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/Ci0JCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiYjNDM7CQkJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9CiYjNDM7CQkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwomIzQzOwkJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiYjNDM7CQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsJCQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/CiYjNDM7CQkJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKJiM0MzsJCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwogCQkJfSBlbHNlIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsJCQkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQlpZiAocGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwomIzQzOwkJCWlmIChwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKIAkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDoKQEAgLTc1MCwxOSAmIzQzOzgzOSwyMyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAKIAkJcGFyZW50ICZhbXA7PSBJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19EUExMX1NSQ19TRUw7CiAJCWlmIChJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19PVVRfRU4gJmFtcDsgcGluLSZndDtmbGFnc1swXSkgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggPwotCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggPwotCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwomIzQzOwkJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCXBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ID8KJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiYjNDM7CQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggPwomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKIAkJfSBlbHNlIHsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQotCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9CiYjNDM7CQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDoKQEAgLTExNjMsMzAgJiM0MzsxMjU2LDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkJICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiB9CiAKLS8qKgotICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlCi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3QKLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCi0gKgotICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAotICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZQotICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQotICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCi0gKgotICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwotICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCi0gKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLAotCQkJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwl1OCBkcGxsX2lkeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSwKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwomIzQzOwlpbnQgcmV0OwogCi0JcGVlciA9IChjaGFuZ2VkICZndDs9IGQtJmd0O3NtYSAmYW1wOyZhbXA7IGNoYW5nZWQgJmx0OyBkLSZndDtzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgPwotCQkmYW1wO2QtJmd0O3VmbFtjaGFuZ2VkLSZndDtpZHhdIDogJmFtcDtkLSZndDtzbWFbY2hhbmdlZC0mZ3Q7aWR4XTsKLQlpZiAocGVlci0mZ3Q7cGluKQotCQlfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci0mZ3Q7cGluKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOOwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOOwomIzQzOwkJaWYgKCFjb25maWctJmd0O2VuYWJsZWQpIHsKJiM0MzsJCQljb25maWctJmd0O2RwbGxfaWR4ID0gMDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHRhcmdldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IHJldDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCSAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyOwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtlbmFibGVkKQomIzQzOwkJcmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsCiYjNDM7CQkJCQkJICBjb25maWctJmd0O2RwbGxfaWR4LCB0eXBlLCBleHRhY2spOwomIzQzOwllbHNlCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CXVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXN0b3JlX2VyciB8fCB1cGRhdGVfZXJyKSB7CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkgJiMzNDtGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkgaW5pdF9lcnIsIHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyKTsKJiM0MzsJCXJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSwKJiM0MzsJCQkJICAgICBpbnQgaW5pdF9lcnIpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZV9lcnI7CiYjNDM7CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CWlmICghcmVzdG9yZV9lcnIpCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSBpbml0X2VyciwgcmVzdG9yZV9lcnIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdG9yZV9lcnI7CiB9CiAKIC8qKgpAQCAtMTIwOCwyOCAmIzQzOzEzNTYsMzcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogewogCXN0cnVjdCBpY2VfZHBsbHMgKmQgPSAmYW1wO3AtJmd0O3BmLSZndDtkcGxsczsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwotCXU4IGRhdGE7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7CiYjNDM7CXU4IGRhdGEsIG9sZF9kYXRhID0gMDsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7CiAKIAlpZiAocC0mZ3Q7ZGlyZWN0aW9uID09IGRpcmVjdGlvbiAmYW1wOyZhbXA7IHAtJmd0O2FjdGl2ZSkKIAkJcmV0dXJuIDA7CiAJcmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsICZhbXA7ZGF0YSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJc3dpdGNoIChwLSZndDtpZHgpIHsKIAljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKLQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX01BU0s7Ci0JCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkKJiM0MzsJCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKIAkJCWRhdGEgfD0gSUNFX1NNQTFfRElSX0VOOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfRElSX0VOOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKJiM0MzsJCX0KIAkJYnJlYWs7CiAJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6CiAJCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfRElSX0VOOwotCQkJZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiAJCX0gZWxzZSB7Ci0JCQlkYXRhICZhbXA7PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpOwogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1VGTDJfUlhfRElTOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9UWF9FTjsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI0MSw3ICYjNDM7MTM5OCw3IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCwKIAkJCQkJCUlDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLAogCQkJCQkJZXh0YWNrKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byByZXN0b3JlX3NtYTsKIAogCS8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGUKIAkgKiBpdHMgYmFja2luZyBDR1UgcGluIHNvIHRoZSBwaW4gcmVwb3J0cyBhcyBjb25uZWN0ZWQuIFdpdGhvdXQKQEAgLTEyNTAsMjUgJiM0MzsxNDA3LDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCwKIAkgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heQogCSAqIHN0aWxsIGJlIHVzaW5nIGl0LgogCSAqLwotCXBlZXIgPSAmYW1wO2QtJmd0O3VmbFtwLSZndDtpZHhdOwomIzQzOwlwZWVyID0gcC0mZ3Q7bXV4ZWQ7CiAJaWYgKHBlZXItJmd0O2FjdGl2ZSkgewotCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7Ci0JCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKLQogCQlpZiAocGVlci0mZ3Q7b3V0cHV0KSB7CiAJCQl0YXJnZXQgPSBwZWVyLSZndDtvdXRwdXQ7CiAJCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwotCQl9IGVsc2UgewomIzQzOwkJfSBlbHNlIGlmIChwZWVyLSZndDtpbnB1dCkgewogCQkJdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiAJCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byByZXN0b3JlX3NtYTsKIAkJfQotCQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cC0mZ3Q7cGYtJmd0O2h3LCB0YXJnZXQsCi0JCQkJCSAgZC0mZ3Q7ZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spOwotCQlpZiAoIXJldCkKLQkJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocC0mZ3Q7cGYsIHRhcmdldCwKLQkJCQkJCQl0eXBlLCBleHRhY2spOwomIzQzOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocC0mZ3Q7cGYsIHRhcmdldCwgdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWE7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpOwomIzQzOwkJaWYgKHBlZXJfZHBsbF9pZHggJmx0OyAwKQomIzQzOwkJCXBlZXJfZHBsbF9pZHggPSBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cC0mZ3Q7cGYtJmd0O2h3LCB0YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfcGVlcjsKIAl9CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmVzdG9yZV9wZWVyOgomIzQzOwlyZXN0b3JlX2VyciA9CiYjNDM7CQlpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocC0mZ3Q7cGYsIHRhcmdldCwgdHlwZSwgJmFtcDtwZWVyX2NvbmZpZywKJiM0MzsJCQkJCSAgICBleHRhY2ssIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwomIzQzO3Jlc3RvcmVfc21hOgomIzQzOwlpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHAtJmd0O3BmLCBvbGRfZGF0YSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjk1LDEzICYjNDM7MTQ3MywxNyBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwotCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKJiM0MzsJZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gcC0mZ3Q7cGY7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnOwogCXN0cnVjdCBpY2VfaHcgKmh3OwomIzQzOwl1OCBvbGRfZGF0YSA9IDA7CiAJYm9vbCBlbmFibGU7CiAJdTggZGF0YTsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDsKIAogCWlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEzMTEsMTQgJiM0MzsxNDkzLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxNTE0LDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTU0MCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNjQsMjMgJiM0MzsxNTUzLDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAogCXJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCWV4dGFjayk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAogCWlmIChlbmFibGUpCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7CiAJZWxzZQogCQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwotCWlmICghcmV0KQotCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwlpZiAoZW5hYmxlICZhbXA7JmFtcDsgcC0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBwLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywKJiM0MzsJCQkJCQkJICBwZWVyX3RhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCWV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDY0LDQzICYjNDM7MTcwNCwxNjcgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gc21hLSZndDtwZjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZzsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXU4IG9sZF9kYXRhID0gMDsKIAlib29sIGVuYWJsZTsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwotCWlmICghc21hLSZndDthY3RpdmUpIHsKLQkJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtJmd0O2RpcmVjdGlvbiwgZXh0YWNrKTsKLQkJaWYgKHJldCkKJiM0MzsJc3dpdGNoIChzdGF0ZSkgewomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6CiYjNDM7CQkvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgJiM0MzsgT1VUUFVUCiYjNDM7CQkgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2UKJiM0MzsJCSAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJZW5hYmxlID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKJiM0MzsJCS8qIFJlamVjdCBkaXJlY3Rpb24tbWlzbWF0Y2hlZCByZXF1ZXN0czogQ09OTkVDVEVEICYjNDM7IElOUFVUCiYjNDM7CQkgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2UKJiM0MzsJCSAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKJiM0MzsJCQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJZW5hYmxlID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDoKJiM0MzsJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQotCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKLQkJZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsKJiM0MzsJc3dpdGNoIChzbWEtJmd0O2RpcmVjdGlvbikgewomIzQzOwljYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDoKIAkJdGFyZ2V0ID0gc21hLSZndDtpbnB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwotCX0gZWxzZSB7Ci0JCWVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7b3V0cHV0OwogCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYgKGVuYWJsZSkKJiM0MzsJaWYgKCFzbWEtJmd0O2FjdGl2ZSkgewomIzQzOwkJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtJmd0O2RpcmVjdGlvbiwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJdTggZGF0YTsKJiM0MzsKJiM0MzsJCXJldCA9IGljZV9yZWFkX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCAmYW1wO2RhdGEpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCW9sZF9kYXRhID0gZGF0YTsKJiM0MzsJCXN3aXRjaCAoc21hLSZndDtpZHgpIHsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoJmFtcDtwZi0mZ3Q7aHcsIGRhdGEpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywKJiM0MzsJCQkJCSAgICAgIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwKIAkJCQkJICBleHRhY2spOwotCWVsc2UKLQkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsJCS8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi8KIAkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwkJaWYgKHNtYS0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBzbWEtJmd0O211eGVkLSZndDthY3RpdmUpIHsKJiM0MzsJCQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLSZndDttdXhlZCwgJmFtcDtwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkgJmFtcDtwZWVyX3R5cGUpOwomIzQzOwkJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkJICAgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwkJCXBlZXJfZHBsbF9pZHggPQomIzQzOwkJCQlpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KCZhbXA7cGYtJmd0O2RwbGxzLCBwZWVyX3RhcmdldCk7CiYjNDM7CQkJaWYgKHBlZXJfZHBsbF9pZHggJmx0OyAwKQomIzQzOwkJCQlwZWVyX2RwbGxfaWR4ID0gZC0mZ3Q7ZHBsbF9pZHg7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCQkJZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfcGVlcjsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsCiYjNDM7CQkJCQkJCWV4dGFjayk7CiYjNDM7CX0KJiM0MzsJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7cmVzdG9yZV9wZWVyOgomIzQzOwlyZXN0b3JlX2VyciA9CiYjNDM7CQlpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3RhcmdldDoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywKJiM0MzsJCQkJCSAgICBleHRhY2ssIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwomIzQzO3Jlc3RvcmVfc21hX2N0cmw6CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwogCWlmICghcmV0KQotCQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHNtYSk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNjk3LDcgJiM0MzsyMDYxLDcgQEAgaWNlX2RwbGxfcGluX3NtYV9kaXJlY3Rpb25fc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwogCWlmICghcmV0KQotCQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHApOwomIzQzOwkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ1MTksNiAmIzQzOzQ4ODMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlpZiAocGluLSZndDtpbnB1dC0mZ3Q7cmVmX3N5bmMpCiAJCQlwaW4tJmd0O3JlZl9zeW5jID0gcGluLSZndDtpbnB1dC0mZ3Q7cmVmX3N5bmMgLSBwaW5fYWJzX2lkeDsKIAkJcGluLSZndDtvdXRwdXQgPSAmYW1wO2QtJmd0O291dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldOwomIzQzOwkJcGluLSZndDttdXhlZCA9ICZhbXA7ZC0mZ3Q7dWZsW2ldOwomIzQzOwogCQlpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoJmFtcDtwaW4tJmd0O3Byb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpOwogCX0KIAlmb3IgKGkgPSAwOyBpICZsdDsgSUNFX0RQTExfUElOX1NXX05VTTsgaSYjNDM7JiM0MzspIHsKQEAgLTQ1MjgsNyAmIzQzOzQ4OTQsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlwaW4tJmd0O3Byb3AuY2FwYWJpbGl0aWVzID0gY2FwczsKIAkJcGluLSZndDtwZiA9IHBmOwogCQlwaW4tJmd0O3Byb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldOwotCQlpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHsKJiM0MzsJCXN3aXRjaCAoaSkgewomIzQzOwkJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6CiAJCQlwaW4tJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7CiAJCQlwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpOwogCQkJcGluLSZndDtwcm9wLmZyZXFfc3VwcG9ydGVkID0KQEAgLTQ1MzgsNyAmIzQzOzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkJcGluLSZndDtwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07CiAJCQlwaW4tJmd0O2lucHV0ID0gTlVMTDsKIAkJCXBpbi0mZ3Q7b3V0cHV0ID0gJmFtcDtkLSZndDtvdXRwdXRzW3Bpbl9hYnNfaWR4XTsKLQkJfSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6CiAJCQlwaW4tJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDsKIAkJCXBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSAmIzQzOwogCQkJCSAgICAgIGlucHV0X2lkeF9vZmZzZXQ7CkBAIC00NTUxLDcgJiM0Mzs0OTE5LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlwaW4tJmd0O3Byb3AuY2FwYWJpbGl0aWVzID0KIAkJCQkoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfAogCQkJCSBjYXBzKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtJbnZhbGlkIFUuRkwgcGluIGluZGV4OiAlZFxuJiMzNDssIGkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQlwaW4tJmd0O211eGVkID0gJmFtcDtkLSZndDtzbWFbaV07CiAJCWljZV9kcGxsX3BoYXNlX3JhbmdlX3NldCgmYW1wO3Bpbi0mZ3Q7cHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7CiAJfQogCkBAIC00NzQzLDYgJiM0Mzs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSkKIAogCWRlLSZndDtkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7CiAJZHAtJmd0O2RwbGxfaWR4ID0gYWJpbGl0aWVzLnBwc19kcGxsX2lkeDsKJiM0MzsJaWYgKGRlLSZndDtkcGxsX2lkeCAmZ3Q7PSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggfHwKJiM0MzsJICAgIGRwLSZndDtkcGxsX2lkeCAmZ3Q7PSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpIHsKJiM0MzsJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJJiMzNDtpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XG4mIzM0OywKJiM0MzsJCQlkZS0mZ3Q7ZHBsbF9pZHgsIGRwLSZndDtkcGxsX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWQtJmd0O251bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0czsKIAlkLSZndDtudW1fb3V0cHV0cyA9IGFiaWxpdGllcy5udW1fb3V0cHV0czsKIAlkLSZndDtpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopICZhbXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCkBAIC03Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHsKIAlzMzIgcGhhc2VfYWRqdXN0OwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0OwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7CiAJZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCXM2NCBwaGFzZV9vZmZzZXQ7CiAJdTggc3RhdHVzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jYCBhbmQgYGljZV9kcGxsLmhgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIGlzIHRoZSBJbnRlbCBgaWNlYCBkcml2ZXIsIHdoaWNoIGhhbmRsZXMgdGhlIEU4MDAgU2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBhbmQgU01BL1UuRkwgcGluIGNvbmZpZ3VyYXRpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0YCwgYGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4YCwgYGljZV9kcGxsX2dldF9wZWVyX3RhcmdldGAgZXRjLgoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIHRvdWNoZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSwgd2UgZG9uJiMzOTt0IGJvdGhlciBmdXp6aW5nLiBTbywgaXMgYGljZWAgdmVuZG9yLXNwZWNpZmljPyBXZWxsLCB5ZXMsIGl0JiMzOTtzIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzIFBDSWUgZHJpdmVyLiBCdXQgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gSSB0aGluayBub3QuIFFFTVUgdHlwaWNhbGx5IGhhbmRsZXMgZHJpdmVycyBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYHZpcnRpby1uZXRgLCBub3Qgc3BlY2lhbGl6ZWQgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgc2VyaWVzIGxpa2UgdGhpcy4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgaWNlYCBjb25zaWRlcmVkIGEgU21hcnROSUMgb3IganVzdCBhIHJlZ3VsYXIgTklDLCBldmVuIHRob3VnaCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgYnkgUUVNVT8gV2hpbGUgYSByZWd1bGFyIE5JQywgaXQgc3RpbGwgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcGF0aHdheSBmb3IgZW11bGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGhvdXQgdGhlIGFjdHVhbCBFODAwIHNlcmllcyBjYXJkLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogbmV0d29yayBkcml2ZXJzLCBidXQgUENJIGRyaXZlcnMgb2Z0ZW4gZmFpbCBkdXJpbmcgdGhlIGBwcm9iZWAgc3RhZ2UgaWYgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIGFic2VudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgZGV2aWNlIGVudHJ5IHBvaW50cyBvciB3b3JrYXJvdW5kcyBmb3IgYGljZWAuIEl0JiMzOTtzIGEgUENJIGRyaXZlciBhZnRlciBhbGwuIEkgc2hvdWxkIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQ4OiAqIGljZV9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQwOlx0XHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NTEtXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NTI6XHQucHJvYmUgPSBpY2VfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUzLVx0LnJlbW92ZSA9IGljZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGljZWAgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBgaWNlYCBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLiBSaWdodCBhd2F5LCBJIGtub3cgdGhhdCB3aXRob3V0IGFuIGFjdHVhbCBJbnRlbCBFODAwIHNlcmllcyBOSUMsIGBpY2VfcHJvYmVgIGVpdGhlciB3b24mIzM5O3QgYmUgY2FsbGVkLCBvciBpZiBJIHRyeSB0byBmb3JjZSBpdCwgaXQmIzM5O2xsIGZhaWwuIFRoYXQgbWVhbnMgdGhlIERQTEwgY29kZSBpbiBgaWNlX2RwbGwuY2AgaXMgY29tcGxldGVseSBvZmYtbGltaXRzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4KClRoZSBkb2N1bWVudGF0aW9uIGlzIGNyeXN0YWwgY2xlYXIgb24gdGhpczogaWYgYSBwYXRjaCBvbmx5IHRvdWNoZXMgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhlbiBpdCYjMzk7cyBhICYjMzQ7bm8tZ28mIzM0OyBmb3IgZnV6emluZy4gVGhlIGV4YW1wbGVzIHRoZXkgZ2l2ZSDigJMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycywgU21hcnROSUMgZHJpdmVycywgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUg4oCTIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSBgaWNlYCBzaXRzLiBJdOKAmXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc27igJl0IGVtdWxhdGUuCgpCZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgaWNlYCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZS4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoaXMgY29kZSBwYXRoIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpYWJsZSBmdXp6aW5nIGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTI4ND1zdGF0aWMgYm9vbCBtYWM4MzkwX3JzcmNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jLTM4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjM4NzpzdGF0aWMgaW50IG1hYzgzOTBfZGV2aWNlX3Byb2JlKHN0cnVjdCBudWJ1c19ib2FyZCAqYm9hcmQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL21hYzgzOTAuYy0zODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTQzOT1zdGF0aWMgc3RydWN0IG51YnVzX2RyaXZlciBtYWM4MzkwX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjQ0MDpcdC5wcm9iZSA9IG1hYzgzOTBfZGV2aWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtNDQxLVx0LnJlbW92ZSA9IG1hYzgzOTBfZGV2aWNlX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hYzg5eDBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jLTE2My0gICBhbnl3aGVyZSBlbHNlIHVudGlsIHdlIGhhdmUgYSByZWFsbHkgZ29vZCByZWFzb24gdG8gZG8gc28uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjE2NDpzdGF0aWMgaW50IG1hYzg5eDBfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jLTE2NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYz01Njk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODl4MF9wbGF0Zm9ybV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjU3MDpcdC5wcm9iZSA9IG1hYzg5eDBfZGV2aWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy01NzEtXHQucmVtb3ZlID0gbWFjODl4MF9kZXZpY2VfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTU6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMzktXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0OT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUxLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUyOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1My1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDM2CgkJCQkJCQlvdXRwdXQ6IDgyCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGljZWAgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGludG8gdGhpcyBgaWNlYCBkcml2ZXIsIGFuZCB0aGUgc2l0dWF0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGVtdWxhdGUgdGhpcyB0aGluZyBpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdHlwaWNhbGx5IHJlbGllcyBvbi4gSXQmIzM5O3MgYSBoYXJkd2FyZS1kZXBlbmRlbnQgUENJIGRyaXZlciwgbWVhbmluZyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBkZXZpY2VzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGgganVzdCBpc24mIzM5O3QgYWNjZXNzaWJsZS4KClRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29yZSByZWFzb24gaXMgdGhhdCBhdHRlbXB0aW5nIHRvIGZ1enogaXQgaW4gYSBzdGFuZGFyZCBzZXR1cCBpcyBhIG5vbi1zdGFydGVyLiBUaGUgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGp1c3QgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIHdpdGggdGhlIHVzdWFsIHRvb2xzLiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBzcGlubmluZyBvdXIgd2hlZWxzIG9uIHNvbWV0aGluZyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFdlIG5lZWQgdG8gZm9jdXMgb3VyIGVmZm9ydHMgd2hlcmUgd2UgY2FuIGFjdHVhbGx5IG1ha2UgcHJvZ3Jlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBEUExMIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBEUExMIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo0MC41NzY3NDcwNzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2Nzc1NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjQwOjQwLjU3Njc1NTg2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNzk0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdhMDE5MTBmNDM4Y2E4NTRlYzA3MmQ3YTc5OGJlMWVjZTcyNjA3ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uZjY3NzQ5ODA2NTJmZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTg5LDYgKzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rLypcXG4rICogU01BMS9VLkZMMSBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcXG4rICp8dS5GTDEgVFggRW5hYmxlIHwgICAgICAgMCAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICpcXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXFxuKyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XFxuKyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcXG4rICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XFxuKyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICovXFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldClcXG4re1xcbitcXHRpZiAoZC1cXHUwMDNlcHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0YXJnZXQtXFx1MDAzZXN0YXRlW2QtXFx1MDAzZXBwcy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gZC1cXHUwMDNlcHBzLmRwbGxfaWR4O1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZWVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGFyZ2V0LVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcXG4rXFx0XFx0cmV0dXJuIGQtXFx1MDAzZWVlYy5kcGxsX2lkeDtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxcbit7XFxuK1xcdCpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdCpwZWVyX3R5cGUgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwZWVyLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbitcXHRcXHQqcGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4rXFx0XFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fZW5hYmxlIC0gZW5hYmxlIGEgcGluIG9uIGRwbGxzXFxuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcXG5AQCAtNTM4LDYgKzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuKyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXFxuKyAqXFxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcXG4rICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXFxuKyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVxcdTAwM2VkcGxscy5sb2NrIGlzXFxuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xcbitcXG4rXFx0cGVlciA9IGNoYW5nZWQtXFx1MDAzZW11eGVkO1xcbitcXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbitcXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXFxuQEAgLTcxMSw2ICs3OTEsOSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXFxuIFxcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtpXSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4rXFxuIFxcdHN3aXRjaCAocGluX3R5cGUpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDpcXG4gXFx0XFx0cmV0ID0gaWNlX2FxX2dldF9pbnB1dF9waW5fY2ZnKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHBpbi1cXHUwMDNlaWR4LCBcXHUwMDI2cGluLVxcdTAwM2VzdGF0dXMsXFxuQEAgLTcyMCwyNSArODAzLDMxIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdGlmIChJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU4gXFx1MDAyNiBwaW4tXFx1MDAzZWZsYWdzWzBdKSB7XFxuIFxcdFxcdFxcdGlmIChwaW4tXFx1MDAzZXBpbikge1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VwaW4gPT0gcGYtXFx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VwaW4gPT0gcGYtXFx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbitcXHRcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlcGluID09IHBmLVxcdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cXG4rXFx0XFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbitcXHRcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG5AQCAtNzUwLDE5ICs4MzksMjMgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXG4gXFx0XFx0cGFyZW50IFxcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUOlxcbkBAIC0xMTYzLDMwICsxMjU2LDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xcbiB9XFxuIFxcbi0vKipcXG4tICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbi0gKlxcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4tICpcXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXHR1OCBkcGxsX2lkeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4raWNlX2RwbGxfcGluX2NvbmZpZ19nZXQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCxcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHBlZXIgPSAoY2hhbmdlZCBcXHUwMDNlPSBkLVxcdTAwM2VzbWEgXFx1MDAyNlxcdTAwMjYgY2hhbmdlZCBcXHUwMDNjIGQtXFx1MDAzZXNtYSArIElDRV9EUExMX1BJTl9TV19OVU0pID9cXG4tXFx0XFx0XFx1MDAyNmQtXFx1MDAzZXVmbFtjaGFuZ2VkLVxcdTAwM2VpZHhdIDogXFx1MDAyNmQtXFx1MDAzZXNtYVtjaGFuZ2VkLVxcdTAwM2VpZHhdO1xcbi1cXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbi1cXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cXHUwMDNlZmxhZ3NbMF0gXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgIElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTjtcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VkcGxsX2lkeCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VlbmFibGVkID0gdGFyZ2V0LVxcdTAwM2VmbGFnc1swXSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xcbitcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlZW5hYmxlZCkge1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZWRwbGxfaWR4ID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZHBsbF9pZHggPSByZXQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxcbitcXHRcXHRcXHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZWVuYWJsZWQpXFxuK1xcdFxcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0dXBkYXRlX2VyciA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XFxuK1xcdFxcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChzdHJ1Y3QgaWNlX3BmICpwZiwgdTggb2xkX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VycjtcXG4rXFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIG9sZF9kYXRhKTtcXG4rXFx0aWYgKCFyZXN0b3JlX2VycilcXG4rXFx0XFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3RvcmVfZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTIwOCwyOCArMTM1NiwzNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxscyAqZCA9IFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlZHBsbHM7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcdHU4IGRhdGE7XFxuLVxcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbitcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUgPSAwO1xcbitcXHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XFxuK1xcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xcbiBcXG4gXFx0aWYgKHAtXFx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlYWN0aXZlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VodywgXFx1MDAyNmRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRvbGRfZGF0YSA9IGRhdGE7XFxuIFxcbiBcXHRzd2l0Y2ggKHAtXFx1MDAzZWlkeCkge1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcXG4tXFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcXG4tXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxcbitcXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfRElSX0VOO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4gXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfRElSX0VOO1xcbi1cXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xMjQxLDcgKzEzOTgsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hO1xcbiBcXG4gXFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxcbiBcXHQgKiBpdHMgYmFja2luZyBDR1UgcGluIHNvIHRoZSBwaW4gcmVwb3J0cyBhcyBjb25uZWN0ZWQuIFdpdGhvdXRcXG5AQCAtMTI1MCwyNSArMTQwNyw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XFxuIFxcdCAqIHN0aWxsIGJlIHVzaW5nIGl0LlxcbiBcXHQgKi9cXG4tXFx0cGVlciA9IFxcdTAwMjZkLVxcdTAwM2V1ZmxbcC1cXHUwMDNlaWR4XTtcXG4rXFx0cGVlciA9IHAtXFx1MDAzZW11eGVkO1xcbiBcXHRpZiAocGVlci1cXHUwMDNlYWN0aXZlKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldDtcXG4tXFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xcbi1cXG4gXFx0XFx0aWYgKHBlZXItXFx1MDAzZW91dHB1dCkge1xcbiBcXHRcXHRcXHR0YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuLVxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAocGVlci1cXHUwMDNlaW5wdXQpIHtcXG4gXFx0XFx0XFx0dGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuIFxcdFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIHRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBkLVxcdTAwM2VlZWMuZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuLVxcdFxcdGlmICghcmV0KVxcbi1cXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXFx1MDAzZXBmLCB0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHR5cGUsIGV4dGFjayk7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwLVxcdTAwM2VwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWE7XFxuK1xcbitcXHRcXHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xcbitcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VlZWMuZHBsbF9pZHg7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHQgIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXFx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3Jlc3RvcmVfcGVlcjpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocC1cXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNnBlZXJfY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3NtYTpcXG4rXFx0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVxcdTAwM2VwZiwgb2xkX2RhdGEsIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTEyOTUsMTMgKzE0NzMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcXG4tXFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xcbitcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gcC1cXHUwMDNlcGY7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4gXFx0dTggZGF0YTtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XFxuIFxcbiBcXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuQEAgLTEzMTEsMTQgKzE0OTMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgXFx1MDAyNmRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0b2xkX2RhdGEgPSBkYXRhO1xcbiBcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0c3dpdGNoIChwLVxcdTAwM2VpZHgpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcXG4rXFx0XFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcXG4gXFx0XFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbiBcXHRcXHRcXHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cXG4gXFx0XFx0XFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcXG4gXFx0XFx0XFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cXG5AQCAtMTMyOSwxOCArMTUxNCwyMSBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMV9UWF9FTjtcXG4gXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0XFx0fVxcbiBcXHRcXHR0YXJnZXQgPSBwLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4tXFx0XFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcXG4rXFx0XFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4gXFx0XFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbiBcXHRcXHRcXHQvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmdcXG4gXFx0XFx0XFx0ICogVUZMMl9SWF9ESVMgY291bGQgYWxzbyBkaXNhYmxlIHRoZSBwYWlyZWRcXG4gXFx0XFx0XFx0ICogU01BMiBpbnB1dC5cXG5AQCAtMTM1Miw3ICsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlaW5wdXQ7XFxuQEAgLTEzNjQsMjMgKzE1NTMsNzQgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXG4gXFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKGh3LCBkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4gXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbiBcXG4gXFx0aWYgKGVuYWJsZSlcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcbitcXHRpZiAoZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZW11eGVkIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZW11eGVkLVxcdTAwM2VhY3RpdmUpIHtcXG4rXFx0XFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHAtXFx1MDAzZW11eGVkLCBcXHUwMDI2cGVlcl90YXJnZXQsIFxcdTAwMjZwZWVyX3R5cGUpO1xcbitcXHRcXHRpZiAoIXBlZXJfdGFyZ2V0KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGVlcl90YXJnZXQpO1xcbitcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VkcGxsX2lkeDtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0fVxcbitcXG4rXFx0Z290byB1bmxvY2s7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfdGFyZ2V0OlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4gXFxuIHVubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcCk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTQ2NCw0MyArMTcwNCwxNjcgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cXHUwMDNlcGY7XFxuLVxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4rXFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQgPSAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbi1cXHRpZiAoIXNtYS1cXHUwMDNlYWN0aXZlKSB7XFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVxcdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbitcXHRcXHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgKyBPVVRQVVRcXG4rXFx0XFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXFxuK1xcdFxcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc21hLVxcdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xcbitcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxcbitcXHRcXHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCArIElOUFVUXFxuK1xcdFxcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxcbitcXHRcXHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xcbitcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbitcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuLVxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFxuK1xcdHN3aXRjaCAoc21hLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XFxuIFxcdFxcdHRhcmdldCA9IHNtYS1cXHUwMDNlaW5wdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbiBcXHRcXHR0YXJnZXQgPSBzbWEtXFx1MDAzZW91dHB1dDtcXG4gXFx0XFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW5hYmxlKVxcbitcXHRpZiAoIXNtYS1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVxcdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdHU4IGRhdGE7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRvbGRfZGF0YSA9IGRhdGE7XFxuK1xcdFxcdHN3aXRjaCAoc21hLVxcdTAwM2VpZHgpIHtcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFxcdTAwMjZvbGRfY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCBkLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcdFxcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlbXV4ZWQgXFx1MDAyNlxcdTAwMjYgc21hLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdFxcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzbWEtXFx1MDAzZW11eGVkLCBcXHUwMDI2cGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cGVlcl90eXBlKTtcXG4rXFx0XFx0XFx0aWYgKCFwZWVyX3RhcmdldCkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0XFx0XFx0cGVlcl9kcGxsX2lkeCA9XFxuK1xcdFxcdFxcdFxcdGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcGVlcl90YXJnZXQpO1xcbitcXHRcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VkcGxsX2lkeDtcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuK1xcdH1cXG4rXFx0Z290byB1bmxvY2s7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfdGFyZ2V0OlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4gXFxuIHVubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgc21hKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE2OTcsNyArMjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHAsIGRpcmVjdGlvbiwgZXh0YWNrKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcCk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDUxOSw2ICs0ODgzLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0aWYgKHBpbi1cXHUwMDNlaW5wdXQtXFx1MDAzZXJlZl9zeW5jKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXJlZl9zeW5jID0gcGluLVxcdTAwM2VpbnB1dC1cXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcXG4gXFx0XFx0cGluLVxcdTAwM2VvdXRwdXQgPSBcXHUwMDI2ZC1cXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XFxuK1xcdFxcdHBpbi1cXHUwMDNlbXV4ZWQgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW2ldO1xcbitcXG4gXFx0XFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFxcdTAwMjZwaW4tXFx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xcbiBcXHR9XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpKyspIHtcXG5AQCAtNDUyOCw3ICs0ODk0LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0cGluLVxcdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XFxuIFxcdFxcdHBpbi1cXHUwMDNlcGYgPSBwZjtcXG4gXFx0XFx0cGluLVxcdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcXG4tXFx0XFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XFxuK1xcdFxcdHN3aXRjaCAoaSkge1xcbitcXHRcXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xcbiBcXHRcXHRcXHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWQgPVxcbkBAIC00NTM4LDcgKzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VpbnB1dCA9IE5VTEw7XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlb3V0cHV0ID0gXFx1MDAyNmQtXFx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7XFxuIFxcdFxcdFxcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXFxuIFxcdFxcdFxcdFxcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XFxuQEAgLTQ1NTEsNyArNDkxOSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID1cXG4gXFx0XFx0XFx0XFx0KERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHxcXG4gXFx0XFx0XFx0XFx0IGNhcHMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxcXG5cXFwiLCBpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0cGluLVxcdTAwM2VtdXhlZCA9IFxcdTAwMjZkLVxcdTAwM2VzbWFbaV07XFxuIFxcdFxcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcXHUwMDI2cGluLVxcdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcXG4gXFx0fVxcbiBcXG5AQCAtNDc0Myw2ICs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFxuIFxcdGRlLVxcdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XFxuIFxcdGRwLVxcdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XFxuK1xcdGlmIChkZS1cXHUwMDNlZHBsbF9pZHggXFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8XFxuK1xcdCAgICBkcC1cXHUwMDNlZHBsbF9pZHggXFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XFxuK1xcdFxcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkZS1cXHUwMDNlZHBsbF9pZHgsIGRwLVxcdTAwM2VkcGxsX2lkeCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGQtXFx1MDAzZW51bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0cztcXG4gXFx0ZC1cXHUwMDNlbnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7XFxuIFxcdGQtXFx1MDAzZWlucHV0X3BoYXNlX2Fkal9tYXggPSBsZTMyX3RvX2NwdShhYmlsaXRpZXMubWF4X2luX3BoYXNlX2FkaikgXFx1MDAyNlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uZGM2ZjA5NmJmMDY5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuQEAgLTc2LDYgKzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XFxuIFxcdHMzMiBwaGFzZV9hZGp1c3Q7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xcbiBcXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XFxuIFxcdHM2NCBwaGFzZV9vZmZzZXQ7XFxuIFxcdHU4IHN0YXR1cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NDEuMDM4MTI0MzAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE2MDYzNjg4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3YTAxOTEwZjQzOGNhODU0ZWMwNzJkN2E3OThiZTFlY2U3MjYwN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmY2Nzc0OTgwNjUyZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC04OSw2ICs4OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbisvKlxuKyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUExX0RJUl9FTiB8IFNNQTFfVFhfRU4gfFxuKyAqKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcbisgKnx1LkZMMSBUWCBFbmFibGUgfCAgICAgICAwICAgICB8ICAgICAgMCAgICAgfFxuKyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKyAqXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnxTTUEyIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfCAgICAgeCAgICAgIHxcbisgKnx1LkZMMiBSWCBFbmFibGUgfCAgICAgICAxICAgICB8ICAgICAgeCAgICAgfCAgICAgMCAgICAgIHxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbisgKnxTTUEyIERpc2FibGUgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgeCAgICAgIHxcbisgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgMSAgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKi9cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xuICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmVcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4re1xuK1x0aWYgKGQtXHUwMDNlcHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggXHUwMDI2XHUwMDI2XG4rXHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4rXHRcdHJldHVybiBkLVx1MDAzZXBwcy5kcGxsX2lkeDtcbitcbitcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRhcmdldC1cdTAwM2VzdGF0ZVtkLVx1MDAzZWVlYy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuK1x0XHRyZXR1cm4gZC1cdTAwM2VlZWMuZHBsbF9pZHg7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpY2VfZHBsbF9waW4gKipwZWVyX3RhcmdldCxcbitcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuK3tcbitcdCpwZWVyX3RhcmdldCA9IE5VTEw7XG4rXHQqcGVlcl90eXBlID0gMDtcbitcbitcdHN3aXRjaCAocGVlci1cdTAwM2VkaXJlY3Rpb24pIHtcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbitcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4rXHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiArNTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuKyAqXG4rICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuKyAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXHUwMDNlZHBsbHMubG9jayBpc1xuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuKyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuK1xuK1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4rXHRpZiAocGVlci1cdTAwM2VwaW4pXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC03MTEsNiArNzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XG4gXHRpbnQgcmV0O1xuIFxuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWDsgaSsrKVxuK1x0XHRwaW4tXHUwMDNlc3RhdGVbaV0gPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXG4gXHRzd2l0Y2ggKHBpbl90eXBlKSB7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuIFx0XHRyZXQgPSBpY2VfYXFfZ2V0X2lucHV0X3Bpbl9jZmcoXHUwMDI2cGYtXHUwMDNlaHcsIHBpbi1cdTAwM2VpZHgsIFx1MDAyNnBpbi1cdTAwM2VzdGF0dXMsXG5AQCAtNzIwLDI1ICs4MDMsMzEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbitcdFx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4rXHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbitcdFx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4rXHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcdFx0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcbkBAIC03NTAsMTkgKzgzOSwyMyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbitcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cbitcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbitcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XG5AQCAtMTE2MywzMCArMTI1Niw4NSBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcbitcdGJvb2wgZW5hYmxlZDtcbitcdHU4IGRwbGxfaWR4O1xuK307XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQsXG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cGVlciA9IChjaGFuZ2VkIFx1MDAzZT0gZC1cdTAwM2VzbWEgXHUwMDI2XHUwMDI2IGNoYW5nZWQgXHUwMDNjIGQtXHUwMDNlc21hICsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOO1xuK1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xuK1x0XHRpZiAoIWNvbmZpZy1cdTAwM2VlbmFibGVkKSB7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCB0YXJnZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNvbmZpZy1cdTAwM2VkcGxsX2lkeCA9IHJldDtcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuK1x0XHRcdCAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuK3tcbitcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcbitcbitcdGlmIChjb25maWctXHUwMDNlZW5hYmxlZClcbitcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4rXHRlbHNlXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmVzdG9yZV9lcnIgfHwgdXBkYXRlX2Vycikge1xuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXFxuXCIsXG4rXHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4rXHRcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwoc3RydWN0IGljZV9wZiAqcGYsIHU4IG9sZF9kYXRhLFxuK1x0XHRcdFx0ICAgICBpbnQgaW5pdF9lcnIpXG4re1xuK1x0aW50IHJlc3RvcmVfZXJyO1xuK1xuK1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbitcdGlmICghcmVzdG9yZV9lcnIpXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwiLFxuK1x0XHRcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xuK1xuK1x0cmV0dXJuIHJlc3RvcmVfZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xMjA4LDI4ICsxMzU2LDM3IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiB7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VkcGxscztcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7XG4rXHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4rXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcbiBcbiBcdGlmIChwLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHAtXHUwMDNlYWN0aXZlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdG9sZF9kYXRhID0gZGF0YTtcbiBcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4tXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcbitcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XG4tXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI0MSw3ICsxMzk4LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFxuIFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxuIFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XG5AQCAtMTI1MCwyNSArMTQwNyw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4rXHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0fSBlbHNlIGlmIChwZWVyLVx1MDAzZWlucHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiBcdFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFx0XHR9XG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIGQtXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0XHRpZiAoIXJldClcbi1cdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCxcbi1cdFx0XHRcdFx0XHRcdHR5cGUsIGV4dGFjayk7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYTtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZWVjLmRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiBcdH1cbiBcbitcdHJldHVybiAwO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2cGVlcl9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hOlxuK1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTUsMTMgKzE0NzMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwID0gcGluX3ByaXYsICp0YXJnZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4rXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHAtXHUwMDNlcGY7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodztcbitcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0dTggZGF0YTtcbi1cdGludCByZXQ7XG4rXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbkBAIC0xMzExLDE0ICsxNDkzLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKGh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuK1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4rXHRcdHN3aXRjaCAoc3RhdGUpIHtcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDEgaXMgbm90IGFjdGl2ZSwgc2V0dGluZyBUWF9FTlxuIFx0XHRcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXG4gXHRcdFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cbkBAIC0xMzI5LDE4ICsxNTE0LDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHR9XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRlbmFibGUgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbi1cdFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmdcbiBcdFx0XHQgKiBVRkwyX1JYX0RJUyBjb3VsZCBhbHNvIGRpc2FibGUgdGhlIHBhaXJlZFxuIFx0XHRcdCAqIFNNQTIgaW5wdXQuXG5AQCAtMTM1Miw3ICsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlaW5wdXQ7XG5AQCAtMTM2NCwyMyArMTU1Myw3NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXG4gXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoaHcsIGRhdGEpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRleHRhY2spO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbitcbitcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXG4gXHRpZiAoZW5hYmxlKVxuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsIFx1MDAyNnBlZXJfdHlwZSk7XG4rXHRcdGlmICghcGVlcl90YXJnZXQpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLFxuK1x0XHRcdFx0XHRcdFx0ICBwZWVyX3RhcmdldCk7XG4rXHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuK1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0ZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdH1cbitcbitcdGdvdG8gdW5sb2NrO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4rcmVzdG9yZV90YXJnZXQ6XG4rXHRyZXN0b3JlX2VyciA9XG4rXHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE0NjQsNDMgKzE3MDQsMTY3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cdTAwM2VwZjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbitcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuLVx0aW50IHJldDtcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbi1cdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KVxuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuK1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgKyBPVVRQVVRcbitcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4rXHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuK1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCArIElOUFVUXG4rXHRcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxuK1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuK1x0XHRlbmFibGUgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1xuK1x0c3dpdGNoIChzbWEtXHUwMDNlZGlyZWN0aW9uKSB7XG4rXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmICghc21hLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoZW5hYmxlKSB7XG4rXHRcdHU4IGRhdGE7XG4rXG4rXHRcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0b2xkX2RhdGEgPSBkYXRhO1xuK1x0XHRzd2l0Y2ggKHNtYS1cdTAwM2VpZHgpIHtcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZXh0YWNrKTtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHNtYS1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbitcdFx0XHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgXHUwMDI2cGVlcl90eXBlKTtcbitcdFx0XHRpZiAoIXBlZXJfdGFyZ2V0KSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9XG4rXHRcdFx0XHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwZWVyX3RhcmdldCk7XG4rXHRcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0XHRwZWVyX2RwbGxfaWR4ID0gZC1cdTAwM2VkcGxsX2lkeDtcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgIHBlZXJfZHBsbF9pZHgsIHBlZXJfdHlwZSwgZXh0YWNrKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXG4rXHRcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0fVxuK1x0Z290byB1bmxvY2s7XG4rXG4rcmVzdG9yZV9wZWVyOlxuK1x0cmVzdG9yZV9lcnIgPVxuK1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3RhcmdldDpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hX2N0cmw6XG4rXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBzbWEpO1xuK1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyArMjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDUxOSw2ICs0ODgzLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuK1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XG5AQCAtNDUyOCw3ICs0ODk0LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcbiBcdFx0cGluLVx1MDAzZXBmID0gcGY7XG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcbi1cdFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XG4rXHRcdHN3aXRjaCAoaSkge1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTM4LDcgKzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdFx0cGluLVx1MDAzZWlucHV0ID0gTlVMTDtcbiBcdFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcbi1cdFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXG4gXHRcdFx0XHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xuQEAgLTQ1NTEsNyArNDkxOSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5AQCAtNDc0Myw2ICs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcbiBcdGRlLVx1MDAzZWRwbGxfaWR4ID0gYWJpbGl0aWVzLmVlY19kcGxsX2lkeDtcbiBcdGRwLVx1MDAzZWRwbGxfaWR4ID0gYWJpbGl0aWVzLnBwc19kcGxsX2lkeDtcbitcdGlmIChkZS1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxuK1x0ICAgIGRwLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XG4rXHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxuXCIsXG4rXHRcdFx0ZGUtXHUwMDNlZHBsbF9pZHgsIGRwLVx1MDAzZWRwbGxfaWR4KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRkLVx1MDAzZW51bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0cztcbiBcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7XG4gXHRkLVx1MDAzZWlucHV0X3BoYXNlX2Fkal9tYXggPSBsZTMyX3RvX2NwdShhYmlsaXRpZXMubWF4X2luX3BoYXNlX2FkaikgXHUwMDI2XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uZGM2ZjA5NmJmMDY5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuQEAgLTc2LDYgKzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XG4gXHRzMzIgcGhhc2VfYWRqdXN0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcbiBcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiBcdHM2NCBwaGFzZV9vZmZzZXQ7XG4gXHR1OCBzdGF0dXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo0MS4wMzgxMjU5MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTc4MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AgYW5kIGBpY2VfZHBsbC5oYCwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyB0aGUgSW50ZWwgYGljZWAgZHJpdmVyLCB3aGljaCBoYW5kbGVzIHRoZSBFODAwIFNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVycy4gVGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgYW5kIFNNQS9VLkZMIHBpbiBjb25maWd1cmF0aW9uLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9ucyBsaWtlIGBpY2VfZHBsbF9zd19waW5fZnJlcXVlbmN5X2dldGAsIGBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlYCwgYW5kIHRoZSBhZGRpdGlvbiBvZiBgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeGAsIGBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXRgIGV0Yy5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIHRvdWNoZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSwgd2UgZG9uJ3QgYm90aGVyIGZ1enppbmcuIFNvLCBpcyBgaWNlYCB2ZW5kb3Itc3BlY2lmaWM/IFdlbGwsIHllcywgaXQncyBJbnRlbCdzIEU4MDAgc2VyaWVzIFBDSWUgZHJpdmVyLiBCdXQgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gSSB0aGluayBub3QuIFFFTVUgdHlwaWNhbGx5IGhhbmRsZXMgZHJpdmVycyBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYHZpcnRpby1uZXRgLCBub3Qgc3BlY2lhbGl6ZWQgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgc2VyaWVzIGxpa2UgdGhpcy5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBpY2VgIGNvbnNpZGVyZWQgYSBTbWFydE5JQyBvciBqdXN0IGEgcmVndWxhciBOSUMsIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IGVtdWxhdGVkIGJ5IFFFTVU/IFdoaWxlIGEgcmVndWxhciBOSUMsIGl0IHN0aWxsIHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgcGF0aHdheSBmb3IgZW11bGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGhvdXQgdGhlIGFjdHVhbCBFODAwIHNlcmllcyBjYXJkLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogbmV0d29yayBkcml2ZXJzLCBidXQgUENJIGRyaXZlcnMgb2Z0ZW4gZmFpbCBkdXJpbmcgdGhlIGBwcm9iZWAgc3RhZ2UgaWYgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIGFic2VudC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgdmlydHVhbCBkZXZpY2UgZW50cnkgcG9pbnRzIG9yIHdvcmthcm91bmRzIGZvciBgaWNlYC4gSXQncyBhIFBDSSBkcml2ZXIgYWZ0ZXIgYWxsLiBJIHNob3VsZCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBpY2VfcHJvYmVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo1Mi4xMTk5MDg1MzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5ODQzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo1Mi4xNzU4OTY5ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk1ODc3OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBgaWNlYCBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLiBSaWdodCBhd2F5LCBJIGtub3cgdGhhdCB3aXRob3V0IGFuIGFjdHVhbCBJbnRlbCBFODAwIHNlcmllcyBOSUMsIGBpY2VfcHJvYmVgIGVpdGhlciB3b24ndCBiZSBjYWxsZWQsIG9yIGlmIEkgdHJ5IHRvIGZvcmNlIGl0LCBpdCdsbCBmYWlsLiBUaGF0IG1lYW5zIHRoZSBEUExMIGNvZGUgaW4gYGljZV9kcGxsLmNgIGlzIGNvbXBsZXRlbHkgb2ZmLWxpbWl0cyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC5cblxuVGhlIGRvY3VtZW50YXRpb24gaXMgY3J5c3RhbCBjbGVhciBvbiB0aGlzOiBpZiBhIHBhdGNoIG9ubHkgdG91Y2hlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLCB0aGVuIGl0J3MgYSBcIm5vLWdvXCIgZm9yIGZ1enppbmcuIFRoZSBleGFtcGxlcyB0aGV5IGdpdmUg4oCTIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMsIFNtYXJ0TklDIGRyaXZlcnMsIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIOKAkyB0aGF0J3MgZXhhY3RseSB3aGVyZSBgaWNlYCBzaXRzLiBJdOKAmXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc27igJl0IGVtdWxhdGUuXG5cbkJlZm9yZSBJIHdyaXRlIHRoaXMgb2ZmIGNvbXBsZXRlbHksIEknbGwgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgaWNlYCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZS4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIHBhdGggaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlhYmxlIGZ1enppbmcgaW4gbXkgY3VycmVudCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NTcuNzcxNzc4NDA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk0NjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTI4ND1zdGF0aWMgYm9vbCBtYWM4MzkwX3JzcmNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtMzg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjM4NzpzdGF0aWMgaW50IG1hYzgzOTBfZGV2aWNlX3Byb2JlKHN0cnVjdCBudWJ1c19ib2FyZCAqYm9hcmQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtMzg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTQzOT1zdGF0aWMgc3RydWN0IG51YnVzX2RyaXZlciBtYWM4MzkwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL21hYzgzOTAuYzo0NDA6XFx0LnByb2JlID0gbWFjODM5MF9kZXZpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtNDQxLVxcdC5yZW1vdmUgPSBtYWM4MzkwX2RldmljZV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hYzg5eDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9tYWM4OXgwLmMtMTYzLSAgIGFueXdoZXJlIGVsc2UgdW50aWwgd2UgaGF2ZSBhIHJlYWxseSBnb29kIHJlYXNvbiB0byBkbyBzby4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjE2NDpzdGF0aWMgaW50IG1hYzg5eDBfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy0xNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYz01Njk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODl4MF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYzo1NzA6XFx0LnByb2JlID0gbWFjODl4MF9kZXZpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy01NzEtXFx0LnJlbW92ZSA9IG1hYzg5eDBfZGV2aWNlX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNDg6ICogaWNlX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE1ND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDA6XFx0XFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0OT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NTEtXFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTg1MjpcXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1My1cXHQucmVtb3ZlID0gaWNlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NTcuOTE2NzMxODgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNzcxODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaWNlYCBEcml2ZXIgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGludG8gdGhpcyBgaWNlYCBkcml2ZXIsIGFuZCB0aGUgc2l0dWF0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlcmUncyBubyB3YXkgdG8gZW11bGF0ZSB0aGlzIHRoaW5nIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB0aGF0IHN5emthbGxlciB0eXBpY2FsbHkgcmVsaWVzIG9uLiBJdCdzIGEgaGFyZHdhcmUtZGVwZW5kZW50IFBDSSBkcml2ZXIsIG1lYW5pbmcgaXQncyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBkZXZpY2VzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGgganVzdCBpc24ndCBhY2Nlc3NpYmxlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIGFsbCB0aGlzLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29yZSByZWFzb24gaXMgdGhhdCBhdHRlbXB0aW5nIHRvIGZ1enogaXQgaW4gYSBzdGFuZGFyZCBzZXR1cCBpcyBhIG5vbi1zdGFydGVyLiBUaGUgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGp1c3QgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIHdpdGggdGhlIHVzdWFsIHRvb2xzLiBUaGVyZSdzIG5vIHBvaW50IGluIHNwaW5uaW5nIG91ciB3aGVlbHMgb24gc29tZXRoaW5nIHRoYXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlLiBXZSBuZWVkIHRvIGZvY3VzIG91ciBlZmZvcnRzIHdoZXJlIHdlIGNhbiBhY3R1YWxseSBtYWtlIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQzNiwiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjQxOjAyLjY0NDQ1MjE4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDE6MDIuNjQ0NDk1NDI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl5gl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 15:38:32 +0000 UTC FinishedAt: 2026-08-21 15:41:03 +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+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM3YTAxOTEwZjQzOGNhODU0ZWMwNzJkN2E3OThiZTFlY2U3MjYwN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5pbmRleCA4NWE3NGNkNmVhMWYzLi5mNjc3NDk4MDY1MmZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtODksNiAmIzQzOzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xuIFx0RFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBTTUExL1UuRkwxIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7XG4mIzQzOyAqfFNNQTEgUlggRW5hYmxlICB8ICAgICAgIDAgICAgIHwgICAgICB4ICAgICB8XG4mIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8XG4mIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKlxuJiM0MzsgKiBTTUEyL1UuRkwyIE1VWCB0YWJsZVxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MztcbiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxuJiM0MzsgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XG4mIzQzOyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxuJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzO1xuJiM0MzsgKi9cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcbiAgKiBAcGY6IHByaXZhdGUgYm9hcmQgc3RydWN0dXJlXG5AQCAtNDQzLDYgJiM0Mzs0NjYsNDAgQEAgaWNlX2RwbGxfc3dfcGluX2ZyZXF1ZW5jeV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoZC1cdTAwM2VwcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4mIzQzO1x0XHRyZXR1cm4gZC1cdTAwM2VwcHMuZHBsbF9pZHg7XG4mIzQzO1xuJiM0MztcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0YXJnZXQtXHUwMDNlc3RhdGVbZC1cdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbiYjNDM7XHRcdHJldHVybiBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGljZV9kcGxsX3BpbiAqKnBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuJiM0Mzt7XG4mIzQzO1x0KnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiYjNDM7XHQqcGVlcl90eXBlID0gMDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChwZWVyLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiYjNDM7XHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlb3V0cHV0O1xuJiM0MztcdFx0KnBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuJiM0MztcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiYjNDM7XHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiAmIzQzOzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbiYjNDM7ICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbiYjNDM7ICpcbiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuJiM0MzsgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuJiM0MzsgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuJiM0MzsgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4mIzQzO1xuJiM0MztcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuJiM0MztcdGlmIChwZWVyLVx1MDAzZXBpbilcbiYjNDM7XHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxuQEAgLTcxMSw2ICYjNDM7NzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cGluLVx1MDAzZXN0YXRlW2ldID0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcbiBcdHN3aXRjaCAocGluX3R5cGUpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XG4gXHRcdHJldCA9IGljZV9hcV9nZXRfaW5wdXRfcGluX2NmZyhcdTAwMjZwZi1cdTAwM2VodywgcGluLVx1MDAzZWlkeCwgXHUwMDI2cGluLVx1MDAzZXN0YXR1cyxcbkBAIC03MjAsMjUgJiM0Mzs4MDMsMzEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuJiM0MztcdFx0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbiYjNDM7XHRcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbiYjNDM7XHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbiYjNDM7XHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiYjNDM7XHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHRcdHBpbi1cdTAwM2VwaW4gPT0gcGYtXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbi1cdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiYjNDM7XHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuJiM0MztcdFx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG5AQCAtNzUwLDE5ICYjNDM7ODM5LDIzIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcbiBcbiBcdFx0cGFyZW50IFx1MDAyNj0gSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfRFBMTF9TUkNfU0VMO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuJiM0MztcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4mIzQzO1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuJiM0MztcdFx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCA/XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuJiM0MztcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4mIzQzO1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4mIzQzO1x0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbiYjNDM7XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4mIzQzO1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XG5AQCAtMTE2MywzMCAmIzQzOzEyNTYsODUgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0MztzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyB7XG4mIzQzO1x0Ym9vbCBlbmFibGVkO1xuJiM0MztcdHU4IGRwbGxfaWR4O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4mIzQzO1x0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuJiM0MztcdFx0Y29uZmlnLVx1MDAzZWVuYWJsZWQgPSB0YXJnZXQtXHUwMDNlZmxhZ3NbMF0gXHUwMDI2XG4mIzQzO1x0XHRcdFx0ICBJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU47XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbiYjNDM7XHRcdFx0XHQgIElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTjtcbiYjNDM7XHRcdGlmICghY29uZmlnLVx1MDAzZWVuYWJsZWQpIHtcbiYjNDM7XHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChcdTAwMjZwZi1cdTAwM2VkcGxscywgdGFyZ2V0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuJiM0MztcdFx0XHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29uZmlnLVx1MDAzZWVuYWJsZWQpXG4mIzQzO1x0XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcbiYjNDM7XHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4mIzQzO1x0XHRyZXR1cm4gcmVzdG9yZV9lcnIgPyByZXN0b3JlX2VyciA6IHVwZGF0ZV9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIGludCBpbml0X2VycilcbiYjNDM7e1xuJiM0MztcdGludCByZXN0b3JlX2VycjtcbiYjNDM7XG4mIzQzO1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRpZiAoIXJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdCBcJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2Vycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXN0b3JlX2VycjtcbiB9XG4gXG4gLyoqXG5AQCAtMTIwOCwyOCAmIzQzOzEzNTYsMzcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIHtcbiBcdHN0cnVjdCBpY2VfZHBsbHMgKmQgPSBcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWRwbGxzO1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbi1cdHU4IGRhdGE7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlID0gMDtcbiYjNDM7XHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4mIzQzO1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4gXG4gXHRpZiAocC1cdTAwM2VkaXJlY3Rpb24gPT0gZGlyZWN0aW9uIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWFjdGl2ZSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcdTAwMjZwLVx1MDAzZXBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuJiM0MztcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbkBAIC0xMjQxLDcgJiM0MzsxMzk4LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcbiBcdC8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGVcbiBcdCAqIGl0cyBiYWNraW5nIENHVSBwaW4gc28gdGhlIHBpbiByZXBvcnRzIGFzIGNvbm5lY3RlZC4gV2l0aG91dFxuQEAgLTEyNTAsMjUgJiM0MzsxNDA3LDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiBcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XG4gXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cbiBcdCAqL1xuLVx0cGVlciA9IFx1MDAyNmQtXHUwMDNldWZsW3AtXHUwMDNlaWR4XTtcbiYjNDM7XHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAocGVlci1cdTAwM2VpbnB1dCkge1xuIFx0XHRcdHRhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiBcdFx0fVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCxcbi1cdFx0XHRcdFx0ICBkLVx1MDAzZWVlYy5kcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcbi1cdFx0aWYgKCFyZXQpXG4tXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLVx1MDAzZXBmLCB0YXJnZXQsXG4tXHRcdFx0XHRcdFx0XHR0eXBlLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWVlYy5kcGxsX2lkeDtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxuJiM0MztcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuIFx0fVxuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9wZWVyOlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwLVx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNnBlZXJfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWE6XG4mIzQzO1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTUsMTMgJiM0MzsxNDczLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbiYjNDM7XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHAtXHUwMDNlcGY7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuJiM0MztcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0dTggZGF0YTtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XG4gXG4gXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXG4gXHRcdHJldHVybiAtRUJVU1k7XG5AQCAtMTMxMSwxNCAmIzQzOzE0OTMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cbiBcdFx0XHQgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZVxuIFx0XHRcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXG5AQCAtMTMyOSwxOCAmIzQzOzE1MTQsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgJiM0MzsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzY0LDIzICYjNDM7MTU1Myw3NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXG4gXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoaHcsIGRhdGEpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwLCBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRSxcbiBcdFx0XHRcdFx0ZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXG4gXHRpZiAoZW5hYmxlKVxuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgcC1cdTAwM2VtdXhlZCBcdTAwMjZcdTAwMjYgcC1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChwLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCwgXHUwMDI2cGVlcl90eXBlKTtcbiYjNDM7XHRcdGlmICghcGVlcl90YXJnZXQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgcGVlcl90YXJnZXQpO1xuJiM0MztcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHQgIHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ZXh0YWNrKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztyZXN0b3JlX3BlZXI6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4mIzQzO3Jlc3RvcmVfdGFyZ2V0OlxuJiM0MztcdHJlc3RvcmVfZXJyID1cbiYjNDM7XHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHApO1xuJiM0MztcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2NCw0MyAmIzQzOzE3MDQsMTY3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQgPSBOVUxMO1xuIFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXHUwMDNlcGY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4mIzQzO1x0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4mIzQzO1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4tXHRpbnQgcmV0O1xuJiM0MztcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbi1cdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KVxuJiM0MztcdHN3aXRjaCAoc3RhdGUpIHtcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4mIzQzO1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgJiM0MzsgT1VUUFVUXG4mIzQzO1x0XHQgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2VcbiYjNDM7XHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbmFibGUgPSB0cnVlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XG4mIzQzO1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCAmIzQzOyBJTlBVVFxuJiM0MztcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4mIzQzO1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuJiM0MztcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuLVx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlaW5wdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4tXHRpZiAoZW5hYmxlKVxuJiM0MztcdGlmICghc21hLVx1MDAzZWFjdGl2ZSkge1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZW5hYmxlKSB7XG4mIzQzO1x0XHR1OCBkYXRhO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0b2xkX2RhdGEgPSBkYXRhO1xuJiM0MztcdFx0c3dpdGNoIChzbWEtXHUwMDNlaWR4KSB7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2b2xkX2NvbmZpZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0LyogUmVmcmVzaCB0YXJnZXQgc3RhdGUgYmVmb3JlIHBlZXItc2lkZSBvcGVyYXRpb25zLiAqL1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHNtYS1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbiYjNDM7XHRcdFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHNtYS1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZwZWVyX3R5cGUpO1xuJiM0MztcdFx0XHRpZiAoIXBlZXJfdGFyZ2V0KSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHRcdHBlZXJfZHBsbF9pZHggPVxuJiM0MztcdFx0XHRcdGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHBlZXJfdGFyZ2V0KTtcbiYjNDM7XHRcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZHBsbF9pZHg7XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgIHBlZXJfZHBsbF9pZHgsIHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRleHRhY2spO1xuJiM0MztcdH1cbiYjNDM7XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO3Jlc3RvcmVfcGVlcjpcbiYjNDM7XHRyZXN0b3JlX2VyciA9XG4mIzQzO1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbiYjNDM7XHRpZiAocmVzdG9yZV9lcnIpXG4mIzQzO1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiYjNDM7cmVzdG9yZV90YXJnZXQ6XG4mIzQzO1x0cmVzdG9yZV9lcnIgPVxuJiM0MztcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuJiM0MztcdGlmIChyZXN0b3JlX2VycilcbiYjNDM7XHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuJiM0MztyZXN0b3JlX3NtYV9jdHJsOlxuJiM0MztcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7XG4mIzQzO1x0aWYgKHJlc3RvcmVfZXJyKVxuJiM0MztcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgc21hKTtcbiYjNDM7XHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTY5Nyw3ICYjNDM7MjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbiYjNDM7XHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ1MTksNiAmIzQzOzQ4ODMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRpZiAocGluLVx1MDAzZWlucHV0LVx1MDAzZXJlZl9zeW5jKVxuIFx0XHRcdHBpbi1cdTAwM2VyZWZfc3luYyA9IHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYyAtIHBpbl9hYnNfaWR4O1xuIFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTtcbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuJiM0MztcbiBcdFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFx1MDAyNnBpbi1cdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcbiBcdH1cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkmIzQzOyYjNDM7KSB7XG5AQCAtNDUyOCw3ICYjNDM7NDg5NCw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XG4gXHRcdHBpbi1cdTAwM2VwZiA9IHBmO1xuIFx0XHRwaW4tXHUwMDNlcHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07XG4tXHRcdGlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuJiM0MztcdFx0c3dpdGNoIChpKSB7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTM4LDcgJiM0Mzs0OTA1LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xuIFx0XHRcdHBpbi1cdTAwM2VpbnB1dCA9IE5VTEw7XG4gXHRcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XG4tXHRcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSAmIzQzO1xuIFx0XHRcdFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcbkBAIC00NTUxLDcgJiM0Mzs0OTE5LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID1cbiBcdFx0XHRcdChEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8XG4gXHRcdFx0XHQgY2Fwcyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7SW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cJiMzNDssIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuJiM0MztcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5AQCAtNDc0Myw2ICYjNDM7NTExNiwxMyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG4gXG4gXHRkZS1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XG4gXHRkcC1cdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XG4mIzQzO1x0aWYgKGRlLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8XG4mIzQzO1x0ICAgIGRwLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0XHRcJiMzNDtpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkZS1cdTAwM2VkcGxsX2lkeCwgZHAtXHUwMDNlZHBsbF9pZHgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFx0ZC1cdTAwM2VudW1faW5wdXRzID0gYWJpbGl0aWVzLm51bV9pbnB1dHM7XG4gXHRkLVx1MDAzZW51bV9vdXRwdXRzID0gYWJpbGl0aWVzLm51bV9vdXRwdXRzO1xuIFx0ZC1cdTAwM2VpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopIFx1MDAyNlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbkBAIC03Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcbiBcdHMzMiBwaGFzZV9hZGp1c3Q7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcbiYjNDM7XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcbiBcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiBcdHM2NCBwaGFzZV9vZmZzZXQ7XG4gXHR1OCBzdGF0dXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjN2EwMTkxMGY0MzhjYTg1NGVjMDcyZDdhNzk4YmUxZWNlNzI2MDdmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTU6NDA6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmY2Nzc0OTgwNjUyZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC04OSw2ICYjNDM7ODksMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9mcmVxdWVuY3kgaWNlX2VzeW5jX3JhbmdlW10gPSB7CiAJRFBMTF9QSU5fRlJFUVVFTkNZX1JBTkdFKDAsIERQTExfUElOX0ZSRVFVRU5DWV8xX0haKSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlCiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHwKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKnxTTUExIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfAomIzQzOyAqfHUuRkwxIFRYIEVuYWJsZSB8ICAgICAgIDAgICAgIHwgICAgICAwICAgICB8CiYjNDM7ICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwKJiM0MzsgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqCiYjNDM7ICogU01BMi9VLkZMMiBNVVggdGFibGUKJiM0MzsgKiYjNDM7LS0tLS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOwomIzQzOyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfAomIzQzOyAqJiM0MzstLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7CiYjNDM7ICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8dS5GTDIgUlggRW5hYmxlIHwgICAgICAgMSAgICAgfCAgICAgIHggICAgIHwgICAgIDAgICAgICB8CiYjNDM7ICp8U01BMiBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8CiYjNDM7ICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIDEgICAgICB8CiYjNDM7IComIzQzOy0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLSYjNDM7LS0tLS0tLS0tLS0tJiM0MzsKJiM0MzsgKi8KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1cKICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmUKQEAgLTQ0Myw2ICYjNDM7NDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCkKJiM0Mzt7CiYjNDM7CWlmIChkLSZndDtwcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtwcHMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtwcHMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CWlmIChkLSZndDtlZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggJmFtcDsmYW1wOwomIzQzOwkgICAgdGFyZ2V0LSZndDtzdGF0ZVtkLSZndDtlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkKJiM0MzsJCXJldHVybiBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlciwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsCiYjNDM7CQkJCSAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKQomIzQzO3sKJiM0MzsJKnBlZXJfdGFyZ2V0ID0gTlVMTDsKJiM0MzsJKnBlZXJfdHlwZSA9IDA7CiYjNDM7CiYjNDM7CXN3aXRjaCAocGVlci0mZ3Q7ZGlyZWN0aW9uKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDoKJiM0MzsJCSpwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiYjNDM7CQkqcGVlcl90YXJnZXQgPSBwZWVyLSZndDtpbnB1dDsKJiM0MzsJCSpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9kcGxsX3Bpbl9lbmFibGUgLSBlbmFibGUgYSBwaW4gb24gZHBsbHMKICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmUKQEAgLTUzOCw2ICYjNDM7NTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZQomIzQzOyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCiYjNDM7ICoKJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCiYjNDM7ICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCiYjNDM7ICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJiMzOTtzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2UKJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCiYjNDM7ICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCiYjNDM7ICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3sKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKJiM0MzsKJiM0MzsJcGVlciA9IGNoYW5nZWQtJmd0O211eGVkOwomIzQzOwlpZiAocGVlci0mZ3Q7cGluKQomIzQzOwkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItJmd0O3Bpbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmcKICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW4KQEAgLTcxMSw2ICYjNDM7NzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLAogCXU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUOwogCWludCByZXQ7CiAKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkmIzQzOyYjNDM7KQomIzQzOwkJcGluLSZndDtzdGF0ZVtpXSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsKIAlzd2l0Y2ggKHBpbl90eXBlKSB7CiAJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDoKIAkJcmV0ID0gaWNlX2FxX2dldF9pbnB1dF9waW5fY2ZnKCZhbXA7cGYtJmd0O2h3LCBwaW4tJmd0O2lkeCwgJmFtcDtwaW4tJmd0O3N0YXR1cywKQEAgLTcyMCwyNSAmIzQzOzgwMywzMSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAJCQlnb3RvIGVycjsKIAkJaWYgKElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTiAmYW1wOyBwaW4tJmd0O2ZsYWdzWzBdKSB7CiAJCQlpZiAocGluLSZndDtwaW4pIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwotCQkJCQlEUExMX1BJTl9TVEFURV9DT05ORUNURUQgOgotCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwotCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/Ci0JCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiYjNDM7CQkJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9CiYjNDM7CQkJCQkJcGluLSZndDtwaW4gPT0gcGYtJmd0O2RwbGxzLmVlYy5hY3RpdmVfaW5wdXQgPwomIzQzOwkJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiYjNDM7CQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsJCQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCQlwaW4tJmd0O3BpbiA9PSBwZi0mZ3Q7ZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/CiYjNDM7CQkJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKJiM0MzsJCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwogCQkJfSBlbHNlIHsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKLQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQkJRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsJCQkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCQlEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwkJCQlpZiAocGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJCURQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KLQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwomIzQzOwkJCWlmIChwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5wcHMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKIAkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDoKQEAgLTc1MCwxOSAmIzQzOzgzOSwyMyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sCiAKIAkJcGFyZW50ICZhbXA7PSBJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19EUExMX1NSQ19TRUw7CiAJCWlmIChJQ0VfQVFDX0dFVF9DR1VfT1VUX0NGR19PVVRfRU4gJmFtcDsgcGluLSZndDtmbGFnc1swXSkgewotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5lZWMuZHBsbF9pZHggPwotCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwotCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMucHBzLmRwbGxfaWR4XSA9Ci0JCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggPwotCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6Ci0JCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwomIzQzOwkJCWlmIChwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ICZsdDsgSUNFX0RQTExfUkNMS19OVU1fTUFYKQomIzQzOwkJCQlwaW4tJmd0O3N0YXRlW3BmLSZndDtkcGxscy5lZWMuZHBsbF9pZHhdID0KJiM0MzsJCQkJCXBhcmVudCA9PSBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4ID8KJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6CiYjNDM7CQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJcGFyZW50ID09IHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggPwomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDoKJiM0MzsJCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKIAkJfSBlbHNlIHsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeF0gPQotCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQotCQkJCURQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDsKJiM0MzsJCQlpZiAocGYtJmd0O2RwbGxzLmVlYy5kcGxsX2lkeCAmbHQ7IElDRV9EUExMX1JDTEtfTlVNX01BWCkKJiM0MzsJCQkJcGluLSZndDtzdGF0ZVtwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4XSA9CiYjNDM7CQkJCQlEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7CiYjNDM7CQkJaWYgKHBmLSZndDtkcGxscy5wcHMuZHBsbF9pZHggJmx0OyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpCiYjNDM7CQkJCXBpbi0mZ3Q7c3RhdGVbcGYtJmd0O2RwbGxzLnBwcy5kcGxsX2lkeF0gPQomIzQzOwkJCQkJRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDoKQEAgLTExNjMsMzAgJiM0MzsxMjU2LDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkJICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7CiB9CiAKLS8qKgotICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlCi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3QKLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpCi0gKgotICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAotICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4mIzM5O3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPCi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZQotICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQotICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuCi0gKgotICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwotICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzCi0gKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuCi0gKi8KLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLAotCQkJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKQomIzQzO3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHsKJiM0MzsJYm9vbCBlbmFibGVkOwomIzQzOwl1OCBkcGxsX2lkeDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MztpY2VfZHBsbF9waW5fY29uZmlnX2dldChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSwKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwomIzQzOwlpbnQgcmV0OwogCi0JcGVlciA9IChjaGFuZ2VkICZndDs9IGQtJmd0O3NtYSAmYW1wOyZhbXA7IGNoYW5nZWQgJmx0OyBkLSZndDtzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgPwotCQkmYW1wO2QtJmd0O3VmbFtjaGFuZ2VkLSZndDtpZHhdIDogJmFtcDtkLSZndDtzbWFbY2hhbmdlZC0mZ3Q7aWR4XTsKLQlpZiAocGVlci0mZ3Q7cGluKQotCQlfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci0mZ3Q7cGluKTsKJiM0MzsJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOOwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6CiYjNDM7CQljb25maWctJmd0O2VuYWJsZWQgPSB0YXJnZXQtJmd0O2ZsYWdzWzBdICZhbXA7CiYjNDM7CQkJCSAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOOwomIzQzOwkJaWYgKCFjb25maWctJmd0O2VuYWJsZWQpIHsKJiM0MzsJCQljb25maWctJmd0O2RwbGxfaWR4ID0gMDsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHRhcmdldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY29uZmlnLSZndDtkcGxsX2lkeCA9IHJldDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LAomIzQzOwkJCSAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKQomIzQzO3sKJiM0MzsJaW50IHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyOwomIzQzOwomIzQzOwlpZiAoY29uZmlnLSZndDtlbmFibGVkKQomIzQzOwkJcmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsCiYjNDM7CQkJCQkJICBjb25maWctJmd0O2RwbGxfaWR4LCB0eXBlLCBleHRhY2spOwomIzQzOwllbHNlCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CXVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXN0b3JlX2VyciB8fCB1cGRhdGVfZXJyKSB7CiYjNDM7CQlkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwKJiM0MzsJCQkgJiMzNDtGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkgaW5pdF9lcnIsIHJlc3RvcmVfZXJyLCB1cGRhdGVfZXJyKTsKJiM0MzsJCXJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHN0cnVjdCBpY2VfcGYgKnBmLCB1OCBvbGRfZGF0YSwKJiM0MzsJCQkJICAgICBpbnQgaW5pdF9lcnIpCiYjNDM7ewomIzQzOwlpbnQgcmVzdG9yZV9lcnI7CiYjNDM7CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CWlmICghcmVzdG9yZV9lcnIpCiYjNDM7CQlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJICYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSBpbml0X2VyciwgcmVzdG9yZV9lcnIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzdG9yZV9lcnI7CiB9CiAKIC8qKgpAQCAtMTIwOCwyOCAmIzQzOzEzNTYsMzcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLAogewogCXN0cnVjdCBpY2VfZHBsbHMgKmQgPSAmYW1wO3AtJmd0O3BmLSZndDtkcGxsczsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyOwotCXU4IGRhdGE7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0ID0gTlVMTDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7CiYjNDM7CXU4IGRhdGEsIG9sZF9kYXRhID0gMDsKJiM0MzsJaW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7CiAKIAlpZiAocC0mZ3Q7ZGlyZWN0aW9uID09IGRpcmVjdGlvbiAmYW1wOyZhbXA7IHAtJmd0O2FjdGl2ZSkKIAkJcmV0dXJuIDA7CiAJcmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoJmFtcDtwLSZndDtwZi0mZ3Q7aHcsICZhbXA7ZGF0YSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJc3dpdGNoIChwLSZndDtpZHgpIHsKIAljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKLQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX01BU0s7Ci0JCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkKJiM0MzsJCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKIAkJCWRhdGEgfD0gSUNFX1NNQTFfRElSX0VOOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfRElSX0VOOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKJiM0MzsJCX0KIAkJYnJlYWs7CiAJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6CiAJCWlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfRElSX0VOOwotCQkJZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiAJCX0gZWxzZSB7Ci0JCQlkYXRhICZhbXA7PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpOwogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1VGTDJfUlhfRElTOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9UWF9FTjsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTI0MSw3ICYjNDM7MTM5OCw3IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCwKIAkJCQkJCUlDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLAogCQkJCQkJZXh0YWNrKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkJZ290byByZXN0b3JlX3NtYTsKIAogCS8qIFdoZW4gYSBkaXJlY3Rpb24gY2hhbmdlIGFjdGl2YXRlcyB0aGUgcGFpcmVkIFUuRkwgcGluLCBlbmFibGUKIAkgKiBpdHMgYmFja2luZyBDR1UgcGluIHNvIHRoZSBwaW4gcmVwb3J0cyBhcyBjb25uZWN0ZWQuIFdpdGhvdXQKQEAgLTEyNTAsMjUgJiM0MzsxNDA3LDQ2IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCwKIAkgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heQogCSAqIHN0aWxsIGJlIHVzaW5nIGl0LgogCSAqLwotCXBlZXIgPSAmYW1wO2QtJmd0O3VmbFtwLSZndDtpZHhdOwomIzQzOwlwZWVyID0gcC0mZ3Q7bXV4ZWQ7CiAJaWYgKHBlZXItJmd0O2FjdGl2ZSkgewotCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7Ci0JCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKLQogCQlpZiAocGVlci0mZ3Q7b3V0cHV0KSB7CiAJCQl0YXJnZXQgPSBwZWVyLSZndDtvdXRwdXQ7CiAJCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwotCQl9IGVsc2UgewomIzQzOwkJfSBlbHNlIGlmIChwZWVyLSZndDtpbnB1dCkgewogCQkJdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiAJCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byByZXN0b3JlX3NtYTsKIAkJfQotCQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cC0mZ3Q7cGYtJmd0O2h3LCB0YXJnZXQsCi0JCQkJCSAgZC0mZ3Q7ZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spOwotCQlpZiAoIXJldCkKLQkJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocC0mZ3Q7cGYsIHRhcmdldCwKLQkJCQkJCQl0eXBlLCBleHRhY2spOwomIzQzOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocC0mZ3Q7cGYsIHRhcmdldCwgdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWE7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpOwomIzQzOwkJaWYgKHBlZXJfZHBsbF9pZHggJmx0OyAwKQomIzQzOwkJCXBlZXJfZHBsbF9pZHggPSBkLSZndDtlZWMuZHBsbF9pZHg7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cC0mZ3Q7cGYtJmd0O2h3LCB0YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwLSZndDtwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfcGVlcjsKIAl9CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmVzdG9yZV9wZWVyOgomIzQzOwlyZXN0b3JlX2VyciA9CiYjNDM7CQlpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocC0mZ3Q7cGYsIHRhcmdldCwgdHlwZSwgJmFtcDtwZWVyX2NvbmZpZywKJiM0MzsJCQkJCSAgICBleHRhY2ssIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwomIzQzO3Jlc3RvcmVfc21hOgomIzQzOwlpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHAtJmd0O3BmLCBvbGRfZGF0YSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjk1LDEzICYjNDM7MTQ3MywxNyBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwotCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKJiM0MzsJZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gcC0mZ3Q7cGY7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnOwogCXN0cnVjdCBpY2VfaHcgKmh3OwomIzQzOwl1OCBvbGRfZGF0YSA9IDA7CiAJYm9vbCBlbmFibGU7CiAJdTggZGF0YTsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDsKIAogCWlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEzMTEsMTQgJiM0MzsxNDkzLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgJmFtcDtkYXRhKTsKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKJiM0MzsJb2xkX2RhdGEgPSBkYXRhOwogCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxNTE0LDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTU0MCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNjQsMjMgJiM0MzsxNTUzLDc0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAogCXJldCA9IGljZV93cml0ZV9zbWFfY3RybChodywgZGF0YSk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiAJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsCiAJCQkJCWV4dGFjayk7CiAJaWYgKHJldCkKLQkJZ290byB1bmxvY2s7CiYjNDM7CQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CiYjNDM7CXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAogCWlmIChlbmFibGUpCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC0mZ3Q7ZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7CiAJZWxzZQogCQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwotCWlmICghcmV0KQotCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwlpZiAoZW5hYmxlICZhbXA7JmFtcDsgcC0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBwLSZndDttdXhlZC0mZ3Q7YWN0aXZlKSB7CiYjNDM7CQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC0mZ3Q7bXV4ZWQsICZhbXA7cGVlcl90YXJnZXQsICZhbXA7cGVlcl90eXBlKTsKJiM0MzsJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCSAgICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV90YXJnZXQ7CiYjNDM7CiYjNDM7CQlwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeCgmYW1wO3BmLSZndDtkcGxscywKJiM0MzsJCQkJCQkJICBwZWVyX3RhcmdldCk7CiYjNDM7CQlpZiAocGVlcl9kcGxsX2lkeCAmbHQ7IDApCiYjNDM7CQkJcGVlcl9kcGxsX2lkeCA9IGQtJmd0O2RwbGxfaWR4OwomIzQzOwkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsIHBlZXJfZHBsbF9pZHgsCiYjNDM7CQkJCQkgIHBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJCWV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9wZWVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfcGVlcjoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLAomIzQzOwkJCQkJICAgICZhbXA7cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTsKJiM0MzsJaWYgKHJlc3RvcmVfZXJyKQomIzQzOwkJcmV0ID0gcmVzdG9yZV9lcnI7CiYjNDM7cmVzdG9yZV90YXJnZXQ6CiYjNDM7CXJlc3RvcmVfZXJyID0KJiM0MzsJCWljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCAmYW1wO29sZF9jb25maWcsCiYjNDM7CQkJCQkgICAgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3NtYV9jdHJsOgomIzQzOwlyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDtkcGxscy5sb2NrKTsKIAlpZiAoIXJldCkKLQkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKCZhbXA7cGYtJmd0O2RwbGxzLCBwKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNDY0LDQzICYjNDM7MTcwNCwxNjcgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCBpY2VfZHBsbF9waW4gKnNtYSA9IHBpbl9wcml2LCAqdGFyZ2V0OwomIzQzOwlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7CiAJc3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2OwogCXN0cnVjdCBpY2VfcGYgKnBmID0gc21hLSZndDtwZjsKLQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CiYjNDM7CWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgb2xkX2NvbmZpZzsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7CiYjNDM7CXU4IG9sZF9kYXRhID0gMDsKIAlib29sIGVuYWJsZTsKLQlpbnQgcmV0OwomIzQzOwlpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAltdXRleF9sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwotCWlmICghc21hLSZndDthY3RpdmUpIHsKLQkJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtJmd0O2RpcmVjdGlvbiwgZXh0YWNrKTsKLQkJaWYgKHJldCkKJiM0MzsJc3dpdGNoIChzdGF0ZSkgewomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6CiYjNDM7CQkvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgJiM0MzsgT1VUUFVUCiYjNDM7CQkgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2UKJiM0MzsJCSAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJZW5hYmxlID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKJiM0MzsJCS8qIFJlamVjdCBkaXJlY3Rpb24tbWlzbWF0Y2hlZCByZXF1ZXN0czogQ09OTkVDVEVEICYjNDM7IElOUFVUCiYjNDM7CQkgKiBpcyBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uLCByZXR1cm4gLUVJTlZBTCBpbiB0aGlzIGNhc2UKJiM0MzsJCSAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKJiM0MzsJCQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwkJZW5hYmxlID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDoKJiM0MzsJCWVuYWJsZSA9IGZhbHNlOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQotCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKLQkJZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTsKJiM0MzsKJiM0MzsJc3dpdGNoIChzbWEtJmd0O2RpcmVjdGlvbikgewomIzQzOwljYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDoKIAkJdGFyZ2V0ID0gc21hLSZndDtpbnB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwotCX0gZWxzZSB7Ci0JCWVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7b3V0cHV0OwogCQl0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYgKGVuYWJsZSkKJiM0MzsJaWYgKCFzbWEtJmd0O2FjdGl2ZSkgewomIzQzOwkJcmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtJmd0O2RpcmVjdGlvbiwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJdTggZGF0YTsKJiM0MzsKJiM0MzsJCXJldCA9IGljZV9yZWFkX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCAmYW1wO2RhdGEpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCW9sZF9kYXRhID0gZGF0YTsKJiM0MzsJCXN3aXRjaCAoc21hLSZndDtpZHgpIHsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9UWF9FTjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoJmFtcDtwZi0mZ3Q7aHcsIGRhdGEpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKJiM0MzsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywKJiM0MzsJCQkJCSAgICAgIGV4dGFjayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwKIAkJCQkJICBleHRhY2spOwotCWVsc2UKLQkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsJCS8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi8KIAkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwkJaWYgKHNtYS0mZ3Q7bXV4ZWQgJmFtcDsmYW1wOyBzbWEtJmd0O211eGVkLSZndDthY3RpdmUpIHsKJiM0MzsJCQlpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLSZndDttdXhlZCwgJmFtcDtwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkgJmFtcDtwZWVyX3R5cGUpOwomIzQzOwkJCWlmICghcGVlcl90YXJnZXQpIHsKJiM0MzsJCQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byByZXN0b3JlX3RhcmdldDsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkJICAgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfdGFyZ2V0OwomIzQzOwomIzQzOwkJCXBlZXJfZHBsbF9pZHggPQomIzQzOwkJCQlpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KCZhbXA7cGYtJmd0O2RwbGxzLCBwZWVyX3RhcmdldCk7CiYjNDM7CQkJaWYgKHBlZXJfZHBsbF9pZHggJmx0OyAwKQomIzQzOwkJCQlwZWVyX2RwbGxfaWR4ID0gZC0mZ3Q7ZHBsbF9pZHg7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgcGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJZ290byByZXN0b3JlX3BlZXI7CiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSwKJiM0MzsJCQkJCQkJZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfcGVlcjsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKCZhbXA7cGYtJmd0O2h3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsCiYjNDM7CQkJCQkJCWV4dGFjayk7CiYjNDM7CX0KJiM0MzsJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7cmVzdG9yZV9wZWVyOgomIzQzOwlyZXN0b3JlX2VyciA9CiYjNDM7CQlpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsCiYjNDM7CQkJCQkgICAgJmFtcDtwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpOwomIzQzOwlpZiAocmVzdG9yZV9lcnIpCiYjNDM7CQlyZXQgPSByZXN0b3JlX2VycjsKJiM0MztyZXN0b3JlX3RhcmdldDoKJiM0MzsJcmVzdG9yZV9lcnIgPQomIzQzOwkJaWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsICZhbXA7b2xkX2NvbmZpZywKJiM0MzsJCQkJCSAgICBleHRhY2ssIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwomIzQzO3Jlc3RvcmVfc21hX2N0cmw6CiYjNDM7CXJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwZiwgb2xkX2RhdGEsIHJldCk7CiYjNDM7CWlmIChyZXN0b3JlX2VycikKJiM0MzsJCXJldCA9IHJlc3RvcmVfZXJyOwogCiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwogCWlmICghcmV0KQotCQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHNtYSk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNjk3LDcgJiM0MzsyMDYxLDcgQEAgaWNlX2RwbGxfcGluX3NtYV9kaXJlY3Rpb25fc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2RwbGxzLmxvY2spOwogCWlmICghcmV0KQotCQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoJmFtcDtwZi0mZ3Q7ZHBsbHMsIHApOwomIzQzOwkJaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ1MTksNiAmIzQzOzQ4ODMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlpZiAocGluLSZndDtpbnB1dC0mZ3Q7cmVmX3N5bmMpCiAJCQlwaW4tJmd0O3JlZl9zeW5jID0gcGluLSZndDtpbnB1dC0mZ3Q7cmVmX3N5bmMgLSBwaW5fYWJzX2lkeDsKIAkJcGluLSZndDtvdXRwdXQgPSAmYW1wO2QtJmd0O291dHB1dHNbSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSldOwomIzQzOwkJcGluLSZndDttdXhlZCA9ICZhbXA7ZC0mZ3Q7dWZsW2ldOwomIzQzOwogCQlpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoJmFtcDtwaW4tJmd0O3Byb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpOwogCX0KIAlmb3IgKGkgPSAwOyBpICZsdDsgSUNFX0RQTExfUElOX1NXX05VTTsgaSYjNDM7JiM0MzspIHsKQEAgLTQ1MjgsNyAmIzQzOzQ4OTQsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlwaW4tJmd0O3Byb3AuY2FwYWJpbGl0aWVzID0gY2FwczsKIAkJcGluLSZndDtwZiA9IHBmOwogCQlwaW4tJmd0O3Byb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldOwotCQlpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHsKJiM0MzsJCXN3aXRjaCAoaSkgewomIzQzOwkJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6CiAJCQlwaW4tJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7CiAJCQlwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpOwogCQkJcGluLSZndDtwcm9wLmZyZXFfc3VwcG9ydGVkID0KQEAgLTQ1MzgsNyAmIzQzOzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKQogCQkJcGluLSZndDtwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07CiAJCQlwaW4tJmd0O2lucHV0ID0gTlVMTDsKIAkJCXBpbi0mZ3Q7b3V0cHV0ID0gJmFtcDtkLSZndDtvdXRwdXRzW3Bpbl9hYnNfaWR4XTsKLQkJfSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6CiAJCQlwaW4tJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDsKIAkJCXBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSAmIzQzOwogCQkJCSAgICAgIGlucHV0X2lkeF9vZmZzZXQ7CkBAIC00NTUxLDcgJiM0Mzs0OTE5LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlwaW4tJmd0O3Byb3AuY2FwYWJpbGl0aWVzID0KIAkJCQkoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfAogCQkJCSBjYXBzKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtJbnZhbGlkIFUuRkwgcGluIGluZGV4OiAlZFxuJiMzNDssIGkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiYjNDM7CQlwaW4tJmd0O211eGVkID0gJmFtcDtkLSZndDtzbWFbaV07CiAJCWljZV9kcGxsX3BoYXNlX3JhbmdlX3NldCgmYW1wO3Bpbi0mZ3Q7cHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7CiAJfQogCkBAIC00NzQzLDYgJiM0Mzs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSkKIAogCWRlLSZndDtkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7CiAJZHAtJmd0O2RwbGxfaWR4ID0gYWJpbGl0aWVzLnBwc19kcGxsX2lkeDsKJiM0MzsJaWYgKGRlLSZndDtkcGxsX2lkeCAmZ3Q7PSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggfHwKJiM0MzsJICAgIGRwLSZndDtkcGxsX2lkeCAmZ3Q7PSBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpIHsKJiM0MzsJCWRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkJJiMzNDtpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XG4mIzM0OywKJiM0MzsJCQlkZS0mZ3Q7ZHBsbF9pZHgsIGRwLSZndDtkcGxsX2lkeCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQogCWQtJmd0O251bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0czsKIAlkLSZndDtudW1fb3V0cHV0cyA9IGFiaWxpdGllcy5udW1fb3V0cHV0czsKIAlkLSZndDtpbnB1dF9waGFzZV9hZGpfbWF4ID0gbGUzMl90b19jcHUoYWJpbGl0aWVzLm1heF9pbl9waGFzZV9hZGopICZhbXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCmluZGV4IDEwM2JhM2U0OTA2ODIuLmRjNmYwOTZiZjA2OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oCkBAIC03Niw2ICYjNDM7NzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHsKIAlzMzIgcGhhc2VfYWRqdXN0OwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0OwogCXN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDsKJiM0MzsJc3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7CiAJZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uOwogCXM2NCBwaGFzZV9vZmZzZXQ7CiAJdTggc3RhdHVzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jYCBhbmQgYGljZV9kcGxsLmhgLCB3YXJyYW50cyBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGlzIGlzIHRoZSBJbnRlbCBgaWNlYCBkcml2ZXIsIHdoaWNoIGhhbmRsZXMgdGhlIEU4MDAgU2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXJzLiBUaGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBhbmQgU01BL1UuRkwgcGluIGNvbmZpZ3VyYXRpb24uIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gZnVuY3Rpb25zIGxpa2UgYGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0YCwgYGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGVgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4YCwgYGljZV9kcGxsX2dldF9wZWVyX3RhcmdldGAgZXRjLgoKTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIHRvdWNoZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSwgd2UgZG9uJiMzOTt0IGJvdGhlciBmdXp6aW5nLiBTbywgaXMgYGljZWAgdmVuZG9yLXNwZWNpZmljPyBXZWxsLCB5ZXMsIGl0JiMzOTtzIEludGVsJiMzOTtzIEU4MDAgc2VyaWVzIFBDSWUgZHJpdmVyLiBCdXQgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gSSB0aGluayBub3QuIFFFTVUgdHlwaWNhbGx5IGhhbmRsZXMgZHJpdmVycyBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYHZpcnRpby1uZXRgLCBub3Qgc3BlY2lhbGl6ZWQgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgc2VyaWVzIGxpa2UgdGhpcy4KClNvLCB0aGUgbmV4dCBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgaWNlYCBjb25zaWRlcmVkIGEgU21hcnROSUMgb3IganVzdCBhIHJlZ3VsYXIgTklDLCBldmVuIHRob3VnaCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgYnkgUUVNVT8gV2hpbGUgYSByZWd1bGFyIE5JQywgaXQgc3RpbGwgcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcGF0aHdheSBmb3IgZW11bGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGhvdXQgdGhlIGFjdHVhbCBFODAwIHNlcmllcyBjYXJkLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogbmV0d29yayBkcml2ZXJzLCBidXQgUENJIGRyaXZlcnMgb2Z0ZW4gZmFpbCBkdXJpbmcgdGhlIGBwcm9iZWAgc3RhZ2UgaWYgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIGFic2VudC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHZpcnR1YWwgZGV2aWNlIGVudHJ5IHBvaW50cyBvciB3b3JrYXJvdW5kcyBmb3IgYGljZWAuIEl0JiMzOTtzIGEgUENJIGRyaXZlciBhZnRlciBhbGwuIEkgc2hvdWxkIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgYGljZV9wcm9iZWAgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQ4OiAqIGljZV9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQwOlx0XHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NTEtXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NTI6XHQucHJvYmUgPSBpY2VfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUzLVx0LnJlbW92ZSA9IGljZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGljZWAgRHJpdmVyKioKCk9rYXksIHNvIHRoZSBgaWNlYCBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLiBSaWdodCBhd2F5LCBJIGtub3cgdGhhdCB3aXRob3V0IGFuIGFjdHVhbCBJbnRlbCBFODAwIHNlcmllcyBOSUMsIGBpY2VfcHJvYmVgIGVpdGhlciB3b24mIzM5O3QgYmUgY2FsbGVkLCBvciBpZiBJIHRyeSB0byBmb3JjZSBpdCwgaXQmIzM5O2xsIGZhaWwuIFRoYXQgbWVhbnMgdGhlIERQTEwgY29kZSBpbiBgaWNlX2RwbGwuY2AgaXMgY29tcGxldGVseSBvZmYtbGltaXRzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4KClRoZSBkb2N1bWVudGF0aW9uIGlzIGNyeXN0YWwgY2xlYXIgb24gdGhpczogaWYgYSBwYXRjaCBvbmx5IHRvdWNoZXMgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGxpa2UgUUVNVSwgdGhlbiBpdCYjMzk7cyBhICYjMzQ7bm8tZ28mIzM0OyBmb3IgZnV6emluZy4gVGhlIGV4YW1wbGVzIHRoZXkgZ2l2ZSDigJMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycywgU21hcnROSUMgZHJpdmVycywgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUg4oCTIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSBgaWNlYCBzaXRzLiBJdOKAmXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc27igJl0IGVtdWxhdGUuCgpCZWZvcmUgSSB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LCBJJiMzOTtsbCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBzZWUgaWYgdGhlcmUmIzM5O3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgaWNlYCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZS4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoaXMgY29kZSBwYXRoIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpYWJsZSBmdXp6aW5nIGluIG15IGN1cnJlbnQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTI4ND1zdGF0aWMgYm9vbCBtYWM4MzkwX3JzcmNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jLTM4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjM4NzpzdGF0aWMgaW50IG1hYzgzOTBfZGV2aWNlX3Byb2JlKHN0cnVjdCBudWJ1c19ib2FyZCAqYm9hcmQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL21hYzgzOTAuYy0zODgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTQzOT1zdGF0aWMgc3RydWN0IG51YnVzX2RyaXZlciBtYWM4MzkwX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjQ0MDpcdC5wcm9iZSA9IG1hYzgzOTBfZGV2aWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtNDQxLVx0LnJlbW92ZSA9IG1hYzgzOTBfZGV2aWNlX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hYzg5eDBfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jLTE2My0gICBhbnl3aGVyZSBlbHNlIHVudGlsIHdlIGhhdmUgYSByZWFsbHkgZ29vZCByZWFzb24gdG8gZG8gc28uICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjE2NDpzdGF0aWMgaW50IG1hYzg5eDBfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jLTE2NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYz01Njk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODl4MF9wbGF0Zm9ybV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjU3MDpcdC5wcm9iZSA9IG1hYzg5eDBfZGV2aWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy01NzEtXHQucmVtb3ZlID0gbWFjODl4MF9kZXZpY2VfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTU6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMzktXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0OT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUxLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUyOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1My1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDM2CgkJCQkJCQlvdXRwdXQ6IDgyCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGljZWAgRHJpdmVyIGFuZCBpdHMgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGludG8gdGhpcyBgaWNlYCBkcml2ZXIsIGFuZCB0aGUgc2l0dWF0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGVtdWxhdGUgdGhpcyB0aGluZyBpbiB0aGUgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXIgdHlwaWNhbGx5IHJlbGllcyBvbi4gSXQmIzM5O3MgYSBoYXJkd2FyZS1kZXBlbmRlbnQgUENJIGRyaXZlciwgbWVhbmluZyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBkZXZpY2VzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGgganVzdCBpc24mIzM5O3QgYWNjZXNzaWJsZS4KClRoZXJlZm9yZSwgYWZ0ZXIgY29uc2lkZXJpbmcgYWxsIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29yZSByZWFzb24gaXMgdGhhdCBhdHRlbXB0aW5nIHRvIGZ1enogaXQgaW4gYSBzdGFuZGFyZCBzZXR1cCBpcyBhIG5vbi1zdGFydGVyLiBUaGUgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGp1c3QgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIHdpdGggdGhlIHVzdWFsIHRvb2xzLiBUaGVyZSYjMzk7cyBubyBwb2ludCBpbiBzcGlubmluZyBvdXIgd2hlZWxzIG9uIHNvbWV0aGluZyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUuIFdlIG5lZWQgdG8gZm9jdXMgb3VyIGVmZm9ydHMgd2hlcmUgd2UgY2FuIGFjdHVhbGx5IG1ha2UgcHJvZ3Jlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBEUExMIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBMaW51eCBEcml2ZXIgKGljZSksIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVyLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBEUExMIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDE1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo0MC41NzY3NDcwNzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA2Nzc1NzIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjQwOjQwLjU3Njc1NTg2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNzk0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdhMDE5MTBmNDM4Y2E4NTRlYzA3MmQ3YTc5OGJlMWVjZTcyNjA3ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuaW5kZXggODVhNzRjZDZlYTFmMy4uZjY3NzQ5ODA2NTJmZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTg5LDYgKzg5LDI5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fZnJlcXVlbmN5IGljZV9lc3luY19yYW5nZVtdID0ge1xcbiBcXHREUExMX1BJTl9GUkVRVUVOQ1lfUkFOR0UoMCwgRFBMTF9QSU5fRlJFUVVFTkNZXzFfSFopLFxcbiB9O1xcbiBcXG4rLypcXG4rICogU01BMS9VLkZMMSBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8ICAgICAgICAgICAgICAgIHwgU01BMV9ESVJfRU4gfCBTTUExX1RYX0VOIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcXG4rICp8dS5GTDEgVFggRW5hYmxlIHwgICAgICAgMCAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8U01BMSBUWCBFbmFibGUgIHwgICAgICAgMSAgICAgfCAgICAgIDAgICAgIHxcXG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICpcXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXFxuKyAqfCAgICAgICAgICAgICAgICB8IFNNQTJfRElSX0VOIHwgU01BMl9UWF9FTiB8IFVGTDJfUlhfRU4gfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICp8U01BMiBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHwgICAgIHggICAgICB8XFxuKyAqfHUuRkwyIFJYIEVuYWJsZSB8ICAgICAgIDEgICAgIHwgICAgICB4ICAgICB8ICAgICAwICAgICAgfFxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcXG4rICp8U01BMiBEaXNhYmxlICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHwgICAgIHggICAgICB8XFxuKyAqfEFsbCBEaXNhYmxlICAgICB8ICAgICAgIDEgICAgIHwgICAgICAxICAgICB8ICAgICAxICAgICAgfFxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcXG4rICovXFxuK1xcbiAvKipcXG4gICogaWNlX2RwbGxfaXNfc3dfcGluIC0gY2hlY2sgaWYgZ2l2ZW4gcGluIHNoYWxsIGJlIGNvbnRyb2xsZWQgYnkgU1dcXG4gICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KHN0cnVjdCBpY2VfZHBsbHMgKmQsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldClcXG4re1xcbitcXHRpZiAoZC1cXHUwMDNlcHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0YXJnZXQtXFx1MDAzZXN0YXRlW2QtXFx1MDAzZXBwcy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gZC1cXHUwMDNlcHBzLmRwbGxfaWR4O1xcbitcXG4rXFx0aWYgKGQtXFx1MDAzZWVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgdGFyZ2V0LVxcdTAwM2VzdGF0ZVtkLVxcdTAwM2VlZWMuZHBsbF9pZHhdID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcXG4rXFx0XFx0cmV0dXJuIGQtXFx1MDAzZWVlYy5kcGxsX2lkeDtcXG4rXFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWNlX2RwbGxfcGluICoqcGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxcbit7XFxuK1xcdCpwZWVyX3RhcmdldCA9IE5VTEw7XFxuK1xcdCpwZWVyX3R5cGUgPSAwO1xcbitcXG4rXFx0c3dpdGNoIChwZWVyLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbitcXHRcXHQqcGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4rXFx0XFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fZW5hYmxlIC0gZW5hYmxlIGEgcGluIG9uIGRwbGxzXFxuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcXG5AQCAtNTM4LDYgKzU5NSwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuKyAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXFxuKyAqXFxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcXG4rICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXFxuKyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxcbisgKlxcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVxcdTAwM2VkcGxscy5sb2NrIGlzXFxuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcXG4re1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xcbitcXG4rXFx0cGVlciA9IGNoYW5nZWQtXFx1MDAzZW11eGVkO1xcbitcXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbitcXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXFxuQEAgLTcxMSw2ICs3OTEsOSBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXFxuIFxcdHU4IHBhcmVudCwgcG9ydF9udW0gPSBJQ0VfQVFDX1NFVF9QSFlfUkVDX0NMS19PVVRfQ1VSUl9QT1JUO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtpXSA9IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4rXFxuIFxcdHN3aXRjaCAocGluX3R5cGUpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDpcXG4gXFx0XFx0cmV0ID0gaWNlX2FxX2dldF9pbnB1dF9waW5fY2ZnKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHBpbi1cXHUwMDNlaWR4LCBcXHUwMDI2cGluLVxcdTAwM2VzdGF0dXMsXFxuQEAgLTcyMCwyNSArODAzLDMxIEBAIGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdGlmIChJQ0VfQVFDX0dFVF9DR1VfSU5fQ0ZHX0ZMRzJfSU5QVVRfRU4gXFx1MDAyNiBwaW4tXFx1MDAzZWZsYWdzWzBdKSB7XFxuIFxcdFxcdFxcdGlmIChwaW4tXFx1MDAzZXBpbikge1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VwaW4gPT0gcGYtXFx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VwaW4gPT0gcGYtXFx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbitcXHRcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlcGluID09IHBmLVxcdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cXG4rXFx0XFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXBpbiA9PSBwZi1cXHUwMDNlZHBsbHMucHBzLmFjdGl2ZV9pbnB1dCA/XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbi1cXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0XFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xcbitcXHRcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4rXFx0XFx0XFx0aWYgKHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggXFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXFxuK1xcdFxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG5AQCAtNzUwLDE5ICs4MzksMjMgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxcbiBcXG4gXFx0XFx0cGFyZW50IFxcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcXG4gXFx0XFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcXHUwMDI2IHBpbi1cXHUwMDNlZmxhZ3NbMF0pIHtcXG4tXFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XFxuLVxcdFxcdFxcdFxcdHBhcmVudCA9PSBwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4ID9cXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcXG4tXFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbi1cXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4tXFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0cGFyZW50ID09IHBmLVxcdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxcbitcXHRcXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuLVxcdFxcdFxcdHBpbi1cXHUwMDNlc3RhdGVbcGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxcbi1cXHRcXHRcXHRcXHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XFxuK1xcdFxcdFxcdGlmIChwZi1cXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFxcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxcbitcXHRcXHRcXHRcXHRwaW4tXFx1MDAzZXN0YXRlW3BmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cXG4rXFx0XFx0XFx0XFx0XFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xcbitcXHRcXHRcXHRpZiAocGYtXFx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcXG4rXFx0XFx0XFx0XFx0cGluLVxcdTAwM2VzdGF0ZVtwZi1cXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XFxuK1xcdFxcdFxcdFxcdFxcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUOlxcbkBAIC0xMTYzLDMwICsxMjU2LDg1IEBAIGljZV9kcGxsX2lucHV0X3N0YXRlX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xcbiB9XFxuIFxcbi0vKipcXG4tICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXFxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbi0gKlxcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4tICpcXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbi0gKi9cXG4tc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsXFxuLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcXG4rXFx0Ym9vbCBlbmFibGVkO1xcbitcXHR1OCBkcGxsX2lkeDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnRcXG4raWNlX2RwbGxfcGluX2NvbmZpZ19nZXQoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCxcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdHBlZXIgPSAoY2hhbmdlZCBcXHUwMDNlPSBkLVxcdTAwM2VzbWEgXFx1MDAyNlxcdTAwMjYgY2hhbmdlZCBcXHUwMDNjIGQtXFx1MDAzZXNtYSArIElDRV9EUExMX1BJTl9TV19OVU0pID9cXG4tXFx0XFx0XFx1MDAyNmQtXFx1MDAzZXVmbFtjaGFuZ2VkLVxcdTAwM2VpZHhdIDogXFx1MDAyNmQtXFx1MDAzZXNtYVtjaGFuZ2VkLVxcdTAwM2VpZHhdO1xcbi1cXHRpZiAocGVlci1cXHUwMDNlcGluKVxcbi1cXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cXHUwMDNlcGluKTtcXG4rXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ6XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cXHUwMDNlZmxhZ3NbMF0gXFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgIElDRV9BUUNfR0VUX0NHVV9JTl9DRkdfRkxHMl9JTlBVVF9FTjtcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VkcGxsX2lkeCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VlbmFibGVkID0gdGFyZ2V0LVxcdTAwM2VmbGFnc1swXSBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xcbitcXHRcXHRpZiAoIWNvbmZpZy1cXHUwMDNlZW5hYmxlZCkge1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZWRwbGxfaWR4ID0gMDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgdGFyZ2V0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlZHBsbF9pZHggPSByZXQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxcbitcXHRcXHRcXHQgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZWVuYWJsZWQpXFxuK1xcdFxcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0dXBkYXRlX2VyciA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyIHx8IHVwZGF0ZV9lcnIpIHtcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJvbGxiYWNrIHBpbiBzdGF0ZTogZXJyICVkLCByZXN0b3JlIGVyciAlZCwgdXBkYXRlIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XFxuK1xcdFxcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChzdHJ1Y3QgaWNlX3BmICpwZiwgdTggb2xkX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGluaXRfZXJyKVxcbit7XFxuK1xcdGludCByZXN0b3JlX2VycjtcXG4rXFxuK1xcdHJlc3RvcmVfZXJyID0gaWNlX3dyaXRlX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIG9sZF9kYXRhKTtcXG4rXFx0aWYgKCFyZXN0b3JlX2VycilcXG4rXFx0XFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2w6IGVyciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xcbitcXG4rXFx0cmV0dXJuIHJlc3RvcmVfZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTIwOCwyOCArMTM1NiwzNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxscyAqZCA9IFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlZHBsbHM7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcdHU4IGRhdGE7XFxuLVxcdGludCByZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbitcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUgPSAwO1xcbitcXHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XFxuK1xcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0O1xcbiBcXG4gXFx0aWYgKHAtXFx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlYWN0aXZlKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VodywgXFx1MDAyNmRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRvbGRfZGF0YSA9IGRhdGE7XFxuIFxcbiBcXHRzd2l0Y2ggKHAtXFx1MDAzZWlkeCkge1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcXG4tXFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcXG4tXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxcbitcXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfRElSX0VOO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbitcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4gXFx0XFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfRElSX0VOO1xcbi1cXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xMjQxLDcgKzEzOTgsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hO1xcbiBcXG4gXFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxcbiBcXHQgKiBpdHMgYmFja2luZyBDR1UgcGluIHNvIHRoZSBwaW4gcmVwb3J0cyBhcyBjb25uZWN0ZWQuIFdpdGhvdXRcXG5AQCAtMTI1MCwyNSArMTQwNyw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXFxuIFxcdCAqIGJhY2tpbmcgcGluIHdoZW4gVS5GTCBiZWNvbWVzIGluYWN0aXZlIGJlY2F1c2UgdGhlIFNNQSBwaW4gbWF5XFxuIFxcdCAqIHN0aWxsIGJlIHVzaW5nIGl0LlxcbiBcXHQgKi9cXG4tXFx0cGVlciA9IFxcdTAwMjZkLVxcdTAwM2V1ZmxbcC1cXHUwMDNlaWR4XTtcXG4rXFx0cGVlciA9IHAtXFx1MDAzZW11eGVkO1xcbiBcXHRpZiAocGVlci1cXHUwMDNlYWN0aXZlKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldDtcXG4tXFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xcbi1cXG4gXFx0XFx0aWYgKHBlZXItXFx1MDAzZW91dHB1dCkge1xcbiBcXHRcXHRcXHR0YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuLVxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAocGVlci1cXHUwMDNlaW5wdXQpIHtcXG4gXFx0XFx0XFx0dGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuIFxcdFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFxcdTAwMjZwLVxcdTAwM2VwZi1cXHUwMDNlaHcsIHRhcmdldCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBkLVxcdTAwM2VlZWMuZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuLVxcdFxcdGlmICghcmV0KVxcbi1cXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXFx1MDAzZXBmLCB0YXJnZXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHR5cGUsIGV4dGFjayk7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwLVxcdTAwM2VwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWE7XFxuK1xcbitcXHRcXHRwZWVyX2RwbGxfaWR4ID0gaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChkLCB0YXJnZXQpO1xcbitcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VlZWMuZHBsbF9pZHg7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnAtXFx1MDAzZXBmLVxcdTAwM2VodywgdGFyZ2V0LCBwZWVyX2RwbGxfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHQgIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXFx1MDAzZXBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbiBcXHR9XFxuIFxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3Jlc3RvcmVfcGVlcjpcXG4rXFx0cmVzdG9yZV9lcnIgPVxcbitcXHRcXHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocC1cXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXFx1MDAyNnBlZXJfY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgZXh0YWNrLCByZXQpO1xcbitcXHRpZiAocmVzdG9yZV9lcnIpXFxuK1xcdFxcdHJldCA9IHJlc3RvcmVfZXJyO1xcbityZXN0b3JlX3NtYTpcXG4rXFx0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVxcdTAwM2VwZiwgb2xkX2RhdGEsIHJldCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTEyOTUsMTMgKzE0NzMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcCA9IHBpbl9wcml2LCAqdGFyZ2V0O1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcXG4tXFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xcbitcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gcC1cXHUwMDNlcGY7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHBlZXJfY29uZmlnO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4gXFx0dTggZGF0YTtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQ7XFxuIFxcbiBcXHRpZiAoaWNlX2RwbGxfaXNfcmVzZXQocGYsIGV4dGFjaykpXFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuQEAgLTEzMTEsMTQgKzE0OTMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChodywgXFx1MDAyNmRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0b2xkX2RhdGEgPSBkYXRhO1xcbiBcXG4gXFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0c3dpdGNoIChwLVxcdTAwM2VpZHgpIHtcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcXG4rXFx0XFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcXG4gXFx0XFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbiBcXHRcXHRcXHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cXG4gXFx0XFx0XFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcXG4gXFx0XFx0XFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cXG5AQCAtMTMyOSwxOCArMTUxNCwyMSBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMV9UWF9FTjtcXG4gXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuLVxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbiBcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFx0XFx0fVxcbiBcXHRcXHR0YXJnZXQgPSBwLVxcdTAwM2VvdXRwdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4tXFx0XFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcXG4rXFx0XFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcXG4gXFx0XFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbiBcXHRcXHRcXHQvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmdcXG4gXFx0XFx0XFx0ICogVUZMMl9SWF9ESVMgY291bGQgYWxzbyBkaXNhYmxlIHRoZSBwYWlyZWRcXG4gXFx0XFx0XFx0ICogU01BMiBpbnB1dC5cXG5AQCAtMTM1Miw3ICsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlaW5wdXQ7XFxuQEAgLTEzNjQsMjMgKzE1NTMsNzQgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXG4gXFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKGh3LCBkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4gXFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcCwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbiBcXG4gXFx0aWYgKGVuYWJsZSlcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcbitcXHRpZiAoZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZW11eGVkIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZW11eGVkLVxcdTAwM2VhY3RpdmUpIHtcXG4rXFx0XFx0aWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHAtXFx1MDAzZW11eGVkLCBcXHUwMDI2cGVlcl90YXJnZXQsIFxcdTAwMjZwZWVyX3R5cGUpO1xcbitcXHRcXHRpZiAoIXBlZXJfdGFyZ2V0KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3RhcmdldDtcXG4rXFxuK1xcdFxcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGVlcl90YXJnZXQpO1xcbitcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VkcGxsX2lkeDtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0fVxcbitcXG4rXFx0Z290byB1bmxvY2s7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfdGFyZ2V0OlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4gXFxuIHVubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcCk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTQ2NCw0MyArMTcwNCwxNjcgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGljZV9kcGxsICpkID0gZHBsbF9wcml2O1xcbiBcXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cXHUwMDNlcGY7XFxuLVxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG4rXFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGUgPSAwLCB0eXBlO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xcbitcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcXG4rXFx0dTggb2xkX2RhdGEgPSAwO1xcbiBcXHRib29sIGVuYWJsZTtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IHBlZXJfZHBsbF9pZHgsIHJlc3RvcmVfZXJyLCByZXQgPSAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKGljZV9kcGxsX2lzX3Jlc2V0KHBmLCBleHRhY2spKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbi1cXHRpZiAoIXNtYS1cXHUwMDNlYWN0aXZlKSB7XFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVxcdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpXFxuK1xcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbitcXHRcXHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgKyBPVVRQVVRcXG4rXFx0XFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXFxuK1xcdFxcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc21hLVxcdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xcbitcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxcbitcXHRcXHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCArIElOUFVUXFxuK1xcdFxcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxcbitcXHRcXHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xcbitcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW5hYmxlID0gdHJ1ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxcbitcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuLVxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFxuK1xcdHN3aXRjaCAoc21hLVxcdTAwM2VkaXJlY3Rpb24pIHtcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XFxuIFxcdFxcdHRhcmdldCA9IHNtYS1cXHUwMDNlaW5wdXQ7XFxuIFxcdFxcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxcbiBcXHRcXHR0YXJnZXQgPSBzbWEtXFx1MDAzZW91dHB1dDtcXG4gXFx0XFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZW5hYmxlKVxcbitcXHRpZiAoIXNtYS1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHNtYSwgc21hLVxcdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdHU4IGRhdGE7XFxuK1xcbitcXHRcXHRyZXQgPSBpY2VfcmVhZF9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHRvbGRfZGF0YSA9IGRhdGE7XFxuK1xcdFxcdHN3aXRjaCAoc21hLVxcdTAwM2VpZHgpIHtcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcXG4rXFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFxcdTAwMjZvbGRfY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCBkLVxcdTAwM2VkcGxsX2lkeCwgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFxcdTAwMjZwZi1cXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XFxuK1xcdFxcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlbXV4ZWQgXFx1MDAyNlxcdTAwMjYgc21hLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdFxcdGljZV9kcGxsX2dldF9wZWVyX3RhcmdldChzbWEtXFx1MDAzZW11eGVkLCBcXHUwMDI2cGVlcl90YXJnZXQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2cGVlcl90eXBlKTtcXG4rXFx0XFx0XFx0aWYgKCFwZWVyX3RhcmdldCkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fY29uZmlnX2dldChwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfdGFyZ2V0O1xcbitcXG4rXFx0XFx0XFx0cGVlcl9kcGxsX2lkeCA9XFxuK1xcdFxcdFxcdFxcdGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcGVlcl90YXJnZXQpO1xcbitcXHRcXHRcXHRpZiAocGVlcl9kcGxsX2lkeCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHBlZXJfZHBsbF9pZHggPSBkLVxcdTAwM2VkcGxsX2lkeDtcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBwZWVyX2RwbGxfaWR4LCBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVzdG9yZV9wZWVyO1xcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfcGVlcjtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGV4dGFjayk7XFxuK1xcdH1cXG4rXFx0Z290byB1bmxvY2s7XFxuK1xcbityZXN0b3JlX3BlZXI6XFxuK1xcdHJlc3RvcmVfZXJyID1cXG4rXFx0XFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2ssIHJldCk7XFxuK1xcdGlmIChyZXN0b3JlX2VycilcXG4rXFx0XFx0cmV0ID0gcmVzdG9yZV9lcnI7XFxuK3Jlc3RvcmVfdGFyZ2V0OlxcbitcXHRyZXN0b3JlX2VyciA9XFxuK1xcdFxcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcXHUwMDI2b2xkX2NvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjaywgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcXG4rXFx0aWYgKHJlc3RvcmVfZXJyKVxcbitcXHRcXHRyZXQgPSByZXN0b3JlX2VycjtcXG4gXFxuIHVubG9jazpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgc21hKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHNtYSk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE2OTcsNyArMjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHAsIGRpcmVjdGlvbiwgZXh0YWNrKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMubG9jayk7XFxuIFxcdGlmICghcmV0KVxcbi1cXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXFx1MDAyNnBmLVxcdTAwM2VkcGxscywgcCk7XFxuK1xcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDUxOSw2ICs0ODgzLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0aWYgKHBpbi1cXHUwMDNlaW5wdXQtXFx1MDAzZXJlZl9zeW5jKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXJlZl9zeW5jID0gcGluLVxcdTAwM2VpbnB1dC1cXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcXG4gXFx0XFx0cGluLVxcdTAwM2VvdXRwdXQgPSBcXHUwMDI2ZC1cXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XFxuK1xcdFxcdHBpbi1cXHUwMDNlbXV4ZWQgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW2ldO1xcbitcXG4gXFx0XFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFxcdTAwMjZwaW4tXFx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xcbiBcXHR9XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpKyspIHtcXG5AQCAtNDUyOCw3ICs0ODk0LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0XFx0cGluLVxcdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9IGNhcHM7XFxuIFxcdFxcdHBpbi1cXHUwMDNlcGYgPSBwZjtcXG4gXFx0XFx0cGluLVxcdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcXG4tXFx0XFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XFxuK1xcdFxcdHN3aXRjaCAoaSkge1xcbitcXHRcXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xcbiBcXHRcXHRcXHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWQgPVxcbkBAIC00NTM4LDcgKzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VpbnB1dCA9IE5VTEw7XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlb3V0cHV0ID0gXFx1MDAyNmQtXFx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7XFxuIFxcdFxcdFxcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXFxuIFxcdFxcdFxcdFxcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XFxuQEAgLTQ1NTEsNyArNDkxOSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID1cXG4gXFx0XFx0XFx0XFx0KERQTExfUElOX0NBUEFCSUxJVElFU19QUklPUklUWV9DQU5fQ0hBTkdFIHxcXG4gXFx0XFx0XFx0XFx0IGNhcHMpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0ZGV2X2VycihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIkludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxcXG5cXFwiLCBpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0cGluLVxcdTAwM2VtdXhlZCA9IFxcdTAwMjZkLVxcdTAwM2VzbWFbaV07XFxuIFxcdFxcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcXHUwMDI2cGluLVxcdTAwM2Vwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTtcXG4gXFx0fVxcbiBcXG5AQCAtNDc0Myw2ICs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcXG4gXFxuIFxcdGRlLVxcdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5lZWNfZHBsbF9pZHg7XFxuIFxcdGRwLVxcdTAwM2VkcGxsX2lkeCA9IGFiaWxpdGllcy5wcHNfZHBsbF9pZHg7XFxuK1xcdGlmIChkZS1cXHUwMDNlZHBsbF9pZHggXFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYIHx8XFxuK1xcdCAgICBkcC1cXHUwMDNlZHBsbF9pZHggXFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XFxuK1xcdFxcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcXCJpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkZS1cXHUwMDNlZHBsbF9pZHgsIGRwLVxcdTAwM2VkcGxsX2lkeCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuIFxcdGQtXFx1MDAzZW51bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0cztcXG4gXFx0ZC1cXHUwMDNlbnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7XFxuIFxcdGQtXFx1MDAzZWlucHV0X3BoYXNlX2Fkal9tYXggPSBsZTMyX3RvX2NwdShhYmlsaXRpZXMubWF4X2luX3BoYXNlX2FkaikgXFx1MDAyNlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uZGM2ZjA5NmJmMDY5YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuQEAgLTc2LDYgKzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XFxuIFxcdHMzMiBwaGFzZV9hZGp1c3Q7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xcbiBcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XFxuK1xcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xcbiBcXHRlbnVtIGRwbGxfcGluX2RpcmVjdGlvbiBkaXJlY3Rpb247XFxuIFxcdHM2NCBwaGFzZV9vZmZzZXQ7XFxuIFxcdHU4IHN0YXR1cztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NDEuMDM4MTI0MzAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE2MDYzNjg4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIExpbnV4IERyaXZlciAoaWNlKSwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIERQTEwgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3YTAxOTEwZjQzOGNhODU0ZWMwNzJkN2E3OThiZTFlY2U3MjYwN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxNTo0MDozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDg1YTc0Y2Q2ZWExZjMuLmY2Nzc0OTgwNjUyZmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbkBAIC04OSw2ICs4OSwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfcGluX2ZyZXF1ZW5jeSBpY2VfZXN5bmNfcmFuZ2VbXSA9IHtcbiBcdERQTExfUElOX0ZSRVFVRU5DWV9SQU5HRSgwLCBEUExMX1BJTl9GUkVRVUVOQ1lfMV9IWiksXG4gfTtcbiBcbisvKlxuKyAqIFNNQTEvVS5GTDEgTVVYIHRhYmxlXG4rICorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUExX0RJUl9FTiB8IFNNQTFfVFhfRU4gfFxuKyAqKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rICp8U01BMSBSWCBFbmFibGUgIHwgICAgICAgMCAgICAgfCAgICAgIHggICAgIHxcbisgKnx1LkZMMSBUWCBFbmFibGUgfCAgICAgICAwICAgICB8ICAgICAgMCAgICAgfFxuKyAqfFNNQTEgVFggRW5hYmxlICB8ICAgICAgIDEgICAgIHwgICAgICAwICAgICB8XG4rICp8QWxsIERpc2FibGUgICAgIHwgICAgICAgMSAgICAgfCAgICAgIDEgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKyAqXG4rICogU01BMi9VLkZMMiBNVVggdGFibGVcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnwgICAgICAgICAgICAgICAgfCBTTUEyX0RJUl9FTiB8IFNNQTJfVFhfRU4gfCBVRkwyX1JYX0VOIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKnxTTUEyIFJYIEVuYWJsZSAgfCAgICAgICAwICAgICB8ICAgICAgeCAgICAgfCAgICAgeCAgICAgIHxcbisgKnx1LkZMMiBSWCBFbmFibGUgfCAgICAgICAxICAgICB8ICAgICAgeCAgICAgfCAgICAgMCAgICAgIHxcbisgKnxTTUEyIFRYIEVuYWJsZSAgfCAgICAgICAxICAgICB8ICAgICAgMCAgICAgfCAgICAgeCAgICAgIHxcbisgKnxTTUEyIERpc2FibGUgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgeCAgICAgIHxcbisgKnxBbGwgRGlzYWJsZSAgICAgfCAgICAgICAxICAgICB8ICAgICAgMSAgICAgfCAgICAgMSAgICAgIHxcbisgKistLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbisgKi9cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9pc19zd19waW4gLSBjaGVjayBpZiBnaXZlbiBwaW4gc2hhbGwgYmUgY29udHJvbGxlZCBieSBTV1xuICAqIEBwZjogcHJpdmF0ZSBib2FyZCBzdHJ1Y3R1cmVcbkBAIC00NDMsNiArNDY2LDQwIEBAIGljZV9kcGxsX3N3X3Bpbl9mcmVxdWVuY3lfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeChzdHJ1Y3QgaWNlX2RwbGxzICpkLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQpXG4re1xuK1x0aWYgKGQtXHUwMDNlcHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVggXHUwMDI2XHUwMDI2XG4rXHQgICAgdGFyZ2V0LVx1MDAzZXN0YXRlW2QtXHUwMDNlcHBzLmRwbGxfaWR4XSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpXG4rXHRcdHJldHVybiBkLVx1MDAzZXBwcy5kcGxsX2lkeDtcbitcbitcdGlmIChkLVx1MDAzZWVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHRhcmdldC1cdTAwM2VzdGF0ZVtkLVx1MDAzZWVlYy5kcGxsX2lkeF0gPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuK1x0XHRyZXR1cm4gZC1cdTAwM2VlZWMuZHBsbF9pZHg7XG4rXG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfZ2V0X3BlZXJfdGFyZ2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpY2VfZHBsbF9waW4gKipwZWVyX3RhcmdldCxcbitcdFx0XHRcdCAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSAqcGVlcl90eXBlKVxuK3tcbitcdCpwZWVyX3RhcmdldCA9IE5VTEw7XG4rXHQqcGVlcl90eXBlID0gMDtcbitcbitcdHN3aXRjaCAocGVlci1cdTAwM2VkaXJlY3Rpb24pIHtcbitcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbitcdFx0KnBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6XG4rXHRcdCpwZWVyX3RhcmdldCA9IHBlZXItXHUwMDNlaW5wdXQ7XG4rXHRcdCpwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4gLyoqXG4gICogaWNlX2RwbGxfcGluX2VuYWJsZSAtIGVuYWJsZSBhIHBpbiBvbiBkcGxsc1xuICAqIEBodzogYm9hcmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVcbkBAIC01MzgsNiArNTk1LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2VcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuKyAqXG4rICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXG4rICogZXhwYW5kZXIsIHRoZSBwYWlyZWQgcGluJ3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuKyAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cbisgKlxuKyAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXHUwMDNlZHBsbHMubG9jayBpc1xuKyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpc1xuKyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbisgKi9cbitzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZClcbit7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyO1xuK1xuK1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4rXHRpZiAocGVlci1cdTAwM2VwaW4pXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rfVxuK1xuIC8qKlxuICAqIGljZV9kcGxsX3Bpbl9zdG9yZV9zdGF0ZSAtIHVwZGF0ZXMgdGhlIHN0YXRlIG9mIHBpbiBpbiBTVyBib29ra2VlcGluZ1xuICAqIEBwaW46IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC03MTEsNiArNzkxLDkgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0dTggcGFyZW50LCBwb3J0X251bSA9IElDRV9BUUNfU0VUX1BIWV9SRUNfQ0xLX09VVF9DVVJSX1BPUlQ7XG4gXHRpbnQgcmV0O1xuIFxuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWDsgaSsrKVxuK1x0XHRwaW4tXHUwMDNlc3RhdGVbaV0gPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXG4gXHRzd2l0Y2ggKHBpbl90eXBlKSB7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuIFx0XHRyZXQgPSBpY2VfYXFfZ2V0X2lucHV0X3Bpbl9jZmcoXHUwMDI2cGYtXHUwMDNlaHcsIHBpbi1cdTAwM2VpZHgsIFx1MDAyNnBpbi1cdTAwM2VzdGF0dXMsXG5AQCAtNzIwLDI1ICs4MDMsMzEgQEAgaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHRpZiAoSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOIFx1MDAyNiBwaW4tXHUwMDNlZmxhZ3NbMF0pIHtcbiBcdFx0XHRpZiAocGluLVx1MDAzZXBpbikge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLmVlYy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdFx0cGluLVx1MDAzZXBpbiA9PSBwZi1cdTAwM2VkcGxscy5lZWMuYWN0aXZlX2lucHV0ID9cbitcdFx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4rXHRcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbitcdFx0XHRcdFx0XHRwaW4tXHUwMDNlcGluID09IHBmLVx1MDAzZWRwbGxzLnBwcy5hY3RpdmVfaW5wdXQgP1xuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCA6XG4rXHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuLVx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0XHREUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0XHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcbitcdFx0XHRcdGlmIChwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggXHUwMDNjIElDRV9EUExMX1JDTEtfTlVNX01BWClcbitcdFx0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHRcdERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDpcbkBAIC03NTAsMTkgKzgzOSwyMyBAQCBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXG4gXHRcdHBhcmVudCBcdTAwMjY9IElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX0RQTExfU1JDX1NFTDtcbiBcdFx0aWYgKElDRV9BUUNfR0VUX0NHVV9PVVRfQ0ZHX09VVF9FTiBcdTAwMjYgcGluLVx1MDAzZWZsYWdzWzBdKSB7XG4tXHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuLVx0XHRcdFx0cGFyZW50ID09IHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCA/XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5wcHMuZHBsbF9pZHggP1xuLVx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbitcdFx0XHRpZiAocGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4IFx1MDAzYyBJQ0VfRFBMTF9SQ0xLX05VTV9NQVgpXG4rXHRcdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMuZWVjLmRwbGxfaWR4XSA9XG4rXHRcdFx0XHRcdHBhcmVudCA9PSBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHggP1xuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9DT05ORUNURUQgOlxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHRwYXJlbnQgPT0gcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4ID9cbitcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEIDpcbitcdFx0XHRcdFx0RFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHBpbi1cdTAwM2VzdGF0ZVtwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHhdID1cbi1cdFx0XHRcdERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDtcbi1cdFx0XHRwaW4tXHUwMDNlc3RhdGVbcGYtXHUwMDNlZHBsbHMucHBzLmRwbGxfaWR4XSA9XG4tXHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4rXHRcdFx0aWYgKHBmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeCBcdTAwM2MgSUNFX0RQTExfUkNMS19OVU1fTUFYKVxuK1x0XHRcdFx0cGluLVx1MDAzZXN0YXRlW3BmLVx1MDAzZWRwbGxzLnBwcy5kcGxsX2lkeF0gPVxuK1x0XHRcdFx0XHREUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XG5AQCAtMTE2MywzMCArMTI1Niw4NSBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuK3N0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIHtcbitcdGJvb2wgZW5hYmxlZDtcbitcdHU4IGRwbGxfaWR4O1xuK307XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQsXG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlLFxuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4rXHRpbnQgcmV0O1xuIFxuLVx0cGVlciA9IChjaGFuZ2VkIFx1MDAzZT0gZC1cdTAwM2VzbWEgXHUwMDI2XHUwMDI2IGNoYW5nZWQgXHUwMDNjIGQtXHUwMDNlc21hICsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4rXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX0lOX0NGR19GTEcyX0lOUFVUX0VOO1xuK1x0XHRjb25maWctXHUwMDNlZHBsbF9pZHggPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuK1x0XHRjb25maWctXHUwMDNlZW5hYmxlZCA9IHRhcmdldC1cdTAwM2VmbGFnc1swXSBcdTAwMjZcbitcdFx0XHRcdCAgSUNFX0FRQ19HRVRfQ0dVX09VVF9DRkdfT1VUX0VOO1xuK1x0XHRpZiAoIWNvbmZpZy1cdTAwM2VlbmFibGVkKSB7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZWRwbGxfaWR4ID0gMDtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCB0YXJnZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNvbmZpZy1cdTAwM2VkcGxsX2lkeCA9IHJldDtcbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK2ljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0LFxuK1x0XHRcdCAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnICpjb25maWcsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaywgaW50IGluaXRfZXJyKVxuK3tcbitcdGludCByZXN0b3JlX2VyciwgdXBkYXRlX2VycjtcbitcbitcdGlmIChjb25maWctXHUwMDNlZW5hYmxlZClcbitcdFx0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICBjb25maWctXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4rXHRlbHNlXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdHVwZGF0ZV9lcnIgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRpZiAocmVzdG9yZV9lcnIgfHwgdXBkYXRlX2Vycikge1xuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcm9sbGJhY2sgcGluIHN0YXRlOiBlcnIgJWQsIHJlc3RvcmUgZXJyICVkLCB1cGRhdGUgZXJyICVkXFxuXCIsXG4rXHRcdFx0IGluaXRfZXJyLCByZXN0b3JlX2VyciwgdXBkYXRlX2Vycik7XG4rXHRcdHJldHVybiByZXN0b3JlX2VyciA/IHJlc3RvcmVfZXJyIDogdXBkYXRlX2VycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwoc3RydWN0IGljZV9wZiAqcGYsIHU4IG9sZF9kYXRhLFxuK1x0XHRcdFx0ICAgICBpbnQgaW5pdF9lcnIpXG4re1xuK1x0aW50IHJlc3RvcmVfZXJyO1xuK1xuK1x0cmVzdG9yZV9lcnIgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbitcdGlmICghcmVzdG9yZV9lcnIpXG4rXHRcdHJlc3RvcmVfZXJyID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHQgXCJGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbDogZXJyICVkLCByZXN0b3JlIGVyciAlZFxcblwiLFxuK1x0XHRcdCBpbml0X2VyciwgcmVzdG9yZV9lcnIpO1xuK1xuK1x0cmV0dXJuIHJlc3RvcmVfZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xMjA4LDI4ICsxMzU2LDM3IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcbiB7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxzICpkID0gXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VkcGxscztcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXHR1OCBkYXRhO1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnRhcmdldCA9IE5VTEw7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZSA9IDA7XG4rXHR1OCBkYXRhLCBvbGRfZGF0YSA9IDA7XG4rXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcbiBcbiBcdGlmIChwLVx1MDAzZWRpcmVjdGlvbiA9PSBkaXJlY3Rpb24gXHUwMDI2XHUwMDI2IHAtXHUwMDNlYWN0aXZlKVxuIFx0XHRyZXR1cm4gMDtcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbitcdG9sZF9kYXRhID0gZGF0YTtcbiBcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4tXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVClcbitcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuK1x0XHR9XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XG4tXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI0MSw3ICsxMzk4LDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0XHRcdFx0XHRcdElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRcdGV4dGFjayk7XG4gXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFxuIFx0LyogV2hlbiBhIGRpcmVjdGlvbiBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBwYWlyZWQgVS5GTCBwaW4sIGVuYWJsZVxuIFx0ICogaXRzIGJhY2tpbmcgQ0dVIHBpbiBzbyB0aGUgcGluIHJlcG9ydHMgYXMgY29ubmVjdGVkLiBXaXRob3V0XG5AQCAtMTI1MCwyNSArMTQwNyw0NiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4rXHRwZWVyID0gcC1cdTAwM2VtdXhlZDtcbiBcdGlmIChwZWVyLVx1MDAzZWFjdGl2ZSkge1xuLVx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XG4tXHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbi1cbiBcdFx0aWYgKHBlZXItXHUwMDNlb3V0cHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4gXHRcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0fSBlbHNlIGlmIChwZWVyLVx1MDAzZWlucHV0KSB7XG4gXHRcdFx0dGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbiBcdFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hO1xuIFx0XHR9XG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cC1cdTAwM2VwZi1cdTAwM2VodywgdGFyZ2V0LFxuLVx0XHRcdFx0XHQgIGQtXHUwMDNlZWVjLmRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0XHRpZiAoIXJldClcbi1cdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCxcbi1cdFx0XHRcdFx0XHRcdHR5cGUsIGV4dGFjayk7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYTtcbitcbitcdFx0cGVlcl9kcGxsX2lkeCA9IGljZV9kcGxsX2dldF9mYWxsYmFja19pZHgoZCwgdGFyZ2V0KTtcbitcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9IGQtXHUwMDNlZWVjLmRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnAtXHUwMDNlcGYtXHUwMDNlaHcsIHRhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbiBcdH1cbiBcbitcdHJldHVybiAwO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHAtXHUwMDNlcGYsIHRhcmdldCwgdHlwZSwgXHUwMDI2cGVlcl9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hOlxuK1x0aWNlX2RwbGxfcmVzdG9yZV9zbWFfY3RybChwLVx1MDAzZXBmLCBvbGRfZGF0YSwgcmV0KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTEyOTUsMTMgKzE0NzMsMTcgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwID0gcGluX3ByaXYsICp0YXJnZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4tXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG4rXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZSA9IDAsIHR5cGU7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHAtXHUwMDNlcGY7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBvbGRfY29uZmlnO1xuK1x0c3RydWN0IGljZV9kcGxsX3Bpbl9jb25maWcgcGVlcl9jb25maWc7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodztcbitcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0dTggZGF0YTtcbi1cdGludCByZXQ7XG4rXHRpbnQgcGVlcl9kcGxsX2lkeCwgcmVzdG9yZV9lcnIsIHJldDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbkBAIC0xMzExLDE0ICsxNDkzLDE3IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKGh3LCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuK1x0b2xkX2RhdGEgPSBkYXRhO1xuIFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4rXHRcdHN3aXRjaCAoc3RhdGUpIHtcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDEgaXMgbm90IGFjdGl2ZSwgc2V0dGluZyBUWF9FTlxuIFx0XHRcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXG4gXHRcdFx0ICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC5cbkBAIC0xMzI5LDE4ICsxNTE0LDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHR9XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRlbmFibGUgPSBmYWxzZTtcbi1cdFx0fSBlbHNlIHtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHR0YXJnZXQgPSBwLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbi1cdFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEUpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmdcbiBcdFx0XHQgKiBVRkwyX1JYX0RJUyBjb3VsZCBhbHNvIGRpc2FibGUgdGhlIHBhaXJlZFxuIFx0XHRcdCAqIFNNQTIgaW5wdXQuXG5AQCAtMTM1Miw3ICsxNTQwLDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlaW5wdXQ7XG5AQCAtMTM2NCwyMyArMTU1Myw3NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXG4gXHRyZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoaHcsIGRhdGEpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiBcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHAsIElDRV9EUExMX1BJTl9UWVBFX1NPRlRXQVJFLFxuIFx0XHRcdFx0XHRleHRhY2spO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byB1bmxvY2s7XG4rXHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbitcbitcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsIGV4dGFjayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4gXG4gXHRpZiAoZW5hYmxlKVxuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0aWYgKHJldClcbitcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRpZiAoZW5hYmxlIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkIFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQocC1cdTAwM2VtdXhlZCwgXHUwMDI2cGVlcl90YXJnZXQsIFx1MDAyNnBlZXJfdHlwZSk7XG4rXHRcdGlmICghcGVlcl90YXJnZXQpIHtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICAgIFx1MDAyNnBlZXJfY29uZmlnLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdHBlZXJfZHBsbF9pZHggPSBpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLFxuK1x0XHRcdFx0XHRcdFx0ICBwZWVyX3RhcmdldCk7XG4rXHRcdGlmIChwZWVyX2RwbGxfaWR4IFx1MDAzYyAwKVxuK1x0XHRcdHBlZXJfZHBsbF9pZHggPSBkLVx1MDAzZWRwbGxfaWR4O1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCwgcGVlcl9kcGxsX2lkeCxcbitcdFx0XHRcdFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0ZXh0YWNrKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfcGVlcjtcbitcdH1cbitcbitcdGdvdG8gdW5sb2NrO1xuK1xuK3Jlc3RvcmVfcGVlcjpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCBwZWVyX3RhcmdldCwgcGVlcl90eXBlLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjaywgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4rcmVzdG9yZV90YXJnZXQ6XG4rXHRyZXN0b3JlX2VyciA9XG4rXHRcdGljZV9kcGxsX3Bpbl9jb25maWdfcmVzdG9yZShwZiwgdGFyZ2V0LCB0eXBlLCBcdTAwMjZvbGRfY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0cmVzdG9yZV9lcnIgPSBpY2VfZHBsbF9yZXN0b3JlX3NtYV9jdHJsKHBmLCBvbGRfZGF0YSwgcmV0KTtcbitcdGlmIChyZXN0b3JlX2VycilcbitcdFx0cmV0ID0gcmVzdG9yZV9lcnI7XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE0NjQsNDMgKzE3MDQsMTY3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqc21hID0gcGluX3ByaXYsICp0YXJnZXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldCA9IE5VTEw7XG4gXHRzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHNtYS1cdTAwM2VwZjtcbi1cdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcbitcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlID0gMCwgdHlwZTtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW5fY29uZmlnIG9sZF9jb25maWc7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluX2NvbmZpZyBwZWVyX2NvbmZpZztcbitcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuLVx0aW50IHJldDtcbitcdGludCBwZWVyX2RwbGxfaWR4LCByZXN0b3JlX2VyciwgcmV0ID0gLUVJTlZBTDtcbiBcbiBcdGlmIChpY2VfZHBsbF9pc19yZXNldChwZiwgZXh0YWNrKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4tXHRpZiAoIXNtYS1cdTAwM2VhY3RpdmUpIHtcbi1cdFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc21hLCBzbWEtXHUwMDNlZGlyZWN0aW9uLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KVxuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuK1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IFNFTEVDVEFCTEUgKyBPVVRQVVRcbitcdFx0ICogaXMgYW4gaW52YWxpZCBjb21iaW5hdGlvbiwgcmV0dXJuIC1FSU5WQUwgaW4gdGhpcyBjYXNlXG4rXHRcdCAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgZGlzYWJsaW5nIHRoZSBwaW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuK1x0XHQvKiBSZWplY3QgZGlyZWN0aW9uLW1pc21hdGNoZWQgcmVxdWVzdHM6IENPTk5FQ1RFRCArIElOUFVUXG4rXHRcdCAqIGlzIGFuIGludmFsaWQgY29tYmluYXRpb24sIHJldHVybiAtRUlOVkFMIGluIHRoaXMgY2FzZVxuK1x0XHQgKiBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGRpc2FibGluZyB0aGUgcGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuK1x0XHRlbmFibGUgPSBmYWxzZTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1xuK1x0c3dpdGNoIChzbWEtXHUwMDNlZGlyZWN0aW9uKSB7XG4rXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmICghc21hLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzbWEsIHNtYS1cdTAwM2VkaXJlY3Rpb24sIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAoZW5hYmxlKSB7XG4rXHRcdHU4IGRhdGE7XG4rXG4rXHRcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBcdTAwMjZkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0b2xkX2RhdGEgPSBkYXRhO1xuK1x0XHRzd2l0Y2ggKHNtYS1cdTAwM2VpZHgpIHtcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9jb25maWdfZ2V0KHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICAgIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsXG4gXHRcdFx0XHRcdCAgZXh0YWNrKTtcbi1cdGVsc2Vcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbi1cdGlmICghcmV0KVxuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXHRcdC8qIFJlZnJlc2ggdGFyZ2V0IHN0YXRlIGJlZm9yZSBwZWVyLXNpZGUgb3BlcmF0aW9ucy4gKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQgXHUwMDI2XHUwMDI2IHNtYS1cdTAwM2VtdXhlZC1cdTAwM2VhY3RpdmUpIHtcbitcdFx0XHRpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXQoc21hLVx1MDAzZW11eGVkLCBcdTAwMjZwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgXHUwMDI2cGVlcl90eXBlKTtcbitcdFx0XHRpZiAoIXBlZXJfdGFyZ2V0KSB7XG4rXHRcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byByZXN0b3JlX3RhcmdldDtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2NvbmZpZ19nZXQocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGVlcl9jb25maWcsIGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV90YXJnZXQ7XG4rXG4rXHRcdFx0cGVlcl9kcGxsX2lkeCA9XG4rXHRcdFx0XHRpY2VfZHBsbF9nZXRfZmFsbGJhY2tfaWR4KFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwZWVyX3RhcmdldCk7XG4rXHRcdFx0aWYgKHBlZXJfZHBsbF9pZHggXHUwMDNjIDApXG4rXHRcdFx0XHRwZWVyX2RwbGxfaWR4ID0gZC1cdTAwM2VkcGxsX2lkeDtcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgIHBlZXJfZHBsbF9pZHgsIHBlZXJfdHlwZSwgZXh0YWNrKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0Z290byByZXN0b3JlX3BlZXI7XG4rXHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsIHBlZXJfdHlwZSxcbitcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGdvdG8gcmVzdG9yZV9wZWVyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsXG4rXHRcdFx0XHRcdFx0XHRleHRhY2spO1xuK1x0fVxuK1x0Z290byB1bmxvY2s7XG4rXG4rcmVzdG9yZV9wZWVyOlxuK1x0cmVzdG9yZV9lcnIgPVxuK1x0XHRpY2VfZHBsbF9waW5fY29uZmlnX3Jlc3RvcmUocGYsIHBlZXJfdGFyZ2V0LCBwZWVyX3R5cGUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZwZWVyX2NvbmZpZywgZXh0YWNrLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbityZXN0b3JlX3RhcmdldDpcbitcdHJlc3RvcmVfZXJyID1cbitcdFx0aWNlX2RwbGxfcGluX2NvbmZpZ19yZXN0b3JlKHBmLCB0YXJnZXQsIHR5cGUsIFx1MDAyNm9sZF9jb25maWcsXG4rXHRcdFx0XHRcdCAgICBleHRhY2ssIHJldCk7XG4rXHRpZiAocmVzdG9yZV9lcnIpXG4rXHRcdHJldCA9IHJlc3RvcmVfZXJyO1xuK3Jlc3RvcmVfc21hX2N0cmw6XG4rXHRyZXN0b3JlX2VyciA9IGljZV9kcGxsX3Jlc3RvcmVfc21hX2N0cmwocGYsIG9sZF9kYXRhLCByZXQpO1xuK1x0aWYgKHJlc3RvcmVfZXJyKVxuK1x0XHRyZXQgPSByZXN0b3JlX2VycjtcbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBzbWEpO1xuK1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyArMjA2MSw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDUxOSw2ICs0ODgzLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuK1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XG5AQCAtNDUyOCw3ICs0ODk0LDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcbiBcdFx0cGluLVx1MDAzZXBmID0gcGY7XG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcbi1cdFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XG4rXHRcdHN3aXRjaCAoaSkge1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTM4LDcgKzQ5MDUsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdFx0cGluLVx1MDAzZWlucHV0ID0gTlVMTDtcbiBcdFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcbi1cdFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXG4gXHRcdFx0XHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xuQEAgLTQ1NTEsNyArNDkxOSwxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5AQCAtNDc0Myw2ICs1MTE2LDEzIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbiBcbiBcdGRlLVx1MDAzZWRwbGxfaWR4ID0gYWJpbGl0aWVzLmVlY19kcGxsX2lkeDtcbiBcdGRwLVx1MDAzZWRwbGxfaWR4ID0gYWJpbGl0aWVzLnBwc19kcGxsX2lkeDtcbitcdGlmIChkZS1cdTAwM2VkcGxsX2lkeCBcdTAwM2U9IElDRV9EUExMX1JDTEtfTlVNX01BWCB8fFxuK1x0ICAgIGRwLVx1MDAzZWRwbGxfaWR4IFx1MDAzZT0gSUNFX0RQTExfUkNMS19OVU1fTUFYKSB7XG4rXHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJpbnZhbGlkIGRwbGxfaWR4IGluIGNndSBhYmlsaXRpZXM6IGVlYz0ldSwgcHBzPSV1XFxuXCIsXG4rXHRcdFx0ZGUtXHUwMDNlZHBsbF9pZHgsIGRwLVx1MDAzZWRwbGxfaWR4KTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4gXHRkLVx1MDAzZW51bV9pbnB1dHMgPSBhYmlsaXRpZXMubnVtX2lucHV0cztcbiBcdGQtXHUwMDNlbnVtX291dHB1dHMgPSBhYmlsaXRpZXMubnVtX291dHB1dHM7XG4gXHRkLVx1MDAzZWlucHV0X3BoYXNlX2Fkal9tYXggPSBsZTMyX3RvX2NwdShhYmlsaXRpZXMubWF4X2luX3BoYXNlX2FkaikgXHUwMDI2XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuaW5kZXggMTAzYmEzZTQ5MDY4Mi4uZGM2ZjA5NmJmMDY5YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuQEAgLTc2LDYgKzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7XG4gXHRzMzIgcGhhc2VfYWRqdXN0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7XG4rXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICptdXhlZDtcbiBcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiBcdHM2NCBwaGFzZV9vZmZzZXQ7XG4gXHR1OCBzdGF0dXM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo0MS4wMzgxMjU5MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTc4MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AgYW5kIGBpY2VfZHBsbC5oYCwgd2FycmFudHMgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhpcyBpcyB0aGUgSW50ZWwgYGljZWAgZHJpdmVyLCB3aGljaCBoYW5kbGVzIHRoZSBFODAwIFNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVycy4gVGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgYW5kIFNNQS9VLkZMIHBpbiBjb25maWd1cmF0aW9uLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGZ1bmN0aW9ucyBsaWtlIGBpY2VfZHBsbF9zd19waW5fZnJlcXVlbmN5X2dldGAsIGBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlYCwgYW5kIHRoZSBhZGRpdGlvbiBvZiBgaWNlX2RwbGxfZ2V0X2ZhbGxiYWNrX2lkeGAsIGBpY2VfZHBsbF9nZXRfcGVlcl90YXJnZXRgIGV0Yy5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIHRvdWNoZXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSwgd2UgZG9uJ3QgYm90aGVyIGZ1enppbmcuIFNvLCBpcyBgaWNlYCB2ZW5kb3Itc3BlY2lmaWM/IFdlbGwsIHllcywgaXQncyBJbnRlbCdzIEU4MDAgc2VyaWVzIFBDSWUgZHJpdmVyLiBCdXQgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gSSB0aGluayBub3QuIFFFTVUgdHlwaWNhbGx5IGhhbmRsZXMgZHJpdmVycyBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYHZpcnRpby1uZXRgLCBub3Qgc3BlY2lhbGl6ZWQgZHJpdmVycyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgc2VyaWVzIGxpa2UgdGhpcy5cblxuU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGJlY29tZXM6IGlzIGBpY2VgIGNvbnNpZGVyZWQgYSBTbWFydE5JQyBvciBqdXN0IGEgcmVndWxhciBOSUMsIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IGVtdWxhdGVkIGJ5IFFFTVU/IFdoaWxlIGEgcmVndWxhciBOSUMsIGl0IHN0aWxsIHJlbGllcyBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgcGF0aHdheSBmb3IgZW11bGF0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGhvdXQgdGhlIGFjdHVhbCBFODAwIHNlcmllcyBjYXJkLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogbmV0d29yayBkcml2ZXJzLCBidXQgUENJIGRyaXZlcnMgb2Z0ZW4gZmFpbCBkdXJpbmcgdGhlIGBwcm9iZWAgc3RhZ2UgaWYgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGlzIGFic2VudC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgdmlydHVhbCBkZXZpY2UgZW50cnkgcG9pbnRzIG9yIHdvcmthcm91bmRzIGZvciBgaWNlYC4gSXQncyBhIFBDSSBkcml2ZXIgYWZ0ZXIgYWxsLiBJIHNob3VsZCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBpY2VfcHJvYmVgIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo1Mi4xMTk5MDg1MzNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5ODQzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODQ5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODUyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODUzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxNTo0MDo1Mi4xNzU4OTY5ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTk1ODc3OTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIGBpY2VgIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBgaWNlYCBkcml2ZXIgaXMgYSBQQ0kgZHJpdmVyLiBSaWdodCBhd2F5LCBJIGtub3cgdGhhdCB3aXRob3V0IGFuIGFjdHVhbCBJbnRlbCBFODAwIHNlcmllcyBOSUMsIGBpY2VfcHJvYmVgIGVpdGhlciB3b24ndCBiZSBjYWxsZWQsIG9yIGlmIEkgdHJ5IHRvIGZvcmNlIGl0LCBpdCdsbCBmYWlsLiBUaGF0IG1lYW5zIHRoZSBEUExMIGNvZGUgaW4gYGljZV9kcGxsLmNgIGlzIGNvbXBsZXRlbHkgb2ZmLWxpbWl0cyBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIHdoaWNoIGlzIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC5cblxuVGhlIGRvY3VtZW50YXRpb24gaXMgY3J5c3RhbCBjbGVhciBvbiB0aGlzOiBpZiBhIHBhdGNoIG9ubHkgdG91Y2hlcyB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLCB0aGVuIGl0J3MgYSBcIm5vLWdvXCIgZm9yIGZ1enppbmcuIFRoZSBleGFtcGxlcyB0aGV5IGdpdmUg4oCTIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMsIFNtYXJ0TklDIGRyaXZlcnMsIEdQVSBkcml2ZXJzIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIOKAkyB0aGF0J3MgZXhhY3RseSB3aGVyZSBgaWNlYCBzaXRzLiBJdOKAmXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXIgc3BlY2lmaWNhbGx5IGZvciBoYXJkd2FyZSB0aGF0IHN0YW5kYXJkIFFFTVUgZG9lc27igJl0IGVtdWxhdGUuXG5cbkJlZm9yZSBJIHdyaXRlIHRoaXMgb2ZmIGNvbXBsZXRlbHksIEknbGwgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgKmFueSogc29mdHdhcmUgZW11bGF0aW9uIGZvciBgaWNlYCBiYWtlZCBpbnRvIHRoZSBrZXJuZWwuIEp1c3QgdG8gYmUgc3VyZS4gQnV0IGJhc2VkIG9uIG15IGluaXRpYWwgYXNzZXNzbWVudCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhpcyBjb2RlIHBhdGggaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdmlhYmxlIGZ1enppbmcgaW4gbXkgY3VycmVudCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NTcuNzcxNzc4NDA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk0NjM0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTI4ND1zdGF0aWMgYm9vbCBtYWM4MzkwX3JzcmNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtMzg2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jOjM4NzpzdGF0aWMgaW50IG1hYzgzOTBfZGV2aWNlX3Byb2JlKHN0cnVjdCBudWJ1c19ib2FyZCAqYm9hcmQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtMzg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvbWFjODM5MC5jPTQzOT1zdGF0aWMgc3RydWN0IG51YnVzX2RyaXZlciBtYWM4MzkwX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL21hYzgzOTAuYzo0NDA6XFx0LnByb2JlID0gbWFjODM5MF9kZXZpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9tYWM4MzkwLmMtNDQxLVxcdC5yZW1vdmUgPSBtYWM4MzkwX2RldmljZV9yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jPTE1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hYzg5eDBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9tYWM4OXgwLmMtMTYzLSAgIGFueXdoZXJlIGVsc2UgdW50aWwgd2UgaGF2ZSBhIHJlYWxseSBnb29kIHJlYXNvbiB0byBkbyBzby4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvbWFjODl4MC5jOjE2NDpzdGF0aWMgaW50IG1hYzg5eDBfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy0xNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYz01Njk9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjODl4MF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYzo1NzA6XFx0LnByb2JlID0gbWFjODl4MF9kZXZpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL21hYzg5eDAuYy01NzEtXFx0LnJlbW92ZSA9IG1hYzg5eDBfZGV2aWNlX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNDg6ICogaWNlX3Byb2JlIC0gRGV2aWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE1ND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDA6XFx0XFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTg0OT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NTEtXFx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTg1MjpcXHQucHJvYmUgPSBpY2VfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg1My1cXHQucmVtb3ZlID0gaWNlX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDA6NTcuOTE2NzMxODgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNzcxODI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgaWNlYCBEcml2ZXIgYW5kIGl0cyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGludG8gdGhpcyBgaWNlYCBkcml2ZXIsIGFuZCB0aGUgc2l0dWF0aW9uIGlzIHByZXR0eSBjbGVhci4gVGhlcmUncyBubyB3YXkgdG8gZW11bGF0ZSB0aGlzIHRoaW5nIGluIHRoZSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB0aGF0IHN5emthbGxlciB0eXBpY2FsbHkgcmVsaWVzIG9uLiBJdCdzIGEgaGFyZHdhcmUtZGVwZW5kZW50IFBDSSBkcml2ZXIsIG1lYW5pbmcgaXQncyBpbnRyaW5zaWNhbGx5IHRpZWQgdG8gdGhlIGFjdHVhbCBwaHlzaWNhbCBoYXJkd2FyZSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBkZXZpY2VzLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgaGFyZHdhcmUsIHRoZSBjb2RlIHBhdGgganVzdCBpc24ndCBhY2Nlc3NpYmxlLlxuXG5UaGVyZWZvcmUsIGFmdGVyIGNvbnNpZGVyaW5nIGFsbCB0aGlzLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29yZSByZWFzb24gaXMgdGhhdCBhdHRlbXB0aW5nIHRvIGZ1enogaXQgaW4gYSBzdGFuZGFyZCBzZXR1cCBpcyBhIG5vbi1zdGFydGVyLiBUaGUgdmVuZG9yLXNwZWNpZmljIG5hdHVyZSBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIGp1c3QgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIHdpdGggdGhlIHVzdWFsIHRvb2xzLiBUaGVyZSdzIG5vIHBvaW50IGluIHNwaW5uaW5nIG91ciB3aGVlbHMgb24gc29tZXRoaW5nIHRoYXQncyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlLiBXZSBuZWVkIHRvIGZvY3VzIG91ciBlZmZvcnRzIHdoZXJlIHdlIGNhbiBhY3R1YWxseSBtYWtlIHByb2dyZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQzNiwiT3V0cHV0VG9rZW5zIjo4MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDE1OjQxOjAyLjY0NDQ1MjE4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgTGludXggRHJpdmVyIChpY2UpLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlci4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgRFBMTCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTU6NDE6MDIuNjQ0NDk1NDI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl5gl[1] Phase: Running StartedAt: 2026-08-21 15:41:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl5gl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-21 15:41:13 +0000 UTC FinishedAt: 2026-08-21 15:41:18 +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,}