Name: series-workflowpwtxh Phase: Failed StartedAt: 2026-09-08 18:32:05 +0000 UTC FinishedAt: 2026-09-08 19:08:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpwtxh[0] Phase: Succeeded StartedAt: 2026-09-08 18:32:05 +0000 UTC FinishedAt: 2026-09-08 19:08:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpwtxh[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 18:32:05 +0000 UTC FinishedAt: 2026-09-08 19:08:30 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xzIGFuZCBkb2N1bWVudGF0aW9uIHVuZGVyIHRvb2xzLyAoYnBmdG9vbCBhbmQgcGVyZiBwcm9nIHByb2ZpbGVyIHNrZWxldG9ucykuIE5vIGtlcm5lbCBzb3VyY2UgZmlsZXMgb3Iga2VybmVsIG1vZHVsZXMgYWZmZWN0aW5nIHZtbGludXggYXJlIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhY2NlMThjY2IyZWVmMWEzNDg3Zjk5ODkxNmFkYTkxMWM2MWI4OWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjA4OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0XG5AQCAtMjE3LDcgJiM0MzsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3RcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxuICAgICBQcm9maWxlICpNRVRSSUNzKiBmb3IgYnBmIHByb2dyYW0gKlBST0cqIGZvciAqRFVSQVRJT04qIHNlY29uZHMgb3IgdW50aWxcbiAgICAgdXNlciBoaXRzIFx1MDAzY0N0cmwmIzQzO0NcdTAwM2UuICpEVVJBVElPTiogaXMgb3B0aW9uYWwuIElmICpEVVJBVElPTiogaXMgbm90IHNwZWNpZmllZCxcbi0gICAgdGhlIHByb2ZpbGluZyB3aWxsIHJ1biB1cCB0byAqKlVJTlRfTUFYKiogc2Vjb25kcy5cbiYjNDM7ICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuIFBsYWluIG91dHB1dCBzY2FsZXMgZWFjaFxuJiM0MzsgICAgcGVyLUNQVSBtZXRyaWMgdmFsdWUgdG8gY29ycmVjdCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuIFdoZW5cbiYjNDM7ICAgICoqY3ljbGVzKiogaXMgc2VsZWN0ZWQsIGl0IGFsc28gcmVwb3J0cyBjeWNsZXMgcGVyIGluY2x1ZGVkIHByb2dyYW0gcnVuLiBJZlxuJiM0MzsgICAgYSBzZWxlY3RlZCBtZXRyaWMgd2FzIG5vdCBzY2hlZHVsZWQgb24gYSBDUFUsIGFsbCBtZXRyaWMgdmFsdWVzIGV4Y2x1ZGVcbiYjNDM7ICAgIHRoYXQgQ1BVIHNvIHRoYXQgcmF0aW9zIHVzZSBhIGNvbnNpc3RlbnQgQ1BVIHNldC4gVGhlICoqcnVuX2NudCoqIHZhbHVlXG4mIzQzOyAgICBzdGlsbCBpbmNsdWRlcyBhbGwgcmVjb3JkZWQgcnVucy5cbiYjNDM7XG4mIzQzOyAgICBJbiBKU09OIG91dHB1dCwgKip2YWx1ZSoqIGlzIHJhdywgKip2YWx1ZV9zY2FsZWQqKiBpcyBzY2FsZWQsICoqcnVuX2NudCoqXG4mIzQzOyAgICBpbmNsdWRlcyBhbGwgcnVucywgYW5kICoqcnVuX2NudF92YWxpZCoqIGluY2x1ZGVzIG9ubHkgcnVucyB1c2VkIGZvciBtZXRyaWNcbiYjNDM7ICAgIHZhbHVlcy5cbiBcbiBicGZ0b29sIHByb2cgaGVscFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXG5AQCAtMzYwLDcgJiM0MzszNjksNyBAQCBFWEFNUExFU1xuIDo6XG4gXG4gICAgICAgICAgNTEzOTcgcnVuX2NudFxuLSAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoODMuMDUlKVxuJiM0MzsgICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgIyA3ODEuNjggY3ljbGVzIHBlciBydW4gICAgICAgICAgICAgICAgKDgzLjA1JSlcbiAgICAgICA0MjUxODEzOSBpbnN0cnVjdGlvbnMgICAgIyAgIDEuMDYgaW5zbnMgcGVyIGN5Y2xlICAgICAgICAgICAgICAgKDgzLjM5JSlcbiAgICAgICAgICAgIDEyMyBsbGNfbWlzc2VzICAgICAgIyAgIDIuODkgTExDIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNucyAgKDgzLjE1JSlcbiBcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbmluZGV4IDhjMmY5MjU1YjM2ZDcuLjllMTI2ZjM4MjNhZDMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuQEAgLTIwNjIsMzcgJiM0MzsyMDYyLDUyIEBAIHN0YXRpYyBpbnQgZG9fcHJvZmlsZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cHJvZmlsZXIuc2tlbC5oXCYjMzQ7XG4gXG4mIzQzO2VudW0gcmF0aW9fbWV0cmljIHtcbiYjNDM7XHRNRVRSSUNfTk9ORSA9IC0yLFxuJiM0MztcdE1FVFJJQ19SVU5fQ05UID0gLTEsXG4mIzQzO1x0TUVUUklDX0NZQ0xFUyA9IDAsXG4mIzQzO1x0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXG4mIzQzO1x0TUVUUklDX0wxRF9MT0FEUyA9IDIsXG4mIzQzO1x0TUVUUklDX0xMQ19NSVNTRVMgPSAzLFxuJiM0MztcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXG4mIzQzO1x0TUVUUklDX0RUTEJfTUlTU0VTID0gNSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xuJiM0MztcdF9fdTY0IHNjYWxlZF92YWw7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XG4gXHRib29sIHNlbGVjdGVkO1xuIFxuIFx0LyogY2FsY3VsYXRlIHJhdGlvcyBsaWtlIGluc3RydWN0aW9ucyBwZXIgY3ljbGUgKi9cbi1cdGNvbnN0IGludCByYXRpb19tZXRyaWM7IC8qIDAgZm9yIE4vQSwgMSBmb3IgaW5kZXggMCAoY3ljbGVzKSAqL1xuJiM0MztcdGNvbnN0IGVudW0gcmF0aW9fbWV0cmljIHJhdGlvX21ldHJpYztcbiBcdGNvbnN0IGNoYXIgKnJhdGlvX2Rlc2M7XG4gXHRjb25zdCBmbG9hdCByYXRpb19tdWw7XG4gfSBtZXRyaWNzW10gPSB7XG4tXHR7XG4mIzQzO1x0W01FVFJJQ19DWUNMRVNdID0ge1xuIFx0XHQubmFtZSA9IFwmIzM0O2N5Y2xlc1wmIzM0OyxcbiBcdFx0LmF0dHIgPSB7XG4gXHRcdFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4gXHRcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfUlVOX0NOVCxcbiYjNDM7XHRcdC5yYXRpb19kZXNjID0gXCYjMzQ7Y3ljbGVzIHBlciBydW5cJiMzNDssXG4mIzQzO1x0XHQucmF0aW9fbXVsID0gMS4wLFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0lOU1RSVUNUSU9OU10gPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7aW5zdHJ1Y3Rpb25zXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbiBcdFx0XHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMsXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4tXHRcdC5yYXRpb19tZXRyaWMgPSAxLFxuJiM0MztcdFx0LnJhdGlvX21ldHJpYyA9IE1FVFJJQ19DWUNMRVMsXG4gXHRcdC5yYXRpb19kZXNjID0gXCYjMzQ7aW5zbnMgcGVyIGN5Y2xlXCYjMzQ7LFxuIFx0XHQucmF0aW9fbXVsID0gMS4wLFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0wxRF9MT0FEU10gPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7bDFkX2xvYWRzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTAyLDggJiM0MzsyMTE3LDkgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSxcbiBcdH0sXG4tXHR7XG4mIzQzO1x0W01FVFJJQ19MTENfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcJiMzNDtsbGNfbWlzc2VzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTEzLDExICYjNDM7MjEyOSwxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xuIFx0XHRcdFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMVxuIFx0XHR9LFxuLVx0XHQucmF0aW9fbWV0cmljID0gMixcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwmIzM0O0xMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcJiMzNDssXG4gXHRcdC5yYXRpb19tdWwgPSAxZTYsXG4gXHR9LFxuLVx0e1xuJiM0MztcdFtNRVRSSUNfSVRMQl9NSVNTRVNdID0ge1xuIFx0XHQubmFtZSA9IFwmIzM0O2l0bGJfbWlzc2VzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTI3LDExICYjNDM7MjE0MywxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xuIFx0XHRcdFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMVxuIFx0XHR9LFxuLVx0XHQucmF0aW9fbWV0cmljID0gMixcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwmIzM0O2l0bGIgbWlzc2VzIHBlciBtaWxsaW9uIGluc25zXCYjMzQ7LFxuIFx0XHQucmF0aW9fbXVsID0gMWU2LFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0RUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcJiMzNDtkdGxiX21pc3Nlc1wmIzM0OyxcbiBcdFx0LmF0dHIgPSB7XG4gXHRcdFx0LnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsXG5AQCAtMjE0MSwxMyAmIzQzOzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4mIzQzO1x0XHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcbiBcdFx0LnJhdGlvX2Rlc2MgPSBcJiMzNDtkdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1wmIzM0OyxcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4gfTtcbiBcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcbiYjNDM7c3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7XG4gXG4gI2RlZmluZSBNQVhfTlVNX1BST0ZJTEVfTUVUUklDUyA0XG4gXG5AQCAtMjE4Miw5ICYjNDM7MjE5OSwzOSBAQCBzdGF0aWMgaW50IHByb2ZpbGVfcGFyc2VfbWV0cmljcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRyZXR1cm4gc2VsZWN0ZWRfY250O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiYjNDM7LypcbiYjNDM7ICogRmlsdGVyIG91dCBDUFVzIHRoYXQgaGF2ZSBhbnkgc2VsZWN0ZWQgbWV0cmljIG5vdCBzY2hlZHVsZWQgZm9yIHRoZW0uIFRoaXMgbWFrZXMgc3VyZSBhbGxcbiYjNDM7ICogbWV0cmljcyBhcmUgdXNpbmcgdGhlIHNhbWUgQ1BVIHNldCwgYXMgYSByZXN1bHQgcmF0aW8gbWV0cmljcyBhcmUgY29uc2lzdGVudC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHByb2ZpbGVfZmlsdGVyX2NwdXMoX191MzIgbnVtX2NwdSxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sXG4mIzQzO1x0XHRcdFx0X191NjQgKmNvdW50cylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIG0sIGNwdSwga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChjcHUgPSAwOyBjcHUgXHUwMDNjIG51bV9jcHU7IGNwdSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ1BVIGhhcyBoaXRzLCBidXQgdGhpcyBtZXRyaWMgbmV2ZXIgc2NoZWR1bGVkLCBzZXQgY291bnRzW2NwdV0gdG8gMFxuJiM0MztcdFx0XHQgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b29cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChjb3VudHNbY3B1XSBcdTAwMjZcdTAwMjYgIXZhbHNba2V5XVtjcHVdLnJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0XHRwX2luZm8oXCYjMzQ7JXMgbm90IHNjaGVkdWxlZCBvbiBDUFUgJXU7IGV4Y2x1ZGluZyAlbGx1IHJ1bnMgZnJvbSBhbGwgbWV0cmljc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbWV0cmljc1ttXS5uYW1lLCBjcHUsIGNvdW50c1tjcHVdKTtcbiYjNDM7XHRcdFx0XHRjb3VudHNbY3B1XSA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtleSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxuIHtcbiBcdF9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDtcbiBcdGludCByZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkO1xuIFx0X191NjQgY291bnRzW251bV9jcHVdO1xuIFx0X191MzIga2V5ID0gMDtcbkBAIC0yMTk0LDM4ICYjNDM7MjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcdGNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai1cdTAwM2VtYXBzLmNvdW50cyk7XG4gXHRpZiAocmVhZGluZ19tYXBfZmQgXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFx1MDAzYyAwKSB7XG4gXHRcdHBfZXJyKFwmIzM0O2ZhaWxlZCB0byBnZXQgZmQgZm9yIG1hcFwmIzM0Oyk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBtaW4ocmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZCk7XG4gXHR9XG4gXG4gXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgXHUwMDI2a2V5LCBjb3VudHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwX2VycihcJiMzNDtmYWlsZWQgdG8gcmVhZCBjb3VudF9tYXA6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXNba2V5XSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHBfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtleSYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRwcm9maWxlX3RvdGFsX2NvdW50ID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KVxuIFx0XHRwcm9maWxlX3RvdGFsX2NvdW50ICYjNDM7PSBjb3VudHNbY3B1XTtcbiBcbiYjNDM7XHRwcm9maWxlX2ZpbHRlcl9jcHVzKG51bV9jcHUsIHZhbHVlcywgY291bnRzKTtcbiYjNDM7XG4mIzQzO1x0cHJvZmlsZV92YWxpZF9jb3VudCA9IDA7XG4mIzQzO1x0Zm9yIChjcHUgPSAwOyBjcHUgXHUwMDNjIG51bV9jcHU7IGNwdSYjNDM7JiM0MzspXG4mIzQzO1x0XHRwcm9maWxlX3ZhbGlkX2NvdW50ICYjNDM7PSBjb3VudHNbY3B1XTtcbiYjNDM7XG4mIzQzO1x0a2V5ID0gMDtcbiBcdGZvciAobSA9IDA7IG0gXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07XG4mIzQzO1x0XHRkb3VibGUgc2NhbGU7XG4gXG4gXHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cF9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXCYjMzQ7LFxuLVx0XHRcdCAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4gXHRcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsdWVzW2NwdV0uY291bnRlcjtcbi1cdFx0XHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICYjNDM7PSB2YWx1ZXNbY3B1XS5lbmFibGVkO1xuLVx0XHRcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgJiM0Mzs9IHZhbHVlc1tjcHVdLnJ1bm5pbmc7XG4mIzQzO1x0XHRcdC8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovXG4mIzQzO1x0XHRcdGlmICghY291bnRzW2NwdV0pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgPSBcdTAwMjZ2YWx1ZXNba2V5XVtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdFx0bWV0cmljc1ttXS52YWwuZW5hYmxlZCAmIzQzOz0gdmFsLVx1MDAzZWVuYWJsZWQ7XG4mIzQzO1x0XHRcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgJiM0Mzs9IHZhbC1cdTAwM2VydW5uaW5nO1xuJiM0MztcdFx0XHRtZXRyaWNzW21dLnZhbC5jb3VudGVyICYjNDM7PSB2YWwtXHUwMDNlY291bnRlcjtcbiYjNDM7XHRcdFx0LyogU2NhbGUgY291bnRlciB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuICovXG4mIzQzO1x0XHRcdHNjYWxlID0gKGRvdWJsZSl2YWwtXHUwMDNlZW5hYmxlZCAvIHZhbC1cdTAwM2VydW5uaW5nO1xuJiM0MztcdFx0XHRtZXRyaWNzW21dLnNjYWxlZF92YWwgJiM0Mzs9IHZhbC1cdTAwM2Vjb3VudGVyICogc2NhbGU7XG4gXHRcdH1cbiBcdFx0a2V5JiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXG5AQCAtMjIzOSw5ICYjNDM7MjMwOSwxMSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcdFx0anNvbndfc3RhcnRfb2JqZWN0KGpzb25fd3RyKTtcbiBcdFx0anNvbndfc3RyaW5nX2ZpZWxkKGpzb25fd3RyLCBcJiMzNDttZXRyaWNcJiMzNDssIG1ldHJpY3NbbV0ubmFtZSk7XG4gXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCYjMzQ7cnVuX2NudFwmIzM0OywgcHJvZmlsZV90b3RhbF9jb3VudCk7XG4mIzQzO1x0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwmIzM0O3J1bl9jbnRfdmFsaWRcJiMzNDssIHByb2ZpbGVfdmFsaWRfY291bnQpO1xuIFx0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwmIzM0O3ZhbHVlXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5jb3VudGVyKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcJiMzNDtlbmFibGVkXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5lbmFibGVkKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcJiMzNDtydW5uaW5nXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTtcbiYjNDM7XHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCYjMzQ7dmFsdWVfc2NhbGVkXCYjMzQ7LCBtZXRyaWNzW21dLnNjYWxlZF92YWwpO1xuIFxuIFx0XHRqc29ud19lbmRfb2JqZWN0KGpzb25fd3RyKTtcbiBcdH1cbkBAIC0yMjUwLDI0ICYjNDM7MjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXG4ge1xuLVx0X191MzIgbTtcbiYjNDM7XHRfX3UzMiBpO1xuIFxuIFx0cHJpbnRmKFwmIzM0O1xcbiUxOGxsdSAlLTIwc1xcblwmIzM0OywgcHJvZmlsZV90b3RhbF9jb3VudCwgXCYjMzQ7cnVuX2NudFwmIzM0Oyk7XG4tXHRmb3IgKG0gPSAwOyBtIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnZhbCA9IFx1MDAyNm1ldHJpY3NbbV0udmFsO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMgKm0gPSBcdTAwMjZtZXRyaWNzW2ldO1xuJiM0MztcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcdTAwMjZtLVx1MDAzZXZhbDtcbiBcdFx0aW50IHI7XG4mIzQzO1x0XHRfX3U2NCByYXRpbztcbiBcbi1cdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuJiM0MztcdFx0aWYgKCFtLVx1MDAzZXNlbGVjdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRwcmludGYoXCYjMzQ7JTE4bGx1ICUtMjBzXCYjMzQ7LCB2YWwtXHUwMDNlY291bnRlciwgbWV0cmljc1ttXS5uYW1lKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslMThsbHUgJS0yMHNcJiMzNDssIG0tXHUwMDNlc2NhbGVkX3ZhbCwgbS1cdTAwM2VuYW1lKTtcbiBcbi1cdFx0ciA9IG1ldHJpY3NbbV0ucmF0aW9fbWV0cmljIC0gMTtcbi1cdFx0aWYgKHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtZXRyaWNzW3JdLnNlbGVjdGVkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWV0cmljc1tyXS52YWwuY291bnRlciBcdTAwM2UgMCkge1xuJiM0MztcdFx0ciA9IG0tXHUwMDNlcmF0aW9fbWV0cmljO1xuJiM0MztcdFx0c3dpdGNoIChyKSB7XG4mIzQzO1x0XHRjYXNlIE1FVFJJQ19SVU5fQ05UOlxuJiM0MztcdFx0XHRyYXRpbyA9IHByb2ZpbGVfdmFsaWRfY291bnQ7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBNRVRSSUNfTk9ORTpcbiYjNDM7XHRcdFx0cmF0aW8gPSAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJhdGlvID0gbWV0cmljc1tyXS5zY2FsZWRfdmFsO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJhdGlvKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyMgJTguMmYgJS0zMHNcJiMzNDssXG4tXHRcdFx0ICAgICAgIHZhbC1cdTAwM2Vjb3VudGVyICogbWV0cmljc1ttXS5yYXRpb19tdWwgL1xuLVx0XHRcdCAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLFxuLVx0XHRcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xuJiM0MztcdFx0XHQgICAgICAgbS1cdTAwM2VzY2FsZWRfdmFsICogbS1cdTAwM2VyYXRpb19tdWwgLyByYXRpbyxcbiYjNDM7XHRcdFx0ICAgICAgIG0tXHUwMDNlcmF0aW9fZGVzYyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyUtNDFzXCYjMzQ7LCBcJiMzNDtcJiMzNDspO1xuIFx0XHR9XG5AQCAtMjQyMyw5ICYjNDM7MjUwNSwxMiBAQCBzdGF0aWMgaW50IHByb2ZpbGVfb3Blbl9wZXJmX2V2ZW50cyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9hbmRfY2xlYW51cCh2b2lkKVxuIHtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHByb2ZpbGVfY2xvc2VfcGVyZl9ldmVudHMocHJvZmlsZV9vYmopO1xuLVx0cHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4tXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4mIzQzO1x0ZXJyID0gcHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4gXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xuIFxuIFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbmluZGV4IGY0OGM3ODNjYjlmN2YuLjZjNjU0YmQ5YjM0NmYgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbkBAIC0xMCw2ICYjNDM7MTAsMTEgQEAgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwge1xuIFx0X191NjQgcnVubmluZztcbiB9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpO1xuIFxuJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcbiYjNDM7XHRib29sIGFybWVkO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcbkBAIC0yMSw3ICYjNDM7MjYsNyBAQCBzdHJ1Y3Qge1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZih1MzIpKTtcbi1cdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwpKTtcbiYjNDM7XHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwcm9maWxlX3JlYWRpbmcpKTtcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuIC8qIGFjY3VtdWxhdGVkIHJlYWRpbmdzICovXG5AQCAtNDUsNyAmIzQzOzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7XG4gU0VDKFwmIzM0O2ZlbnRyeS9YWFhcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKnB0cnNbTUFYX05VTV9NRVRSSUNTXTtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHJzW01BWF9OVU1fTUVUUklDU107XG4gXHR1MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4gXHR1MzIgaTtcbiBcbkBAIC01Niw2ICYjNDM7NjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdFx0cHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZmbGFnKTtcbiBcdFx0aWYgKCFwdHJzW2ldKVxuIFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cHRyc1tpXS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX21ldHJpYyBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgTUFYX05VTV9NRVRSSUNTOyBpJiM0MzsmIzQzOykge1xuQEAgLTY2LDcgJiM0Mzs3Miw4IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIFx0XHRcdFx0XHRcdHNpemVvZihyZWFkaW5nKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdCoocHRyc1tpXSkgPSByZWFkaW5nO1xuJiM0MztcdFx0cHRyc1tpXS1cdTAwM2V2YWx1ZSA9IHJlYWRpbmc7XG4mIzQzO1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gdHJ1ZTtcbiBcdFx0a2V5ICYjNDM7PSBudW1fY3B1O1xuIFx0fVxuIFxuQEAgLTc2LDE2ICYjNDM7ODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gc3RhdGljIGlubGluZSB2b2lkXG4gZmV4aXRfdXBkYXRlX21hcHModTMyIGlkLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYWZ0ZXIpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmJlZm9yZSwgZGlmZjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4mIzQzO1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgZGlmZjtcbiBcbiBcdGJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZpZCk7XG4gXHQvKiBvbmx5IGFjY291bnQgc2FtcGxlcyB3aXRoIGEgdmFsaWQgZmVudHJ5X3JlYWRpbmcgKi9cbi1cdGlmIChiZWZvcmUgXHUwMDI2XHUwMDI2IGJlZm9yZS1cdTAwM2Vjb3VudGVyKSB7XG4mIzQzO1x0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWFybWVkKSB7XG4gXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICphY2N1bTtcbiBcbi1cdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2Vjb3VudGVyO1xuLVx0XHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cdTAwM2VlbmFibGVkIC0gYmVmb3JlLVx1MDAzZWVuYWJsZWQ7XG4tXHRcdGRpZmYucnVubmluZyA9IGFmdGVyLVx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXHUwMDNlcnVubmluZztcbiYjNDM7XHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuJiM0MztcdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5jb3VudGVyO1xuJiM0MztcdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5lbmFibGVkO1xuJiM0MztcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdFx0aWYgKGFjY3VtKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG5pbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNcbkBAIC00LDYgJiM0Mzs0LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XG4mIzQzO1x0Ym9vbCBhcm1lZDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7XG5AQCAtMTUsNyAmIzQzOzIwLDcgQEAgc3RydWN0IHtcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoX191MzIpKTtcbi1cdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7XG4mIzQzO1x0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuIH0gZmVudHJ5X3JlYWRpbmdzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG5AQCAtMzMsNyAmIzQzOzM4LDcgQEAgU0VDKFwmIzM0O2ZlbnRyeS9YWFhcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4ge1xuIFx0X191MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnB0cjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHI7XG4gXHRfX3UzMiB6ZXJvID0gMDtcbiBcdGxvbmcgZXJyO1xuIFxuQEAgLTQyLDkgJiM0Mzs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcbiYjNDM7XHRwdHItXHUwMDNlYXJtZWQgPSBmYWxzZTtcbiYjNDM7XHRlcnIgPSBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlKFx1MDAyNmV2ZW50cywga2V5LCBcdTAwMjZwdHItXHUwMDNldmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YocHRyLVx1MDAzZXZhbHVlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRwdHItXHUwMDNlYXJtZWQgPSB0cnVlO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUyLDE3ICYjNDM7NjAsMTkgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gc3RhdGljIGlubGluZSB2b2lkXG4gZmV4aXRfdXBkYXRlX21hcHMoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphZnRlcilcbiB7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKmJlZm9yZSwgZGlmZjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4mIzQzO1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7XG4gXHRfX3UzMiB6ZXJvID0gMDtcbiBcbiBcdGJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZ6ZXJvKTtcbiBcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xuLVx0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWNvdW50ZXIpIHtcbiYjNDM7XHRpZiAoYmVmb3JlIFx1MDAyNlx1MDAyNiBiZWZvcmUtXHUwMDNlYXJtZWQpIHtcbiBcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTtcbiBcbi1cdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2Vjb3VudGVyO1xuLVx0XHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cdTAwM2VlbmFibGVkIC0gYmVmb3JlLVx1MDAzZWVuYWJsZWQ7XG4tXHRcdGRpZmYucnVubmluZyA9IGFmdGVyLVx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXHUwMDNlcnVubmluZztcbiYjNDM7XHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuJiM0MztcdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5jb3VudGVyO1xuJiM0MztcdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5lbmFibGVkO1xuJiM0MztcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0XHRpZiAoYWNjdW0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdW5kZXIgdG9vbHMvIChicGZ0b29sIGFuZCBwZXJmIHByb2cgcHJvZmlsZXIgc2tlbGV0b25zKS4gTm8ga2VybmVsIHNvdXJjZSBmaWxlcyBvciBrZXJuZWwgbW9kdWxlcyBhZmZlY3Rpbmcgdm1saW51eCBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGFjY2UxOGNjYjJlZWYxYTM0ODdmOTk4OTE2YWRhOTExYzYxYjg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QKaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdApAQCAtMjE3LDcgJiM0MzsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3QKIGJwZnRvb2wgcHJvZyBwcm9maWxlICpQUk9HKiBbZHVyYXRpb24gKkRVUkFUSU9OKl0gKk1FVFJJQ3MqCiAgICAgUHJvZmlsZSAqTUVUUklDcyogZm9yIGJwZiBwcm9ncmFtICpQUk9HKiBmb3IgKkRVUkFUSU9OKiBzZWNvbmRzIG9yIHVudGlsCiAgICAgdXNlciBoaXRzICZsdDtDdHJsJiM0MztDJmd0Oy4gKkRVUkFUSU9OKiBpcyBvcHRpb25hbC4gSWYgKkRVUkFUSU9OKiBpcyBub3Qgc3BlY2lmaWVkLAotICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuCiYjNDM7ICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuIFBsYWluIG91dHB1dCBzY2FsZXMgZWFjaAomIzQzOyAgICBwZXItQ1BVIG1ldHJpYyB2YWx1ZSB0byBjb3JyZWN0IGZvciBwZXJmIGV2ZW50IG11bHRpcGxleGluZy4gV2hlbgomIzQzOyAgICAqKmN5Y2xlcyoqIGlzIHNlbGVjdGVkLCBpdCBhbHNvIHJlcG9ydHMgY3ljbGVzIHBlciBpbmNsdWRlZCBwcm9ncmFtIHJ1bi4gSWYKJiM0MzsgICAgYSBzZWxlY3RlZCBtZXRyaWMgd2FzIG5vdCBzY2hlZHVsZWQgb24gYSBDUFUsIGFsbCBtZXRyaWMgdmFsdWVzIGV4Y2x1ZGUKJiM0MzsgICAgdGhhdCBDUFUgc28gdGhhdCByYXRpb3MgdXNlIGEgY29uc2lzdGVudCBDUFUgc2V0LiBUaGUgKipydW5fY250KiogdmFsdWUKJiM0MzsgICAgc3RpbGwgaW5jbHVkZXMgYWxsIHJlY29yZGVkIHJ1bnMuCiYjNDM7CiYjNDM7ICAgIEluIEpTT04gb3V0cHV0LCAqKnZhbHVlKiogaXMgcmF3LCAqKnZhbHVlX3NjYWxlZCoqIGlzIHNjYWxlZCwgKipydW5fY250KioKJiM0MzsgICAgaW5jbHVkZXMgYWxsIHJ1bnMsIGFuZCAqKnJ1bl9jbnRfdmFsaWQqKiBpbmNsdWRlcyBvbmx5IHJ1bnMgdXNlZCBmb3IgbWV0cmljCiYjNDM7ICAgIHZhbHVlcy4KIAogYnBmdG9vbCBwcm9nIGhlbHAKICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuCkBAIC0zNjAsNyAmIzQzOzM2OSw3IEBAIEVYQU1QTEVTCiA6OgogCiAgICAgICAgICA1MTM5NyBydW5fY250Ci0gICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgzLjA1JSkKJiM0MzsgICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgIyA3ODEuNjggY3ljbGVzIHBlciBydW4gICAgICAgICAgICAgICAgKDgzLjA1JSkKICAgICAgIDQyNTE4MTM5IGluc3RydWN0aW9ucyAgICAjICAgMS4wNiBpbnNucyBwZXIgY3ljbGUgICAgICAgICAgICAgICAoODMuMzklKQogICAgICAgICAgICAxMjMgbGxjX21pc3NlcyAgICAgICMgICAyLjg5IExMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMgICg4My4xNSUpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYwppbmRleCA4YzJmOTI1NWIzNmQ3Li45ZTEyNmYzODIzYWQzIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jCkBAIC0yMDYyLDM3ICYjNDM7MjA2Miw1MiBAQCBzdGF0aWMgaW50IGRvX3Byb2ZpbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAjaW5jbHVkZSAmIzM0O3Byb2ZpbGVyLnNrZWwuaCYjMzQ7CiAKJiM0MztlbnVtIHJhdGlvX21ldHJpYyB7CiYjNDM7CU1FVFJJQ19OT05FID0gLTIsCiYjNDM7CU1FVFJJQ19SVU5fQ05UID0gLTEsCiYjNDM7CU1FVFJJQ19DWUNMRVMgPSAwLAomIzQzOwlNRVRSSUNfSU5TVFJVQ1RJT05TID0gMSwKJiM0MzsJTUVUUklDX0wxRF9MT0FEUyA9IDIsCiYjNDM7CU1FVFJJQ19MTENfTUlTU0VTID0gMywKJiM0MzsJTUVUUklDX0lUTEJfTUlTU0VTID0gNCwKJiM0MzsJTUVUUklDX0RUTEJfTUlTU0VTID0gNSwKJiM0Mzt9OwomIzQzOwogc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWw7CiYjNDM7CV9fdTY0IHNjYWxlZF92YWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCWJvb2wgc2VsZWN0ZWQ7CiAKIAkvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqLwotCWNvbnN0IGludCByYXRpb19tZXRyaWM7IC8qIDAgZm9yIE4vQSwgMSBmb3IgaW5kZXggMCAoY3ljbGVzKSAqLwomIzQzOwljb25zdCBlbnVtIHJhdGlvX21ldHJpYyByYXRpb19tZXRyaWM7CiAJY29uc3QgY2hhciAqcmF0aW9fZGVzYzsKIAljb25zdCBmbG9hdCByYXRpb19tdWw7CiB9IG1ldHJpY3NbXSA9IHsKLQl7CiYjNDM7CVtNRVRSSUNfQ1lDTEVTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2N5Y2xlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLAogCQkJLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUywKIAkJCS5leGNsdWRlX3VzZXIgPSAxLAogCQl9LAomIzQzOwkJLnJhdGlvX21ldHJpYyA9IE1FVFJJQ19SVU5fQ05ULAomIzQzOwkJLnJhdGlvX2Rlc2MgPSAmIzM0O2N5Y2xlcyBwZXIgcnVuJiMzNDssCiYjNDM7CQkucmF0aW9fbXVsID0gMS4wLAogCX0sCi0JewomIzQzOwlbTUVUUklDX0lOU1RSVUNUSU9OU10gPSB7CiAJCS5uYW1lID0gJiMzNDtpbnN0cnVjdGlvbnMmIzM0OywKIAkJLmF0dHIgPSB7CiAJCQkudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwKIAkJCS5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUywKIAkJCS5leGNsdWRlX3VzZXIgPSAxLAogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMSwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfQ1lDTEVTLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7aW5zbnMgcGVyIGN5Y2xlJiMzNDssCiAJCS5yYXRpb19tdWwgPSAxLjAsCiAJfSwKLQl7CiYjNDM7CVtNRVRSSUNfTDFEX0xPQURTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2wxZF9sb2FkcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjEwMiw4ICYjNDM7MjExNyw5IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7CiAJCQkJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMSwKIAkJfSwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19MTENfTUlTU0VTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2xsY19taXNzZXMmIzM0OywKIAkJLmF0dHIgPSB7CiAJCQkudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKQEAgLTIxMTMsMTEgJiM0MzsyMTI5LDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7CiAJCQkJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgJmx0OyZsdDsgMTYpLAogCQkJLmV4Y2x1ZGVfdXNlciA9IDEKIAkJfSwKLQkJLnJhdGlvX21ldHJpYyA9IDIsCiYjNDM7CQkucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUywKIAkJLnJhdGlvX2Rlc2MgPSAmIzM0O0xMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19JVExCX01JU1NFU10gPSB7CiAJCS5uYW1lID0gJiMzNDtpdGxiX21pc3NlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjEyNywxMSAmIzQzOzIxNDMsMTEgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAkJCQkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMQogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMiwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7aXRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19EVExCX01JU1NFU10gPSB7CiAJCS5uYW1lID0gJiMzNDtkdGxiX21pc3NlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjE0MSwxMyAmIzQzOzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAkJCQkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMQogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMiwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7ZHRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAogfTsKIAogc3RhdGljIF9fdTY0IHByb2ZpbGVfdG90YWxfY291bnQ7CiYjNDM7c3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7CiAKICNkZWZpbmUgTUFYX05VTV9QUk9GSUxFX01FVFJJQ1MgNAogCkBAIC0yMTgyLDkgJiM0MzsyMTk5LDM5IEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9wYXJzZV9tZXRyaWNzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlyZXR1cm4gc2VsZWN0ZWRfY250OwogfQogCi1zdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iaikKJiM0MzsvKgomIzQzOyAqIEZpbHRlciBvdXQgQ1BVcyB0aGF0IGhhdmUgYW55IHNlbGVjdGVkIG1ldHJpYyBub3Qgc2NoZWR1bGVkIGZvciB0aGVtLiBUaGlzIG1ha2VzIHN1cmUgYWxsCiYjNDM7ICogbWV0cmljcyBhcmUgdXNpbmcgdGhlIHNhbWUgQ1BVIHNldCwgYXMgYSByZXN1bHQgcmF0aW8gbWV0cmljcyBhcmUgY29uc2lzdGVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBwcm9maWxlX2ZpbHRlcl9jcHVzKF9fdTMyIG51bV9jcHUsCiYjNDM7CQkJCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWxzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwKJiM0MzsJCQkJX191NjQgKmNvdW50cykKJiM0Mzt7CiYjNDM7CV9fdTMyIG0sIGNwdSwga2V5ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChtID0gMDsgbSAmbHQ7IEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IG51bV9jcHU7IGNwdSYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIENQVSBoYXMgaGl0cywgYnV0IHRoaXMgbWV0cmljIG5ldmVyIHNjaGVkdWxlZCwgc2V0IGNvdW50c1tjcHVdIHRvIDAKJiM0MzsJCQkgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b28KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoY291bnRzW2NwdV0gJmFtcDsmYW1wOyAhdmFsc1trZXldW2NwdV0ucnVubmluZykgewomIzQzOwkJCQlwX2luZm8oJiMzNDslcyBub3Qgc2NoZWR1bGVkIG9uIENQVSAldTsgZXhjbHVkaW5nICVsbHUgcnVucyBmcm9tIGFsbCBtZXRyaWNzJiMzNDssCiYjNDM7CQkJCSAgICAgICBtZXRyaWNzW21dLm5hbWUsIGNwdSwgY291bnRzW2NwdV0pOwomIzQzOwkJCQljb3VudHNbY3B1XSA9IDA7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJa2V5JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKQogewogCV9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai0mZ3Q7cm9kYXRhLSZndDtudW1fY3B1OwomIzQzOwlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDsKIAlpbnQgcmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZDsKIAlfX3U2NCBjb3VudHNbbnVtX2NwdV07CiAJX191MzIga2V5ID0gMDsKQEAgLTIxOTQsMzggJiM0MzsyMjQxLDYxIEBAIHN0YXRpYyB2b2lkIHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKQogCWNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai0mZ3Q7bWFwcy5jb3VudHMpOwogCWlmIChyZWFkaW5nX21hcF9mZCAmbHQ7IDAgfHwgY291bnRfbWFwX2ZkICZsdDsgMCkgewogCQlwX2VycigmIzM0O2ZhaWxlZCB0byBnZXQgZmQgZm9yIG1hcCYjMzQ7KTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIG1pbihyZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkKTsKIAl9CiAKIAllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgJmFtcDtrZXksIGNvdW50cyk7CiAJaWYgKGVycikgewogCQlwX2VycigmIzM0O2ZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG0gPSAwOyBtICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWV0cmljc1ttXS5zZWxlY3RlZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0ocmVhZGluZ19tYXBfZmQsICZhbXA7a2V5LCB2YWx1ZXNba2V5XSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJcF9lcnIoJiMzNDtmYWlsZWQgdG8gcmVhZCByZWFkaW5nX21hcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwkJa2V5JiM0MzsmIzQzOzsKIAl9CiAKIAlwcm9maWxlX3RvdGFsX2NvdW50ID0gMDsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IG51bV9jcHU7IGNwdSYjNDM7JiM0MzspCiAJCXByb2ZpbGVfdG90YWxfY291bnQgJiM0Mzs9IGNvdW50c1tjcHVdOwogCiYjNDM7CXByb2ZpbGVfZmlsdGVyX2NwdXMobnVtX2NwdSwgdmFsdWVzLCBjb3VudHMpOwomIzQzOwomIzQzOwlwcm9maWxlX3ZhbGlkX2NvdW50ID0gMDsKJiM0MzsJZm9yIChjcHUgPSAwOyBjcHUgJmx0OyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KQomIzQzOwkJcHJvZmlsZV92YWxpZF9jb3VudCAmIzQzOz0gY291bnRzW2NwdV07CiYjNDM7CiYjNDM7CWtleSA9IDA7CiAJZm9yIChtID0gMDsgbSAmbHQ7IEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07CiYjNDM7CQlkb3VibGUgc2NhbGU7CiAKIAkJaWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgJmFtcDtrZXksIHZhbHVlcyk7Ci0JCWlmIChlcnIpIHsKLQkJCXBfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzJiMzNDssCi0JCQkgICAgICBzdHJlcnJvcihlcnJubykpOwotCQkJcmV0dXJuOwotCQl9CiAJCWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgbnVtX2NwdTsgY3B1JiM0MzsmIzQzOykgewotCQkJbWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsdWVzW2NwdV0uY291bnRlcjsKLQkJCW1ldHJpY3NbbV0udmFsLmVuYWJsZWQgJiM0Mzs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7Ci0JCQltZXRyaWNzW21dLnZhbC5ydW5uaW5nICYjNDM7PSB2YWx1ZXNbY3B1XS5ydW5uaW5nOwomIzQzOwkJCS8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovCiYjNDM7CQkJaWYgKCFjb3VudHNbY3B1XSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsID0gJmFtcDt2YWx1ZXNba2V5XVtjcHVdOwomIzQzOwomIzQzOwkJCW1ldHJpY3NbbV0udmFsLmVuYWJsZWQgJiM0Mzs9IHZhbC0mZ3Q7ZW5hYmxlZDsKJiM0MzsJCQltZXRyaWNzW21dLnZhbC5ydW5uaW5nICYjNDM7PSB2YWwtJmd0O3J1bm5pbmc7CiYjNDM7CQkJbWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsLSZndDtjb3VudGVyOwomIzQzOwkJCS8qIFNjYWxlIGNvdW50ZXIgdmFsdWVzIHRvIGFjY291bnQgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiAqLwomIzQzOwkJCXNjYWxlID0gKGRvdWJsZSl2YWwtJmd0O2VuYWJsZWQgLyB2YWwtJmd0O3J1bm5pbmc7CiYjNDM7CQkJbWV0cmljc1ttXS5zY2FsZWRfdmFsICYjNDM7PSB2YWwtJmd0O2NvdW50ZXIgKiBzY2FsZTsKIAkJfQogCQlrZXkmIzQzOyYjNDM7OwogCX0KJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKQpAQCAtMjIzOSw5ICYjNDM7MjMwOSwxMSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZCkKIAkJanNvbndfc3RhcnRfb2JqZWN0KGpzb25fd3RyKTsKIAkJanNvbndfc3RyaW5nX2ZpZWxkKGpzb25fd3RyLCAmIzM0O21ldHJpYyYjMzQ7LCBtZXRyaWNzW21dLm5hbWUpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7cnVuX2NudCYjMzQ7LCBwcm9maWxlX3RvdGFsX2NvdW50KTsKJiM0MzsJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDtydW5fY250X3ZhbGlkJiMzNDssIHByb2ZpbGVfdmFsaWRfY291bnQpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7dmFsdWUmIzM0OywgbWV0cmljc1ttXS52YWwuY291bnRlcik7CiAJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDtlbmFibGVkJiMzNDssIG1ldHJpY3NbbV0udmFsLmVuYWJsZWQpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7cnVubmluZyYjMzQ7LCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTsKJiM0MzsJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDt2YWx1ZV9zY2FsZWQmIzM0OywgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTsKIAogCQlqc29ud19lbmRfb2JqZWN0KGpzb25fd3RyKTsKIAl9CkBAIC0yMjUwLDI0ICYjNDM7MjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZCkKIAogc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19wbGFpbih2b2lkKQogewotCV9fdTMyIG07CiYjNDM7CV9fdTMyIGk7CiAKIAlwcmludGYoJiMzNDtcbiUxOGxsdSAlLTIwc1xuJiMzNDssIHByb2ZpbGVfdG90YWxfY291bnQsICYjMzQ7cnVuX2NudCYjMzQ7KTsKLQlmb3IgKG0gPSAwOyBtICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSAmYW1wO21ldHJpY3NbbV0udmFsOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwcm9maWxlX21ldHJpYyAqbSA9ICZhbXA7bWV0cmljc1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gJmFtcDttLSZndDt2YWw7CiAJCWludCByOwomIzQzOwkJX191NjQgcmF0aW87CiAKLQkJaWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKQomIzQzOwkJaWYgKCFtLSZndDtzZWxlY3RlZCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGYoJiMzNDslMThsbHUgJS0yMHMmIzM0OywgdmFsLSZndDtjb3VudGVyLCBtZXRyaWNzW21dLm5hbWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7JTE4bGx1ICUtMjBzJiMzNDssIG0tJmd0O3NjYWxlZF92YWwsIG0tJmd0O25hbWUpOwogCi0JCXIgPSBtZXRyaWNzW21dLnJhdGlvX21ldHJpYyAtIDE7Ci0JCWlmIChyICZndDs9IDAgJmFtcDsmYW1wOyBtZXRyaWNzW3JdLnNlbGVjdGVkICZhbXA7JmFtcDsKLQkJICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIgJmd0OyAwKSB7CiYjNDM7CQlyID0gbS0mZ3Q7cmF0aW9fbWV0cmljOwomIzQzOwkJc3dpdGNoIChyKSB7CiYjNDM7CQljYXNlIE1FVFJJQ19SVU5fQ05UOgomIzQzOwkJCXJhdGlvID0gcHJvZmlsZV92YWxpZF9jb3VudDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgTUVUUklDX05PTkU6CiYjNDM7CQkJcmF0aW8gPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyYXRpbykgewogCQkJcHJpbnRmKCYjMzQ7IyAlOC4yZiAlLTMwcyYjMzQ7LAotCQkJICAgICAgIHZhbC0mZ3Q7Y291bnRlciAqIG1ldHJpY3NbbV0ucmF0aW9fbXVsIC8KLQkJCSAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLAotCQkJICAgICAgIG1ldHJpY3NbbV0ucmF0aW9fZGVzYyk7CiYjNDM7CQkJICAgICAgIG0tJmd0O3NjYWxlZF92YWwgKiBtLSZndDtyYXRpb19tdWwgLyByYXRpbywKJiM0MzsJCQkgICAgICAgbS0mZ3Q7cmF0aW9fZGVzYyk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGYoJiMzNDslLTQxcyYjMzQ7LCAmIzM0OyYjMzQ7KTsKIAkJfQpAQCAtMjQyMyw5ICYjNDM7MjUwNSwxMiBAQCBzdGF0aWMgaW50IHByb2ZpbGVfb3Blbl9wZXJmX2V2ZW50cyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopCiAKIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfYW5kX2NsZWFudXAodm9pZCkKIHsKJiM0MzsJaW50IGVycjsKJiM0MzsKIAlwcm9maWxlX2Nsb3NlX3BlcmZfZXZlbnRzKHByb2ZpbGVfb2JqKTsKLQlwcm9maWxlX3JlYWRfdmFsdWVzKHByb2ZpbGVfb2JqKTsKLQlwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7CiYjNDM7CWVyciA9IHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCXByb2ZpbGVfcHJpbnRfcmVhZGluZ3MoKTsKIAlwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopOwogCiAJY2xvc2UocHJvZmlsZV90Z3RfZmQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmMgYi90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwppbmRleCBmNDhjNzgzY2I5ZjdmLi42YzY1NGJkOWIzNDZmIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwpAQCAtMTAsNiAmIzQzOzEwLDExIEBAIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIHsKIAlfX3U2NCBydW5uaW5nOwogfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTsKIAomIzQzO3N0cnVjdCBwcm9maWxlX3JlYWRpbmcgewomIzQzOwlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTsKJiM0MzsJYm9vbCBhcm1lZDsKJiM0Mzt9OwomIzQzOwogLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovCiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7CkBAIC0yMSw3ICYjNDM7MjYsNyBAQCBzdHJ1Y3Qgewogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YodTMyKSk7Ci0JX191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCkpOwomIzQzOwlfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwcm9maWxlX3JlYWRpbmcpKTsKIH0gZmVudHJ5X3JlYWRpbmdzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiAvKiBhY2N1bXVsYXRlZCByZWFkaW5ncyAqLwpAQCAtNDUsNyAmIzQzOzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7CiBTRUMoJiMzNDtmZW50cnkvWFhYJiMzNDspCiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIHsKLQlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdOwomIzQzOwlzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHJzW01BWF9OVU1fTUVUUklDU107CiAJdTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXUzMiBpOwogCkBAIC01Niw2ICYjNDM7NjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIAkJcHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtmZW50cnlfcmVhZGluZ3MsICZhbXA7ZmxhZyk7CiAJCWlmICghcHRyc1tpXSkKIAkJCXJldHVybiAwOwomIzQzOwkJcHRyc1tpXS0mZ3Q7YXJtZWQgPSBmYWxzZTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX21ldHJpYyAmYW1wOyZhbXA7IGkgJmx0OyBNQVhfTlVNX01FVFJJQ1M7IGkmIzQzOyYjNDM7KSB7CkBAIC02Niw3ICYjNDM7NzIsOCBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIAkJCQkJCXNpemVvZihyZWFkaW5nKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gMDsKLQkJKihwdHJzW2ldKSA9IHJlYWRpbmc7CiYjNDM7CQlwdHJzW2ldLSZndDt2YWx1ZSA9IHJlYWRpbmc7CiYjNDM7CQlwdHJzW2ldLSZndDthcm1lZCA9IHRydWU7CiAJCWtleSAmIzQzOz0gbnVtX2NwdTsKIAl9CiAKQEAgLTc2LDE2ICYjNDM7ODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZleGl0X3VwZGF0ZV9tYXBzKHUzMiBpZCwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFmdGVyKQogewotCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpiZWZvcmUsIGRpZmY7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgZGlmZjsKIAogCWJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtmZW50cnlfcmVhZGluZ3MsICZhbXA7aWQpOwogCS8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqLwotCWlmIChiZWZvcmUgJmFtcDsmYW1wOyBiZWZvcmUtJmd0O2NvdW50ZXIpIHsKJiM0MzsJaWYgKGJlZm9yZSAmYW1wOyZhbXA7IGJlZm9yZS0mZ3Q7YXJtZWQpIHsKIAkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFjY3VtOwogCi0JCWRpZmYuY291bnRlciA9IGFmdGVyLSZndDtjb3VudGVyIC0gYmVmb3JlLSZndDtjb3VudGVyOwotCQlkaWZmLmVuYWJsZWQgPSBhZnRlci0mZ3Q7ZW5hYmxlZCAtIGJlZm9yZS0mZ3Q7ZW5hYmxlZDsKLQkJZGlmZi5ydW5uaW5nID0gYWZ0ZXItJmd0O3J1bm5pbmcgLSBiZWZvcmUtJmd0O3J1bm5pbmc7CiYjNDM7CQliZWZvcmUtJmd0O2FybWVkID0gZmFsc2U7CiYjNDM7CQlkaWZmLmNvdW50ZXIgPSBhZnRlci0mZ3Q7Y291bnRlciAtIGJlZm9yZS0mZ3Q7dmFsdWUuY291bnRlcjsKJiM0MzsJCWRpZmYuZW5hYmxlZCA9IGFmdGVyLSZndDtlbmFibGVkIC0gYmVmb3JlLSZndDt2YWx1ZS5lbmFibGVkOwomIzQzOwkJZGlmZi5ydW5uaW5nID0gYWZ0ZXItJmd0O3J1bm5pbmcgLSBiZWZvcmUtJmd0O3ZhbHVlLnJ1bm5pbmc7CiAKIAkJYWNjdW0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YWNjdW1fcmVhZGluZ3MsICZhbXA7aWQpOwogCQlpZiAoYWNjdW0pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYwppbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jCkBAIC00LDYgJiM0Mzs0LDExIEBACiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHVlOwomIzQzOwlib29sIGFybWVkOwomIzQzO307CiYjNDM7CiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi8KIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTsKQEAgLTE1LDcgJiM0MzsyMCw3IEBAIHN0cnVjdCB7CiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTsKIAlfX3VpbnQoa2V5X3NpemUsIHNpemVvZihfX3UzMikpOwotCV9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7CiYjNDM7CV9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpOwogCV9fdWludChtYXhfZW50cmllcywgMSk7CiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIApAQCAtMzMsNyAmIzQzOzM4LDcgQEAgU0VDKCYjMzQ7ZmVudHJ5L1hYWCYjMzQ7KQogaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiB7CiAJX191MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpwdHI7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKnB0cjsKIAlfX3UzMiB6ZXJvID0gMDsKIAlsb25nIGVycjsKIApAQCAtNDIsOSAmIzQzOzQ3LDEyIEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKQogCWlmICghcHRyKQogCQlyZXR1cm4gMDsKIAotCWVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoJmFtcDtldmVudHMsIGtleSwgcHRyLCBzaXplb2YoKnB0cikpOwomIzQzOwlwdHItJmd0O2FybWVkID0gZmFsc2U7CiYjNDM7CWVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoJmFtcDtldmVudHMsIGtleSwgJmFtcDtwdHItJmd0O3ZhbHVlLAomIzQzOwkJCQkJc2l6ZW9mKHB0ci0mZ3Q7dmFsdWUpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gMDsKJiM0MzsJcHRyLSZndDthcm1lZCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyLDE3ICYjNDM7NjAsMTkgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpCiB7Ci0Jc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7CiAJX191MzIgemVybyA9IDA7CiAKIAliZWZvcmUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7ZmVudHJ5X3JlYWRpbmdzLCAmYW1wO3plcm8pOwogCS8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqLwotCWlmIChiZWZvcmUgJmFtcDsmYW1wOyBiZWZvcmUtJmd0O2NvdW50ZXIpIHsKJiM0MzsJaWYgKGJlZm9yZSAmYW1wOyZhbXA7IGJlZm9yZS0mZ3Q7YXJtZWQpIHsKIAkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTsKIAotCQlkaWZmLmNvdW50ZXIgPSBhZnRlci0mZ3Q7Y291bnRlciAtIGJlZm9yZS0mZ3Q7Y291bnRlcjsKLQkJZGlmZi5lbmFibGVkID0gYWZ0ZXItJmd0O2VuYWJsZWQgLSBiZWZvcmUtJmd0O2VuYWJsZWQ7Ci0JCWRpZmYucnVubmluZyA9IGFmdGVyLSZndDtydW5uaW5nIC0gYmVmb3JlLSZndDtydW5uaW5nOwomIzQzOwkJYmVmb3JlLSZndDthcm1lZCA9IGZhbHNlOwomIzQzOwkJZGlmZi5jb3VudGVyID0gYWZ0ZXItJmd0O2NvdW50ZXIgLSBiZWZvcmUtJmd0O3ZhbHVlLmNvdW50ZXI7CiYjNDM7CQlkaWZmLmVuYWJsZWQgPSBhZnRlci0mZ3Q7ZW5hYmxlZCAtIGJlZm9yZS0mZ3Q7dmFsdWUuZW5hYmxlZDsKJiM0MzsJCWRpZmYucnVubmluZyA9IGFmdGVyLSZndDtydW5uaW5nIC0gYmVmb3JlLSZndDt2YWx1ZS5ydW5uaW5nOwogCiAJCWFjY3VtID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FjY3VtX3JlYWRpbmdzLCAmYW1wO3plcm8pOwogCQlpZiAoYWNjdW0pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxNwoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTm9uLUtlcm5lbCBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgLCBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jYCwgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgLiBBbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sYCBhbmQgYHRvb2xzL3BlcmZgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIHVzdWFsIGNyaXRlcmlhIOKAkyBzZWN0aW9uIDIgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6eiDigJMgYW55IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCBvciB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBsaWtlIGB0b29scy9gLCBzYW1wbGVzLywgc2NyaXB0cy8sIGV0Yy4sIHRoYXQgKmRvbiYjMzk7dCogaW1wYWN0IGB2bWxpbnV4YCBvciBrZXJuZWwgbW9kdWxlcywgZG9uJiMzOTt0IHdhcnJhbnQgZnV6emluZy4KCkxvb2tpbmcgYXQgdGhlc2UgZmlsZXMgc3BlY2lmaWNhbGx5OiBgdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0YCBpcyBkb2N1bWVudGF0aW9uLiBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCBpcyB0aGUgdXNlci1zcGFjZSBgYnBmdG9vbGAgdXRpbGl0eS4gVGhlIG90aGVyIHR3byBgdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNgIGFuZCBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jYCBhcmUgQlBGIHNrZWxldG9uIHByb2dyYW1zICpmb3IqIHRoZXNlIHVzZXItc3BhY2UgdG9vbHMuIFRoZXkmIzM5O3JlIG5vdCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCgpJJiMzOTttIGNvbmZpZGVudCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2VyLXNwYWNlIHRvb2xzLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGtlcm5lbCBjb2RlIGlzbiYjMzk7dCBpbmRpcmVjdGx5IG1vZGlmaWVkLiBBIHF1aWNrIGBncmVwYCBvciBmaWxlIGluc3BlY3Rpb24gc2hvdWxkIGNvbmZpcm0gdGhpcyBpcyB0aGUgY2FzZS4gQnV0LCBnaXZlbiB0aGUgZmlsZSBwYXRocywgSSBkb24mIzM5O3QgZXhwZWN0IHRvIGZpbmQgYW55dGhpbmcga2VybmVsLXJlbGF0ZWQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW1wYWN0IGtlcm5lbCBpbWFnZSBvciBrZXJuZWwgbW9kdWxlcy4gU28sIG5vIGZ1enppbmcgbmVlZGVkLiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gYEVuYWJsZUNvbmZpZ3NgIG9yIGBGb2N1c1N5bWJvbHNgIGFyZSByZXF1aXJlZC4gVGhlIHJhdGlvbmFsZSBpcyB0aGUgcGF0Y2ggaXMgY29uZmluZWQgdG8gdXNlcnNwYWNlIGB0b29sc2AgKGJwZnRvb2wgYW5kIHBlcmYpIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRvb2xzLCBhbG9uZyB3aXRoIHRoZWlyIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgc2tlbGV0b24gY29kZS4gQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjA3MjY1ODE1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwMzI5ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xzIGFuZCBkb2N1bWVudGF0aW9uIHVuZGVyIHRvb2xzLyAoYnBmdG9vbCBhbmQgcGVyZiBwcm9nIHByb2ZpbGVyIHNrZWxldG9ucykuIE5vIGtlcm5lbCBzb3VyY2UgZmlsZXMgb3Iga2VybmVsIG1vZHVsZXMgYWZmZWN0aW5nIHZtbGludXggYXJlIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDg6MDMuMDcyNjY0MzU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM4ODEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YWNjZTE4Y2NiMmVlZjFhMzQ4N2Y5OTg5MTZhZGE5MTFjNjFiODlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0XFxuaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcXG5AQCAtMjE3LDcgKzIxNywxNiBAQCBicGZ0b29sIHByb2cgcnVuICpQUk9HKiBkYXRhX2luICpGSUxFKiBbZGF0YV9vdXQgKkZJTEUqIFtkYXRhX3NpemVfb3V0ICpMKl1dIFtjdFxcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxcbiAgICAgUHJvZmlsZSAqTUVUUklDcyogZm9yIGJwZiBwcm9ncmFtICpQUk9HKiBmb3IgKkRVUkFUSU9OKiBzZWNvbmRzIG9yIHVudGlsXFxuICAgICB1c2VyIGhpdHMgXFx1MDAzY0N0cmwrQ1xcdTAwM2UuICpEVVJBVElPTiogaXMgb3B0aW9uYWwuIElmICpEVVJBVElPTiogaXMgbm90IHNwZWNpZmllZCxcXG4tICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuXFxuKyAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLiBQbGFpbiBvdXRwdXQgc2NhbGVzIGVhY2hcXG4rICAgIHBlci1DUFUgbWV0cmljIHZhbHVlIHRvIGNvcnJlY3QgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiBXaGVuXFxuKyAgICAqKmN5Y2xlcyoqIGlzIHNlbGVjdGVkLCBpdCBhbHNvIHJlcG9ydHMgY3ljbGVzIHBlciBpbmNsdWRlZCBwcm9ncmFtIHJ1bi4gSWZcXG4rICAgIGEgc2VsZWN0ZWQgbWV0cmljIHdhcyBub3Qgc2NoZWR1bGVkIG9uIGEgQ1BVLCBhbGwgbWV0cmljIHZhbHVlcyBleGNsdWRlXFxuKyAgICB0aGF0IENQVSBzbyB0aGF0IHJhdGlvcyB1c2UgYSBjb25zaXN0ZW50IENQVSBzZXQuIFRoZSAqKnJ1bl9jbnQqKiB2YWx1ZVxcbisgICAgc3RpbGwgaW5jbHVkZXMgYWxsIHJlY29yZGVkIHJ1bnMuXFxuK1xcbisgICAgSW4gSlNPTiBvdXRwdXQsICoqdmFsdWUqKiBpcyByYXcsICoqdmFsdWVfc2NhbGVkKiogaXMgc2NhbGVkLCAqKnJ1bl9jbnQqKlxcbisgICAgaW5jbHVkZXMgYWxsIHJ1bnMsIGFuZCAqKnJ1bl9jbnRfdmFsaWQqKiBpbmNsdWRlcyBvbmx5IHJ1bnMgdXNlZCBmb3IgbWV0cmljXFxuKyAgICB2YWx1ZXMuXFxuIFxcbiBicGZ0b29sIHByb2cgaGVscFxcbiAgICAgUHJpbnQgc2hvcnQgaGVscCBtZXNzYWdlLlxcbkBAIC0zNjAsNyArMzY5LDcgQEAgRVhBTVBMRVNcXG4gOjpcXG4gXFxuICAgICAgICAgIDUxMzk3IHJ1bl9jbnRcXG4tICAgICAgNDAxNzYyMDMgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4My4wNSUpXFxuKyAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAjIDc4MS42OCBjeWNsZXMgcGVyIHJ1biAgICAgICAgICAgICAgICAoODMuMDUlKVxcbiAgICAgICA0MjUxODEzOSBpbnN0cnVjdGlvbnMgICAgIyAgIDEuMDYgaW5zbnMgcGVyIGN5Y2xlICAgICAgICAgICAgICAgKDgzLjM5JSlcXG4gICAgICAgICAgICAxMjMgbGxjX21pc3NlcyAgICAgICMgICAyLjg5IExMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMgICg4My4xNSUpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li45ZTEyNmYzODIzYWQzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbkBAIC0yMDYyLDM3ICsyMDYyLDUyIEBAIHN0YXRpYyBpbnQgZG9fcHJvZmlsZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcbiAjaW5jbHVkZSBcXFwicHJvZmlsZXIuc2tlbC5oXFxcIlxcbiBcXG4rZW51bSByYXRpb19tZXRyaWMge1xcbitcXHRNRVRSSUNfTk9ORSA9IC0yLFxcbitcXHRNRVRSSUNfUlVOX0NOVCA9IC0xLFxcbitcXHRNRVRSSUNfQ1lDTEVTID0gMCxcXG4rXFx0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXFxuK1xcdE1FVFJJQ19MMURfTE9BRFMgPSAyLFxcbitcXHRNRVRSSUNfTExDX01JU1NFUyA9IDMsXFxuK1xcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXFxuK1xcdE1FVFJJQ19EVExCX01JU1NFUyA9IDUsXFxuK307XFxuK1xcbiBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xcbitcXHRfX3U2NCBzY2FsZWRfdmFsO1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XFxuIFxcdGJvb2wgc2VsZWN0ZWQ7XFxuIFxcbiBcXHQvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqL1xcbi1cXHRjb25zdCBpbnQgcmF0aW9fbWV0cmljOyAvKiAwIGZvciBOL0EsIDEgZm9yIGluZGV4IDAgKGN5Y2xlcykgKi9cXG4rXFx0Y29uc3QgZW51bSByYXRpb19tZXRyaWMgcmF0aW9fbWV0cmljO1xcbiBcXHRjb25zdCBjaGFyICpyYXRpb19kZXNjO1xcbiBcXHRjb25zdCBmbG9hdCByYXRpb19tdWw7XFxuIH0gbWV0cmljc1tdID0ge1xcbi1cXHR7XFxuK1xcdFtNRVRSSUNfQ1lDTEVTXSA9IHtcXG4gXFx0XFx0Lm5hbWUgPSBcXFwiY3ljbGVzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbiBcXHRcXHRcXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbiBcXHRcXHRcXHQuZXhjbHVkZV91c2VyID0gMSxcXG4gXFx0XFx0fSxcXG4rXFx0XFx0LnJhdGlvX21ldHJpYyA9IE1FVFJJQ19SVU5fQ05ULFxcbitcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJjeWNsZXMgcGVyIHJ1blxcXCIsXFxuK1xcdFxcdC5yYXRpb19tdWwgPSAxLjAsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19JTlNUUlVDVElPTlNdID0ge1xcbiBcXHRcXHQubmFtZSA9IFxcXCJpbnN0cnVjdGlvbnNcXFwiLFxcbiBcXHRcXHQuYXR0ciA9IHtcXG4gXFx0XFx0XFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXFxuIFxcdFxcdFxcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDEsXFxuIFxcdFxcdH0sXFxuLVxcdFxcdC5yYXRpb19tZXRyaWMgPSAxLFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX0NZQ0xFUyxcXG4gXFx0XFx0LnJhdGlvX2Rlc2MgPSBcXFwiaW5zbnMgcGVyIGN5Y2xlXFxcIixcXG4gXFx0XFx0LnJhdGlvX211bCA9IDEuMCxcXG4gXFx0fSxcXG4tXFx0e1xcbitcXHRbTUVUUklDX0wxRF9MT0FEU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcImwxZF9sb2Fkc1xcXCIsXFxuIFxcdFxcdC5hdHRyID0ge1xcbiBcXHRcXHRcXHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcXG5AQCAtMjEwMiw4ICsyMTE3LDkgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcXG4gXFx0XFx0XFx0XFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyAxNiksXFxuIFxcdFxcdFxcdC5leGNsdWRlX3VzZXIgPSAxLFxcbiBcXHRcXHR9LFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX05PTkUsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19MTENfTUlTU0VTXSA9IHtcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibGxjX21pc3Nlc1xcXCIsXFxuIFxcdFxcdC5hdHRyID0ge1xcbiBcXHRcXHRcXHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcXG5AQCAtMjExMywxMSArMjEyOSwxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xcbiBcXHRcXHRcXHRcXHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyBcXHUwMDNjXFx1MDAzYyAxNiksXFxuIFxcdFxcdFxcdC5leGNsdWRlX3VzZXIgPSAxXFxuIFxcdFxcdH0sXFxuLVxcdFxcdC5yYXRpb19tZXRyaWMgPSAyLFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0LnJhdGlvX2Rlc2MgPSBcXFwiTExDIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19JVExCX01JU1NFU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcIml0bGJfbWlzc2VzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxcbkBAIC0yMTI3LDExICsyMTQzLDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XFxuIFxcdFxcdFxcdFxcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDFcXG4gXFx0XFx0fSxcXG4tXFx0XFx0LnJhdGlvX21ldHJpYyA9IDIsXFxuK1xcdFxcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxcbiBcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJpdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19EVExCX01JU1NFU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcImR0bGJfbWlzc2VzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxcbkBAIC0yMTQxLDEzICsyMTU3LDE0IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XFxuIFxcdFxcdFxcdFxcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDFcXG4gXFx0XFx0fSxcXG4tXFx0XFx0LnJhdGlvX21ldHJpYyA9IDIsXFxuK1xcdFxcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxcbiBcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJkdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcXG4rc3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7XFxuIFxcbiAjZGVmaW5lIE1BWF9OVU1fUFJPRklMRV9NRVRSSUNTIDRcXG4gXFxuQEAgLTIxODIsOSArMjE5OSwzOSBAQCBzdGF0aWMgaW50IHByb2ZpbGVfcGFyc2VfbWV0cmljcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHJldHVybiBzZWxlY3RlZF9jbnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxcbisvKlxcbisgKiBGaWx0ZXIgb3V0IENQVXMgdGhhdCBoYXZlIGFueSBzZWxlY3RlZCBtZXRyaWMgbm90IHNjaGVkdWxlZCBmb3IgdGhlbS4gVGhpcyBtYWtlcyBzdXJlIGFsbFxcbisgKiBtZXRyaWNzIGFyZSB1c2luZyB0aGUgc2FtZSBDUFUgc2V0LCBhcyBhIHJlc3VsdCByYXRpbyBtZXRyaWNzIGFyZSBjb25zaXN0ZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcHJvZmlsZV9maWx0ZXJfY3B1cyhfX3UzMiBudW1fY3B1LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sXFxuK1xcdFxcdFxcdFxcdF9fdTY0ICpjb3VudHMpXFxuK3tcXG4rXFx0X191MzIgbSwgY3B1LCBrZXkgPSAwO1xcbitcXG4rXFx0Zm9yIChtID0gMDsgbSBcXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0rKykge1xcbitcXHRcXHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Zm9yIChjcHUgPSAwOyBjcHUgXFx1MDAzYyBudW1fY3B1OyBjcHUrKykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBDUFUgaGFzIGhpdHMsIGJ1dCB0aGlzIG1ldHJpYyBuZXZlciBzY2hlZHVsZWQsIHNldCBjb3VudHNbY3B1XSB0byAwXFxuK1xcdFxcdFxcdCAqIHNvIG90aGVyIG1ldHJpY3MgaWdub3JlIHRoaXMgQ1BVIHRvb1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGNvdW50c1tjcHVdIFxcdTAwMjZcXHUwMDI2ICF2YWxzW2tleV1bY3B1XS5ydW5uaW5nKSB7XFxuK1xcdFxcdFxcdFxcdHBfaW5mbyhcXFwiJXMgbm90IHNjaGVkdWxlZCBvbiBDUFUgJXU7IGV4Y2x1ZGluZyAlbGx1IHJ1bnMgZnJvbSBhbGwgbWV0cmljc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtZXRyaWNzW21dLm5hbWUsIGNwdSwgY291bnRzW2NwdV0pO1xcbitcXHRcXHRcXHRcXHRjb3VudHNbY3B1XSA9IDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRrZXkrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxcbiB7XFxuIFxcdF9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fY3B1O1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDtcXG4gXFx0aW50IHJlYWRpbmdfbWFwX2ZkLCBjb3VudF9tYXBfZmQ7XFxuIFxcdF9fdTY0IGNvdW50c1tudW1fY3B1XTtcXG4gXFx0X191MzIga2V5ID0gMDtcXG5AQCAtMjE5NCwzOCArMjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcXG4gXFx0Y291bnRfbWFwX2ZkID0gYnBmX21hcF9fZmQob2JqLVxcdTAwM2VtYXBzLmNvdW50cyk7XFxuIFxcdGlmIChyZWFkaW5nX21hcF9mZCBcXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIGdldCBmZCBmb3IgbWFwXFxcIik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIG1pbihyZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShjb3VudF9tYXBfZmQsIFxcdTAwMjZrZXksIGNvdW50cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cF9lcnIoXFxcImZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAobSA9IDA7IG0gXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcXG4rXFx0XFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0ocmVhZGluZ19tYXBfZmQsIFxcdTAwMjZrZXksIHZhbHVlc1trZXldKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZXkrKztcXG4gXFx0fVxcbiBcXG4gXFx0cHJvZmlsZV90b3RhbF9jb3VudCA9IDA7XFxuIFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgbnVtX2NwdTsgY3B1KyspXFxuIFxcdFxcdHByb2ZpbGVfdG90YWxfY291bnQgKz0gY291bnRzW2NwdV07XFxuIFxcbitcXHRwcm9maWxlX2ZpbHRlcl9jcHVzKG51bV9jcHUsIHZhbHVlcywgY291bnRzKTtcXG4rXFxuK1xcdHByb2ZpbGVfdmFsaWRfY291bnQgPSAwO1xcbitcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIG51bV9jcHU7IGNwdSsrKVxcbitcXHRcXHRwcm9maWxlX3ZhbGlkX2NvdW50ICs9IGNvdW50c1tjcHVdO1xcbitcXG4rXFx0a2V5ID0gMDtcXG4gXFx0Zm9yIChtID0gMDsgbSBcXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0rKykge1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW251bV9jcHVdO1xcbitcXHRcXHRkb3VibGUgc2NhbGU7XFxuIFxcbiBcXHRcXHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXFx1MDAyNmtleSwgdmFsdWVzKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuIFxcdFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgbnVtX2NwdTsgY3B1KyspIHtcXG4tXFx0XFx0XFx0bWV0cmljc1ttXS52YWwuY291bnRlciArPSB2YWx1ZXNbY3B1XS5jb3VudGVyO1xcbi1cXHRcXHRcXHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7XFxuLVxcdFxcdFxcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgKz0gdmFsdWVzW2NwdV0ucnVubmluZztcXG4rXFx0XFx0XFx0LyogU2tpcCBDUFVzIHdpdGggbm8gcnVucyBvciB3aXRoIGFuIHVuc2NoZWR1bGVkIG1ldHJpYy4gKi9cXG4rXFx0XFx0XFx0aWYgKCFjb3VudHNbY3B1XSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgPSBcXHUwMDI2dmFsdWVzW2tleV1bY3B1XTtcXG4rXFxuK1xcdFxcdFxcdG1ldHJpY3NbbV0udmFsLmVuYWJsZWQgKz0gdmFsLVxcdTAwM2VlbmFibGVkO1xcbitcXHRcXHRcXHRtZXRyaWNzW21dLnZhbC5ydW5uaW5nICs9IHZhbC1cXHUwMDNlcnVubmluZztcXG4rXFx0XFx0XFx0bWV0cmljc1ttXS52YWwuY291bnRlciArPSB2YWwtXFx1MDAzZWNvdW50ZXI7XFxuK1xcdFxcdFxcdC8qIFNjYWxlIGNvdW50ZXIgdmFsdWVzIHRvIGFjY291bnQgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiAqL1xcbitcXHRcXHRcXHRzY2FsZSA9IChkb3VibGUpdmFsLVxcdTAwM2VlbmFibGVkIC8gdmFsLVxcdTAwM2VydW5uaW5nO1xcbitcXHRcXHRcXHRtZXRyaWNzW21dLnNjYWxlZF92YWwgKz0gdmFsLVxcdTAwM2Vjb3VudGVyICogc2NhbGU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a2V5Kys7XFxuIFxcdH1cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKVxcbkBAIC0yMjM5LDkgKzIzMDksMTEgQEAgc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXFxuIFxcdFxcdGpzb253X3N0YXJ0X29iamVjdChqc29uX3d0cik7XFxuIFxcdFxcdGpzb253X3N0cmluZ19maWVsZChqc29uX3d0ciwgXFxcIm1ldHJpY1xcXCIsIG1ldHJpY3NbbV0ubmFtZSk7XFxuIFxcdFxcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXFxcInJ1bl9jbnRcXFwiLCBwcm9maWxlX3RvdGFsX2NvdW50KTtcXG4rXFx0XFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcXFwicnVuX2NudF92YWxpZFxcXCIsIHByb2ZpbGVfdmFsaWRfY291bnQpO1xcbiBcXHRcXHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFxcXCJ2YWx1ZVxcXCIsIG1ldHJpY3NbbV0udmFsLmNvdW50ZXIpO1xcbiBcXHRcXHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFxcXCJlbmFibGVkXFxcIiwgbWV0cmljc1ttXS52YWwuZW5hYmxlZCk7XFxuIFxcdFxcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXFxcInJ1bm5pbmdcXFwiLCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTtcXG4rXFx0XFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcXFwidmFsdWVfc2NhbGVkXFxcIiwgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTtcXG4gXFxuIFxcdFxcdGpzb253X2VuZF9vYmplY3QoanNvbl93dHIpO1xcbiBcXHR9XFxuQEAgLTIyNTAsMjQgKzIzMjIsMzQgQEAgc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXFxuIHtcXG4tXFx0X191MzIgbTtcXG4rXFx0X191MzIgaTtcXG4gXFxuIFxcdHByaW50ZihcXFwiXFxcXG4lMThsbHUgJS0yMHNcXFxcblxcXCIsIHByb2ZpbGVfdG90YWxfY291bnQsIFxcXCJydW5fY250XFxcIik7XFxuLVxcdGZvciAobSA9IDA7IG0gXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcXG4tXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcXHUwMDI2bWV0cmljc1ttXS52YWw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHByb2ZpbGVfbWV0cmljICptID0gXFx1MDAyNm1ldHJpY3NbaV07XFxuK1xcdFxcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gXFx1MDAyNm0tXFx1MDAzZXZhbDtcXG4gXFx0XFx0aW50IHI7XFxuK1xcdFxcdF9fdTY0IHJhdGlvO1xcbiBcXG4tXFx0XFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxcbitcXHRcXHRpZiAoIW0tXFx1MDAzZXNlbGVjdGVkKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0cHJpbnRmKFxcXCIlMThsbHUgJS0yMHNcXFwiLCB2YWwtXFx1MDAzZWNvdW50ZXIsIG1ldHJpY3NbbV0ubmFtZSk7XFxuK1xcdFxcdHByaW50ZihcXFwiJTE4bGx1ICUtMjBzXFxcIiwgbS1cXHUwMDNlc2NhbGVkX3ZhbCwgbS1cXHUwMDNlbmFtZSk7XFxuIFxcbi1cXHRcXHRyID0gbWV0cmljc1ttXS5yYXRpb19tZXRyaWMgLSAxO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1ldHJpY3Nbcl0uc2VsZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHIgPSBtLVxcdTAwM2VyYXRpb19tZXRyaWM7XFxuK1xcdFxcdHN3aXRjaCAocikge1xcbitcXHRcXHRjYXNlIE1FVFJJQ19SVU5fQ05UOlxcbitcXHRcXHRcXHRyYXRpbyA9IHByb2ZpbGVfdmFsaWRfY291bnQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE1FVFJJQ19OT05FOlxcbitcXHRcXHRcXHRyYXRpbyA9IDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmF0aW8pIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIjICU4LjJmICUtMzBzXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHZhbC1cXHUwMDNlY291bnRlciAqIG1ldHJpY3NbbV0ucmF0aW9fbXVsIC9cXG4tXFx0XFx0XFx0ICAgICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIsXFxuLVxcdFxcdFxcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xcbitcXHRcXHRcXHQgICAgICAgbS1cXHUwMDNlc2NhbGVkX3ZhbCAqIG0tXFx1MDAzZXJhdGlvX211bCAvIHJhdGlvLFxcbitcXHRcXHRcXHQgICAgICAgbS1cXHUwMDNlcmF0aW9fZGVzYyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiJS00MXNcXFwiLCBcXFwiXFxcIik7XFxuIFxcdFxcdH1cXG5AQCAtMjQyMyw5ICsyNTA1LDEyIEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9vcGVuX3BlcmZfZXZlbnRzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcXG4gXFxuIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfYW5kX2NsZWFudXAodm9pZClcXG4ge1xcbitcXHRpbnQgZXJyO1xcbitcXG4gXFx0cHJvZmlsZV9jbG9zZV9wZXJmX2V2ZW50cyhwcm9maWxlX29iaik7XFxuLVxcdHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopO1xcbi1cXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XFxuK1xcdGVyciA9IHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopO1xcbitcXHRpZiAoIWVycilcXG4rXFx0XFx0cHJvZmlsZV9wcmludF9yZWFkaW5ncygpO1xcbiBcXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xcbiBcXG4gXFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jXFxuaW5kZXggZjQ4Yzc4M2NiOWY3Zi4uNmM2NTRiZDliMzQ2ZiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jXFxuQEAgLTEwLDYgKzEwLDExIEBAIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIHtcXG4gXFx0X191NjQgcnVubmluZztcXG4gfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcXG4gXFxuK3N0cnVjdCBwcm9maWxlX3JlYWRpbmcge1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcXG4rXFx0Ym9vbCBhcm1lZDtcXG4rfTtcXG4rXFxuIC8qIG1hcCBvZiBwZXJmIGV2ZW50IGZkcywgbnVtX2NwdSAqIG51bV9tZXRyaWMgZW50cmllcyAqL1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkZfRVZFTlRfQVJSQVkpO1xcbkBAIC0yMSw3ICsyNiw3IEBAIHN0cnVjdCB7XFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTtcXG4gXFx0X191aW50KGtleV9zaXplLCBzaXplb2YodTMyKSk7XFxuLVxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwpKTtcXG4rXFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XFxuIH0gZmVudHJ5X3JlYWRpbmdzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuIC8qIGFjY3VtdWxhdGVkIHJlYWRpbmdzICovXFxuQEAgLTQ1LDcgKzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7XFxuIFNFQyhcXFwiZmVudHJ5L1hYWFxcXCIpXFxuIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpwdHJzW01BWF9OVU1fTUVUUklDU107XFxuK1xcdHN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKnB0cnNbTUFYX05VTV9NRVRSSUNTXTtcXG4gXFx0dTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTU2LDYgKzYxLDcgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIFxcdFxcdHB0cnNbaV0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFxcdTAwMjZmbGFnKTtcXG4gXFx0XFx0aWYgKCFwdHJzW2ldKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cHRyc1tpXS1cXHUwMDNlYXJtZWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9tZXRyaWMgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIE1BWF9OVU1fTUVUUklDUzsgaSsrKSB7XFxuQEAgLTY2LDcgKzcyLDggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihyZWFkaW5nKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHQqKHB0cnNbaV0pID0gcmVhZGluZztcXG4rXFx0XFx0cHRyc1tpXS1cXHUwMDNldmFsdWUgPSByZWFkaW5nO1xcbitcXHRcXHRwdHJzW2ldLVxcdTAwM2Vhcm1lZCA9IHRydWU7XFxuIFxcdFxcdGtleSArPSBudW1fY3B1O1xcbiBcXHR9XFxuIFxcbkBAIC03NiwxNiArODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbiBmZXhpdF91cGRhdGVfbWFwcyh1MzIgaWQsIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICphZnRlcilcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYmVmb3JlLCBkaWZmO1xcbitcXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XFxuK1xcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIGRpZmY7XFxuIFxcbiBcXHRiZWZvcmUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFxcdTAwMjZpZCk7XFxuIFxcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xcbi1cXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlY291bnRlcikge1xcbitcXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlYXJtZWQpIHtcXG4gXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFjY3VtO1xcbiBcXG4tXFx0XFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXFx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXFx1MDAzZWNvdW50ZXI7XFxuLVxcdFxcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVxcdTAwM2VlbmFibGVkIC0gYmVmb3JlLVxcdTAwM2VlbmFibGVkO1xcbi1cXHRcXHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cXHUwMDNlcnVubmluZztcXG4rXFx0XFx0YmVmb3JlLVxcdTAwM2Vhcm1lZCA9IGZhbHNlO1xcbitcXHRcXHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cXHUwMDNlY291bnRlciAtIGJlZm9yZS1cXHUwMDNldmFsdWUuY291bnRlcjtcXG4rXFx0XFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXFx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXFx1MDAzZXZhbHVlLmVuYWJsZWQ7XFxuK1xcdFxcdGRpZmYucnVubmluZyA9IGFmdGVyLVxcdTAwM2VydW5uaW5nIC0gYmVmb3JlLVxcdTAwM2V2YWx1ZS5ydW5uaW5nO1xcbiBcXG4gXFx0XFx0YWNjdW0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhY2N1bV9yZWFkaW5ncywgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGFjY3VtKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuY1xcbmluZGV4IDk3MDM3ZDNiM2Q5ZmEuLjdiYzBkYjI2ZTAwNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXFxuQEAgLTQsNiArNCwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCBwcm9maWxlX3JlYWRpbmcge1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XFxuK1xcdGJvb2wgYXJtZWQ7XFxuK307XFxuK1xcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcXG5AQCAtMTUsNyArMjAsNyBAQCBzdHJ1Y3Qge1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XFxuIFxcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKF9fdTMyKSk7XFxuLVxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7XFxuK1xcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpO1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbkBAIC0zMyw3ICszOCw3IEBAIFNFQyhcXFwiZmVudHJ5L1hYWFxcXCIpXFxuIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxcbiB7XFxuIFxcdF9fdTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbi1cXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnB0cjtcXG4rXFx0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyO1xcbiBcXHRfX3UzMiB6ZXJvID0gMDtcXG4gXFx0bG9uZyBlcnI7XFxuIFxcbkBAIC00Miw5ICs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcXG4gXFx0aWYgKCFwdHIpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXJyID0gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZShcXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcXG4rXFx0cHRyLVxcdTAwM2Vhcm1lZCA9IGZhbHNlO1xcbitcXHRlcnIgPSBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlKFxcdTAwMjZldmVudHMsIGtleSwgXFx1MDAyNnB0ci1cXHUwMDNldmFsdWUsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihwdHItXFx1MDAzZXZhbHVlKSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRwdHItXFx1MDAzZWFybWVkID0gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUyLDE3ICs2MCwxOSBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcXG4gc3RhdGljIGlubGluZSB2b2lkXFxuIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpXFxuIHtcXG4tXFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7XFxuK1xcdHN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTtcXG4rXFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7XFxuIFxcdF9fdTMyIHplcm8gPSAwO1xcbiBcXG4gXFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcXHUwMDI2emVybyk7XFxuIFxcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xcbi1cXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlY291bnRlcikge1xcbitcXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlYXJtZWQpIHtcXG4gXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTtcXG4gXFxuLVxcdFxcdGRpZmYuY291bnRlciA9IGFmdGVyLVxcdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVxcdTAwM2Vjb3VudGVyO1xcbi1cXHRcXHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cXHUwMDNlZW5hYmxlZDtcXG4tXFx0XFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXFx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXFx1MDAzZXJ1bm5pbmc7XFxuK1xcdFxcdGJlZm9yZS1cXHUwMDNlYXJtZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXFx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXFx1MDAzZXZhbHVlLmNvdW50ZXI7XFxuK1xcdFxcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVxcdTAwM2VlbmFibGVkIC0gYmVmb3JlLVxcdTAwM2V2YWx1ZS5lbmFibGVkO1xcbitcXHRcXHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cXHUwMDNldmFsdWUucnVubmluZztcXG4gXFxuIFxcdFxcdGFjY3VtID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFxcdTAwMjZ6ZXJvKTtcXG4gXFx0XFx0aWYgKGFjY3VtKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjczNzM2NzQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyNzU1OTk0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGFjY2UxOGNjYjJlZWYxYTM0ODdmOTk4OTE2YWRhOTExYzYxYjg5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcbmluZGV4IDkwZmEyYTQ4Y2MyNmEuLjAxMDhhMWM4YmU0ZGIgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuQEAgLTIxNyw3ICsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3RcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxuICAgICBQcm9maWxlICpNRVRSSUNzKiBmb3IgYnBmIHByb2dyYW0gKlBST0cqIGZvciAqRFVSQVRJT04qIHNlY29uZHMgb3IgdW50aWxcbiAgICAgdXNlciBoaXRzIFx1MDAzY0N0cmwrQ1x1MDAzZS4gKkRVUkFUSU9OKiBpcyBvcHRpb25hbC4gSWYgKkRVUkFUSU9OKiBpcyBub3Qgc3BlY2lmaWVkLFxuLSAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLlxuKyAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLiBQbGFpbiBvdXRwdXQgc2NhbGVzIGVhY2hcbisgICAgcGVyLUNQVSBtZXRyaWMgdmFsdWUgdG8gY29ycmVjdCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuIFdoZW5cbisgICAgKipjeWNsZXMqKiBpcyBzZWxlY3RlZCwgaXQgYWxzbyByZXBvcnRzIGN5Y2xlcyBwZXIgaW5jbHVkZWQgcHJvZ3JhbSBydW4uIElmXG4rICAgIGEgc2VsZWN0ZWQgbWV0cmljIHdhcyBub3Qgc2NoZWR1bGVkIG9uIGEgQ1BVLCBhbGwgbWV0cmljIHZhbHVlcyBleGNsdWRlXG4rICAgIHRoYXQgQ1BVIHNvIHRoYXQgcmF0aW9zIHVzZSBhIGNvbnNpc3RlbnQgQ1BVIHNldC4gVGhlICoqcnVuX2NudCoqIHZhbHVlXG4rICAgIHN0aWxsIGluY2x1ZGVzIGFsbCByZWNvcmRlZCBydW5zLlxuK1xuKyAgICBJbiBKU09OIG91dHB1dCwgKip2YWx1ZSoqIGlzIHJhdywgKip2YWx1ZV9zY2FsZWQqKiBpcyBzY2FsZWQsICoqcnVuX2NudCoqXG4rICAgIGluY2x1ZGVzIGFsbCBydW5zLCBhbmQgKipydW5fY250X3ZhbGlkKiogaW5jbHVkZXMgb25seSBydW5zIHVzZWQgZm9yIG1ldHJpY1xuKyAgICB2YWx1ZXMuXG4gXG4gYnBmdG9vbCBwcm9nIGhlbHBcbiAgICAgUHJpbnQgc2hvcnQgaGVscCBtZXNzYWdlLlxuQEAgLTM2MCw3ICszNjksNyBAQCBFWEFNUExFU1xuIDo6XG4gXG4gICAgICAgICAgNTEzOTcgcnVuX2NudFxuLSAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoODMuMDUlKVxuKyAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAjIDc4MS42OCBjeWNsZXMgcGVyIHJ1biAgICAgICAgICAgICAgICAoODMuMDUlKVxuICAgICAgIDQyNTE4MTM5IGluc3RydWN0aW9ucyAgICAjICAgMS4wNiBpbnNucyBwZXIgY3ljbGUgICAgICAgICAgICAgICAoODMuMzklKVxuICAgICAgICAgICAgMTIzIGxsY19taXNzZXMgICAgICAjICAgMi44OSBMTEMgbWlzc2VzIHBlciBtaWxsaW9uIGluc25zICAoODMuMTUlKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuaW5kZXggOGMyZjkyNTViMzZkNy4uOWUxMjZmMzgyM2FkMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5AQCAtMjA2MiwzNyArMjA2Miw1MiBAQCBzdGF0aWMgaW50IGRvX3Byb2ZpbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuICNpbmNsdWRlIFwicHJvZmlsZXIuc2tlbC5oXCJcbiBcbitlbnVtIHJhdGlvX21ldHJpYyB7XG4rXHRNRVRSSUNfTk9ORSA9IC0yLFxuK1x0TUVUUklDX1JVTl9DTlQgPSAtMSxcbitcdE1FVFJJQ19DWUNMRVMgPSAwLFxuK1x0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXG4rXHRNRVRSSUNfTDFEX0xPQURTID0gMixcbitcdE1FVFJJQ19MTENfTUlTU0VTID0gMyxcbitcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXG4rXHRNRVRSSUNfRFRMQl9NSVNTRVMgPSA1LFxuK307XG4rXG4gc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xuK1x0X191NjQgc2NhbGVkX3ZhbDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGJvb2wgc2VsZWN0ZWQ7XG4gXG4gXHQvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqL1xuLVx0Y29uc3QgaW50IHJhdGlvX21ldHJpYzsgLyogMCBmb3IgTi9BLCAxIGZvciBpbmRleCAwIChjeWNsZXMpICovXG4rXHRjb25zdCBlbnVtIHJhdGlvX21ldHJpYyByYXRpb19tZXRyaWM7XG4gXHRjb25zdCBjaGFyICpyYXRpb19kZXNjO1xuIFx0Y29uc3QgZmxvYXQgcmF0aW9fbXVsO1xuIH0gbWV0cmljc1tdID0ge1xuLVx0e1xuK1x0W01FVFJJQ19DWUNMRVNdID0ge1xuIFx0XHQubmFtZSA9IFwiY3ljbGVzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuIFx0XHRcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfUlVOX0NOVCxcbitcdFx0LnJhdGlvX2Rlc2MgPSBcImN5Y2xlcyBwZXIgcnVuXCIsXG4rXHRcdC5yYXRpb19tdWwgPSAxLjAsXG4gXHR9LFxuLVx0e1xuK1x0W01FVFJJQ19JTlNUUlVDVElPTlNdID0ge1xuIFx0XHQubmFtZSA9IFwiaW5zdHJ1Y3Rpb25zXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuIFx0XHRcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDEsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfQ1lDTEVTLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiaW5zbnMgcGVyIGN5Y2xlXCIsXG4gXHRcdC5yYXRpb19tdWwgPSAxLjAsXG4gXHR9LFxuLVx0e1xuK1x0W01FVFJJQ19MMURfTE9BRFNdID0ge1xuIFx0XHQubmFtZSA9IFwibDFkX2xvYWRzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxMDIsOCArMjExNyw5IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XG4gXHRcdFx0XHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSxcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0xMQ19NSVNTRVNdID0ge1xuIFx0XHQubmFtZSA9IFwibGxjX21pc3Nlc1wiLFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTEzLDExICsyMTI5LDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XG4gXHRcdFx0XHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyBcdTAwM2NcdTAwM2MgMTYpLFxuIFx0XHRcdC5leGNsdWRlX3VzZXIgPSAxXG4gXHRcdH0sXG4tXHRcdC5yYXRpb19tZXRyaWMgPSAyLFxuK1x0XHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcbiBcdFx0LnJhdGlvX2Rlc2MgPSBcIkxMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0lUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcIml0bGJfbWlzc2VzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxMjcsMTEgKzIxNDMsMTEgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiaXRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0RUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcImR0bGJfbWlzc2VzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxNDEsMTMgKzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiZHRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4gfTtcbiBcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcbitzdGF0aWMgX191NjQgcHJvZmlsZV92YWxpZF9jb3VudDtcbiBcbiAjZGVmaW5lIE1BWF9OVU1fUFJPRklMRV9NRVRSSUNTIDRcbiBcbkBAIC0yMTgyLDkgKzIxOTksMzkgQEAgc3RhdGljIGludCBwcm9maWxlX3BhcnNlX21ldHJpY3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0cmV0dXJuIHNlbGVjdGVkX2NudDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcHJvZmlsZV9yZWFkX3ZhbHVlcyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4rLypcbisgKiBGaWx0ZXIgb3V0IENQVXMgdGhhdCBoYXZlIGFueSBzZWxlY3RlZCBtZXRyaWMgbm90IHNjaGVkdWxlZCBmb3IgdGhlbS4gVGhpcyBtYWtlcyBzdXJlIGFsbFxuKyAqIG1ldHJpY3MgYXJlIHVzaW5nIHRoZSBzYW1lIENQVSBzZXQsIGFzIGEgcmVzdWx0IHJhdGlvIG1ldHJpY3MgYXJlIGNvbnNpc3RlbnQuXG4rICovXG4rc3RhdGljIHZvaWQgcHJvZmlsZV9maWx0ZXJfY3B1cyhfX3UzMiBudW1fY3B1LFxuK1x0XHRcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHNbTUFYX05VTV9QUk9GSUxFX01FVFJJQ1NdW251bV9jcHVdLFxuK1x0XHRcdFx0X191NjQgKmNvdW50cylcbit7XG4rXHRfX3UzMiBtLCBjcHUsIGtleSA9IDA7XG4rXG4rXHRmb3IgKG0gPSAwOyBtIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcbitcdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgbnVtX2NwdTsgY3B1KyspIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIENQVSBoYXMgaGl0cywgYnV0IHRoaXMgbWV0cmljIG5ldmVyIHNjaGVkdWxlZCwgc2V0IGNvdW50c1tjcHVdIHRvIDBcbitcdFx0XHQgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b29cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoY291bnRzW2NwdV0gXHUwMDI2XHUwMDI2ICF2YWxzW2tleV1bY3B1XS5ydW5uaW5nKSB7XG4rXHRcdFx0XHRwX2luZm8oXCIlcyBub3Qgc2NoZWR1bGVkIG9uIENQVSAldTsgZXhjbHVkaW5nICVsbHUgcnVucyBmcm9tIGFsbCBtZXRyaWNzXCIsXG4rXHRcdFx0XHQgICAgICAgbWV0cmljc1ttXS5uYW1lLCBjcHUsIGNvdW50c1tjcHVdKTtcbitcdFx0XHRcdGNvdW50c1tjcHVdID0gMDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0a2V5Kys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcHJvZmlsZV9yZWFkX3ZhbHVlcyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4ge1xuIFx0X191MzIgbSwgY3B1LCBudW1fY3B1ID0gb2JqLVx1MDAzZXJvZGF0YS1cdTAwM2VudW1fY3B1O1xuK1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHVlc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sICp2YWw7XG4gXHRpbnQgcmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZDtcbiBcdF9fdTY0IGNvdW50c1tudW1fY3B1XTtcbiBcdF9fdTMyIGtleSA9IDA7XG5AQCAtMjE5NCwzOCArMjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcdGNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai1cdTAwM2VtYXBzLmNvdW50cyk7XG4gXHRpZiAocmVhZGluZ19tYXBfZmQgXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFx1MDAzYyAwKSB7XG4gXHRcdHBfZXJyKFwiZmFpbGVkIHRvIGdldCBmZCBmb3IgbWFwXCIpO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiBtaW4ocmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZCk7XG4gXHR9XG4gXG4gXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgXHUwMDI2a2V5LCBjb3VudHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4rXHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXNba2V5XSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdFx0a2V5Kys7XG4gXHR9XG4gXG4gXHRwcm9maWxlX3RvdGFsX2NvdW50ID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUrKylcbiBcdFx0cHJvZmlsZV90b3RhbF9jb3VudCArPSBjb3VudHNbY3B1XTtcbiBcbitcdHByb2ZpbGVfZmlsdGVyX2NwdXMobnVtX2NwdSwgdmFsdWVzLCBjb3VudHMpO1xuK1xuK1x0cHJvZmlsZV92YWxpZF9jb3VudCA9IDA7XG4rXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgbnVtX2NwdTsgY3B1KyspXG4rXHRcdHByb2ZpbGVfdmFsaWRfY291bnQgKz0gY291bnRzW2NwdV07XG4rXG4rXHRrZXkgPSAwO1xuIFx0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07XG4rXHRcdGRvdWJsZSBzY2FsZTtcbiBcbiBcdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKHJlYWRpbmdfbWFwX2ZkLCBcdTAwMjZrZXksIHZhbHVlcyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wiLFxuLVx0XHRcdCAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4gXHRcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUrKykge1xuLVx0XHRcdG1ldHJpY3NbbV0udmFsLmNvdW50ZXIgKz0gdmFsdWVzW2NwdV0uY291bnRlcjtcbi1cdFx0XHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7XG4tXHRcdFx0bWV0cmljc1ttXS52YWwucnVubmluZyArPSB2YWx1ZXNbY3B1XS5ydW5uaW5nO1xuK1x0XHRcdC8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovXG4rXHRcdFx0aWYgKCFjb3VudHNbY3B1XSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCA9IFx1MDAyNnZhbHVlc1trZXldW2NwdV07XG4rXG4rXHRcdFx0bWV0cmljc1ttXS52YWwuZW5hYmxlZCArPSB2YWwtXHUwMDNlZW5hYmxlZDtcbitcdFx0XHRtZXRyaWNzW21dLnZhbC5ydW5uaW5nICs9IHZhbC1cdTAwM2VydW5uaW5nO1xuK1x0XHRcdG1ldHJpY3NbbV0udmFsLmNvdW50ZXIgKz0gdmFsLVx1MDAzZWNvdW50ZXI7XG4rXHRcdFx0LyogU2NhbGUgY291bnRlciB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuICovXG4rXHRcdFx0c2NhbGUgPSAoZG91YmxlKXZhbC1cdTAwM2VlbmFibGVkIC8gdmFsLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdFx0bWV0cmljc1ttXS5zY2FsZWRfdmFsICs9IHZhbC1cdTAwM2Vjb3VudGVyICogc2NhbGU7XG4gXHRcdH1cbiBcdFx0a2V5Kys7XG4gXHR9XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXG5AQCAtMjIzOSw5ICsyMzA5LDExIEBAIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKVxuIFx0XHRqc29ud19zdGFydF9vYmplY3QoanNvbl93dHIpO1xuIFx0XHRqc29ud19zdHJpbmdfZmllbGQoanNvbl93dHIsIFwibWV0cmljXCIsIG1ldHJpY3NbbV0ubmFtZSk7XG4gXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCJydW5fY250XCIsIHByb2ZpbGVfdG90YWxfY291bnQpO1xuK1x0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwicnVuX2NudF92YWxpZFwiLCBwcm9maWxlX3ZhbGlkX2NvdW50KTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcInZhbHVlXCIsIG1ldHJpY3NbbV0udmFsLmNvdW50ZXIpO1xuIFx0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwiZW5hYmxlZFwiLCBtZXRyaWNzW21dLnZhbC5lbmFibGVkKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcInJ1bm5pbmdcIiwgbWV0cmljc1ttXS52YWwucnVubmluZyk7XG4rXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCJ2YWx1ZV9zY2FsZWRcIiwgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTtcbiBcbiBcdFx0anNvbndfZW5kX29iamVjdChqc29uX3d0cik7XG4gXHR9XG5AQCAtMjI1MCwyNCArMjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXG4ge1xuLVx0X191MzIgbTtcbitcdF9fdTMyIGk7XG4gXG4gXHRwcmludGYoXCJcXG4lMThsbHUgJS0yMHNcXG5cIiwgcHJvZmlsZV90b3RhbF9jb3VudCwgXCJydW5fY250XCIpO1xuLVx0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gXHUwMDI2bWV0cmljc1ttXS52YWw7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBpKyspIHtcbitcdFx0c3RydWN0IHByb2ZpbGVfbWV0cmljICptID0gXHUwMDI2bWV0cmljc1tpXTtcbitcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcdTAwMjZtLVx1MDAzZXZhbDtcbiBcdFx0aW50IHI7XG4rXHRcdF9fdTY0IHJhdGlvO1xuIFxuLVx0XHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXG4rXHRcdGlmICghbS1cdTAwM2VzZWxlY3RlZClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0cHJpbnRmKFwiJTE4bGx1ICUtMjBzXCIsIHZhbC1cdTAwM2Vjb3VudGVyLCBtZXRyaWNzW21dLm5hbWUpO1xuK1x0XHRwcmludGYoXCIlMThsbHUgJS0yMHNcIiwgbS1cdTAwM2VzY2FsZWRfdmFsLCBtLVx1MDAzZW5hbWUpO1xuIFxuLVx0XHRyID0gbWV0cmljc1ttXS5yYXRpb19tZXRyaWMgLSAxO1xuLVx0XHRpZiAociBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1ldHJpY3Nbcl0uc2VsZWN0ZWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyIFx1MDAzZSAwKSB7XG4rXHRcdHIgPSBtLVx1MDAzZXJhdGlvX21ldHJpYztcbitcdFx0c3dpdGNoIChyKSB7XG4rXHRcdGNhc2UgTUVUUklDX1JVTl9DTlQ6XG4rXHRcdFx0cmF0aW8gPSBwcm9maWxlX3ZhbGlkX2NvdW50O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIE1FVFJJQ19OT05FOlxuK1x0XHRcdHJhdGlvID0gMDtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDtcbitcdFx0fVxuK1x0XHRpZiAocmF0aW8pIHtcbiBcdFx0XHRwcmludGYoXCIjICU4LjJmICUtMzBzXCIsXG4tXHRcdFx0ICAgICAgIHZhbC1cdTAwM2Vjb3VudGVyICogbWV0cmljc1ttXS5yYXRpb19tdWwgL1xuLVx0XHRcdCAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLFxuLVx0XHRcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xuK1x0XHRcdCAgICAgICBtLVx1MDAzZXNjYWxlZF92YWwgKiBtLVx1MDAzZXJhdGlvX211bCAvIHJhdGlvLFxuK1x0XHRcdCAgICAgICBtLVx1MDAzZXJhdGlvX2Rlc2MpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByaW50ZihcIiUtNDFzXCIsIFwiXCIpO1xuIFx0XHR9XG5AQCAtMjQyMyw5ICsyNTA1LDEyIEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9vcGVuX3BlcmZfZXZlbnRzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X2FuZF9jbGVhbnVwKHZvaWQpXG4ge1xuK1x0aW50IGVycjtcbitcbiBcdHByb2ZpbGVfY2xvc2VfcGVyZl9ldmVudHMocHJvZmlsZV9vYmopO1xuLVx0cHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4tXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4rXHRlcnIgPSBwcm9maWxlX3JlYWRfdmFsdWVzKHByb2ZpbGVfb2JqKTtcbitcdGlmICghZXJyKVxuK1x0XHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4gXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xuIFxuIFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbmluZGV4IGY0OGM3ODNjYjlmN2YuLjZjNjU0YmQ5YjM0NmYgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbkBAIC0xMCw2ICsxMCwxMSBAQCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB7XG4gXHRfX3U2NCBydW5uaW5nO1xuIH0gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XG4gXG4rc3RydWN0IHByb2ZpbGVfcmVhZGluZyB7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcbitcdGJvb2wgYXJtZWQ7XG4rfTtcbitcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcbkBAIC0yMSw3ICsyNiw3IEBAIHN0cnVjdCB7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTtcbiBcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKHUzMikpO1xuLVx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCkpO1xuK1x0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XG4gfSBmZW50cnlfcmVhZGluZ3MgU0VDKFwiLm1hcHNcIik7XG4gXG4gLyogYWNjdW11bGF0ZWQgcmVhZGluZ3MgKi9cbkBAIC00NSw3ICs1MCw3IEBAIGNvbnN0IHZvbGF0aWxlIF9fdTMyIG51bV9tZXRyaWMgPSAxO1xuIFNFQyhcImZlbnRyeS9YWFhcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiB7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdO1xuK1x0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdO1xuIFx0dTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuIFx0dTMyIGk7XG4gXG5AQCAtNTYsNiArNjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdFx0cHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZmbGFnKTtcbiBcdFx0aWYgKCFwdHJzW2ldKVxuIFx0XHRcdHJldHVybiAwO1xuK1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fbWV0cmljIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBNQVhfTlVNX01FVFJJQ1M7IGkrKykge1xuQEAgLTY2LDcgKzcyLDggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gXHRcdFx0XHRcdFx0c2l6ZW9mKHJlYWRpbmcpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0KihwdHJzW2ldKSA9IHJlYWRpbmc7XG4rXHRcdHB0cnNbaV0tXHUwMDNldmFsdWUgPSByZWFkaW5nO1xuK1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gdHJ1ZTtcbiBcdFx0a2V5ICs9IG51bV9jcHU7XG4gXHR9XG4gXG5AQCAtNzYsMTYgKzgzLDE4IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGZleGl0X3VwZGF0ZV9tYXBzKHUzMiBpZCwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFmdGVyKVxuIHtcbi1cdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpiZWZvcmUsIGRpZmY7XG4rXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCBkaWZmO1xuIFxuIFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xuLVx0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWNvdW50ZXIpIHtcbitcdGlmIChiZWZvcmUgXHUwMDI2XHUwMDI2IGJlZm9yZS1cdTAwM2Vhcm1lZCkge1xuIFx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYWNjdW07XG4gXG4tXHRcdGRpZmYuY291bnRlciA9IGFmdGVyLVx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXHUwMDNlY291bnRlcjtcbi1cdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2VlbmFibGVkO1xuLVx0XHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cdTAwM2VydW5uaW5nIC0gYmVmb3JlLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0XHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVx1MDAzZXZhbHVlLmNvdW50ZXI7XG4rXHRcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXHUwMDNldmFsdWUuZW5hYmxlZDtcbitcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdFx0aWYgKGFjY3VtKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG5pbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNcbkBAIC00LDYgKzQsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4gXG4rc3RydWN0IHByb2ZpbGVfcmVhZGluZyB7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XG4rXHRib29sIGFybWVkO1xuK307XG4rXG4gLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7XG5AQCAtMTUsNyArMjAsNyBAQCBzdHJ1Y3Qge1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihfX3UzMikpO1xuLVx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUpKTtcbitcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpO1xuIFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXCIubWFwc1wiKTtcbiBcbkBAIC0zMyw3ICszOCw3IEBAIFNFQyhcImZlbnRyeS9YWFhcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiB7XG4gXHRfX3UzMiBrZXkgPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbi1cdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqcHRyO1xuK1x0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyO1xuIFx0X191MzIgemVybyA9IDA7XG4gXHRsb25nIGVycjtcbiBcbkBAIC00Miw5ICs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcbitcdHB0ci1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0ZXJyID0gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZShcdTAwMjZldmVudHMsIGtleSwgXHUwMDI2cHRyLVx1MDAzZXZhbHVlLFxuK1x0XHRcdFx0XHRzaXplb2YocHRyLVx1MDAzZXZhbHVlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gMDtcbitcdHB0ci1cdTAwM2Vhcm1lZCA9IHRydWU7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTIsMTcgKzYwLDE5IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7XG4rXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgZGlmZjtcbiBcdF9fdTMyIHplcm8gPSAwO1xuIFxuIFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0Lyogb25seSBhY2NvdW50IHNhbXBsZXMgd2l0aCBhIHZhbGlkIGZlbnRyeV9yZWFkaW5nICovXG4tXHRpZiAoYmVmb3JlIFx1MDAyNlx1MDAyNiBiZWZvcmUtXHUwMDNlY291bnRlcikge1xuK1x0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWFybWVkKSB7XG4gXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWNjdW07XG4gXG4tXHRcdGRpZmYuY291bnRlciA9IGFmdGVyLVx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXHUwMDNlY291bnRlcjtcbi1cdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2VlbmFibGVkO1xuLVx0XHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cdTAwM2VydW5uaW5nIC0gYmVmb3JlLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0XHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVx1MDAzZXZhbHVlLmNvdW50ZXI7XG4rXHRcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXHUwMDNldmFsdWUuZW5hYmxlZDtcbitcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0XHRpZiAoYWNjdW0pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjczNzM2OTAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Mjc1NTU5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBOb24tS2VybmVsIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgLCBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jYCwgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgLiBBbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sYCBhbmQgYHRvb2xzL3BlcmZgLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgdXN1YWwgY3JpdGVyaWEg4oCTIHNlY3Rpb24gMiByZWdhcmRpbmcgd2hlbiAqbm90KiB0byBmdXp6IOKAkyBhbnkgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIG9yIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGxpa2UgYHRvb2xzL2AsIHNhbXBsZXMvLCBzY3JpcHRzLywgZXRjLiwgdGhhdCAqZG9uJ3QqIGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMsIGRvbid0IHdhcnJhbnQgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGVzZSBmaWxlcyBzcGVjaWZpY2FsbHk6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgIGlzIGRvY3VtZW50YXRpb24uIGB0b29scy9icGYvYnBmdG9vbC9wcm9nLmNgIGlzIHRoZSB1c2VyLXNwYWNlIGBicGZ0b29sYCB1dGlsaXR5LiBUaGUgb3RoZXIgdHdvIGB0b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY2AgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgIGFyZSBCUEYgc2tlbGV0b24gcHJvZ3JhbXMgKmZvciogdGhlc2UgdXNlci1zcGFjZSB0b29scy4gVGhleSdyZSBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsLlxuXG5JJ20gY29uZmlkZW50IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHVzZXItc3BhY2UgdG9vbHMuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBrZXJuZWwgY29kZSBpc24ndCBpbmRpcmVjdGx5IG1vZGlmaWVkLiBBIHF1aWNrIGBncmVwYCBvciBmaWxlIGluc3BlY3Rpb24gc2hvdWxkIGNvbmZpcm0gdGhpcyBpcyB0aGUgY2FzZS4gQnV0LCBnaXZlbiB0aGUgZmlsZSBwYXRocywgSSBkb24ndCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyBrZXJuZWwtcmVsYXRlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW1wYWN0IGtlcm5lbCBpbWFnZSBvciBrZXJuZWwgbW9kdWxlcy4gU28sIG5vIGZ1enppbmcgbmVlZGVkLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBObyBgRW5hYmxlQ29uZmlnc2Agb3IgYEZvY3VzU3ltYm9sc2AgYXJlIHJlcXVpcmVkLiBUaGUgcmF0aW9uYWxlIGlzIHRoZSBwYXRjaCBpcyBjb25maW5lZCB0byB1c2Vyc3BhY2UgYHRvb2xzYCAoYnBmdG9vbCBhbmQgcGVyZikgd2hpY2ggYXJlIHVzZXItc3BhY2UgdG9vbHMsIGFsb25nIHdpdGggdGhlaXIgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBza2VsZXRvbiBjb2RlLiBBbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTcsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowODoxOS4wMTI5MzI0OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjE5LjAxMjk3MDU3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpwtxh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 18:32:05 +0000 UTC FinishedAt: 2026-09-08 19:08:20 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE5OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xzIGFuZCBkb2N1bWVudGF0aW9uIHVuZGVyIHRvb2xzLyAoYnBmdG9vbCBhbmQgcGVyZiBwcm9nIHByb2ZpbGVyIHNrZWxldG9ucykuIE5vIGtlcm5lbCBzb3VyY2UgZmlsZXMgb3Iga2VybmVsIG1vZHVsZXMgYWZmZWN0aW5nIHZtbGludXggYXJlIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRhY2NlMThjY2IyZWVmMWEzNDg3Zjk5ODkxNmFkYTkxMWM2MWI4OWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE5OjA4OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdCBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0XG5AQCAtMjE3LDcgJiM0MzsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3RcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxuICAgICBQcm9maWxlICpNRVRSSUNzKiBmb3IgYnBmIHByb2dyYW0gKlBST0cqIGZvciAqRFVSQVRJT04qIHNlY29uZHMgb3IgdW50aWxcbiAgICAgdXNlciBoaXRzIFx1MDAzY0N0cmwmIzQzO0NcdTAwM2UuICpEVVJBVElPTiogaXMgb3B0aW9uYWwuIElmICpEVVJBVElPTiogaXMgbm90IHNwZWNpZmllZCxcbi0gICAgdGhlIHByb2ZpbGluZyB3aWxsIHJ1biB1cCB0byAqKlVJTlRfTUFYKiogc2Vjb25kcy5cbiYjNDM7ICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuIFBsYWluIG91dHB1dCBzY2FsZXMgZWFjaFxuJiM0MzsgICAgcGVyLUNQVSBtZXRyaWMgdmFsdWUgdG8gY29ycmVjdCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuIFdoZW5cbiYjNDM7ICAgICoqY3ljbGVzKiogaXMgc2VsZWN0ZWQsIGl0IGFsc28gcmVwb3J0cyBjeWNsZXMgcGVyIGluY2x1ZGVkIHByb2dyYW0gcnVuLiBJZlxuJiM0MzsgICAgYSBzZWxlY3RlZCBtZXRyaWMgd2FzIG5vdCBzY2hlZHVsZWQgb24gYSBDUFUsIGFsbCBtZXRyaWMgdmFsdWVzIGV4Y2x1ZGVcbiYjNDM7ICAgIHRoYXQgQ1BVIHNvIHRoYXQgcmF0aW9zIHVzZSBhIGNvbnNpc3RlbnQgQ1BVIHNldC4gVGhlICoqcnVuX2NudCoqIHZhbHVlXG4mIzQzOyAgICBzdGlsbCBpbmNsdWRlcyBhbGwgcmVjb3JkZWQgcnVucy5cbiYjNDM7XG4mIzQzOyAgICBJbiBKU09OIG91dHB1dCwgKip2YWx1ZSoqIGlzIHJhdywgKip2YWx1ZV9zY2FsZWQqKiBpcyBzY2FsZWQsICoqcnVuX2NudCoqXG4mIzQzOyAgICBpbmNsdWRlcyBhbGwgcnVucywgYW5kICoqcnVuX2NudF92YWxpZCoqIGluY2x1ZGVzIG9ubHkgcnVucyB1c2VkIGZvciBtZXRyaWNcbiYjNDM7ICAgIHZhbHVlcy5cbiBcbiBicGZ0b29sIHByb2cgaGVscFxuICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuXG5AQCAtMzYwLDcgJiM0MzszNjksNyBAQCBFWEFNUExFU1xuIDo6XG4gXG4gICAgICAgICAgNTEzOTcgcnVuX2NudFxuLSAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoODMuMDUlKVxuJiM0MzsgICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgIyA3ODEuNjggY3ljbGVzIHBlciBydW4gICAgICAgICAgICAgICAgKDgzLjA1JSlcbiAgICAgICA0MjUxODEzOSBpbnN0cnVjdGlvbnMgICAgIyAgIDEuMDYgaW5zbnMgcGVyIGN5Y2xlICAgICAgICAgICAgICAgKDgzLjM5JSlcbiAgICAgICAgICAgIDEyMyBsbGNfbWlzc2VzICAgICAgIyAgIDIuODkgTExDIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNucyAgKDgzLjE1JSlcbiBcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbmluZGV4IDhjMmY5MjU1YjM2ZDcuLjllMTI2ZjM4MjNhZDMgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuQEAgLTIwNjIsMzcgJiM0MzsyMDYyLDUyIEBAIHN0YXRpYyBpbnQgZG9fcHJvZmlsZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cHJvZmlsZXIuc2tlbC5oXCYjMzQ7XG4gXG4mIzQzO2VudW0gcmF0aW9fbWV0cmljIHtcbiYjNDM7XHRNRVRSSUNfTk9ORSA9IC0yLFxuJiM0MztcdE1FVFJJQ19SVU5fQ05UID0gLTEsXG4mIzQzO1x0TUVUUklDX0NZQ0xFUyA9IDAsXG4mIzQzO1x0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXG4mIzQzO1x0TUVUUklDX0wxRF9MT0FEUyA9IDIsXG4mIzQzO1x0TUVUUklDX0xMQ19NSVNTRVMgPSAzLFxuJiM0MztcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXG4mIzQzO1x0TUVUUklDX0RUTEJfTUlTU0VTID0gNSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xuJiM0MztcdF9fdTY0IHNjYWxlZF92YWw7XG4gXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XG4gXHRib29sIHNlbGVjdGVkO1xuIFxuIFx0LyogY2FsY3VsYXRlIHJhdGlvcyBsaWtlIGluc3RydWN0aW9ucyBwZXIgY3ljbGUgKi9cbi1cdGNvbnN0IGludCByYXRpb19tZXRyaWM7IC8qIDAgZm9yIE4vQSwgMSBmb3IgaW5kZXggMCAoY3ljbGVzKSAqL1xuJiM0MztcdGNvbnN0IGVudW0gcmF0aW9fbWV0cmljIHJhdGlvX21ldHJpYztcbiBcdGNvbnN0IGNoYXIgKnJhdGlvX2Rlc2M7XG4gXHRjb25zdCBmbG9hdCByYXRpb19tdWw7XG4gfSBtZXRyaWNzW10gPSB7XG4tXHR7XG4mIzQzO1x0W01FVFJJQ19DWUNMRVNdID0ge1xuIFx0XHQubmFtZSA9IFwmIzM0O2N5Y2xlc1wmIzM0OyxcbiBcdFx0LmF0dHIgPSB7XG4gXHRcdFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4gXHRcdFx0LmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUyxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfUlVOX0NOVCxcbiYjNDM7XHRcdC5yYXRpb19kZXNjID0gXCYjMzQ7Y3ljbGVzIHBlciBydW5cJiMzNDssXG4mIzQzO1x0XHQucmF0aW9fbXVsID0gMS4wLFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0lOU1RSVUNUSU9OU10gPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7aW5zdHJ1Y3Rpb25zXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSxcbiBcdFx0XHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMsXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4tXHRcdC5yYXRpb19tZXRyaWMgPSAxLFxuJiM0MztcdFx0LnJhdGlvX21ldHJpYyA9IE1FVFJJQ19DWUNMRVMsXG4gXHRcdC5yYXRpb19kZXNjID0gXCYjMzQ7aW5zbnMgcGVyIGN5Y2xlXCYjMzQ7LFxuIFx0XHQucmF0aW9fbXVsID0gMS4wLFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0wxRF9MT0FEU10gPSB7XG4gXHRcdC5uYW1lID0gXCYjMzQ7bDFkX2xvYWRzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTAyLDggJiM0MzsyMTE3LDkgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSxcbiBcdH0sXG4tXHR7XG4mIzQzO1x0W01FVFJJQ19MTENfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcJiMzNDtsbGNfbWlzc2VzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTEzLDExICYjNDM7MjEyOSwxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xuIFx0XHRcdFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMVxuIFx0XHR9LFxuLVx0XHQucmF0aW9fbWV0cmljID0gMixcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwmIzM0O0xMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcJiMzNDssXG4gXHRcdC5yYXRpb19tdWwgPSAxZTYsXG4gXHR9LFxuLVx0e1xuJiM0MztcdFtNRVRSSUNfSVRMQl9NSVNTRVNdID0ge1xuIFx0XHQubmFtZSA9IFwmIzM0O2l0bGJfbWlzc2VzXCYjMzQ7LFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTI3LDExICYjNDM7MjE0MywxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xuIFx0XHRcdFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgXHUwMDNjXHUwMDNjIDE2KSxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMVxuIFx0XHR9LFxuLVx0XHQucmF0aW9fbWV0cmljID0gMixcbiYjNDM7XHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwmIzM0O2l0bGIgbWlzc2VzIHBlciBtaWxsaW9uIGluc25zXCYjMzQ7LFxuIFx0XHQucmF0aW9fbXVsID0gMWU2LFxuIFx0fSxcbi1cdHtcbiYjNDM7XHRbTUVUUklDX0RUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcJiMzNDtkdGxiX21pc3Nlc1wmIzM0OyxcbiBcdFx0LmF0dHIgPSB7XG4gXHRcdFx0LnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsXG5AQCAtMjE0MSwxMyAmIzQzOzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4mIzQzO1x0XHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcbiBcdFx0LnJhdGlvX2Rlc2MgPSBcJiMzNDtkdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1wmIzM0OyxcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4gfTtcbiBcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcbiYjNDM7c3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7XG4gXG4gI2RlZmluZSBNQVhfTlVNX1BST0ZJTEVfTUVUUklDUyA0XG4gXG5AQCAtMjE4Miw5ICYjNDM7MjE5OSwzOSBAQCBzdGF0aWMgaW50IHByb2ZpbGVfcGFyc2VfbWV0cmljcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRyZXR1cm4gc2VsZWN0ZWRfY250O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiYjNDM7LypcbiYjNDM7ICogRmlsdGVyIG91dCBDUFVzIHRoYXQgaGF2ZSBhbnkgc2VsZWN0ZWQgbWV0cmljIG5vdCBzY2hlZHVsZWQgZm9yIHRoZW0uIFRoaXMgbWFrZXMgc3VyZSBhbGxcbiYjNDM7ICogbWV0cmljcyBhcmUgdXNpbmcgdGhlIHNhbWUgQ1BVIHNldCwgYXMgYSByZXN1bHQgcmF0aW8gbWV0cmljcyBhcmUgY29uc2lzdGVudC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHByb2ZpbGVfZmlsdGVyX2NwdXMoX191MzIgbnVtX2NwdSxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sXG4mIzQzO1x0XHRcdFx0X191NjQgKmNvdW50cylcbiYjNDM7e1xuJiM0MztcdF9fdTMyIG0sIGNwdSwga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChjcHUgPSAwOyBjcHUgXHUwMDNjIG51bV9jcHU7IGNwdSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQ1BVIGhhcyBoaXRzLCBidXQgdGhpcyBtZXRyaWMgbmV2ZXIgc2NoZWR1bGVkLCBzZXQgY291bnRzW2NwdV0gdG8gMFxuJiM0MztcdFx0XHQgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b29cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChjb3VudHNbY3B1XSBcdTAwMjZcdTAwMjYgIXZhbHNba2V5XVtjcHVdLnJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0XHRwX2luZm8oXCYjMzQ7JXMgbm90IHNjaGVkdWxlZCBvbiBDUFUgJXU7IGV4Y2x1ZGluZyAlbGx1IHJ1bnMgZnJvbSBhbGwgbWV0cmljc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbWV0cmljc1ttXS5uYW1lLCBjcHUsIGNvdW50c1tjcHVdKTtcbiYjNDM7XHRcdFx0XHRjb3VudHNbY3B1XSA9IDA7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtleSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxuIHtcbiBcdF9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai1cdTAwM2Vyb2RhdGEtXHUwMDNlbnVtX2NwdTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDtcbiBcdGludCByZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkO1xuIFx0X191NjQgY291bnRzW251bV9jcHVdO1xuIFx0X191MzIga2V5ID0gMDtcbkBAIC0yMTk0LDM4ICYjNDM7MjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcdGNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai1cdTAwM2VtYXBzLmNvdW50cyk7XG4gXHRpZiAocmVhZGluZ19tYXBfZmQgXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFx1MDAzYyAwKSB7XG4gXHRcdHBfZXJyKFwmIzM0O2ZhaWxlZCB0byBnZXQgZmQgZm9yIG1hcFwmIzM0Oyk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBtaW4ocmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZCk7XG4gXHR9XG4gXG4gXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgXHUwMDI2a2V5LCBjb3VudHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwX2VycihcJiMzNDtmYWlsZWQgdG8gcmVhZCBjb3VudF9tYXA6ICVzXCYjMzQ7LCBzdHJlcnJvcihlcnJubykpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXNba2V5XSk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHBfZXJyKFwmIzM0O2ZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtleSYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRwcm9maWxlX3RvdGFsX2NvdW50ID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KVxuIFx0XHRwcm9maWxlX3RvdGFsX2NvdW50ICYjNDM7PSBjb3VudHNbY3B1XTtcbiBcbiYjNDM7XHRwcm9maWxlX2ZpbHRlcl9jcHVzKG51bV9jcHUsIHZhbHVlcywgY291bnRzKTtcbiYjNDM7XG4mIzQzO1x0cHJvZmlsZV92YWxpZF9jb3VudCA9IDA7XG4mIzQzO1x0Zm9yIChjcHUgPSAwOyBjcHUgXHUwMDNjIG51bV9jcHU7IGNwdSYjNDM7JiM0MzspXG4mIzQzO1x0XHRwcm9maWxlX3ZhbGlkX2NvdW50ICYjNDM7PSBjb3VudHNbY3B1XTtcbiYjNDM7XG4mIzQzO1x0a2V5ID0gMDtcbiBcdGZvciAobSA9IDA7IG0gXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07XG4mIzQzO1x0XHRkb3VibGUgc2NhbGU7XG4gXG4gXHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXMpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0cF9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXCYjMzQ7LFxuLVx0XHRcdCAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4gXHRcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KSB7XG4tXHRcdFx0bWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsdWVzW2NwdV0uY291bnRlcjtcbi1cdFx0XHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICYjNDM7PSB2YWx1ZXNbY3B1XS5lbmFibGVkO1xuLVx0XHRcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgJiM0Mzs9IHZhbHVlc1tjcHVdLnJ1bm5pbmc7XG4mIzQzO1x0XHRcdC8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovXG4mIzQzO1x0XHRcdGlmICghY291bnRzW2NwdV0pXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgPSBcdTAwMjZ2YWx1ZXNba2V5XVtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdFx0bWV0cmljc1ttXS52YWwuZW5hYmxlZCAmIzQzOz0gdmFsLVx1MDAzZWVuYWJsZWQ7XG4mIzQzO1x0XHRcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgJiM0Mzs9IHZhbC1cdTAwM2VydW5uaW5nO1xuJiM0MztcdFx0XHRtZXRyaWNzW21dLnZhbC5jb3VudGVyICYjNDM7PSB2YWwtXHUwMDNlY291bnRlcjtcbiYjNDM7XHRcdFx0LyogU2NhbGUgY291bnRlciB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuICovXG4mIzQzO1x0XHRcdHNjYWxlID0gKGRvdWJsZSl2YWwtXHUwMDNlZW5hYmxlZCAvIHZhbC1cdTAwM2VydW5uaW5nO1xuJiM0MztcdFx0XHRtZXRyaWNzW21dLnNjYWxlZF92YWwgJiM0Mzs9IHZhbC1cdTAwM2Vjb3VudGVyICogc2NhbGU7XG4gXHRcdH1cbiBcdFx0a2V5JiM0MzsmIzQzOztcbiBcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXG5AQCAtMjIzOSw5ICYjNDM7MjMwOSwxMSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcdFx0anNvbndfc3RhcnRfb2JqZWN0KGpzb25fd3RyKTtcbiBcdFx0anNvbndfc3RyaW5nX2ZpZWxkKGpzb25fd3RyLCBcJiMzNDttZXRyaWNcJiMzNDssIG1ldHJpY3NbbV0ubmFtZSk7XG4gXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCYjMzQ7cnVuX2NudFwmIzM0OywgcHJvZmlsZV90b3RhbF9jb3VudCk7XG4mIzQzO1x0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwmIzM0O3J1bl9jbnRfdmFsaWRcJiMzNDssIHByb2ZpbGVfdmFsaWRfY291bnQpO1xuIFx0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwmIzM0O3ZhbHVlXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5jb3VudGVyKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcJiMzNDtlbmFibGVkXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5lbmFibGVkKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcJiMzNDtydW5uaW5nXCYjMzQ7LCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTtcbiYjNDM7XHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCYjMzQ7dmFsdWVfc2NhbGVkXCYjMzQ7LCBtZXRyaWNzW21dLnNjYWxlZF92YWwpO1xuIFxuIFx0XHRqc29ud19lbmRfb2JqZWN0KGpzb25fd3RyKTtcbiBcdH1cbkBAIC0yMjUwLDI0ICYjNDM7MjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXG4ge1xuLVx0X191MzIgbTtcbiYjNDM7XHRfX3UzMiBpO1xuIFxuIFx0cHJpbnRmKFwmIzM0O1xcbiUxOGxsdSAlLTIwc1xcblwmIzM0OywgcHJvZmlsZV90b3RhbF9jb3VudCwgXCYjMzQ7cnVuX2NudFwmIzM0Oyk7XG4tXHRmb3IgKG0gPSAwOyBtIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnZhbCA9IFx1MDAyNm1ldHJpY3NbbV0udmFsO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMgKm0gPSBcdTAwMjZtZXRyaWNzW2ldO1xuJiM0MztcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcdTAwMjZtLVx1MDAzZXZhbDtcbiBcdFx0aW50IHI7XG4mIzQzO1x0XHRfX3U2NCByYXRpbztcbiBcbi1cdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuJiM0MztcdFx0aWYgKCFtLVx1MDAzZXNlbGVjdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRwcmludGYoXCYjMzQ7JTE4bGx1ICUtMjBzXCYjMzQ7LCB2YWwtXHUwMDNlY291bnRlciwgbWV0cmljc1ttXS5uYW1lKTtcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslMThsbHUgJS0yMHNcJiMzNDssIG0tXHUwMDNlc2NhbGVkX3ZhbCwgbS1cdTAwM2VuYW1lKTtcbiBcbi1cdFx0ciA9IG1ldHJpY3NbbV0ucmF0aW9fbWV0cmljIC0gMTtcbi1cdFx0aWYgKHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBtZXRyaWNzW3JdLnNlbGVjdGVkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWV0cmljc1tyXS52YWwuY291bnRlciBcdTAwM2UgMCkge1xuJiM0MztcdFx0ciA9IG0tXHUwMDNlcmF0aW9fbWV0cmljO1xuJiM0MztcdFx0c3dpdGNoIChyKSB7XG4mIzQzO1x0XHRjYXNlIE1FVFJJQ19SVU5fQ05UOlxuJiM0MztcdFx0XHRyYXRpbyA9IHByb2ZpbGVfdmFsaWRfY291bnQ7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBNRVRSSUNfTk9ORTpcbiYjNDM7XHRcdFx0cmF0aW8gPSAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJhdGlvID0gbWV0cmljc1tyXS5zY2FsZWRfdmFsO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJhdGlvKSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyMgJTguMmYgJS0zMHNcJiMzNDssXG4tXHRcdFx0ICAgICAgIHZhbC1cdTAwM2Vjb3VudGVyICogbWV0cmljc1ttXS5yYXRpb19tdWwgL1xuLVx0XHRcdCAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLFxuLVx0XHRcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xuJiM0MztcdFx0XHQgICAgICAgbS1cdTAwM2VzY2FsZWRfdmFsICogbS1cdTAwM2VyYXRpb19tdWwgLyByYXRpbyxcbiYjNDM7XHRcdFx0ICAgICAgIG0tXHUwMDNlcmF0aW9fZGVzYyk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0cHJpbnRmKFwmIzM0OyUtNDFzXCYjMzQ7LCBcJiMzNDtcJiMzNDspO1xuIFx0XHR9XG5AQCAtMjQyMyw5ICYjNDM7MjUwNSwxMiBAQCBzdGF0aWMgaW50IHByb2ZpbGVfb3Blbl9wZXJmX2V2ZW50cyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9hbmRfY2xlYW51cCh2b2lkKVxuIHtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHByb2ZpbGVfY2xvc2VfcGVyZl9ldmVudHMocHJvZmlsZV9vYmopO1xuLVx0cHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4tXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4mIzQzO1x0ZXJyID0gcHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4gXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xuIFxuIFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbmluZGV4IGY0OGM3ODNjYjlmN2YuLjZjNjU0YmQ5YjM0NmYgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbkBAIC0xMCw2ICYjNDM7MTAsMTEgQEAgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwge1xuIFx0X191NjQgcnVubmluZztcbiB9IF9fYXR0cmlidXRlX18oKHByZXNlcnZlX2FjY2Vzc19pbmRleCkpO1xuIFxuJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcbiYjNDM7XHRib29sIGFybWVkO1xuJiM0Mzt9O1xuJiM0MztcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcbkBAIC0yMSw3ICYjNDM7MjYsNyBAQCBzdHJ1Y3Qge1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZih1MzIpKTtcbi1cdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwpKTtcbiYjNDM7XHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwcm9maWxlX3JlYWRpbmcpKTtcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuIFxuIC8qIGFjY3VtdWxhdGVkIHJlYWRpbmdzICovXG5AQCAtNDUsNyAmIzQzOzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7XG4gU0VDKFwmIzM0O2ZlbnRyeS9YWFhcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKnB0cnNbTUFYX05VTV9NRVRSSUNTXTtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHJzW01BWF9OVU1fTUVUUklDU107XG4gXHR1MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4gXHR1MzIgaTtcbiBcbkBAIC01Niw2ICYjNDM7NjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdFx0cHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZmbGFnKTtcbiBcdFx0aWYgKCFwdHJzW2ldKVxuIFx0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cHRyc1tpXS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX21ldHJpYyBcdTAwMjZcdTAwMjYgaSBcdTAwM2MgTUFYX05VTV9NRVRSSUNTOyBpJiM0MzsmIzQzOykge1xuQEAgLTY2LDcgJiM0Mzs3Miw4IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIFx0XHRcdFx0XHRcdHNpemVvZihyZWFkaW5nKSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIDA7XG4tXHRcdCoocHRyc1tpXSkgPSByZWFkaW5nO1xuJiM0MztcdFx0cHRyc1tpXS1cdTAwM2V2YWx1ZSA9IHJlYWRpbmc7XG4mIzQzO1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gdHJ1ZTtcbiBcdFx0a2V5ICYjNDM7PSBudW1fY3B1O1xuIFx0fVxuIFxuQEAgLTc2LDE2ICYjNDM7ODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gc3RhdGljIGlubGluZSB2b2lkXG4gZmV4aXRfdXBkYXRlX21hcHModTMyIGlkLCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYWZ0ZXIpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmJlZm9yZSwgZGlmZjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4mIzQzO1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgZGlmZjtcbiBcbiBcdGJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZpZCk7XG4gXHQvKiBvbmx5IGFjY291bnQgc2FtcGxlcyB3aXRoIGEgdmFsaWQgZmVudHJ5X3JlYWRpbmcgKi9cbi1cdGlmIChiZWZvcmUgXHUwMDI2XHUwMDI2IGJlZm9yZS1cdTAwM2Vjb3VudGVyKSB7XG4mIzQzO1x0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWFybWVkKSB7XG4gXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICphY2N1bTtcbiBcbi1cdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2Vjb3VudGVyO1xuLVx0XHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cdTAwM2VlbmFibGVkIC0gYmVmb3JlLVx1MDAzZWVuYWJsZWQ7XG4tXHRcdGRpZmYucnVubmluZyA9IGFmdGVyLVx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXHUwMDNlcnVubmluZztcbiYjNDM7XHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuJiM0MztcdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5jb3VudGVyO1xuJiM0MztcdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5lbmFibGVkO1xuJiM0MztcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdFx0aWYgKGFjY3VtKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG5pbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNcbkBAIC00LDYgJiM0Mzs0LDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuIFxuJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XG4mIzQzO1x0Ym9vbCBhcm1lZDtcbiYjNDM7fTtcbiYjNDM7XG4gLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7XG5AQCAtMTUsNyAmIzQzOzIwLDcgQEAgc3RydWN0IHtcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJDUFVfQVJSQVkpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoX191MzIpKTtcbi1cdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7XG4mIzQzO1x0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuIH0gZmVudHJ5X3JlYWRpbmdzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG5AQCAtMzMsNyAmIzQzOzM4LDcgQEAgU0VDKFwmIzM0O2ZlbnRyeS9YWFhcJiMzNDspXG4gaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4ge1xuIFx0X191MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnB0cjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHI7XG4gXHRfX3UzMiB6ZXJvID0gMDtcbiBcdGxvbmcgZXJyO1xuIFxuQEAgLTQyLDkgJiM0Mzs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcbiYjNDM7XHRwdHItXHUwMDNlYXJtZWQgPSBmYWxzZTtcbiYjNDM7XHRlcnIgPSBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlKFx1MDAyNmV2ZW50cywga2V5LCBcdTAwMjZwdHItXHUwMDNldmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRzaXplb2YocHRyLVx1MDAzZXZhbHVlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRwdHItXHUwMDNlYXJtZWQgPSB0cnVlO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUyLDE3ICYjNDM7NjAsMTkgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gc3RhdGljIGlubGluZSB2b2lkXG4gZmV4aXRfdXBkYXRlX21hcHMoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphZnRlcilcbiB7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKmJlZm9yZSwgZGlmZjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4mIzQzO1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7XG4gXHRfX3UzMiB6ZXJvID0gMDtcbiBcbiBcdGJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZ6ZXJvKTtcbiBcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xuLVx0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWNvdW50ZXIpIHtcbiYjNDM7XHRpZiAoYmVmb3JlIFx1MDAyNlx1MDAyNiBiZWZvcmUtXHUwMDNlYXJtZWQpIHtcbiBcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTtcbiBcbi1cdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2Vjb3VudGVyO1xuLVx0XHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cdTAwM2VlbmFibGVkIC0gYmVmb3JlLVx1MDAzZWVuYWJsZWQ7XG4tXHRcdGRpZmYucnVubmluZyA9IGFmdGVyLVx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXHUwMDNlcnVubmluZztcbiYjNDM7XHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuJiM0MztcdFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXHUwMDNlY291bnRlciAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5jb3VudGVyO1xuJiM0MztcdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5lbmFibGVkO1xuJiM0MztcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0XHRpZiAoYWNjdW0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgdG9vbHMgYW5kIGRvY3VtZW50YXRpb24gdW5kZXIgdG9vbHMvIChicGZ0b29sIGFuZCBwZXJmIHByb2cgcHJvZmlsZXIgc2tlbGV0b25zKS4gTm8ga2VybmVsIHNvdXJjZSBmaWxlcyBvciBrZXJuZWwgbW9kdWxlcyBhZmZlY3Rpbmcgdm1saW51eCBhcmUgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGFjY2UxOGNjYjJlZWYxYTM0ODdmOTk4OTE2YWRhOTExYzYxYjg5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QKaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDQKLS0tIGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdApAQCAtMjE3LDcgJiM0MzsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3QKIGJwZnRvb2wgcHJvZyBwcm9maWxlICpQUk9HKiBbZHVyYXRpb24gKkRVUkFUSU9OKl0gKk1FVFJJQ3MqCiAgICAgUHJvZmlsZSAqTUVUUklDcyogZm9yIGJwZiBwcm9ncmFtICpQUk9HKiBmb3IgKkRVUkFUSU9OKiBzZWNvbmRzIG9yIHVudGlsCiAgICAgdXNlciBoaXRzICZsdDtDdHJsJiM0MztDJmd0Oy4gKkRVUkFUSU9OKiBpcyBvcHRpb25hbC4gSWYgKkRVUkFUSU9OKiBpcyBub3Qgc3BlY2lmaWVkLAotICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuCiYjNDM7ICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuIFBsYWluIG91dHB1dCBzY2FsZXMgZWFjaAomIzQzOyAgICBwZXItQ1BVIG1ldHJpYyB2YWx1ZSB0byBjb3JyZWN0IGZvciBwZXJmIGV2ZW50IG11bHRpcGxleGluZy4gV2hlbgomIzQzOyAgICAqKmN5Y2xlcyoqIGlzIHNlbGVjdGVkLCBpdCBhbHNvIHJlcG9ydHMgY3ljbGVzIHBlciBpbmNsdWRlZCBwcm9ncmFtIHJ1bi4gSWYKJiM0MzsgICAgYSBzZWxlY3RlZCBtZXRyaWMgd2FzIG5vdCBzY2hlZHVsZWQgb24gYSBDUFUsIGFsbCBtZXRyaWMgdmFsdWVzIGV4Y2x1ZGUKJiM0MzsgICAgdGhhdCBDUFUgc28gdGhhdCByYXRpb3MgdXNlIGEgY29uc2lzdGVudCBDUFUgc2V0LiBUaGUgKipydW5fY250KiogdmFsdWUKJiM0MzsgICAgc3RpbGwgaW5jbHVkZXMgYWxsIHJlY29yZGVkIHJ1bnMuCiYjNDM7CiYjNDM7ICAgIEluIEpTT04gb3V0cHV0LCAqKnZhbHVlKiogaXMgcmF3LCAqKnZhbHVlX3NjYWxlZCoqIGlzIHNjYWxlZCwgKipydW5fY250KioKJiM0MzsgICAgaW5jbHVkZXMgYWxsIHJ1bnMsIGFuZCAqKnJ1bl9jbnRfdmFsaWQqKiBpbmNsdWRlcyBvbmx5IHJ1bnMgdXNlZCBmb3IgbWV0cmljCiYjNDM7ICAgIHZhbHVlcy4KIAogYnBmdG9vbCBwcm9nIGhlbHAKICAgICBQcmludCBzaG9ydCBoZWxwIG1lc3NhZ2UuCkBAIC0zNjAsNyAmIzQzOzM2OSw3IEBAIEVYQU1QTEVTCiA6OgogCiAgICAgICAgICA1MTM5NyBydW5fY250Ci0gICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgzLjA1JSkKJiM0MzsgICAgICA0MDE3NjIwMyBjeWNsZXMgICAgICAgICAgIyA3ODEuNjggY3ljbGVzIHBlciBydW4gICAgICAgICAgICAgICAgKDgzLjA1JSkKICAgICAgIDQyNTE4MTM5IGluc3RydWN0aW9ucyAgICAjICAgMS4wNiBpbnNucyBwZXIgY3ljbGUgICAgICAgICAgICAgICAoODMuMzklKQogICAgICAgICAgICAxMjMgbGxjX21pc3NlcyAgICAgICMgICAyLjg5IExMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMgICg4My4xNSUpCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYwppbmRleCA4YzJmOTI1NWIzNmQ3Li45ZTEyNmYzODIzYWQzIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jCkBAIC0yMDYyLDM3ICYjNDM7MjA2Miw1MiBAQCBzdGF0aWMgaW50IGRvX3Byb2ZpbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAjaW5jbHVkZSAmIzM0O3Byb2ZpbGVyLnNrZWwuaCYjMzQ7CiAKJiM0MztlbnVtIHJhdGlvX21ldHJpYyB7CiYjNDM7CU1FVFJJQ19OT05FID0gLTIsCiYjNDM7CU1FVFJJQ19SVU5fQ05UID0gLTEsCiYjNDM7CU1FVFJJQ19DWUNMRVMgPSAwLAomIzQzOwlNRVRSSUNfSU5TVFJVQ1RJT05TID0gMSwKJiM0MzsJTUVUUklDX0wxRF9MT0FEUyA9IDIsCiYjNDM7CU1FVFJJQ19MTENfTUlTU0VTID0gMywKJiM0MzsJTUVUUklDX0lUTEJfTUlTU0VTID0gNCwKJiM0MzsJTUVUUklDX0RUTEJfTUlTU0VTID0gNSwKJiM0Mzt9OwomIzQzOwogc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWw7CiYjNDM7CV9fdTY0IHNjYWxlZF92YWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCWJvb2wgc2VsZWN0ZWQ7CiAKIAkvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqLwotCWNvbnN0IGludCByYXRpb19tZXRyaWM7IC8qIDAgZm9yIE4vQSwgMSBmb3IgaW5kZXggMCAoY3ljbGVzKSAqLwomIzQzOwljb25zdCBlbnVtIHJhdGlvX21ldHJpYyByYXRpb19tZXRyaWM7CiAJY29uc3QgY2hhciAqcmF0aW9fZGVzYzsKIAljb25zdCBmbG9hdCByYXRpb19tdWw7CiB9IG1ldHJpY3NbXSA9IHsKLQl7CiYjNDM7CVtNRVRSSUNfQ1lDTEVTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2N5Y2xlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLAogCQkJLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUywKIAkJCS5leGNsdWRlX3VzZXIgPSAxLAogCQl9LAomIzQzOwkJLnJhdGlvX21ldHJpYyA9IE1FVFJJQ19SVU5fQ05ULAomIzQzOwkJLnJhdGlvX2Rlc2MgPSAmIzM0O2N5Y2xlcyBwZXIgcnVuJiMzNDssCiYjNDM7CQkucmF0aW9fbXVsID0gMS4wLAogCX0sCi0JewomIzQzOwlbTUVUUklDX0lOU1RSVUNUSU9OU10gPSB7CiAJCS5uYW1lID0gJiMzNDtpbnN0cnVjdGlvbnMmIzM0OywKIAkJLmF0dHIgPSB7CiAJCQkudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwKIAkJCS5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUywKIAkJCS5leGNsdWRlX3VzZXIgPSAxLAogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMSwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfQ1lDTEVTLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7aW5zbnMgcGVyIGN5Y2xlJiMzNDssCiAJCS5yYXRpb19tdWwgPSAxLjAsCiAJfSwKLQl7CiYjNDM7CVtNRVRSSUNfTDFEX0xPQURTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2wxZF9sb2FkcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjEwMiw4ICYjNDM7MjExNyw5IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7CiAJCQkJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMSwKIAkJfSwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19MTENfTUlTU0VTXSA9IHsKIAkJLm5hbWUgPSAmIzM0O2xsY19taXNzZXMmIzM0OywKIAkJLmF0dHIgPSB7CiAJCQkudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKQEAgLTIxMTMsMTEgJiM0MzsyMTI5LDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7CiAJCQkJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgJmx0OyZsdDsgMTYpLAogCQkJLmV4Y2x1ZGVfdXNlciA9IDEKIAkJfSwKLQkJLnJhdGlvX21ldHJpYyA9IDIsCiYjNDM7CQkucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUywKIAkJLnJhdGlvX2Rlc2MgPSAmIzM0O0xMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19JVExCX01JU1NFU10gPSB7CiAJCS5uYW1lID0gJiMzNDtpdGxiX21pc3NlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjEyNywxMSAmIzQzOzIxNDMsMTEgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAkJCQkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMQogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMiwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7aXRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAotCXsKJiM0MzsJW01FVFJJQ19EVExCX01JU1NFU10gPSB7CiAJCS5uYW1lID0gJiMzNDtkdGxiX21pc3NlcyYjMzQ7LAogCQkuYXR0ciA9IHsKIAkJCS50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLApAQCAtMjE0MSwxMyAmIzQzOzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHsKIAkJCQkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyAmbHQ7Jmx0OyAxNiksCiAJCQkuZXhjbHVkZV91c2VyID0gMQogCQl9LAotCQkucmF0aW9fbWV0cmljID0gMiwKJiM0MzsJCS5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLAogCQkucmF0aW9fZGVzYyA9ICYjMzQ7ZHRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMmIzM0OywKIAkJLnJhdGlvX211bCA9IDFlNiwKIAl9LAogfTsKIAogc3RhdGljIF9fdTY0IHByb2ZpbGVfdG90YWxfY291bnQ7CiYjNDM7c3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7CiAKICNkZWZpbmUgTUFYX05VTV9QUk9GSUxFX01FVFJJQ1MgNAogCkBAIC0yMTgyLDkgJiM0MzsyMTk5LDM5IEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9wYXJzZV9tZXRyaWNzKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlyZXR1cm4gc2VsZWN0ZWRfY250OwogfQogCi1zdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iaikKJiM0MzsvKgomIzQzOyAqIEZpbHRlciBvdXQgQ1BVcyB0aGF0IGhhdmUgYW55IHNlbGVjdGVkIG1ldHJpYyBub3Qgc2NoZWR1bGVkIGZvciB0aGVtLiBUaGlzIG1ha2VzIHN1cmUgYWxsCiYjNDM7ICogbWV0cmljcyBhcmUgdXNpbmcgdGhlIHNhbWUgQ1BVIHNldCwgYXMgYSByZXN1bHQgcmF0aW8gbWV0cmljcyBhcmUgY29uc2lzdGVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBwcm9maWxlX2ZpbHRlcl9jcHVzKF9fdTMyIG51bV9jcHUsCiYjNDM7CQkJCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWxzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwKJiM0MzsJCQkJX191NjQgKmNvdW50cykKJiM0Mzt7CiYjNDM7CV9fdTMyIG0sIGNwdSwga2V5ID0gMDsKJiM0MzsKJiM0MzsJZm9yIChtID0gMDsgbSAmbHQ7IEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IG51bV9jcHU7IGNwdSYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIENQVSBoYXMgaGl0cywgYnV0IHRoaXMgbWV0cmljIG5ldmVyIHNjaGVkdWxlZCwgc2V0IGNvdW50c1tjcHVdIHRvIDAKJiM0MzsJCQkgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b28KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoY291bnRzW2NwdV0gJmFtcDsmYW1wOyAhdmFsc1trZXldW2NwdV0ucnVubmluZykgewomIzQzOwkJCQlwX2luZm8oJiMzNDslcyBub3Qgc2NoZWR1bGVkIG9uIENQVSAldTsgZXhjbHVkaW5nICVsbHUgcnVucyBmcm9tIGFsbCBtZXRyaWNzJiMzNDssCiYjNDM7CQkJCSAgICAgICBtZXRyaWNzW21dLm5hbWUsIGNwdSwgY291bnRzW2NwdV0pOwomIzQzOwkJCQljb3VudHNbY3B1XSA9IDA7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJa2V5JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKQogewogCV9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai0mZ3Q7cm9kYXRhLSZndDtudW1fY3B1OwomIzQzOwlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDsKIAlpbnQgcmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZDsKIAlfX3U2NCBjb3VudHNbbnVtX2NwdV07CiAJX191MzIga2V5ID0gMDsKQEAgLTIxOTQsMzggJiM0MzsyMjQxLDYxIEBAIHN0YXRpYyB2b2lkIHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKQogCWNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai0mZ3Q7bWFwcy5jb3VudHMpOwogCWlmIChyZWFkaW5nX21hcF9mZCAmbHQ7IDAgfHwgY291bnRfbWFwX2ZkICZsdDsgMCkgewogCQlwX2VycigmIzM0O2ZhaWxlZCB0byBnZXQgZmQgZm9yIG1hcCYjMzQ7KTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIG1pbihyZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkKTsKIAl9CiAKIAllcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgJmFtcDtrZXksIGNvdW50cyk7CiAJaWYgKGVycikgewogCQlwX2VycigmIzM0O2ZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG0gPSAwOyBtICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbWV0cmljc1ttXS5zZWxlY3RlZCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0ocmVhZGluZ19tYXBfZmQsICZhbXA7a2V5LCB2YWx1ZXNba2V5XSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJcF9lcnIoJiMzNDtmYWlsZWQgdG8gcmVhZCByZWFkaW5nX21hcDogJXMmIzM0Oywgc3RyZXJyb3IoZXJybm8pKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwkJa2V5JiM0MzsmIzQzOzsKIAl9CiAKIAlwcm9maWxlX3RvdGFsX2NvdW50ID0gMDsKIAlmb3IgKGNwdSA9IDA7IGNwdSAmbHQ7IG51bV9jcHU7IGNwdSYjNDM7JiM0MzspCiAJCXByb2ZpbGVfdG90YWxfY291bnQgJiM0Mzs9IGNvdW50c1tjcHVdOwogCiYjNDM7CXByb2ZpbGVfZmlsdGVyX2NwdXMobnVtX2NwdSwgdmFsdWVzLCBjb3VudHMpOwomIzQzOwomIzQzOwlwcm9maWxlX3ZhbGlkX2NvdW50ID0gMDsKJiM0MzsJZm9yIChjcHUgPSAwOyBjcHUgJmx0OyBudW1fY3B1OyBjcHUmIzQzOyYjNDM7KQomIzQzOwkJcHJvZmlsZV92YWxpZF9jb3VudCAmIzQzOz0gY291bnRzW2NwdV07CiYjNDM7CiYjNDM7CWtleSA9IDA7CiAJZm9yIChtID0gMDsgbSAmbHQ7IEFSUkFZX1NJWkUobWV0cmljcyk7IG0mIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07CiYjNDM7CQlkb3VibGUgc2NhbGU7CiAKIAkJaWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgJmFtcDtrZXksIHZhbHVlcyk7Ci0JCWlmIChlcnIpIHsKLQkJCXBfZXJyKCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzJiMzNDssCi0JCQkgICAgICBzdHJlcnJvcihlcnJubykpOwotCQkJcmV0dXJuOwotCQl9CiAJCWZvciAoY3B1ID0gMDsgY3B1ICZsdDsgbnVtX2NwdTsgY3B1JiM0MzsmIzQzOykgewotCQkJbWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsdWVzW2NwdV0uY291bnRlcjsKLQkJCW1ldHJpY3NbbV0udmFsLmVuYWJsZWQgJiM0Mzs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7Ci0JCQltZXRyaWNzW21dLnZhbC5ydW5uaW5nICYjNDM7PSB2YWx1ZXNbY3B1XS5ydW5uaW5nOwomIzQzOwkJCS8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovCiYjNDM7CQkJaWYgKCFjb3VudHNbY3B1XSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsID0gJmFtcDt2YWx1ZXNba2V5XVtjcHVdOwomIzQzOwomIzQzOwkJCW1ldHJpY3NbbV0udmFsLmVuYWJsZWQgJiM0Mzs9IHZhbC0mZ3Q7ZW5hYmxlZDsKJiM0MzsJCQltZXRyaWNzW21dLnZhbC5ydW5uaW5nICYjNDM7PSB2YWwtJmd0O3J1bm5pbmc7CiYjNDM7CQkJbWV0cmljc1ttXS52YWwuY291bnRlciAmIzQzOz0gdmFsLSZndDtjb3VudGVyOwomIzQzOwkJCS8qIFNjYWxlIGNvdW50ZXIgdmFsdWVzIHRvIGFjY291bnQgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiAqLwomIzQzOwkJCXNjYWxlID0gKGRvdWJsZSl2YWwtJmd0O2VuYWJsZWQgLyB2YWwtJmd0O3J1bm5pbmc7CiYjNDM7CQkJbWV0cmljc1ttXS5zY2FsZWRfdmFsICYjNDM7PSB2YWwtJmd0O2NvdW50ZXIgKiBzY2FsZTsKIAkJfQogCQlrZXkmIzQzOyYjNDM7OwogCX0KJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKQpAQCAtMjIzOSw5ICYjNDM7MjMwOSwxMSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZCkKIAkJanNvbndfc3RhcnRfb2JqZWN0KGpzb25fd3RyKTsKIAkJanNvbndfc3RyaW5nX2ZpZWxkKGpzb25fd3RyLCAmIzM0O21ldHJpYyYjMzQ7LCBtZXRyaWNzW21dLm5hbWUpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7cnVuX2NudCYjMzQ7LCBwcm9maWxlX3RvdGFsX2NvdW50KTsKJiM0MzsJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDtydW5fY250X3ZhbGlkJiMzNDssIHByb2ZpbGVfdmFsaWRfY291bnQpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7dmFsdWUmIzM0OywgbWV0cmljc1ttXS52YWwuY291bnRlcik7CiAJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDtlbmFibGVkJiMzNDssIG1ldHJpY3NbbV0udmFsLmVuYWJsZWQpOwogCQlqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsICYjMzQ7cnVubmluZyYjMzQ7LCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTsKJiM0MzsJCWpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgJiMzNDt2YWx1ZV9zY2FsZWQmIzM0OywgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTsKIAogCQlqc29ud19lbmRfb2JqZWN0KGpzb25fd3RyKTsKIAl9CkBAIC0yMjUwLDI0ICYjNDM7MjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZCkKIAogc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19wbGFpbih2b2lkKQogewotCV9fdTMyIG07CiYjNDM7CV9fdTMyIGk7CiAKIAlwcmludGYoJiMzNDtcbiUxOGxsdSAlLTIwc1xuJiMzNDssIHByb2ZpbGVfdG90YWxfY291bnQsICYjMzQ7cnVuX2NudCYjMzQ7KTsKLQlmb3IgKG0gPSAwOyBtICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgbSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSAmYW1wO21ldHJpY3NbbV0udmFsOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShtZXRyaWNzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwcm9maWxlX21ldHJpYyAqbSA9ICZhbXA7bWV0cmljc1tpXTsKJiM0MzsJCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gJmFtcDttLSZndDt2YWw7CiAJCWludCByOwomIzQzOwkJX191NjQgcmF0aW87CiAKLQkJaWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKQomIzQzOwkJaWYgKCFtLSZndDtzZWxlY3RlZCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGYoJiMzNDslMThsbHUgJS0yMHMmIzM0OywgdmFsLSZndDtjb3VudGVyLCBtZXRyaWNzW21dLm5hbWUpOwomIzQzOwkJcHJpbnRmKCYjMzQ7JTE4bGx1ICUtMjBzJiMzNDssIG0tJmd0O3NjYWxlZF92YWwsIG0tJmd0O25hbWUpOwogCi0JCXIgPSBtZXRyaWNzW21dLnJhdGlvX21ldHJpYyAtIDE7Ci0JCWlmIChyICZndDs9IDAgJmFtcDsmYW1wOyBtZXRyaWNzW3JdLnNlbGVjdGVkICZhbXA7JmFtcDsKLQkJICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIgJmd0OyAwKSB7CiYjNDM7CQlyID0gbS0mZ3Q7cmF0aW9fbWV0cmljOwomIzQzOwkJc3dpdGNoIChyKSB7CiYjNDM7CQljYXNlIE1FVFJJQ19SVU5fQ05UOgomIzQzOwkJCXJhdGlvID0gcHJvZmlsZV92YWxpZF9jb3VudDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgTUVUUklDX05PTkU6CiYjNDM7CQkJcmF0aW8gPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyYXRpbykgewogCQkJcHJpbnRmKCYjMzQ7IyAlOC4yZiAlLTMwcyYjMzQ7LAotCQkJICAgICAgIHZhbC0mZ3Q7Y291bnRlciAqIG1ldHJpY3NbbV0ucmF0aW9fbXVsIC8KLQkJCSAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLAotCQkJICAgICAgIG1ldHJpY3NbbV0ucmF0aW9fZGVzYyk7CiYjNDM7CQkJICAgICAgIG0tJmd0O3NjYWxlZF92YWwgKiBtLSZndDtyYXRpb19tdWwgLyByYXRpbywKJiM0MzsJCQkgICAgICAgbS0mZ3Q7cmF0aW9fZGVzYyk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGYoJiMzNDslLTQxcyYjMzQ7LCAmIzM0OyYjMzQ7KTsKIAkJfQpAQCAtMjQyMyw5ICYjNDM7MjUwNSwxMiBAQCBzdGF0aWMgaW50IHByb2ZpbGVfb3Blbl9wZXJmX2V2ZW50cyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopCiAKIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfYW5kX2NsZWFudXAodm9pZCkKIHsKJiM0MzsJaW50IGVycjsKJiM0MzsKIAlwcm9maWxlX2Nsb3NlX3BlcmZfZXZlbnRzKHByb2ZpbGVfb2JqKTsKLQlwcm9maWxlX3JlYWRfdmFsdWVzKHByb2ZpbGVfb2JqKTsKLQlwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7CiYjNDM7CWVyciA9IHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopOwomIzQzOwlpZiAoIWVycikKJiM0MzsJCXByb2ZpbGVfcHJpbnRfcmVhZGluZ3MoKTsKIAlwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopOwogCiAJY2xvc2UocHJvZmlsZV90Z3RfZmQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmMgYi90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwppbmRleCBmNDhjNzgzY2I5ZjdmLi42YzY1NGJkOWIzNDZmIDEwMDY0NAotLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYwpAQCAtMTAsNiAmIzQzOzEwLDExIEBAIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIHsKIAlfX3U2NCBydW5uaW5nOwogfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTsKIAomIzQzO3N0cnVjdCBwcm9maWxlX3JlYWRpbmcgewomIzQzOwlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTsKJiM0MzsJYm9vbCBhcm1lZDsKJiM0Mzt9OwomIzQzOwogLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovCiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7CkBAIC0yMSw3ICYjNDM7MjYsNyBAQCBzdHJ1Y3Qgewogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YodTMyKSk7Ci0JX191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCkpOwomIzQzOwlfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwcm9maWxlX3JlYWRpbmcpKTsKIH0gZmVudHJ5X3JlYWRpbmdzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwogCiAvKiBhY2N1bXVsYXRlZCByZWFkaW5ncyAqLwpAQCAtNDUsNyAmIzQzOzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7CiBTRUMoJiMzNDtmZW50cnkvWFhYJiMzNDspCiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIHsKLQlzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdOwomIzQzOwlzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpwdHJzW01BWF9OVU1fTUVUUklDU107CiAJdTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXUzMiBpOwogCkBAIC01Niw2ICYjNDM7NjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIAkJcHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtmZW50cnlfcmVhZGluZ3MsICZhbXA7ZmxhZyk7CiAJCWlmICghcHRyc1tpXSkKIAkJCXJldHVybiAwOwomIzQzOwkJcHRyc1tpXS0mZ3Q7YXJtZWQgPSBmYWxzZTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX21ldHJpYyAmYW1wOyZhbXA7IGkgJmx0OyBNQVhfTlVNX01FVFJJQ1M7IGkmIzQzOyYjNDM7KSB7CkBAIC02Niw3ICYjNDM7NzIsOCBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWCkKIAkJCQkJCXNpemVvZihyZWFkaW5nKSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gMDsKLQkJKihwdHJzW2ldKSA9IHJlYWRpbmc7CiYjNDM7CQlwdHJzW2ldLSZndDt2YWx1ZSA9IHJlYWRpbmc7CiYjNDM7CQlwdHJzW2ldLSZndDthcm1lZCA9IHRydWU7CiAJCWtleSAmIzQzOz0gbnVtX2NwdTsKIAl9CiAKQEAgLTc2LDE2ICYjNDM7ODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZleGl0X3VwZGF0ZV9tYXBzKHUzMiBpZCwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFmdGVyKQogewotCXN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpiZWZvcmUsIGRpZmY7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgZGlmZjsKIAogCWJlZm9yZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtmZW50cnlfcmVhZGluZ3MsICZhbXA7aWQpOwogCS8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqLwotCWlmIChiZWZvcmUgJmFtcDsmYW1wOyBiZWZvcmUtJmd0O2NvdW50ZXIpIHsKJiM0MzsJaWYgKGJlZm9yZSAmYW1wOyZhbXA7IGJlZm9yZS0mZ3Q7YXJtZWQpIHsKIAkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFjY3VtOwogCi0JCWRpZmYuY291bnRlciA9IGFmdGVyLSZndDtjb3VudGVyIC0gYmVmb3JlLSZndDtjb3VudGVyOwotCQlkaWZmLmVuYWJsZWQgPSBhZnRlci0mZ3Q7ZW5hYmxlZCAtIGJlZm9yZS0mZ3Q7ZW5hYmxlZDsKLQkJZGlmZi5ydW5uaW5nID0gYWZ0ZXItJmd0O3J1bm5pbmcgLSBiZWZvcmUtJmd0O3J1bm5pbmc7CiYjNDM7CQliZWZvcmUtJmd0O2FybWVkID0gZmFsc2U7CiYjNDM7CQlkaWZmLmNvdW50ZXIgPSBhZnRlci0mZ3Q7Y291bnRlciAtIGJlZm9yZS0mZ3Q7dmFsdWUuY291bnRlcjsKJiM0MzsJCWRpZmYuZW5hYmxlZCA9IGFmdGVyLSZndDtlbmFibGVkIC0gYmVmb3JlLSZndDt2YWx1ZS5lbmFibGVkOwomIzQzOwkJZGlmZi5ydW5uaW5nID0gYWZ0ZXItJmd0O3J1bm5pbmcgLSBiZWZvcmUtJmd0O3ZhbHVlLnJ1bm5pbmc7CiAKIAkJYWNjdW0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7YWNjdW1fcmVhZGluZ3MsICZhbXA7aWQpOwogCQlpZiAoYWNjdW0pIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYwppbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jCkBAIC00LDYgJiM0Mzs0LDExIEBACiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiAKJiM0MztzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nIHsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHVlOwomIzQzOwlib29sIGFybWVkOwomIzQzO307CiYjNDM7CiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi8KIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTsKQEAgLTE1LDcgJiM0MzsyMCw3IEBAIHN0cnVjdCB7CiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTsKIAlfX3VpbnQoa2V5X3NpemUsIHNpemVvZihfX3UzMikpOwotCV9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7CiYjNDM7CV9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpOwogCV9fdWludChtYXhfZW50cmllcywgMSk7CiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIApAQCAtMzMsNyAmIzQzOzM4LDcgQEAgU0VDKCYjMzQ7ZmVudHJ5L1hYWCYjMzQ7KQogaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiB7CiAJX191MzIga2V5ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpwdHI7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKnB0cjsKIAlfX3UzMiB6ZXJvID0gMDsKIAlsb25nIGVycjsKIApAQCAtNDIsOSAmIzQzOzQ3LDEyIEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKQogCWlmICghcHRyKQogCQlyZXR1cm4gMDsKIAotCWVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoJmFtcDtldmVudHMsIGtleSwgcHRyLCBzaXplb2YoKnB0cikpOwomIzQzOwlwdHItJmd0O2FybWVkID0gZmFsc2U7CiYjNDM7CWVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoJmFtcDtldmVudHMsIGtleSwgJmFtcDtwdHItJmd0O3ZhbHVlLAomIzQzOwkJCQkJc2l6ZW9mKHB0ci0mZ3Q7dmFsdWUpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gMDsKJiM0MzsJcHRyLSZndDthcm1lZCA9IHRydWU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyLDE3ICYjNDM7NjAsMTkgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpCiBzdGF0aWMgaW5saW5lIHZvaWQKIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpCiB7Ci0Jc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7CiYjNDM7CXN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTsKJiM0MzsJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7CiAJX191MzIgemVybyA9IDA7CiAKIAliZWZvcmUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7ZmVudHJ5X3JlYWRpbmdzLCAmYW1wO3plcm8pOwogCS8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqLwotCWlmIChiZWZvcmUgJmFtcDsmYW1wOyBiZWZvcmUtJmd0O2NvdW50ZXIpIHsKJiM0MzsJaWYgKGJlZm9yZSAmYW1wOyZhbXA7IGJlZm9yZS0mZ3Q7YXJtZWQpIHsKIAkJc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTsKIAotCQlkaWZmLmNvdW50ZXIgPSBhZnRlci0mZ3Q7Y291bnRlciAtIGJlZm9yZS0mZ3Q7Y291bnRlcjsKLQkJZGlmZi5lbmFibGVkID0gYWZ0ZXItJmd0O2VuYWJsZWQgLSBiZWZvcmUtJmd0O2VuYWJsZWQ7Ci0JCWRpZmYucnVubmluZyA9IGFmdGVyLSZndDtydW5uaW5nIC0gYmVmb3JlLSZndDtydW5uaW5nOwomIzQzOwkJYmVmb3JlLSZndDthcm1lZCA9IGZhbHNlOwomIzQzOwkJZGlmZi5jb3VudGVyID0gYWZ0ZXItJmd0O2NvdW50ZXIgLSBiZWZvcmUtJmd0O3ZhbHVlLmNvdW50ZXI7CiYjNDM7CQlkaWZmLmVuYWJsZWQgPSBhZnRlci0mZ3Q7ZW5hYmxlZCAtIGJlZm9yZS0mZ3Q7dmFsdWUuZW5hYmxlZDsKJiM0MzsJCWRpZmYucnVubmluZyA9IGFmdGVyLSZndDtydW5uaW5nIC0gYmVmb3JlLSZndDt2YWx1ZS5ydW5uaW5nOwogCiAJCWFjY3VtID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO2FjY3VtX3JlYWRpbmdzLCAmYW1wO3plcm8pOwogCQlpZiAoYWNjdW0pIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxNwoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDUyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTm9uLUtlcm5lbCBJbXBhY3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgLCBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jYCwgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgLiBBbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sYCBhbmQgYHRvb2xzL3BlcmZgLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIHVzdWFsIGNyaXRlcmlhIOKAkyBzZWN0aW9uIDIgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6eiDigJMgYW55IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNwZWxsaW5nIGZpeGVzLCBvciB1c2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBsaWtlIGB0b29scy9gLCBzYW1wbGVzLywgc2NyaXB0cy8sIGV0Yy4sIHRoYXQgKmRvbiYjMzk7dCogaW1wYWN0IGB2bWxpbnV4YCBvciBrZXJuZWwgbW9kdWxlcywgZG9uJiMzOTt0IHdhcnJhbnQgZnV6emluZy4KCkxvb2tpbmcgYXQgdGhlc2UgZmlsZXMgc3BlY2lmaWNhbGx5OiBgdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0YCBpcyBkb2N1bWVudGF0aW9uLiBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCBpcyB0aGUgdXNlci1zcGFjZSBgYnBmdG9vbGAgdXRpbGl0eS4gVGhlIG90aGVyIHR3byBgdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNgIGFuZCBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jYCBhcmUgQlBGIHNrZWxldG9uIHByb2dyYW1zICpmb3IqIHRoZXNlIHVzZXItc3BhY2UgdG9vbHMuIFRoZXkmIzM5O3JlIG5vdCBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuCgpJJiMzOTttIGNvbmZpZGVudCB0aGVzZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byB1c2VyLXNwYWNlIHRvb2xzLiBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGtlcm5lbCBjb2RlIGlzbiYjMzk7dCBpbmRpcmVjdGx5IG1vZGlmaWVkLiBBIHF1aWNrIGBncmVwYCBvciBmaWxlIGluc3BlY3Rpb24gc2hvdWxkIGNvbmZpcm0gdGhpcyBpcyB0aGUgY2FzZS4gQnV0LCBnaXZlbiB0aGUgZmlsZSBwYXRocywgSSBkb24mIzM5O3QgZXhwZWN0IHRvIGZpbmQgYW55dGhpbmcga2VybmVsLXJlbGF0ZWQuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW1wYWN0IGtlcm5lbCBpbWFnZSBvciBrZXJuZWwgbW9kdWxlcy4gU28sIG5vIGZ1enppbmcgbmVlZGVkLiBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gTm8gYEVuYWJsZUNvbmZpZ3NgIG9yIGBGb2N1c1N5bWJvbHNgIGFyZSByZXF1aXJlZC4gVGhlIHJhdGlvbmFsZSBpcyB0aGUgcGF0Y2ggaXMgY29uZmluZWQgdG8gdXNlcnNwYWNlIGB0b29sc2AgKGJwZnRvb2wgYW5kIHBlcmYpIHdoaWNoIGFyZSB1c2VyLXNwYWNlIHRvb2xzLCBhbG9uZyB3aXRoIHRoZWlyIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgc2tlbGV0b24gY29kZS4gQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTk6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjA3MjY1ODE1NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQwMzI5ODQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgb25seSB1c2VyLXNwYWNlIHRvb2xzIGFuZCBkb2N1bWVudGF0aW9uIHVuZGVyIHRvb2xzLyAoYnBmdG9vbCBhbmQgcGVyZiBwcm9nIHByb2ZpbGVyIHNrZWxldG9ucykuIE5vIGtlcm5lbCBzb3VyY2UgZmlsZXMgb3Iga2VybmVsIG1vZHVsZXMgYWZmZWN0aW5nIHZtbGludXggYXJlIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTk6MDg6MDMuMDcyNjY0MzU0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjM4ODEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YWNjZTE4Y2NiMmVlZjFhMzQ4N2Y5OTg5MTZhZGE5MTFjNjFiODlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0IGIvdG9vbHMvYnBmL2JwZnRvb2wvRG9jdW1lbnRhdGlvbi9icGZ0b29sLXByb2cucnN0XFxuaW5kZXggOTBmYTJhNDhjYzI2YS4uMDEwOGExYzhiZTRkYiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcXG4rKysgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcXG5AQCAtMjE3LDcgKzIxNywxNiBAQCBicGZ0b29sIHByb2cgcnVuICpQUk9HKiBkYXRhX2luICpGSUxFKiBbZGF0YV9vdXQgKkZJTEUqIFtkYXRhX3NpemVfb3V0ICpMKl1dIFtjdFxcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxcbiAgICAgUHJvZmlsZSAqTUVUUklDcyogZm9yIGJwZiBwcm9ncmFtICpQUk9HKiBmb3IgKkRVUkFUSU9OKiBzZWNvbmRzIG9yIHVudGlsXFxuICAgICB1c2VyIGhpdHMgXFx1MDAzY0N0cmwrQ1xcdTAwM2UuICpEVVJBVElPTiogaXMgb3B0aW9uYWwuIElmICpEVVJBVElPTiogaXMgbm90IHNwZWNpZmllZCxcXG4tICAgIHRoZSBwcm9maWxpbmcgd2lsbCBydW4gdXAgdG8gKipVSU5UX01BWCoqIHNlY29uZHMuXFxuKyAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLiBQbGFpbiBvdXRwdXQgc2NhbGVzIGVhY2hcXG4rICAgIHBlci1DUFUgbWV0cmljIHZhbHVlIHRvIGNvcnJlY3QgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiBXaGVuXFxuKyAgICAqKmN5Y2xlcyoqIGlzIHNlbGVjdGVkLCBpdCBhbHNvIHJlcG9ydHMgY3ljbGVzIHBlciBpbmNsdWRlZCBwcm9ncmFtIHJ1bi4gSWZcXG4rICAgIGEgc2VsZWN0ZWQgbWV0cmljIHdhcyBub3Qgc2NoZWR1bGVkIG9uIGEgQ1BVLCBhbGwgbWV0cmljIHZhbHVlcyBleGNsdWRlXFxuKyAgICB0aGF0IENQVSBzbyB0aGF0IHJhdGlvcyB1c2UgYSBjb25zaXN0ZW50IENQVSBzZXQuIFRoZSAqKnJ1bl9jbnQqKiB2YWx1ZVxcbisgICAgc3RpbGwgaW5jbHVkZXMgYWxsIHJlY29yZGVkIHJ1bnMuXFxuK1xcbisgICAgSW4gSlNPTiBvdXRwdXQsICoqdmFsdWUqKiBpcyByYXcsICoqdmFsdWVfc2NhbGVkKiogaXMgc2NhbGVkLCAqKnJ1bl9jbnQqKlxcbisgICAgaW5jbHVkZXMgYWxsIHJ1bnMsIGFuZCAqKnJ1bl9jbnRfdmFsaWQqKiBpbmNsdWRlcyBvbmx5IHJ1bnMgdXNlZCBmb3IgbWV0cmljXFxuKyAgICB2YWx1ZXMuXFxuIFxcbiBicGZ0b29sIHByb2cgaGVscFxcbiAgICAgUHJpbnQgc2hvcnQgaGVscCBtZXNzYWdlLlxcbkBAIC0zNjAsNyArMzY5LDcgQEAgRVhBTVBMRVNcXG4gOjpcXG4gXFxuICAgICAgICAgIDUxMzk3IHJ1bl9jbnRcXG4tICAgICAgNDAxNzYyMDMgY3ljbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg4My4wNSUpXFxuKyAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAjIDc4MS42OCBjeWNsZXMgcGVyIHJ1biAgICAgICAgICAgICAgICAoODMuMDUlKVxcbiAgICAgICA0MjUxODEzOSBpbnN0cnVjdGlvbnMgICAgIyAgIDEuMDYgaW5zbnMgcGVyIGN5Y2xlICAgICAgICAgICAgICAgKDgzLjM5JSlcXG4gICAgICAgICAgICAxMjMgbGxjX21pc3NlcyAgICAgICMgICAyLjg5IExMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnMgICg4My4xNSUpXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9wcm9nLmMgYi90b29scy9icGYvYnBmdG9vbC9wcm9nLmNcXG5pbmRleCA4YzJmOTI1NWIzNmQ3Li45ZTEyNmYzODIzYWQzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xcbkBAIC0yMDYyLDM3ICsyMDYyLDUyIEBAIHN0YXRpYyBpbnQgZG9fcHJvZmlsZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcbiAjaW5jbHVkZSBcXFwicHJvZmlsZXIuc2tlbC5oXFxcIlxcbiBcXG4rZW51bSByYXRpb19tZXRyaWMge1xcbitcXHRNRVRSSUNfTk9ORSA9IC0yLFxcbitcXHRNRVRSSUNfUlVOX0NOVCA9IC0xLFxcbitcXHRNRVRSSUNfQ1lDTEVTID0gMCxcXG4rXFx0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXFxuK1xcdE1FVFJJQ19MMURfTE9BRFMgPSAyLFxcbitcXHRNRVRSSUNfTExDX01JU1NFUyA9IDMsXFxuK1xcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXFxuK1xcdE1FVFJJQ19EVExCX01JU1NFUyA9IDUsXFxuK307XFxuK1xcbiBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xcbiBcXHRjb25zdCBjaGFyICpuYW1lO1xcbiBcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xcbitcXHRfX3U2NCBzY2FsZWRfdmFsO1xcbiBcXHRzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7XFxuIFxcdGJvb2wgc2VsZWN0ZWQ7XFxuIFxcbiBcXHQvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqL1xcbi1cXHRjb25zdCBpbnQgcmF0aW9fbWV0cmljOyAvKiAwIGZvciBOL0EsIDEgZm9yIGluZGV4IDAgKGN5Y2xlcykgKi9cXG4rXFx0Y29uc3QgZW51bSByYXRpb19tZXRyaWMgcmF0aW9fbWV0cmljO1xcbiBcXHRjb25zdCBjaGFyICpyYXRpb19kZXNjO1xcbiBcXHRjb25zdCBmbG9hdCByYXRpb19tdWw7XFxuIH0gbWV0cmljc1tdID0ge1xcbi1cXHR7XFxuK1xcdFtNRVRSSUNfQ1lDTEVTXSA9IHtcXG4gXFx0XFx0Lm5hbWUgPSBcXFwiY3ljbGVzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbiBcXHRcXHRcXHQuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxcbiBcXHRcXHRcXHQuZXhjbHVkZV91c2VyID0gMSxcXG4gXFx0XFx0fSxcXG4rXFx0XFx0LnJhdGlvX21ldHJpYyA9IE1FVFJJQ19SVU5fQ05ULFxcbitcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJjeWNsZXMgcGVyIHJ1blxcXCIsXFxuK1xcdFxcdC5yYXRpb19tdWwgPSAxLjAsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19JTlNUUlVDVElPTlNdID0ge1xcbiBcXHRcXHQubmFtZSA9IFxcXCJpbnN0cnVjdGlvbnNcXFwiLFxcbiBcXHRcXHQuYXR0ciA9IHtcXG4gXFx0XFx0XFx0LnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsXFxuIFxcdFxcdFxcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDEsXFxuIFxcdFxcdH0sXFxuLVxcdFxcdC5yYXRpb19tZXRyaWMgPSAxLFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX0NZQ0xFUyxcXG4gXFx0XFx0LnJhdGlvX2Rlc2MgPSBcXFwiaW5zbnMgcGVyIGN5Y2xlXFxcIixcXG4gXFx0XFx0LnJhdGlvX211bCA9IDEuMCxcXG4gXFx0fSxcXG4tXFx0e1xcbitcXHRbTUVUUklDX0wxRF9MT0FEU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcImwxZF9sb2Fkc1xcXCIsXFxuIFxcdFxcdC5hdHRyID0ge1xcbiBcXHRcXHRcXHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcXG5AQCAtMjEwMiw4ICsyMTE3LDkgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcXG4gXFx0XFx0XFx0XFx0KFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUyBcXHUwMDNjXFx1MDAzYyAxNiksXFxuIFxcdFxcdFxcdC5leGNsdWRlX3VzZXIgPSAxLFxcbiBcXHRcXHR9LFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX05PTkUsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19MTENfTUlTU0VTXSA9IHtcXG4gXFx0XFx0Lm5hbWUgPSBcXFwibGxjX21pc3Nlc1xcXCIsXFxuIFxcdFxcdC5hdHRyID0ge1xcbiBcXHRcXHRcXHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcXG5AQCAtMjExMywxMSArMjEyOSwxMSBAQCBzdHJ1Y3QgcHJvZmlsZV9tZXRyaWMge1xcbiBcXHRcXHRcXHRcXHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyBcXHUwMDNjXFx1MDAzYyAxNiksXFxuIFxcdFxcdFxcdC5leGNsdWRlX3VzZXIgPSAxXFxuIFxcdFxcdH0sXFxuLVxcdFxcdC5yYXRpb19tZXRyaWMgPSAyLFxcbitcXHRcXHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcXG4gXFx0XFx0LnJhdGlvX2Rlc2MgPSBcXFwiTExDIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19JVExCX01JU1NFU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcIml0bGJfbWlzc2VzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxcbkBAIC0yMTI3LDExICsyMTQzLDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XFxuIFxcdFxcdFxcdFxcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDFcXG4gXFx0XFx0fSxcXG4tXFx0XFx0LnJhdGlvX21ldHJpYyA9IDIsXFxuK1xcdFxcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxcbiBcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJpdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuLVxcdHtcXG4rXFx0W01FVFJJQ19EVExCX01JU1NFU10gPSB7XFxuIFxcdFxcdC5uYW1lID0gXFxcImR0bGJfbWlzc2VzXFxcIixcXG4gXFx0XFx0LmF0dHIgPSB7XFxuIFxcdFxcdFxcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxcbkBAIC0yMTQxLDEzICsyMTU3LDE0IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XFxuIFxcdFxcdFxcdFxcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFxcdTAwM2NcXHUwMDNjIDE2KSxcXG4gXFx0XFx0XFx0LmV4Y2x1ZGVfdXNlciA9IDFcXG4gXFx0XFx0fSxcXG4tXFx0XFx0LnJhdGlvX21ldHJpYyA9IDIsXFxuK1xcdFxcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxcbiBcXHRcXHQucmF0aW9fZGVzYyA9IFxcXCJkdGxiIG1pc3NlcyBwZXIgbWlsbGlvbiBpbnNuc1xcXCIsXFxuIFxcdFxcdC5yYXRpb19tdWwgPSAxZTYsXFxuIFxcdH0sXFxuIH07XFxuIFxcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcXG4rc3RhdGljIF9fdTY0IHByb2ZpbGVfdmFsaWRfY291bnQ7XFxuIFxcbiAjZGVmaW5lIE1BWF9OVU1fUFJPRklMRV9NRVRSSUNTIDRcXG4gXFxuQEAgLTIxODIsOSArMjE5OSwzOSBAQCBzdGF0aWMgaW50IHByb2ZpbGVfcGFyc2VfbWV0cmljcyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdHJldHVybiBzZWxlY3RlZF9jbnQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxcbisvKlxcbisgKiBGaWx0ZXIgb3V0IENQVXMgdGhhdCBoYXZlIGFueSBzZWxlY3RlZCBtZXRyaWMgbm90IHNjaGVkdWxlZCBmb3IgdGhlbS4gVGhpcyBtYWtlcyBzdXJlIGFsbFxcbisgKiBtZXRyaWNzIGFyZSB1c2luZyB0aGUgc2FtZSBDUFUgc2V0LCBhcyBhIHJlc3VsdCByYXRpbyBtZXRyaWNzIGFyZSBjb25zaXN0ZW50LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcHJvZmlsZV9maWx0ZXJfY3B1cyhfX3UzMiBudW1fY3B1LFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sXFxuK1xcdFxcdFxcdFxcdF9fdTY0ICpjb3VudHMpXFxuK3tcXG4rXFx0X191MzIgbSwgY3B1LCBrZXkgPSAwO1xcbitcXG4rXFx0Zm9yIChtID0gMDsgbSBcXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0rKykge1xcbitcXHRcXHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Zm9yIChjcHUgPSAwOyBjcHUgXFx1MDAzYyBudW1fY3B1OyBjcHUrKykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBDUFUgaGFzIGhpdHMsIGJ1dCB0aGlzIG1ldHJpYyBuZXZlciBzY2hlZHVsZWQsIHNldCBjb3VudHNbY3B1XSB0byAwXFxuK1xcdFxcdFxcdCAqIHNvIG90aGVyIG1ldHJpY3MgaWdub3JlIHRoaXMgQ1BVIHRvb1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGNvdW50c1tjcHVdIFxcdTAwMjZcXHUwMDI2ICF2YWxzW2tleV1bY3B1XS5ydW5uaW5nKSB7XFxuK1xcdFxcdFxcdFxcdHBfaW5mbyhcXFwiJXMgbm90IHNjaGVkdWxlZCBvbiBDUFUgJXU7IGV4Y2x1ZGluZyAlbGx1IHJ1bnMgZnJvbSBhbGwgbWV0cmljc1xcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBtZXRyaWNzW21dLm5hbWUsIGNwdSwgY291bnRzW2NwdV0pO1xcbitcXHRcXHRcXHRcXHRjb3VudHNbY3B1XSA9IDA7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRrZXkrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHByb2ZpbGVfcmVhZF92YWx1ZXMoc3RydWN0IHByb2ZpbGVyX2JwZiAqb2JqKVxcbiB7XFxuIFxcdF9fdTMyIG0sIGNwdSwgbnVtX2NwdSA9IG9iai1cXHUwMDNlcm9kYXRhLVxcdTAwM2VudW1fY3B1O1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW01BWF9OVU1fUFJPRklMRV9NRVRSSUNTXVtudW1fY3B1XSwgKnZhbDtcXG4gXFx0aW50IHJlYWRpbmdfbWFwX2ZkLCBjb3VudF9tYXBfZmQ7XFxuIFxcdF9fdTY0IGNvdW50c1tudW1fY3B1XTtcXG4gXFx0X191MzIga2V5ID0gMDtcXG5AQCAtMjE5NCwzOCArMjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcXG4gXFx0Y291bnRfbWFwX2ZkID0gYnBmX21hcF9fZmQob2JqLVxcdTAwM2VtYXBzLmNvdW50cyk7XFxuIFxcdGlmIChyZWFkaW5nX21hcF9mZCBcXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIGdldCBmZCBmb3IgbWFwXFxcIik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIG1pbihyZWFkaW5nX21hcF9mZCwgY291bnRfbWFwX2ZkKTtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShjb3VudF9tYXBfZmQsIFxcdTAwMjZrZXksIGNvdW50cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cF9lcnIoXFxcImZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXNcXFwiLCBzdHJlcnJvcihlcnJubykpO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAobSA9IDA7IG0gXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcXG4rXFx0XFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IGJwZl9tYXBfbG9va3VwX2VsZW0ocmVhZGluZ19tYXBfZmQsIFxcdTAwMjZrZXksIHZhbHVlc1trZXldKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXFxcIiwgc3RyZXJyb3IoZXJybm8pKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHRcXHRrZXkrKztcXG4gXFx0fVxcbiBcXG4gXFx0cHJvZmlsZV90b3RhbF9jb3VudCA9IDA7XFxuIFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgbnVtX2NwdTsgY3B1KyspXFxuIFxcdFxcdHByb2ZpbGVfdG90YWxfY291bnQgKz0gY291bnRzW2NwdV07XFxuIFxcbitcXHRwcm9maWxlX2ZpbHRlcl9jcHVzKG51bV9jcHUsIHZhbHVlcywgY291bnRzKTtcXG4rXFxuK1xcdHByb2ZpbGVfdmFsaWRfY291bnQgPSAwO1xcbitcXHRmb3IgKGNwdSA9IDA7IGNwdSBcXHUwMDNjIG51bV9jcHU7IGNwdSsrKVxcbitcXHRcXHRwcm9maWxlX3ZhbGlkX2NvdW50ICs9IGNvdW50c1tjcHVdO1xcbitcXG4rXFx0a2V5ID0gMDtcXG4gXFx0Zm9yIChtID0gMDsgbSBcXHUwMDNjIEFSUkFZX1NJWkUobWV0cmljcyk7IG0rKykge1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWVzW251bV9jcHVdO1xcbitcXHRcXHRkb3VibGUgc2NhbGU7XFxuIFxcbiBcXHRcXHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXFx1MDAyNmtleSwgdmFsdWVzKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRwX2VycihcXFwiZmFpbGVkIHRvIHJlYWQgcmVhZGluZ19tYXA6ICVzXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgc3RyZXJyb3IoZXJybm8pKTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuIFxcdFxcdGZvciAoY3B1ID0gMDsgY3B1IFxcdTAwM2MgbnVtX2NwdTsgY3B1KyspIHtcXG4tXFx0XFx0XFx0bWV0cmljc1ttXS52YWwuY291bnRlciArPSB2YWx1ZXNbY3B1XS5jb3VudGVyO1xcbi1cXHRcXHRcXHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7XFxuLVxcdFxcdFxcdG1ldHJpY3NbbV0udmFsLnJ1bm5pbmcgKz0gdmFsdWVzW2NwdV0ucnVubmluZztcXG4rXFx0XFx0XFx0LyogU2tpcCBDUFVzIHdpdGggbm8gcnVucyBvciB3aXRoIGFuIHVuc2NoZWR1bGVkIG1ldHJpYy4gKi9cXG4rXFx0XFx0XFx0aWYgKCFjb3VudHNbY3B1XSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgPSBcXHUwMDI2dmFsdWVzW2tleV1bY3B1XTtcXG4rXFxuK1xcdFxcdFxcdG1ldHJpY3NbbV0udmFsLmVuYWJsZWQgKz0gdmFsLVxcdTAwM2VlbmFibGVkO1xcbitcXHRcXHRcXHRtZXRyaWNzW21dLnZhbC5ydW5uaW5nICs9IHZhbC1cXHUwMDNlcnVubmluZztcXG4rXFx0XFx0XFx0bWV0cmljc1ttXS52YWwuY291bnRlciArPSB2YWwtXFx1MDAzZWNvdW50ZXI7XFxuK1xcdFxcdFxcdC8qIFNjYWxlIGNvdW50ZXIgdmFsdWVzIHRvIGFjY291bnQgZm9yIHBlcmYgZXZlbnQgbXVsdGlwbGV4aW5nLiAqL1xcbitcXHRcXHRcXHRzY2FsZSA9IChkb3VibGUpdmFsLVxcdTAwM2VlbmFibGVkIC8gdmFsLVxcdTAwM2VydW5uaW5nO1xcbitcXHRcXHRcXHRtZXRyaWNzW21dLnNjYWxlZF92YWwgKz0gdmFsLVxcdTAwM2Vjb3VudGVyICogc2NhbGU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a2V5Kys7XFxuIFxcdH1cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKVxcbkBAIC0yMjM5LDkgKzIzMDksMTEgQEAgc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXFxuIFxcdFxcdGpzb253X3N0YXJ0X29iamVjdChqc29uX3d0cik7XFxuIFxcdFxcdGpzb253X3N0cmluZ19maWVsZChqc29uX3d0ciwgXFxcIm1ldHJpY1xcXCIsIG1ldHJpY3NbbV0ubmFtZSk7XFxuIFxcdFxcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXFxcInJ1bl9jbnRcXFwiLCBwcm9maWxlX3RvdGFsX2NvdW50KTtcXG4rXFx0XFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcXFwicnVuX2NudF92YWxpZFxcXCIsIHByb2ZpbGVfdmFsaWRfY291bnQpO1xcbiBcXHRcXHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFxcXCJ2YWx1ZVxcXCIsIG1ldHJpY3NbbV0udmFsLmNvdW50ZXIpO1xcbiBcXHRcXHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFxcXCJlbmFibGVkXFxcIiwgbWV0cmljc1ttXS52YWwuZW5hYmxlZCk7XFxuIFxcdFxcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXFxcInJ1bm5pbmdcXFwiLCBtZXRyaWNzW21dLnZhbC5ydW5uaW5nKTtcXG4rXFx0XFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcXFwidmFsdWVfc2NhbGVkXFxcIiwgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTtcXG4gXFxuIFxcdFxcdGpzb253X2VuZF9vYmplY3QoanNvbl93dHIpO1xcbiBcXHR9XFxuQEAgLTIyNTAsMjQgKzIzMjIsMzQgQEAgc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXFxuIHtcXG4tXFx0X191MzIgbTtcXG4rXFx0X191MzIgaTtcXG4gXFxuIFxcdHByaW50ZihcXFwiXFxcXG4lMThsbHUgJS0yMHNcXFxcblxcXCIsIHByb2ZpbGVfdG90YWxfY291bnQsIFxcXCJydW5fY250XFxcIik7XFxuLVxcdGZvciAobSA9IDA7IG0gXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcXG4tXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcXHUwMDI2bWV0cmljc1ttXS52YWw7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHByb2ZpbGVfbWV0cmljICptID0gXFx1MDAyNm1ldHJpY3NbaV07XFxuK1xcdFxcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gXFx1MDAyNm0tXFx1MDAzZXZhbDtcXG4gXFx0XFx0aW50IHI7XFxuK1xcdFxcdF9fdTY0IHJhdGlvO1xcbiBcXG4tXFx0XFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxcbitcXHRcXHRpZiAoIW0tXFx1MDAzZXNlbGVjdGVkKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0cHJpbnRmKFxcXCIlMThsbHUgJS0yMHNcXFwiLCB2YWwtXFx1MDAzZWNvdW50ZXIsIG1ldHJpY3NbbV0ubmFtZSk7XFxuK1xcdFxcdHByaW50ZihcXFwiJTE4bGx1ICUtMjBzXFxcIiwgbS1cXHUwMDNlc2NhbGVkX3ZhbCwgbS1cXHUwMDNlbmFtZSk7XFxuIFxcbi1cXHRcXHRyID0gbWV0cmljc1ttXS5yYXRpb19tZXRyaWMgLSAxO1xcbi1cXHRcXHRpZiAociBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG1ldHJpY3Nbcl0uc2VsZWN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHIgPSBtLVxcdTAwM2VyYXRpb19tZXRyaWM7XFxuK1xcdFxcdHN3aXRjaCAocikge1xcbitcXHRcXHRjYXNlIE1FVFJJQ19SVU5fQ05UOlxcbitcXHRcXHRcXHRyYXRpbyA9IHByb2ZpbGVfdmFsaWRfY291bnQ7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIE1FVFJJQ19OT05FOlxcbitcXHRcXHRcXHRyYXRpbyA9IDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmF0aW8pIHtcXG4gXFx0XFx0XFx0cHJpbnRmKFxcXCIjICU4LjJmICUtMzBzXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIHZhbC1cXHUwMDNlY291bnRlciAqIG1ldHJpY3NbbV0ucmF0aW9fbXVsIC9cXG4tXFx0XFx0XFx0ICAgICAgIG1ldHJpY3Nbcl0udmFsLmNvdW50ZXIsXFxuLVxcdFxcdFxcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xcbitcXHRcXHRcXHQgICAgICAgbS1cXHUwMDNlc2NhbGVkX3ZhbCAqIG0tXFx1MDAzZXJhdGlvX211bCAvIHJhdGlvLFxcbitcXHRcXHRcXHQgICAgICAgbS1cXHUwMDNlcmF0aW9fZGVzYyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByaW50ZihcXFwiJS00MXNcXFwiLCBcXFwiXFxcIik7XFxuIFxcdFxcdH1cXG5AQCAtMjQyMyw5ICsyNTA1LDEyIEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9vcGVuX3BlcmZfZXZlbnRzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcXG4gXFxuIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfYW5kX2NsZWFudXAodm9pZClcXG4ge1xcbitcXHRpbnQgZXJyO1xcbitcXG4gXFx0cHJvZmlsZV9jbG9zZV9wZXJmX2V2ZW50cyhwcm9maWxlX29iaik7XFxuLVxcdHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopO1xcbi1cXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XFxuK1xcdGVyciA9IHByb2ZpbGVfcmVhZF92YWx1ZXMocHJvZmlsZV9vYmopO1xcbitcXHRpZiAoIWVycilcXG4rXFx0XFx0cHJvZmlsZV9wcmludF9yZWFkaW5ncygpO1xcbiBcXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xcbiBcXG4gXFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xcbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jXFxuaW5kZXggZjQ4Yzc4M2NiOWY3Zi4uNmM2NTRiZDliMzQ2ZiAxMDA2NDRcXG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jXFxuQEAgLTEwLDYgKzEwLDExIEBAIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIHtcXG4gXFx0X191NjQgcnVubmluZztcXG4gfSBfX2F0dHJpYnV0ZV9fKChwcmVzZXJ2ZV9hY2Nlc3NfaW5kZXgpKTtcXG4gXFxuK3N0cnVjdCBwcm9maWxlX3JlYWRpbmcge1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcXG4rXFx0Ym9vbCBhcm1lZDtcXG4rfTtcXG4rXFxuIC8qIG1hcCBvZiBwZXJmIGV2ZW50IGZkcywgbnVtX2NwdSAqIG51bV9tZXRyaWMgZW50cmllcyAqL1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkZfRVZFTlRfQVJSQVkpO1xcbkBAIC0yMSw3ICsyNiw3IEBAIHN0cnVjdCB7XFxuIHN0cnVjdCB7XFxuIFxcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTtcXG4gXFx0X191aW50KGtleV9zaXplLCBzaXplb2YodTMyKSk7XFxuLVxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwpKTtcXG4rXFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XFxuIH0gZmVudHJ5X3JlYWRpbmdzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4gXFxuIC8qIGFjY3VtdWxhdGVkIHJlYWRpbmdzICovXFxuQEAgLTQ1LDcgKzUwLDcgQEAgY29uc3Qgdm9sYXRpbGUgX191MzIgbnVtX21ldHJpYyA9IDE7XFxuIFNFQyhcXFwiZmVudHJ5L1hYWFxcXCIpXFxuIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxcbiB7XFxuLVxcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpwdHJzW01BWF9OVU1fTUVUUklDU107XFxuK1xcdHN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKnB0cnNbTUFYX05VTV9NRVRSSUNTXTtcXG4gXFx0dTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbiBcXHR1MzIgaTtcXG4gXFxuQEAgLTU2LDYgKzYxLDcgQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIFxcdFxcdHB0cnNbaV0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFxcdTAwMjZmbGFnKTtcXG4gXFx0XFx0aWYgKCFwdHJzW2ldKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cHRyc1tpXS1cXHUwMDNlYXJtZWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9tZXRyaWMgXFx1MDAyNlxcdTAwMjYgaSBcXHUwMDNjIE1BWF9OVU1fTUVUUklDUzsgaSsrKSB7XFxuQEAgLTY2LDcgKzcyLDggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHNpemVvZihyZWFkaW5nKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbi1cXHRcXHQqKHB0cnNbaV0pID0gcmVhZGluZztcXG4rXFx0XFx0cHRyc1tpXS1cXHUwMDNldmFsdWUgPSByZWFkaW5nO1xcbitcXHRcXHRwdHJzW2ldLVxcdTAwM2Vhcm1lZCA9IHRydWU7XFxuIFxcdFxcdGtleSArPSBudW1fY3B1O1xcbiBcXHR9XFxuIFxcbkBAIC03NiwxNiArODMsMTggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZFxcbiBmZXhpdF91cGRhdGVfbWFwcyh1MzIgaWQsIHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICphZnRlcilcXG4ge1xcbi1cXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYmVmb3JlLCBkaWZmO1xcbitcXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XFxuK1xcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsIGRpZmY7XFxuIFxcbiBcXHRiZWZvcmUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFxcdTAwMjZpZCk7XFxuIFxcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xcbi1cXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlY291bnRlcikge1xcbitcXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlYXJtZWQpIHtcXG4gXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFjY3VtO1xcbiBcXG4tXFx0XFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXFx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXFx1MDAzZWNvdW50ZXI7XFxuLVxcdFxcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVxcdTAwM2VlbmFibGVkIC0gYmVmb3JlLVxcdTAwM2VlbmFibGVkO1xcbi1cXHRcXHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cXHUwMDNlcnVubmluZztcXG4rXFx0XFx0YmVmb3JlLVxcdTAwM2Vhcm1lZCA9IGZhbHNlO1xcbitcXHRcXHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cXHUwMDNlY291bnRlciAtIGJlZm9yZS1cXHUwMDNldmFsdWUuY291bnRlcjtcXG4rXFx0XFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXFx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXFx1MDAzZXZhbHVlLmVuYWJsZWQ7XFxuK1xcdFxcdGRpZmYucnVubmluZyA9IGFmdGVyLVxcdTAwM2VydW5uaW5nIC0gYmVmb3JlLVxcdTAwM2V2YWx1ZS5ydW5uaW5nO1xcbiBcXG4gXFx0XFx0YWNjdW0gPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZhY2N1bV9yZWFkaW5ncywgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGFjY3VtKSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9icGZfcHJvZ19wcm9maWxlci5icGYuY1xcbmluZGV4IDk3MDM3ZDNiM2Q5ZmEuLjdiYzBkYjI2ZTAwNTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXFxuQEAgLTQsNiArNCwxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFxcdTAwM2VcXG4gXFxuK3N0cnVjdCBwcm9maWxlX3JlYWRpbmcge1xcbitcXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XFxuK1xcdGJvb2wgYXJtZWQ7XFxuK307XFxuK1xcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcXG5AQCAtMTUsNyArMjAsNyBAQCBzdHJ1Y3Qge1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XFxuIFxcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKF9fdTMyKSk7XFxuLVxcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlKSk7XFxuK1xcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpO1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbkBAIC0zMyw3ICszOCw3IEBAIFNFQyhcXFwiZmVudHJ5L1hYWFxcXCIpXFxuIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxcbiB7XFxuIFxcdF9fdTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xcbi1cXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgKnB0cjtcXG4rXFx0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyO1xcbiBcXHRfX3UzMiB6ZXJvID0gMDtcXG4gXFx0bG9uZyBlcnI7XFxuIFxcbkBAIC00Miw5ICs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcXG4gXFx0aWYgKCFwdHIpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXJyID0gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZShcXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcXG4rXFx0cHRyLVxcdTAwM2Vhcm1lZCA9IGZhbHNlO1xcbitcXHRlcnIgPSBicGZfcGVyZl9ldmVudF9yZWFkX3ZhbHVlKFxcdTAwMjZldmVudHMsIGtleSwgXFx1MDAyNnB0ci1cXHUwMDNldmFsdWUsXFxuK1xcdFxcdFxcdFxcdFxcdHNpemVvZihwdHItXFx1MDAzZXZhbHVlKSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHRwdHItXFx1MDAzZWFybWVkID0gdHJ1ZTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUyLDE3ICs2MCwxOSBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcXG4gc3RhdGljIGlubGluZSB2b2lkXFxuIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpXFxuIHtcXG4tXFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7XFxuK1xcdHN0cnVjdCBwcm9maWxlX3JlYWRpbmcgKmJlZm9yZTtcXG4rXFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIGRpZmY7XFxuIFxcdF9fdTMyIHplcm8gPSAwO1xcbiBcXG4gXFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcXHUwMDI2emVybyk7XFxuIFxcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xcbi1cXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlY291bnRlcikge1xcbitcXHRpZiAoYmVmb3JlIFxcdTAwMjZcXHUwMDI2IGJlZm9yZS1cXHUwMDNlYXJtZWQpIHtcXG4gXFx0XFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICphY2N1bTtcXG4gXFxuLVxcdFxcdGRpZmYuY291bnRlciA9IGFmdGVyLVxcdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVxcdTAwM2Vjb3VudGVyO1xcbi1cXHRcXHRkaWZmLmVuYWJsZWQgPSBhZnRlci1cXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cXHUwMDNlZW5hYmxlZDtcXG4tXFx0XFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXFx1MDAzZXJ1bm5pbmcgLSBiZWZvcmUtXFx1MDAzZXJ1bm5pbmc7XFxuK1xcdFxcdGJlZm9yZS1cXHUwMDNlYXJtZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZGlmZi5jb3VudGVyID0gYWZ0ZXItXFx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXFx1MDAzZXZhbHVlLmNvdW50ZXI7XFxuK1xcdFxcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVxcdTAwM2VlbmFibGVkIC0gYmVmb3JlLVxcdTAwM2V2YWx1ZS5lbmFibGVkO1xcbitcXHRcXHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cXHUwMDNldmFsdWUucnVubmluZztcXG4gXFxuIFxcdFxcdGFjY3VtID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFxcdTAwMjZ6ZXJvKTtcXG4gXFx0XFx0aWYgKGFjY3VtKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjczNzM2NzQxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUyNzU1OTk0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGFjY2UxOGNjYjJlZWYxYTM0ODdmOTk4OTE2YWRhOTExYzYxYjg5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTk6MDg6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3QgYi90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcbmluZGV4IDkwZmEyYTQ4Y2MyNmEuLjAxMDhhMWM4YmU0ZGIgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RcbisrKyBiL3Rvb2xzL2JwZi9icGZ0b29sL0RvY3VtZW50YXRpb24vYnBmdG9vbC1wcm9nLnJzdFxuQEAgLTIxNyw3ICsyMTcsMTYgQEAgYnBmdG9vbCBwcm9nIHJ1biAqUFJPRyogZGF0YV9pbiAqRklMRSogW2RhdGFfb3V0ICpGSUxFKiBbZGF0YV9zaXplX291dCAqTCpdXSBbY3RcbiBicGZ0b29sIHByb2cgcHJvZmlsZSAqUFJPRyogW2R1cmF0aW9uICpEVVJBVElPTipdICpNRVRSSUNzKlxuICAgICBQcm9maWxlICpNRVRSSUNzKiBmb3IgYnBmIHByb2dyYW0gKlBST0cqIGZvciAqRFVSQVRJT04qIHNlY29uZHMgb3IgdW50aWxcbiAgICAgdXNlciBoaXRzIFx1MDAzY0N0cmwrQ1x1MDAzZS4gKkRVUkFUSU9OKiBpcyBvcHRpb25hbC4gSWYgKkRVUkFUSU9OKiBpcyBub3Qgc3BlY2lmaWVkLFxuLSAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLlxuKyAgICB0aGUgcHJvZmlsaW5nIHdpbGwgcnVuIHVwIHRvICoqVUlOVF9NQVgqKiBzZWNvbmRzLiBQbGFpbiBvdXRwdXQgc2NhbGVzIGVhY2hcbisgICAgcGVyLUNQVSBtZXRyaWMgdmFsdWUgdG8gY29ycmVjdCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuIFdoZW5cbisgICAgKipjeWNsZXMqKiBpcyBzZWxlY3RlZCwgaXQgYWxzbyByZXBvcnRzIGN5Y2xlcyBwZXIgaW5jbHVkZWQgcHJvZ3JhbSBydW4uIElmXG4rICAgIGEgc2VsZWN0ZWQgbWV0cmljIHdhcyBub3Qgc2NoZWR1bGVkIG9uIGEgQ1BVLCBhbGwgbWV0cmljIHZhbHVlcyBleGNsdWRlXG4rICAgIHRoYXQgQ1BVIHNvIHRoYXQgcmF0aW9zIHVzZSBhIGNvbnNpc3RlbnQgQ1BVIHNldC4gVGhlICoqcnVuX2NudCoqIHZhbHVlXG4rICAgIHN0aWxsIGluY2x1ZGVzIGFsbCByZWNvcmRlZCBydW5zLlxuK1xuKyAgICBJbiBKU09OIG91dHB1dCwgKip2YWx1ZSoqIGlzIHJhdywgKip2YWx1ZV9zY2FsZWQqKiBpcyBzY2FsZWQsICoqcnVuX2NudCoqXG4rICAgIGluY2x1ZGVzIGFsbCBydW5zLCBhbmQgKipydW5fY250X3ZhbGlkKiogaW5jbHVkZXMgb25seSBydW5zIHVzZWQgZm9yIG1ldHJpY1xuKyAgICB2YWx1ZXMuXG4gXG4gYnBmdG9vbCBwcm9nIGhlbHBcbiAgICAgUHJpbnQgc2hvcnQgaGVscCBtZXNzYWdlLlxuQEAgLTM2MCw3ICszNjksNyBAQCBFWEFNUExFU1xuIDo6XG4gXG4gICAgICAgICAgNTEzOTcgcnVuX2NudFxuLSAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoODMuMDUlKVxuKyAgICAgIDQwMTc2MjAzIGN5Y2xlcyAgICAgICAgICAjIDc4MS42OCBjeWNsZXMgcGVyIHJ1biAgICAgICAgICAgICAgICAoODMuMDUlKVxuICAgICAgIDQyNTE4MTM5IGluc3RydWN0aW9ucyAgICAjICAgMS4wNiBpbnNucyBwZXIgY3ljbGUgICAgICAgICAgICAgICAoODMuMzklKVxuICAgICAgICAgICAgMTIzIGxsY19taXNzZXMgICAgICAjICAgMi44OSBMTEMgbWlzc2VzIHBlciBtaWxsaW9uIGluc25zICAoODMuMTUlKVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuYyBiL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuaW5kZXggOGMyZjkyNTViMzZkNy4uOWUxMjZmMzgyM2FkMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL2JwZi9icGZ0b29sL3Byb2cuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jXG5AQCAtMjA2MiwzNyArMjA2Miw1MiBAQCBzdGF0aWMgaW50IGRvX3Byb2ZpbGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFxuICNpbmNsdWRlIFwicHJvZmlsZXIuc2tlbC5oXCJcbiBcbitlbnVtIHJhdGlvX21ldHJpYyB7XG4rXHRNRVRSSUNfTk9ORSA9IC0yLFxuK1x0TUVUUklDX1JVTl9DTlQgPSAtMSxcbitcdE1FVFJJQ19DWUNMRVMgPSAwLFxuK1x0TUVUUklDX0lOU1RSVUNUSU9OUyA9IDEsXG4rXHRNRVRSSUNfTDFEX0xPQURTID0gMixcbitcdE1FVFJJQ19MTENfTUlTU0VTID0gMyxcbitcdE1FVFJJQ19JVExCX01JU1NFUyA9IDQsXG4rXHRNRVRSSUNfRFRMQl9NSVNTRVMgPSA1LFxuK307XG4rXG4gc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdGNvbnN0IGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsO1xuK1x0X191NjQgc2NhbGVkX3ZhbDtcbiBcdHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjtcbiBcdGJvb2wgc2VsZWN0ZWQ7XG4gXG4gXHQvKiBjYWxjdWxhdGUgcmF0aW9zIGxpa2UgaW5zdHJ1Y3Rpb25zIHBlciBjeWNsZSAqL1xuLVx0Y29uc3QgaW50IHJhdGlvX21ldHJpYzsgLyogMCBmb3IgTi9BLCAxIGZvciBpbmRleCAwIChjeWNsZXMpICovXG4rXHRjb25zdCBlbnVtIHJhdGlvX21ldHJpYyByYXRpb19tZXRyaWM7XG4gXHRjb25zdCBjaGFyICpyYXRpb19kZXNjO1xuIFx0Y29uc3QgZmxvYXQgcmF0aW9fbXVsO1xuIH0gbWV0cmljc1tdID0ge1xuLVx0e1xuK1x0W01FVFJJQ19DWUNMRVNdID0ge1xuIFx0XHQubmFtZSA9IFwiY3ljbGVzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuIFx0XHRcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfUlVOX0NOVCxcbitcdFx0LnJhdGlvX2Rlc2MgPSBcImN5Y2xlcyBwZXIgcnVuXCIsXG4rXHRcdC5yYXRpb19tdWwgPSAxLjAsXG4gXHR9LFxuLVx0e1xuK1x0W01FVFJJQ19JTlNUUlVDVElPTlNdID0ge1xuIFx0XHQubmFtZSA9IFwiaW5zdHJ1Y3Rpb25zXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuIFx0XHRcdC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OUyxcbiBcdFx0XHQuZXhjbHVkZV91c2VyID0gMSxcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDEsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfQ1lDTEVTLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiaW5zbnMgcGVyIGN5Y2xlXCIsXG4gXHRcdC5yYXRpb19tdWwgPSAxLjAsXG4gXHR9LFxuLVx0e1xuK1x0W01FVFJJQ19MMURfTE9BRFNdID0ge1xuIFx0XHQubmFtZSA9IFwibDFkX2xvYWRzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxMDIsOCArMjExNyw5IEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XG4gXHRcdFx0XHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDEsXG4gXHRcdH0sXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfTk9ORSxcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0xMQ19NSVNTRVNdID0ge1xuIFx0XHQubmFtZSA9IFwibGxjX21pc3Nlc1wiLFxuIFx0XHQuYXR0ciA9IHtcbiBcdFx0XHQudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSxcbkBAIC0yMTEzLDExICsyMTI5LDExIEBAIHN0cnVjdCBwcm9maWxlX21ldHJpYyB7XG4gXHRcdFx0XHQoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUyBcdTAwM2NcdTAwM2MgMTYpLFxuIFx0XHRcdC5leGNsdWRlX3VzZXIgPSAxXG4gXHRcdH0sXG4tXHRcdC5yYXRpb19tZXRyaWMgPSAyLFxuK1x0XHQucmF0aW9fbWV0cmljID0gTUVUUklDX0lOU1RSVUNUSU9OUyxcbiBcdFx0LnJhdGlvX2Rlc2MgPSBcIkxMQyBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0lUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcIml0bGJfbWlzc2VzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxMjcsMTEgKzIxNDMsMTEgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiaXRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4tXHR7XG4rXHRbTUVUUklDX0RUTEJfTUlTU0VTXSA9IHtcbiBcdFx0Lm5hbWUgPSBcImR0bGJfbWlzc2VzXCIsXG4gXHRcdC5hdHRyID0ge1xuIFx0XHRcdC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLFxuQEAgLTIxNDEsMTMgKzIxNTcsMTQgQEAgc3RydWN0IHByb2ZpbGVfbWV0cmljIHtcbiBcdFx0XHRcdChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTIFx1MDAzY1x1MDAzYyAxNiksXG4gXHRcdFx0LmV4Y2x1ZGVfdXNlciA9IDFcbiBcdFx0fSxcbi1cdFx0LnJhdGlvX21ldHJpYyA9IDIsXG4rXHRcdC5yYXRpb19tZXRyaWMgPSBNRVRSSUNfSU5TVFJVQ1RJT05TLFxuIFx0XHQucmF0aW9fZGVzYyA9IFwiZHRsYiBtaXNzZXMgcGVyIG1pbGxpb24gaW5zbnNcIixcbiBcdFx0LnJhdGlvX211bCA9IDFlNixcbiBcdH0sXG4gfTtcbiBcbiBzdGF0aWMgX191NjQgcHJvZmlsZV90b3RhbF9jb3VudDtcbitzdGF0aWMgX191NjQgcHJvZmlsZV92YWxpZF9jb3VudDtcbiBcbiAjZGVmaW5lIE1BWF9OVU1fUFJPRklMRV9NRVRSSUNTIDRcbiBcbkBAIC0yMTgyLDkgKzIxOTksMzkgQEAgc3RhdGljIGludCBwcm9maWxlX3BhcnNlX21ldHJpY3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0cmV0dXJuIHNlbGVjdGVkX2NudDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcHJvZmlsZV9yZWFkX3ZhbHVlcyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4rLypcbisgKiBGaWx0ZXIgb3V0IENQVXMgdGhhdCBoYXZlIGFueSBzZWxlY3RlZCBtZXRyaWMgbm90IHNjaGVkdWxlZCBmb3IgdGhlbS4gVGhpcyBtYWtlcyBzdXJlIGFsbFxuKyAqIG1ldHJpY3MgYXJlIHVzaW5nIHRoZSBzYW1lIENQVSBzZXQsIGFzIGEgcmVzdWx0IHJhdGlvIG1ldHJpY3MgYXJlIGNvbnNpc3RlbnQuXG4rICovXG4rc3RhdGljIHZvaWQgcHJvZmlsZV9maWx0ZXJfY3B1cyhfX3UzMiBudW1fY3B1LFxuK1x0XHRcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHNbTUFYX05VTV9QUk9GSUxFX01FVFJJQ1NdW251bV9jcHVdLFxuK1x0XHRcdFx0X191NjQgKmNvdW50cylcbit7XG4rXHRfX3UzMiBtLCBjcHUsIGtleSA9IDA7XG4rXG4rXHRmb3IgKG0gPSAwOyBtIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBtKyspIHtcbitcdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgbnVtX2NwdTsgY3B1KyspIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIENQVSBoYXMgaGl0cywgYnV0IHRoaXMgbWV0cmljIG5ldmVyIHNjaGVkdWxlZCwgc2V0IGNvdW50c1tjcHVdIHRvIDBcbitcdFx0XHQgKiBzbyBvdGhlciBtZXRyaWNzIGlnbm9yZSB0aGlzIENQVSB0b29cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoY291bnRzW2NwdV0gXHUwMDI2XHUwMDI2ICF2YWxzW2tleV1bY3B1XS5ydW5uaW5nKSB7XG4rXHRcdFx0XHRwX2luZm8oXCIlcyBub3Qgc2NoZWR1bGVkIG9uIENQVSAldTsgZXhjbHVkaW5nICVsbHUgcnVucyBmcm9tIGFsbCBtZXRyaWNzXCIsXG4rXHRcdFx0XHQgICAgICAgbWV0cmljc1ttXS5uYW1lLCBjcHUsIGNvdW50c1tjcHVdKTtcbitcdFx0XHRcdGNvdW50c1tjcHVdID0gMDtcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0a2V5Kys7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcHJvZmlsZV9yZWFkX3ZhbHVlcyhzdHJ1Y3QgcHJvZmlsZXJfYnBmICpvYmopXG4ge1xuIFx0X191MzIgbSwgY3B1LCBudW1fY3B1ID0gb2JqLVx1MDAzZXJvZGF0YS1cdTAwM2VudW1fY3B1O1xuK1x0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlIHZhbHVlc1tNQVhfTlVNX1BST0ZJTEVfTUVUUklDU11bbnVtX2NwdV0sICp2YWw7XG4gXHRpbnQgcmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZDtcbiBcdF9fdTY0IGNvdW50c1tudW1fY3B1XTtcbiBcdF9fdTMyIGtleSA9IDA7XG5AQCAtMjE5NCwzOCArMjI0MSw2MSBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3JlYWRfdmFsdWVzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcdGNvdW50X21hcF9mZCA9IGJwZl9tYXBfX2ZkKG9iai1cdTAwM2VtYXBzLmNvdW50cyk7XG4gXHRpZiAocmVhZGluZ19tYXBfZmQgXHUwMDNjIDAgfHwgY291bnRfbWFwX2ZkIFx1MDAzYyAwKSB7XG4gXHRcdHBfZXJyKFwiZmFpbGVkIHRvIGdldCBmZCBmb3IgbWFwXCIpO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiBtaW4ocmVhZGluZ19tYXBfZmQsIGNvdW50X21hcF9mZCk7XG4gXHR9XG4gXG4gXHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKGNvdW50X21hcF9mZCwgXHUwMDI2a2V5LCBjb3VudHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIGNvdW50X21hcDogJXNcIiwgc3RyZXJyb3IoZXJybm8pKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4rXHRcdGlmICghbWV0cmljc1ttXS5zZWxlY3RlZClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZXJyID0gYnBmX21hcF9sb29rdXBfZWxlbShyZWFkaW5nX21hcF9mZCwgXHUwMDI2a2V5LCB2YWx1ZXNba2V5XSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wiLCBzdHJlcnJvcihlcnJubykpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdFx0a2V5Kys7XG4gXHR9XG4gXG4gXHRwcm9maWxlX3RvdGFsX2NvdW50ID0gMDtcbiBcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUrKylcbiBcdFx0cHJvZmlsZV90b3RhbF9jb3VudCArPSBjb3VudHNbY3B1XTtcbiBcbitcdHByb2ZpbGVfZmlsdGVyX2NwdXMobnVtX2NwdSwgdmFsdWVzLCBjb3VudHMpO1xuK1xuK1x0cHJvZmlsZV92YWxpZF9jb3VudCA9IDA7XG4rXHRmb3IgKGNwdSA9IDA7IGNwdSBcdTAwM2MgbnVtX2NwdTsgY3B1KyspXG4rXHRcdHByb2ZpbGVfdmFsaWRfY291bnQgKz0gY291bnRzW2NwdV07XG4rXG4rXHRrZXkgPSAwO1xuIFx0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSB2YWx1ZXNbbnVtX2NwdV07XG4rXHRcdGRvdWJsZSBzY2FsZTtcbiBcbiBcdFx0aWYgKCFtZXRyaWNzW21dLnNlbGVjdGVkKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBicGZfbWFwX2xvb2t1cF9lbGVtKHJlYWRpbmdfbWFwX2ZkLCBcdTAwMjZrZXksIHZhbHVlcyk7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRwX2VycihcImZhaWxlZCB0byByZWFkIHJlYWRpbmdfbWFwOiAlc1wiLFxuLVx0XHRcdCAgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4gXHRcdGZvciAoY3B1ID0gMDsgY3B1IFx1MDAzYyBudW1fY3B1OyBjcHUrKykge1xuLVx0XHRcdG1ldHJpY3NbbV0udmFsLmNvdW50ZXIgKz0gdmFsdWVzW2NwdV0uY291bnRlcjtcbi1cdFx0XHRtZXRyaWNzW21dLnZhbC5lbmFibGVkICs9IHZhbHVlc1tjcHVdLmVuYWJsZWQ7XG4tXHRcdFx0bWV0cmljc1ttXS52YWwucnVubmluZyArPSB2YWx1ZXNbY3B1XS5ydW5uaW5nO1xuK1x0XHRcdC8qIFNraXAgQ1BVcyB3aXRoIG5vIHJ1bnMgb3Igd2l0aCBhbiB1bnNjaGVkdWxlZCBtZXRyaWMuICovXG4rXHRcdFx0aWYgKCFjb3VudHNbY3B1XSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCA9IFx1MDAyNnZhbHVlc1trZXldW2NwdV07XG4rXG4rXHRcdFx0bWV0cmljc1ttXS52YWwuZW5hYmxlZCArPSB2YWwtXHUwMDNlZW5hYmxlZDtcbitcdFx0XHRtZXRyaWNzW21dLnZhbC5ydW5uaW5nICs9IHZhbC1cdTAwM2VydW5uaW5nO1xuK1x0XHRcdG1ldHJpY3NbbV0udmFsLmNvdW50ZXIgKz0gdmFsLVx1MDAzZWNvdW50ZXI7XG4rXHRcdFx0LyogU2NhbGUgY291bnRlciB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgcGVyZiBldmVudCBtdWx0aXBsZXhpbmcuICovXG4rXHRcdFx0c2NhbGUgPSAoZG91YmxlKXZhbC1cdTAwM2VlbmFibGVkIC8gdmFsLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdFx0bWV0cmljc1ttXS5zY2FsZWRfdmFsICs9IHZhbC1cdTAwM2Vjb3VudGVyICogc2NhbGU7XG4gXHRcdH1cbiBcdFx0a2V5Kys7XG4gXHR9XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcHJvZmlsZV9wcmludF9yZWFkaW5nc19qc29uKHZvaWQpXG5AQCAtMjIzOSw5ICsyMzA5LDExIEBAIHN0YXRpYyB2b2lkIHByb2ZpbGVfcHJpbnRfcmVhZGluZ3NfanNvbih2b2lkKVxuIFx0XHRqc29ud19zdGFydF9vYmplY3QoanNvbl93dHIpO1xuIFx0XHRqc29ud19zdHJpbmdfZmllbGQoanNvbl93dHIsIFwibWV0cmljXCIsIG1ldHJpY3NbbV0ubmFtZSk7XG4gXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCJydW5fY250XCIsIHByb2ZpbGVfdG90YWxfY291bnQpO1xuK1x0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwicnVuX2NudF92YWxpZFwiLCBwcm9maWxlX3ZhbGlkX2NvdW50KTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcInZhbHVlXCIsIG1ldHJpY3NbbV0udmFsLmNvdW50ZXIpO1xuIFx0XHRqc29ud19sbHVpbnRfZmllbGQoanNvbl93dHIsIFwiZW5hYmxlZFwiLCBtZXRyaWNzW21dLnZhbC5lbmFibGVkKTtcbiBcdFx0anNvbndfbGx1aW50X2ZpZWxkKGpzb25fd3RyLCBcInJ1bm5pbmdcIiwgbWV0cmljc1ttXS52YWwucnVubmluZyk7XG4rXHRcdGpzb253X2xsdWludF9maWVsZChqc29uX3d0ciwgXCJ2YWx1ZV9zY2FsZWRcIiwgbWV0cmljc1ttXS5zY2FsZWRfdmFsKTtcbiBcbiBcdFx0anNvbndfZW5kX29iamVjdChqc29uX3d0cik7XG4gXHR9XG5AQCAtMjI1MCwyNCArMjMyMiwzNCBAQCBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX2pzb24odm9pZClcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X3JlYWRpbmdzX3BsYWluKHZvaWQpXG4ge1xuLVx0X191MzIgbTtcbitcdF9fdTMyIGk7XG4gXG4gXHRwcmludGYoXCJcXG4lMThsbHUgJS0yMHNcXG5cIiwgcHJvZmlsZV90b3RhbF9jb3VudCwgXCJydW5fY250XCIpO1xuLVx0Zm9yIChtID0gMDsgbSBcdTAwM2MgQVJSQVlfU0laRShtZXRyaWNzKTsgbSsrKSB7XG4tXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqdmFsID0gXHUwMDI2bWV0cmljc1ttXS52YWw7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1ldHJpY3MpOyBpKyspIHtcbitcdFx0c3RydWN0IHByb2ZpbGVfbWV0cmljICptID0gXHUwMDI2bWV0cmljc1tpXTtcbitcdFx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICp2YWwgPSBcdTAwMjZtLVx1MDAzZXZhbDtcbiBcdFx0aW50IHI7XG4rXHRcdF9fdTY0IHJhdGlvO1xuIFxuLVx0XHRpZiAoIW1ldHJpY3NbbV0uc2VsZWN0ZWQpXG4rXHRcdGlmICghbS1cdTAwM2VzZWxlY3RlZClcbiBcdFx0XHRjb250aW51ZTtcbi1cdFx0cHJpbnRmKFwiJTE4bGx1ICUtMjBzXCIsIHZhbC1cdTAwM2Vjb3VudGVyLCBtZXRyaWNzW21dLm5hbWUpO1xuK1x0XHRwcmludGYoXCIlMThsbHUgJS0yMHNcIiwgbS1cdTAwM2VzY2FsZWRfdmFsLCBtLVx1MDAzZW5hbWUpO1xuIFxuLVx0XHRyID0gbWV0cmljc1ttXS5yYXRpb19tZXRyaWMgLSAxO1xuLVx0XHRpZiAociBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG1ldHJpY3Nbcl0uc2VsZWN0ZWQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyIFx1MDAzZSAwKSB7XG4rXHRcdHIgPSBtLVx1MDAzZXJhdGlvX21ldHJpYztcbitcdFx0c3dpdGNoIChyKSB7XG4rXHRcdGNhc2UgTUVUUklDX1JVTl9DTlQ6XG4rXHRcdFx0cmF0aW8gPSBwcm9maWxlX3ZhbGlkX2NvdW50O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIE1FVFJJQ19OT05FOlxuK1x0XHRcdHJhdGlvID0gMDtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyYXRpbyA9IG1ldHJpY3Nbcl0uc2NhbGVkX3ZhbDtcbitcdFx0fVxuK1x0XHRpZiAocmF0aW8pIHtcbiBcdFx0XHRwcmludGYoXCIjICU4LjJmICUtMzBzXCIsXG4tXHRcdFx0ICAgICAgIHZhbC1cdTAwM2Vjb3VudGVyICogbWV0cmljc1ttXS5yYXRpb19tdWwgL1xuLVx0XHRcdCAgICAgICBtZXRyaWNzW3JdLnZhbC5jb3VudGVyLFxuLVx0XHRcdCAgICAgICBtZXRyaWNzW21dLnJhdGlvX2Rlc2MpO1xuK1x0XHRcdCAgICAgICBtLVx1MDAzZXNjYWxlZF92YWwgKiBtLVx1MDAzZXJhdGlvX211bCAvIHJhdGlvLFxuK1x0XHRcdCAgICAgICBtLVx1MDAzZXJhdGlvX2Rlc2MpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByaW50ZihcIiUtNDFzXCIsIFwiXCIpO1xuIFx0XHR9XG5AQCAtMjQyMyw5ICsyNTA1LDEyIEBAIHN0YXRpYyBpbnQgcHJvZmlsZV9vcGVuX3BlcmZfZXZlbnRzKHN0cnVjdCBwcm9maWxlcl9icGYgKm9iailcbiBcbiBzdGF0aWMgdm9pZCBwcm9maWxlX3ByaW50X2FuZF9jbGVhbnVwKHZvaWQpXG4ge1xuK1x0aW50IGVycjtcbitcbiBcdHByb2ZpbGVfY2xvc2VfcGVyZl9ldmVudHMocHJvZmlsZV9vYmopO1xuLVx0cHJvZmlsZV9yZWFkX3ZhbHVlcyhwcm9maWxlX29iaik7XG4tXHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4rXHRlcnIgPSBwcm9maWxlX3JlYWRfdmFsdWVzKHByb2ZpbGVfb2JqKTtcbitcdGlmICghZXJyKVxuK1x0XHRwcm9maWxlX3ByaW50X3JlYWRpbmdzKCk7XG4gXHRwcm9maWxlcl9icGZfX2Rlc3Ryb3kocHJvZmlsZV9vYmopO1xuIFxuIFx0Y2xvc2UocHJvZmlsZV90Z3RfZmQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbmluZGV4IGY0OGM3ODNjYjlmN2YuLjZjNjU0YmQ5YjM0NmYgMTAwNjQ0XG4tLS0gYS90b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY1xuKysrIGIvdG9vbHMvYnBmL2JwZnRvb2wvc2tlbGV0b24vcHJvZmlsZXIuYnBmLmNcbkBAIC0xMCw2ICsxMCwxMSBAQCBzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB7XG4gXHRfX3U2NCBydW5uaW5nO1xuIH0gX19hdHRyaWJ1dGVfXygocHJlc2VydmVfYWNjZXNzX2luZGV4KSk7XG4gXG4rc3RydWN0IHByb2ZpbGVfcmVhZGluZyB7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCB2YWx1ZTtcbitcdGJvb2wgYXJtZWQ7XG4rfTtcbitcbiAvKiBtYXAgb2YgcGVyZiBldmVudCBmZHMsIG51bV9jcHUgKiBudW1fbWV0cmljIGVudHJpZXMgKi9cbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9QRVJGX0VWRU5UX0FSUkFZKTtcbkBAIC0yMSw3ICsyNiw3IEBAIHN0cnVjdCB7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSQ1BVX0FSUkFZKTtcbiBcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKHUzMikpO1xuLVx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCkpO1xuK1x0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nKSk7XG4gfSBmZW50cnlfcmVhZGluZ3MgU0VDKFwiLm1hcHNcIik7XG4gXG4gLyogYWNjdW11bGF0ZWQgcmVhZGluZ3MgKi9cbkBAIC00NSw3ICs1MCw3IEBAIGNvbnN0IHZvbGF0aWxlIF9fdTMyIG51bV9tZXRyaWMgPSAxO1xuIFNFQyhcImZlbnRyeS9YWFhcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiB7XG4tXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdO1xuK1x0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyc1tNQVhfTlVNX01FVFJJQ1NdO1xuIFx0dTMyIGtleSA9IGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuIFx0dTMyIGk7XG4gXG5AQCAtNTYsNiArNjEsNyBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdFx0cHRyc1tpXSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2ZmVudHJ5X3JlYWRpbmdzLCBcdTAwMjZmbGFnKTtcbiBcdFx0aWYgKCFwdHJzW2ldKVxuIFx0XHRcdHJldHVybiAwO1xuK1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fbWV0cmljIFx1MDAyNlx1MDAyNiBpIFx1MDAzYyBNQVhfTlVNX01FVFJJQ1M7IGkrKykge1xuQEAgLTY2LDcgKzcyLDggQEAgaW50IEJQRl9QUk9HKGZlbnRyeV9YWFgpXG4gXHRcdFx0XHRcdFx0c2l6ZW9mKHJlYWRpbmcpKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gMDtcbi1cdFx0KihwdHJzW2ldKSA9IHJlYWRpbmc7XG4rXHRcdHB0cnNbaV0tXHUwMDNldmFsdWUgPSByZWFkaW5nO1xuK1x0XHRwdHJzW2ldLVx1MDAzZWFybWVkID0gdHJ1ZTtcbiBcdFx0a2V5ICs9IG51bV9jcHU7XG4gXHR9XG4gXG5AQCAtNzYsMTYgKzgzLDE4IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGZleGl0X3VwZGF0ZV9tYXBzKHUzMiBpZCwgc3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlX19fbG9jYWwgKmFmdGVyKVxuIHtcbi1cdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZV9fX2xvY2FsICpiZWZvcmUsIGRpZmY7XG4rXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCBkaWZmO1xuIFxuIFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdC8qIG9ubHkgYWNjb3VudCBzYW1wbGVzIHdpdGggYSB2YWxpZCBmZW50cnlfcmVhZGluZyAqL1xuLVx0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWNvdW50ZXIpIHtcbitcdGlmIChiZWZvcmUgXHUwMDI2XHUwMDI2IGJlZm9yZS1cdTAwM2Vhcm1lZCkge1xuIFx0XHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWVfX19sb2NhbCAqYWNjdW07XG4gXG4tXHRcdGRpZmYuY291bnRlciA9IGFmdGVyLVx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXHUwMDNlY291bnRlcjtcbi1cdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2VlbmFibGVkO1xuLVx0XHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cdTAwM2VydW5uaW5nIC0gYmVmb3JlLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0XHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVx1MDAzZXZhbHVlLmNvdW50ZXI7XG4rXHRcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXHUwMDNldmFsdWUuZW5hYmxlZDtcbitcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNmlkKTtcbiBcdFx0aWYgKGFjY3VtKSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG5pbmRleCA5NzAzN2QzYjNkOWZhLi43YmMwZGIyNmUwMDUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2JwZl9wcm9nX3Byb2ZpbGVyLmJwZi5jXG4rKysgYi90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNcbkBAIC00LDYgKzQsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4gXG4rc3RydWN0IHByb2ZpbGVfcmVhZGluZyB7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgdmFsdWU7XG4rXHRib29sIGFybWVkO1xuK307XG4rXG4gLyogbWFwIG9mIHBlcmYgZXZlbnQgZmRzLCBudW1fY3B1ICogbnVtX21ldHJpYyBlbnRyaWVzICovXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfUEVSRl9FVkVOVF9BUlJBWSk7XG5AQCAtMTUsNyArMjAsNyBAQCBzdHJ1Y3Qge1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1BFUkNQVV9BUlJBWSk7XG4gXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihfX3UzMikpO1xuLVx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUpKTtcbitcdF9fdWludCh2YWx1ZV9zaXplLCBzaXplb2Yoc3RydWN0IHByb2ZpbGVfcmVhZGluZykpO1xuIFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiB9IGZlbnRyeV9yZWFkaW5ncyBTRUMoXCIubWFwc1wiKTtcbiBcbkBAIC0zMyw3ICszOCw3IEBAIFNFQyhcImZlbnRyeS9YWFhcIilcbiBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiB7XG4gXHRfX3UzMiBrZXkgPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQoKTtcbi1cdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqcHRyO1xuK1x0c3RydWN0IHByb2ZpbGVfcmVhZGluZyAqcHRyO1xuIFx0X191MzIgemVybyA9IDA7XG4gXHRsb25nIGVycjtcbiBcbkBAIC00Miw5ICs0NywxMiBAQCBpbnQgQlBGX1BST0coZmVudHJ5X1hYWClcbiBcdGlmICghcHRyKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IGJwZl9wZXJmX2V2ZW50X3JlYWRfdmFsdWUoXHUwMDI2ZXZlbnRzLCBrZXksIHB0ciwgc2l6ZW9mKCpwdHIpKTtcbitcdHB0ci1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0ZXJyID0gYnBmX3BlcmZfZXZlbnRfcmVhZF92YWx1ZShcdTAwMjZldmVudHMsIGtleSwgXHUwMDI2cHRyLVx1MDAzZXZhbHVlLFxuK1x0XHRcdFx0XHRzaXplb2YocHRyLVx1MDAzZXZhbHVlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gMDtcbitcdHB0ci1cdTAwM2Vhcm1lZCA9IHRydWU7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTIsMTcgKzYwLDE5IEBAIGludCBCUEZfUFJPRyhmZW50cnlfWFhYKVxuIHN0YXRpYyBpbmxpbmUgdm9pZFxuIGZleGl0X3VwZGF0ZV9tYXBzKHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWZ0ZXIpXG4ge1xuLVx0c3RydWN0IGJwZl9wZXJmX2V2ZW50X3ZhbHVlICpiZWZvcmUsIGRpZmY7XG4rXHRzdHJ1Y3QgcHJvZmlsZV9yZWFkaW5nICpiZWZvcmU7XG4rXHRzdHJ1Y3QgYnBmX3BlcmZfZXZlbnRfdmFsdWUgZGlmZjtcbiBcdF9fdTMyIHplcm8gPSAwO1xuIFxuIFx0YmVmb3JlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZmZW50cnlfcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0Lyogb25seSBhY2NvdW50IHNhbXBsZXMgd2l0aCBhIHZhbGlkIGZlbnRyeV9yZWFkaW5nICovXG4tXHRpZiAoYmVmb3JlIFx1MDAyNlx1MDAyNiBiZWZvcmUtXHUwMDNlY291bnRlcikge1xuK1x0aWYgKGJlZm9yZSBcdTAwMjZcdTAwMjYgYmVmb3JlLVx1MDAzZWFybWVkKSB7XG4gXHRcdHN0cnVjdCBicGZfcGVyZl9ldmVudF92YWx1ZSAqYWNjdW07XG4gXG4tXHRcdGRpZmYuY291bnRlciA9IGFmdGVyLVx1MDAzZWNvdW50ZXIgLSBiZWZvcmUtXHUwMDNlY291bnRlcjtcbi1cdFx0ZGlmZi5lbmFibGVkID0gYWZ0ZXItXHUwMDNlZW5hYmxlZCAtIGJlZm9yZS1cdTAwM2VlbmFibGVkO1xuLVx0XHRkaWZmLnJ1bm5pbmcgPSBhZnRlci1cdTAwM2VydW5uaW5nIC0gYmVmb3JlLVx1MDAzZXJ1bm5pbmc7XG4rXHRcdGJlZm9yZS1cdTAwM2Vhcm1lZCA9IGZhbHNlO1xuK1x0XHRkaWZmLmNvdW50ZXIgPSBhZnRlci1cdTAwM2Vjb3VudGVyIC0gYmVmb3JlLVx1MDAzZXZhbHVlLmNvdW50ZXI7XG4rXHRcdGRpZmYuZW5hYmxlZCA9IGFmdGVyLVx1MDAzZWVuYWJsZWQgLSBiZWZvcmUtXHUwMDNldmFsdWUuZW5hYmxlZDtcbitcdFx0ZGlmZi5ydW5uaW5nID0gYWZ0ZXItXHUwMDNlcnVubmluZyAtIGJlZm9yZS1cdTAwM2V2YWx1ZS5ydW5uaW5nO1xuIFxuIFx0XHRhY2N1bSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2YWNjdW1fcmVhZGluZ3MsIFx1MDAyNnplcm8pO1xuIFx0XHRpZiAoYWNjdW0pIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjAzLjczNzM2OTAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Mjc1NTU5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBOb24tS2VybmVsIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIGNoYW5nZXMgYWNyb3NzIGZvdXIgZmlsZXM6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgLCBgdG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jYCwgYHRvb2xzL2JwZi9icGZ0b29sL3NrZWxldG9uL3Byb2ZpbGVyLmJwZi5jYCwgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgLiBBbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5IOKAkyBzcGVjaWZpY2FsbHkgYHRvb2xzL2JwZi9icGZ0b29sYCBhbmQgYHRvb2xzL3BlcmZgLlxuXG5Ob3csIGFjY29yZGluZyB0byB0aGUgdXN1YWwgY3JpdGVyaWEg4oCTIHNlY3Rpb24gMiByZWdhcmRpbmcgd2hlbiAqbm90KiB0byBmdXp6IOKAkyBhbnkgbW9kaWZpY2F0aW9ucyB0byBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgc3BlbGxpbmcgZml4ZXMsIG9yIHVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIGxpa2UgYHRvb2xzL2AsIHNhbXBsZXMvLCBzY3JpcHRzLywgZXRjLiwgdGhhdCAqZG9uJ3QqIGltcGFjdCBgdm1saW51eGAgb3Iga2VybmVsIG1vZHVsZXMsIGRvbid0IHdhcnJhbnQgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGVzZSBmaWxlcyBzcGVjaWZpY2FsbHk6IGB0b29scy9icGYvYnBmdG9vbC9Eb2N1bWVudGF0aW9uL2JwZnRvb2wtcHJvZy5yc3RgIGlzIGRvY3VtZW50YXRpb24uIGB0b29scy9icGYvYnBmdG9vbC9wcm9nLmNgIGlzIHRoZSB1c2VyLXNwYWNlIGBicGZ0b29sYCB1dGlsaXR5LiBUaGUgb3RoZXIgdHdvIGB0b29scy9icGYvYnBmdG9vbC9za2VsZXRvbi9wcm9maWxlci5icGYuY2AgYW5kIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYnBmX3Byb2dfcHJvZmlsZXIuYnBmLmNgIGFyZSBCUEYgc2tlbGV0b24gcHJvZ3JhbXMgKmZvciogdGhlc2UgdXNlci1zcGFjZSB0b29scy4gVGhleSdyZSBub3QgY29tcGlsZWQgaW50byB0aGUga2VybmVsLlxuXG5JJ20gY29uZmlkZW50IHRoZXNlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHVzZXItc3BhY2UgdG9vbHMuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBrZXJuZWwgY29kZSBpc24ndCBpbmRpcmVjdGx5IG1vZGlmaWVkLiBBIHF1aWNrIGBncmVwYCBvciBmaWxlIGluc3BlY3Rpb24gc2hvdWxkIGNvbmZpcm0gdGhpcyBpcyB0aGUgY2FzZS4gQnV0LCBnaXZlbiB0aGUgZmlsZSBwYXRocywgSSBkb24ndCBleHBlY3QgdG8gZmluZCBhbnl0aGluZyBrZXJuZWwtcmVsYXRlZC5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW1wYWN0IGtlcm5lbCBpbWFnZSBvciBrZXJuZWwgbW9kdWxlcy4gU28sIG5vIGZ1enppbmcgbmVlZGVkLiBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgLiBObyBgRW5hYmxlQ29uZmlnc2Agb3IgYEZvY3VzU3ltYm9sc2AgYXJlIHJlcXVpcmVkLiBUaGUgcmF0aW9uYWxlIGlzIHRoZSBwYXRjaCBpcyBjb25maW5lZCB0byB1c2Vyc3BhY2UgYHRvb2xzYCAoYnBmdG9vbCBhbmQgcGVyZikgd2hpY2ggYXJlIHVzZXItc3BhY2UgdG9vbHMsIGFsb25nIHdpdGggdGhlaXIgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBza2VsZXRvbiBjb2RlLiBBbHJpZ2h0LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTcsIk91dHB1dFRva2VucyI6NjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxOTowODoxOS4wMTI5MzI0OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSB0b29scyBhbmQgZG9jdW1lbnRhdGlvbiB1bmRlciB0b29scy8gKGJwZnRvb2wgYW5kIHBlcmYgcHJvZyBwcm9maWxlciBza2VsZXRvbnMpLiBObyBrZXJuZWwgc291cmNlIGZpbGVzIG9yIGtlcm5lbCBtb2R1bGVzIGFmZmVjdGluZyB2bWxpbnV4IGFyZSBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE5OjA4OjE5LjAxMjk3MDU3MVoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpwtxh[1] Phase: Running StartedAt: 2026-09-08 19:08:30 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpwtxh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 19:08:30 +0000 UTC FinishedAt: 2026-09-08 19:08:34 +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,}