Name: series-workflowbbmmj Phase: Failed StartedAt: 2026-08-01 11:04:48 +0000 UTC FinishedAt: 2026-08-01 11:20:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbmmj[0] Phase: Succeeded StartedAt: 2026-08-01 11:04:48 +0000 UTC FinishedAt: 2026-08-01 11:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbmmj[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 11:04:48 +0000 UTC FinishedAt: 2026-08-01 11:19:46 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhZDBmZjBkZWZhYjhlZTBmZDU0ODBmYjc4N2NmNjdmYzNkNDM2NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjE5OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi44NzU1M2IxNGQzNGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTE4MzMsMTcgJiM0MzsxODMzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpNDBlX3J4X2hhc2goc3RydWN0IGk0MGVfcmluZyAqcmluZyxcbiB9XG4gXG4gLyoqXG4tICogaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgaGVhZGVyIGZpZWxkcyBmcm9tIFJ4IGRlc2NyaXB0b3JcbiYjNDM7ICogX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXG4gICogQHJ4X3Jpbmc6IHJ4IGRlc2NyaXB0b3IgcmluZyBwYWNrZXQgaXMgYmVpbmcgdHJhbnNhY3RlZCBvblxuICAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxuICAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxuLSAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZFxuLSAqIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIHNrYi5cbiYjNDM7ICogUG9wdWxhdGUgaGFzaCwgY2hlY2tzdW0sIFBUUCB0aW1lc3RhbXAgYW5kIFZMQU4gZnJvbSBAcnhfZGVzYy4gRG9lcyBub3RcbiYjNDM7ICogY2FsbCBza2JfcmVjb3JkX3J4X3F1ZXVlKCkgb3IgZXRoX3R5cGVfdHJhbnMoKTsgY2FsbGVycyB0aGF0IGFscmVhZHkgZ290XG4mIzQzOyAqIHRob3NlIGZyb20geGRwX2J1aWxkX3NrYl9mcm9tX3pjKCkgc2hvdWxkIHVzZSB0aGlzIGhlbHBlci5cbiAgKiovXG4tdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuLVx0XHRcdCAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1NjQgcXdvcmQgPSBsZTY0X3RvX2NwdShyeF9kZXNjLVx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcbiBcdHUzMiByeF9zdGF0dXMgPSBGSUVMRF9HRVQoSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLLCBxd29yZCk7XG5AQCAtMTg1OCwxNCAmIzQzOzE4NTgsMzAgQEAgdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFxuIFx0aTQwZV9yeF9jaGVja3N1bShyeF9yaW5nLVx1MDAzZXZzaSwgc2tiLCByeF9kZXNjKTtcbiBcbi1cdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbi1cbiBcdGlmIChxd29yZCBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpIHtcbiBcdFx0X19sZTE2IHZsYW5fdGFnID0gcnhfZGVzYy1cdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxO1xuIFxuIFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxuIFx0XHRcdFx0ICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuJiM0MzsgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uXG4mIzQzOyAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxuJiM0MzsgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxuJiM0MzsgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbiYjNDM7ICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLlxuJiM0MzsgKiovXG4mIzQzO3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiBcbiBcdC8qIG1vZGlmaWVzIHRoZSBza2IgLSBjb25zdW1lcyB0aGUgZW5ldCBoZWFkZXIgKi9cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnhfcmluZy1cdTAwM2VuZXRkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbmluZGV4IGUyNjgwN2ZkMjEyMzIuLjNjNTJlMGU2MDQ4NzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcbiBcdFx0XHRcdCAgIHU2NCBxd29yZDEpO1xuJiM0Mzt2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFx0XHRcdCAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGk0MGVfeGRwX3JpbmdfdXBkYXRlX3RhaWwoc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuaW5kZXggOWY0NzM4OGVhYmE1My4uZGZhNTE5YzMwYTBkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bnJvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpNDBlX3R4cnhfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpNDBlX3hzay5oXCYjMzQ7XG5AQCAtMjc3LDcwICYjNDM7Mjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0cmV0dXJuIGNvdW50ID09IG5iX2J1ZmZzO1xuIH1cbiBcbi0vKipcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxuLSAqIEByeF9yaW5nOiBSeCByaW5nXG4tICogQHhkcDogeGRwX2J1ZmZcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuXG4tICpcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cbi0gKiovXG4tc3RhdGljIHN0cnVjdCBza19idWZmICppNDBlX2NvbnN0cnVjdF9za2JfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHR1bnNpZ25lZCBpbnQgdG90YWxzaXplID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0gTlVMTDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHR1MzIgbnJfZnJhZ3MgPSAwO1xuLVxuLVx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXHRcdG5yX2ZyYWdzID0gc2luZm8tXHUwMDNlbnJfZnJhZ3M7XG4tXHR9XG4tXHRuZXRfcHJlZmV0Y2goeGRwLVx1MDAzZWRhdGFfbWV0YSk7XG4tXG4tXHQvKiBhbGxvY2F0ZSBhIHNrYiB0byBzdG9yZSB0aGUgZnJhZ3MgKi9cbi1cdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgdG90YWxzaXplKTtcbi1cdGlmICh1bmxpa2VseSghc2tiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVx1MDAzZWRhdGFfbWV0YSxcbi1cdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xuLVxuLVx0aWYgKG1ldGFzaXplKSB7XG4tXHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XG4tXHRcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobGlrZWx5KCF4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpza2luZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4tXHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXHRcdHZvaWQgKmFkZHI7XG4tXG4tXHRcdHBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpO1xuLVx0XHRpZiAoIXBhZ2UpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcbi1cbi1cdFx0bWVtY3B5KGFkZHIsIHNrYl9mcmFnX3BhZ2UoZnJhZyksIHNrYl9mcmFnX3NpemUoZnJhZykpO1xuLVxuLVx0XHRfX3NrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2luZm8sIHNraW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MzssXG4tXHRcdFx0XHRcdCAgIGFkZHIsIDAsIHNrYl9mcmFnX3NpemUoZnJhZykpO1xuLVx0fVxuLVxuLW91dDpcbi1cdHhza19idWZmX2ZyZWUoeGRwKTtcbi1cdHJldHVybiBza2I7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwX2J1ZmYsXG4gXHRcdFx0XHQgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsXG5AQCAtMzcyLDIxICYjNDM7MzA5LDE5IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0ICogQklUKEk0MEVfUlhEX1FXMV9FUlJPUl9TSElGVCkuIFRoaXMgaXMgZHVlIHRvIHRoYXRcbiBcdFx0ICogU0JQIGlzICpub3QqIHNldCBpbiBQUlRfU0JQVlNJIChkZWZhdWx0IG5vdCBzZXQpLlxuIFx0XHQgKi9cbi1cdFx0c2tiID0gaTQwZV9jb25zdHJ1Y3Rfc2tiX3pjKHJ4X3JpbmcsIHhkcF9idWZmKTtcbiYjNDM7XHRcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XG4gXHRcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRcdHhza19idWZmX2ZyZWUoeGRwX2J1ZmYpO1xuIFx0XHRcdHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuYWxsb2NfYnVmZl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbiBcdFx0XHQqcnhfYnl0ZXMgPSAwO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoZXRoX3NrYl9wYWQoc2tiKSkge1xuLVx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbi1cdFx0XHQqcnhfYnl0ZXMgPSAwO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVxuLVx0XHRpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuJiM0MztcdFx0LyogeGRwX2J1aWxkX3NrYl9mcm9tX3pjKCkgYWxyZWFkeSByYW4gZXRoX3R5cGVfdHJhbnMoKSBhbmRcbiYjNDM7XHRcdCAqIHNrYl9yZWNvcmRfcnhfcXVldWUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0X19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuIFx0XHRuYXBpX2dyb19yZWNlaXZlKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgc2tiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYWQwZmYwZGVmYWI4ZWUwZmQ1NDgwZmI3ODdjZjY3ZmMzZDQzNjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMToxOToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IGVmNWU2NTc4MTZmMDAuLjg3NTUzYjE0ZDM0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMTgzMywxNyAmIzQzOzE4MzMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGk0MGVfcnhfaGFzaChzdHJ1Y3QgaTQwZV9yaW5nICpyaW5nLAogfQogCiAvKioKLSAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yCiYjNDM7ICogX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yCiAgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uCiAgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3IKICAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkCiAgKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW4KLSAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZAotICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLgomIzQzOyAqIFBvcHVsYXRlIGhhc2gsIGNoZWNrc3VtLCBQVFAgdGltZXN0YW1wIGFuZCBWTEFOIGZyb20gQHJ4X2Rlc2MuIERvZXMgbm90CiYjNDM7ICogY2FsbCBza2JfcmVjb3JkX3J4X3F1ZXVlKCkgb3IgZXRoX3R5cGVfdHJhbnMoKTsgY2FsbGVycyB0aGF0IGFscmVhZHkgZ290CiYjNDM7ICogdGhvc2UgZnJvbSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBzaG91bGQgdXNlIHRoaXMgaGVscGVyLgogICoqLwotdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAotCQkJICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7dm9pZCBfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiYjNDM7CQkJICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgcXdvcmQgPSBsZTY0X3RvX2NwdShyeF9kZXNjLSZndDt3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7CiAJdTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTsKQEAgLTE4NTgsMTQgJiM0MzsxODU4LDMwIEBAIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKIAogCWk0MGVfcnhfY2hlY2tzdW0ocnhfcmluZy0mZ3Q7dnNpLCBza2IsIHJ4X2Rlc2MpOwogCi0Jc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctJmd0O3F1ZXVlX2luZGV4KTsKLQogCWlmIChxd29yZCAmYW1wOyBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkgewogCQlfX2xlMTYgdmxhbl90YWcgPSByeF9kZXNjLSZndDt3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxOwogCiAJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvcgomIzQzOyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb24KJiM0MzsgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3IKJiM0MzsgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZAomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW4KJiM0MzsgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmQKJiM0MzsgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuCiYjNDM7ICoqLwomIzQzO3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKJiM0MzsJCQkgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CV9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKJiM0MzsKJiM0MzsJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctJmd0O3F1ZXVlX2luZGV4KTsKIAogCS8qIG1vZGlmaWVzIHRoZSBza2IgLSBjb25zdW1lcyB0aGUgZW5ldCBoZWFkZXIgKi8KIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByeF9yaW5nLSZndDtuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaAppbmRleCBlMjY4MDdmZDIxMjMyLi4zYzUyZTBlNjA0ODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaApAQCAtOSw2ICYjNDM7OSw4IEBACiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7CiB2b2lkIGk0MGVfY2xlYW5fcHJvZ3JhbW1pbmdfc3RhdHVzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIHU2NCBxd29yZDBfcmF3LAogCQkJCSAgIHU2NCBxd29yZDEpOwomIzQzO3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAomIzQzOwkJCSAgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAogCQkJICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpNDBlX3hkcF9yaW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYwppbmRleCA5ZjQ3Mzg4ZWFiYTUzLi5kZmE1MTljMzBhMGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jCkBAIC0zLDYgJiM0MzszLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vucm9sbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQveGRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3hkcF9zb2NrX2Rydi5oJmd0OwogI2luY2x1ZGUgJiMzNDtpNDBlX3R4cnhfY29tbW9uLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpNDBlX3hzay5oJiMzNDsKQEAgLTI3Nyw3MCAmIzQzOzI3OCw2IEBAIGJvb2wgaTQwZV9hbGxvY19yeF9idWZmZXJzX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIHUxNiBjb3VudCkKIAlyZXR1cm4gY291bnQgPT0gbmJfYnVmZnM7CiB9CiAKLS8qKgotICogaTQwZV9jb25zdHJ1Y3Rfc2tiX3pjIC0gQ3JlYXRlIHNrYnVmZiBmcm9tIHplcm8tY29weSBSeCBidWZmZXIKLSAqIEByeF9yaW5nOiBSeCByaW5nCi0gKiBAeGRwOiB4ZHBfYnVmZgotICoKLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuCi0gKgotICogUmV0dXJucyB0aGUgc2tiLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKiovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmk0MGVfY29uc3RydWN0X3NrYl96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAotCQkJCQkgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQotewotCXVuc2lnbmVkIGludCB0b3RhbHNpemUgPSB4ZHAtJmd0O2RhdGFfZW5kIC0geGRwLSZndDtkYXRhX21ldGE7Ci0JdW5zaWduZWQgaW50IG1ldGFzaXplID0geGRwLSZndDtkYXRhIC0geGRwLSZndDtkYXRhX21ldGE7Ci0Jc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSBOVUxMOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIG5yX2ZyYWdzID0gMDsKLQotCWlmICh1bmxpa2VseSh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpIHsKLQkJc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApOwotCQlucl9mcmFncyA9IHNpbmZvLSZndDtucl9mcmFnczsKLQl9Ci0JbmV0X3ByZWZldGNoKHhkcC0mZ3Q7ZGF0YV9tZXRhKTsKLQotCS8qIGFsbG9jYXRlIGEgc2tiIHRvIHN0b3JlIHRoZSBmcmFncyAqLwotCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7cnhfcmluZy0mZ3Q7cV92ZWN0b3ItJmd0O25hcGksIHRvdGFsc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KCFza2IpKQotCQlnb3RvIG91dDsKLQotCW1lbWNweShfX3NrYl9wdXQoc2tiLCB0b3RhbHNpemUpLCB4ZHAtJmd0O2RhdGFfbWV0YSwKLQkgICAgICAgQUxJR04odG90YWxzaXplLCBzaXplb2YobG9uZykpKTsKLQotCWlmIChtZXRhc2l6ZSkgewotCQlza2JfbWV0YWRhdGFfc2V0KHNrYiwgbWV0YXNpemUpOwotCQlfX3NrYl9wdWxsKHNrYiwgbWV0YXNpemUpOwotCX0KLQotCWlmIChsaWtlbHkoIXhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkKLQkJZ290byBvdXQ7Ci0KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpza2luZm8gPSBza2Jfc2hpbmZvKHNrYik7Ci0JCXNrYl9mcmFnX3QgKmZyYWcgPSAmYW1wO3NpbmZvLSZndDtmcmFnc1tpXTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCXZvaWQgKmFkZHI7Ci0KLQkJcGFnZSA9IGRldl9hbGxvY19wYWdlKCk7Ci0JCWlmICghcGFnZSkgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJYWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTsKLQotCQltZW1jcHkoYWRkciwgc2tiX2ZyYWdfcGFnZShmcmFnKSwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7Ci0KLQkJX19za2JfZmlsbF9wYWdlX2Rlc2Nfbm9hY2Moc2tpbmZvLCBza2luZm8tJmd0O25yX2ZyYWdzJiM0MzsmIzQzOywKLQkJCQkJICAgYWRkciwgMCwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7Ci0JfQotCi1vdXQ6Ci0JeHNrX2J1ZmZfZnJlZSh4ZHApOwotCXJldHVybiBza2I7Ci19Ci0KIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKIAkJCQkgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcF9idWZmLAogCQkJCSAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywKQEAgLTM3MiwyMSAmIzQzOzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiAJCSAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0CiAJCSAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS4KIAkJICovCi0JCXNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7CiYjNDM7CQlza2IgPSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoeGRwX2J1ZmYpOwogCQlpZiAoIXNrYikgewomIzQzOwkJCXhza19idWZmX2ZyZWUoeGRwX2J1ZmYpOwogCQkJcnhfcmluZy0mZ3Q7cnhfc3RhdHMuYWxsb2NfYnVmZl9mYWlsZWQmIzQzOyYjNDM7OwogCQkJKnJ4X3BhY2tldHMgPSAwOwogCQkJKnJ4X2J5dGVzID0gMDsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChldGhfc2tiX3BhZChza2IpKSB7Ci0JCQkqcnhfcGFja2V0cyA9IDA7Ci0JCQkqcnhfYnl0ZXMgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKJiM0MzsJCS8qIHhkcF9idWlsZF9za2JfZnJvbV96YygpIGFscmVhZHkgcmFuIGV0aF90eXBlX3RyYW5zKCkgYW5kCiYjNDM7CQkgKiBza2JfcmVjb3JkX3J4X3F1ZXVlKCkuCiYjNDM7CQkgKi8KJiM0MzsJCV9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKIAkJbmFwaV9ncm9fcmVjZWl2ZSgmYW1wO3J4X3JpbmctJmd0O3FfdmVjdG9yLSZndDtuYXBpLCBza2IpOwogCQlyZXR1cm47CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzUzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaTQwZSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgaTQwZWAgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzYCwgd2hpY2ggaXMgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgYW5kIG1vZGlmaWVzIGBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjYCB0byB1c2UgYHhkcF9idWlsZF9za2JfZnJvbV96Y2AgaW5zdGVhZCBvZiBzb21lIGN1c3RvbSBmdW5jdGlvbiwgYGk0MGVfY29uc3RydWN0X3NrYl96Y2AsIHdoaWNoIGlzIG5vdyByZW1vdmVkLgoKTm93LCB3YWl0IGEgbWludXRlLCBgaTQwZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGFuIEludGVsIEV0aGVybmV0IGRyaXZlciwgcmlnaHQ/IFllYWgsIGl0JiMzOTtzIGZvciBJbnRlbCYjMzk7cyA0MCBHaWdhYml0IEV0aGVybmV0LiBTbywgdGhpcyBpcyBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZSwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IHN0YW5kYXJkIFFFTVUgcHJvdmlkZXMgaTQwZSBlbXVsYXRpb24uIEl0IHVzdWFsbHkgY292ZXJzIHRoZSBiYXNpY3M6IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgbmUyaywgcGNuZXQuIEJ1dCBpNDBlPyBJJiMzOTttIG5vdCBzZWVpbmcgaXQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaC4gTm8sIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBpNDBlLiBSaWdodCwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGFuZCB0aGlzIGNvZGUgcHJvYmFibHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpPa2F5LCBzbyBubyBRRU1VIGVtdWxhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoaXMuIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBRRU1VIHNvdXJjZSByaWdodCBub3csIHNvIGxldCBtZSBqdXN0IHNlYXJjaCB0aGUga2VybmVsIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBhbnkgbWVudGlvbnMgb2YgaTQwZSBlbXVsYXRpb24uIE5vcGUsIG5vdCBzZWVpbmcgYW55dGhpbmcuCgpBIHJlbGF0ZWQgdGhvdWdodCwgaXMgdGhpcyBpNDBlIGNvZGUgdGVzdGFibGUgaW4gc3l6a2FsbGVyPyBTeXprYWxsZXIgb2Z0ZW4gdGFyZ2V0cyB2aXJ0dWFsIGRldmljZXMgb3IgZGV2aWNlcyBlbXVsYXRlZCBieSBRRU1VIGxpa2UgZTEwMDBlLCBpZ2IuIEJ1dCBub3QgaTQwZS4gTGV0IG1lIGp1c3QgYmUgc3VyZSwgdGhvdWdoLiBXYWl0LCBRRU1VIGRvZXMgZW11bGF0ZSBpZ2Igbm93LiBEb2VzIGl0IGVtdWxhdGUgaTQwZT8gTm9wZSwgaXQmIzM5O3MgYSBwaHlzaWNhbCBkcml2ZXIuCgpPa2F5LCBzbyBpdCYjMzk7cyBhIHBoeXNpY2FsLW9ubHkgZHJpdmVyIGFuZCBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgbXVjaCB1bnJlYWNoYWJsZSBpbiBtb3N0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgdGhvdWdoLiBObywgaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLiBJdCYjMzk7cyBhIGRlYWQgZW5kLCByZWFsbHkuIFdlbGwsIEkmIzM5O3ZlIGdvdCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY2Agbm93IHRvIGNvbmZpcm0gYSBmZXcgYXNzdW1wdGlvbnMsIGJ1dCBpdCBzZWVtcyB0aGF0IHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyLippNDBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYz0xNjYzMT1zdGF0aWMgaW50IF9faW5pdCBpNDBlX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNjY1MS1cdGk0MGVfZGJnX2luaXQoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTY2NTI6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmk0MGVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2NTMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpYWJpbGl0eSBvZiBGdXp6aW5nIHRoZSBpNDBlIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBpNDBlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBoYXZlIGRlY2VudCBzdXBwb3J0IGZvciB0aGlzPyBJIHJlY2FsbCBzb21lIHJlY2VudCBhZGRpdGlvbnMgZm9yIGBpZ2JgLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgaTQwZWAgaXNuJiMzOTt0IGluIHRoZSBtaXguIExldCBtZSBjb25maXJtIHdpdGggYSBxdWljayBzZWFyY2gsIG9yIG1heWJlIGp1c3QgdGhpbmsgaXQgdGhyb3VnaC4uLiBZZWFoLCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgaTQwZS4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCB0aGUgc3l6a2FsbGVyIGNvbmZpZ3M7IHBlcmhhcHMgdGhlcmUmIzM5O3Mgc29tZSBtZW50aW9uIG9mIGBDT05GSUdfSTQwRWAgb3IgaWYgaXQmIzM5O3MgZ2VuZXJhbGx5IGZ1enplZC4gV2FpdCwgdGhlIHByb21wdCBpdHNlbGYgY2xhcmlmaWVzIHRoZSBpc3N1ZTogSXQgaGlnaGxpZ2h0cyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyAobGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYGFtZGdwdWApIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIGFuZCBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE5vdywgaTQwZSAqaXNuJiMzOTt0KiBhIFNtYXJ0TklDIG9yIFBDSWUgc3dpdGNoLCBpdCBpcywgaG93ZXZlciwgYW4gSW50ZWwgNDBHYkUgbmV0d29yayBkcml2ZXIgYW5kICpkb2VzKiByZXF1aXJlIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkLiBTbywgUUVNVSBpcyBkZWZpbml0ZWx5IG5vdCBnb2luZyB0byBoZWxwIHVzIGhlcmUuCgpSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGk0MGUgKmNhbiogYmUgdGVzdGVkLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCwgd2l0aCB0aGUgcmVhc29uaW5nIHRoYXQgJiMzNDtpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OwoKSG93ZXZlciwgbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWUgdmlydHVhbCBpNDBlIGRyaXZlci4gTm8sIHRoZXJlJiMzOTtzIGBpNDBldmZgIChub3cgYGlhdmZgKS4KCk9rYXksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYGk0MGVfcHJvY2Vzc19za2JfZmllbGRzYCAtIGlzIHRoZXJlIGFueSB3YXkgdG8gcmVhY2ggdGhhdCBmdW5jdGlvbiB3aXRob3V0IGhhcmR3YXJlPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgaTQwZV9jbGVhbl9yeF9pcnFfemNgLiBUaGlzIGxhc3QgZnVuY3Rpb24gaXMgdGhlIE5BUEkgcG9sbCByb3V0aW5lIGZvciB6ZXJvLWNvcHkgWERQLiBUaGlzIG1lYW5zIGl0IHJlcXVpcmVzIHRoZSBoYXJkd2FyZSB0byByZWNlaXZlIHBhY2tldHMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSByaW5nIGJ1ZmZlcnMgc2ltcGx5IHdvbiYjMzk7dCBiZSBwb3B1bGF0ZWQsIGFuZCB0aGUgTkFQSSBwb2xsIHdpbGwgbmV2ZXIgcHJvY2VzcyBhbnkgcGFja2V0cy4gU28sIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvIGEgZmluYWwgcXVpY2sgY2hlY2suIElzIHRoZXJlIGFueSBzb2Z0d2FyZSB0ZXN0aW5nIGZyYW1ld29yayBpbiB0aGUga2VybmVsIGZvciBpNDBlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aTQwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY5CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEludGVsIDQwR2JFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGUgdG9vbHMgYW5kIHRlc3RpbmcgZGlyZWN0b3JpZXMsIGFuZCBpdCYjMzk7cyBhIG5vLWdvLiBUaGlzIGlzIGxvb2tpbmcgbGlrZSBhIHN0cmFpZ2h0IGhhcmR3YXJlIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBpNDBlIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBkZWFscyB3aXRoIHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIFBDSWUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHRoYXQsIHVubGlrZSBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYXNvbmFibHkgdGVzdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IGZ1enplcnMgbGlrZSBzeXprYWxsZXIgZ2VuZXJhbGx5IHVzZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNpbmcgbXkga25vd2xlZGdlIG9mIFFFTVUmIzM5O3Mgc3VwcG9ydGVkIG5ldHdvcmsgZGV2aWNlcy4gSSBrbm93IGZvciBzdXJlIHRoYXQgaXQgZG9lcyAqbm90KiBlbXVsYXRlIGk0MGUuIEkgY2FuIGNvbmZpcm0gdGhpcyBhZ2FpbnN0IG15IG1lbW9yeTogUUVNVSYjMzk7cyBnb3QgZTEwMDAsIGUxMDAwZSwgaWdiLCBydGw4MTM5LCBwY25ldCwgbmUya19wY2ksIHZteG5ldDMsIHZpcnRpby1uZXQsIGFuZCB0dWxpcCwgd2hpY2ggSSYjMzk7dmUgc2VlbiBpbiB0aGUgcGFzdC4gRXZlbiBpZiBieSBzb21lIGNoYW5jZSBpdCAqZGlkKiBlbXVsYXRlIGk0MGUsIHRoYXQgWERQIHplcm8tY29weSBzdHVmZiBpcyBsaWtlbHkgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQgaGFyZHdhcmUgbWlnaHQgbm90IGJlIGVtdWxhdGVkIGVpdGhlci4gQnV0IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZG9lc24mIzM5O3QuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCByZWFsaXN0aWNhbGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudCwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjE5OjExLjg5OTczMDQ3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDA2MDQ1NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjE5OjExLjg5OTczNTg3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODkxNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2FkMGZmMGRlZmFiOGVlMGZkNTQ4MGZiNzg3Y2Y2N2ZjM2Q0MzY0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjE5OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuaW5kZXggZWY1ZTY1NzgxNmYwMC4uODc1NTNiMTRkMzRhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbkBAIC0xODMzLDE3ICsxODMzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpNDBlX3J4X2hhc2goc3RydWN0IGk0MGVfcmluZyAqcmluZyxcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXFxuKyAqIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxcbiAgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uXFxuICAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxcbiAgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxcbi0gKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcXG4tICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLlxcbisgKiBQb3B1bGF0ZSBoYXNoLCBjaGVja3N1bSwgUFRQIHRpbWVzdGFtcCBhbmQgVkxBTiBmcm9tIEByeF9kZXNjLiBEb2VzIG5vdFxcbisgKiBjYWxsIHNrYl9yZWNvcmRfcnhfcXVldWUoKSBvciBldGhfdHlwZV90cmFucygpOyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBnb3RcXG4rICogdGhvc2UgZnJvbSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBzaG91bGQgdXNlIHRoaXMgaGVscGVyLlxcbiAgKiovXFxuLXZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcXG4tXFx0XFx0XFx0ICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHU2NCBxd29yZCA9IGxlNjRfdG9fY3B1KHJ4X2Rlc2MtXFx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcXG4gXFx0dTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTtcXG5AQCAtMTg1OCwxNCArMTg1OCwzMCBAQCB2b2lkIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcbiBcXHRpNDBlX3J4X2NoZWNrc3VtKHJ4X3JpbmctXFx1MDAzZXZzaSwgc2tiLCByeF9kZXNjKTtcXG4gXFxuLVxcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuLVxcbiBcXHRpZiAocXdvcmQgXFx1MDAyNiBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkge1xcbiBcXHRcXHRfX2xlMTYgdmxhbl90YWcgPSByeF9kZXNjLVxcdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxO1xcbiBcXG4gXFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7XFxuIFxcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXFxuKyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cXG4rICogQHJ4X2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEVPUCBSeCBkZXNjcmlwdG9yXFxuKyAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSByaW5nLCBkZXNjcmlwdG9yLCBhbmQgcGFja2V0IGluZm9ybWF0aW9uIGluXFxuKyAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZFxcbisgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXFxuKyAqKi9cXG4rdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XFxuK1xcbitcXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiBcXG4gXFx0LyogbW9kaWZpZXMgdGhlIHNrYiAtIGNvbnN1bWVzIHRoZSBlbmV0IGhlYWRlciAqL1xcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByeF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXFxuaW5kZXggZTI2ODA3ZmQyMTIzMi4uM2M1MmUwZTYwNDg3NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXFxuQEAgLTksNiArOSw4IEBAXFxuIGludCBpNDBlX3htaXRfeGRwX3R4X3Jpbmcoc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTtcXG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcXG4gXFx0XFx0XFx0XFx0ICAgdTY0IHF3b3JkMSk7XFxuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgaTQwZV94ZHBfcmluZ191cGRhdGVfdGFpbChzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xcbmluZGV4IDlmNDczODhlYWJhNTMuLmRmYTUxOWMzMGEwZDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuQEAgLTMsNiArMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bnJvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC94ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImk0MGVfdHhyeF9jb21tb24uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImk0MGVfeHNrLmhcXFwiXFxuQEAgLTI3Nyw3MCArMjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxcbiBcXHRyZXR1cm4gY291bnQgPT0gbmJfYnVmZnM7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxcbi0gKiBAcnhfcmluZzogUnggcmluZ1xcbi0gKiBAeGRwOiB4ZHBfYnVmZlxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9ucyBhbGxvY2F0ZXMgYSBuZXcgc2tiIGZyb20gYSB6ZXJvLWNvcHkgUnggYnVmZmVyLlxcbi0gKlxcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4tICoqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmk0MGVfY29uc3RydWN0X3NrYl96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCB0b3RhbHNpemUgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0geGRwLVxcdTAwM2VkYXRhX21ldGE7XFxuLVxcdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbi1cXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IE5VTEw7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdHUzMiBucl9mcmFncyA9IDA7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpKSB7XFxuLVxcdFxcdHNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcXG4tXFx0XFx0bnJfZnJhZ3MgPSBzaW5mby1cXHUwMDNlbnJfZnJhZ3M7XFxuLVxcdH1cXG4tXFx0bmV0X3ByZWZldGNoKHhkcC1cXHUwMDNlZGF0YV9tZXRhKTtcXG4tXFxuLVxcdC8qIGFsbG9jYXRlIGEgc2tiIHRvIHN0b3JlIHRoZSBmcmFncyAqL1xcbi1cXHRza2IgPSBuYXBpX2FsbG9jX3NrYihcXHUwMDI2cnhfcmluZy1cXHUwMDNlcV92ZWN0b3ItXFx1MDAzZW5hcGksIHRvdGFsc2l6ZSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVxcdTAwM2VkYXRhX21ldGEsXFxuLVxcdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xcbi1cXG4tXFx0aWYgKG1ldGFzaXplKSB7XFxuLVxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XFxuLVxcdFxcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChsaWtlbHkoIXhkcF9idWZmX2hhc19mcmFncyh4ZHApKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5yX2ZyYWdzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2tpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbi1cXHRcXHRza2JfZnJhZ190ICpmcmFnID0gXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1tpXTtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdFxcdHZvaWQgKmFkZHI7XFxuLVxcbi1cXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4tXFx0XFx0aWYgKCFwYWdlKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcXG4tXFxuLVxcdFxcdG1lbWNweShhZGRyLCBza2JfZnJhZ19wYWdlKGZyYWcpLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcXG4tXFxuLVxcdFxcdF9fc2tiX2ZpbGxfcGFnZV9kZXNjX25vYWNjKHNraW5mbywgc2tpbmZvLVxcdTAwM2Vucl9mcmFncysrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBhZGRyLCAwLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcXG4tXFx0fVxcbi1cXG4tb3V0Olxcbi1cXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuLVxcdHJldHVybiBza2I7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHBfYnVmZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLFxcbkBAIC0zNzIsMjEgKzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcdFxcdCAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0XFxuIFxcdFxcdCAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7XFxuK1xcdFxcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XFxuIFxcdFxcdGlmICghc2tiKSB7XFxuK1xcdFxcdFxcdHhza19idWZmX2ZyZWUoeGRwX2J1ZmYpO1xcbiBcXHRcXHRcXHRyeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5hbGxvY19idWZmX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHQqcnhfcGFja2V0cyA9IDA7XFxuIFxcdFxcdFxcdCpyeF9ieXRlcyA9IDA7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGV0aF9za2JfcGFkKHNrYikpIHtcXG4tXFx0XFx0XFx0KnJ4X3BhY2tldHMgPSAwO1xcbi1cXHRcXHRcXHQqcnhfYnl0ZXMgPSAwO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGk0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XFxuK1xcdFxcdC8qIHhkcF9idWlsZF9za2JfZnJvbV96YygpIGFscmVhZHkgcmFuIGV0aF90eXBlX3RyYW5zKCkgYW5kXFxuK1xcdFxcdCAqIHNrYl9yZWNvcmRfcnhfcXVldWUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTtcXG4gXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShcXHUwMDI2cnhfcmluZy1cXHUwMDNlcV92ZWN0b3ItXFx1MDAzZW5hcGksIHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToxMi4yMDczOTA1NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzY5ODM3OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIDQwR2JFIChpNDBlKSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gU2luY2UgaTQwZSBpcyBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgZHJpdmVyIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYWQwZmYwZGVmYWI4ZWUwZmQ1NDgwZmI3ODdjZjY3ZmMzZDQzNjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMToxOToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi44NzU1M2IxNGQzNGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTE4MzMsMTcgKzE4MzMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGk0MGVfcnhfaGFzaChzdHJ1Y3QgaTQwZV9yaW5nICpyaW5nLFxuIH1cbiBcbiAvKipcbi0gKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuKyAqIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuICAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cbiAgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3JcbiAgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW5cbi0gKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbi0gKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXG4rICogUG9wdWxhdGUgaGFzaCwgY2hlY2tzdW0sIFBUUCB0aW1lc3RhbXAgYW5kIFZMQU4gZnJvbSBAcnhfZGVzYy4gRG9lcyBub3RcbisgKiBjYWxsIHNrYl9yZWNvcmRfcnhfcXVldWUoKSBvciBldGhfdHlwZV90cmFucygpOyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBnb3RcbisgKiB0aG9zZSBmcm9tIHhkcF9idWlsZF9za2JfZnJvbV96YygpIHNob3VsZCB1c2UgdGhpcyBoZWxwZXIuXG4gICoqL1xuLXZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbitcdFx0XHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHU2NCBxd29yZCA9IGxlNjRfdG9fY3B1KHJ4X2Rlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuIFx0dTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTtcbkBAIC0xODU4LDE0ICsxODU4LDMwIEBAIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcbiBcdGk0MGVfcnhfY2hlY2tzdW0ocnhfcmluZy1cdTAwM2V2c2ksIHNrYiwgcnhfZGVzYyk7XG4gXG4tXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4tXG4gXHRpZiAocXdvcmQgXHUwMDI2IEJJVChJNDBFX1JYX0RFU0NfU1RBVFVTX0wyVEFHMVBfU0hJRlQpKSB7XG4gXHRcdF9fbGUxNiB2bGFuX3RhZyA9IHJ4X2Rlc2MtXHUwMDNld2IucXdvcmQwLmxvX2R3b3JkLmwydGFnMTtcbiBcbiBcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbiBcdFx0XHRcdCAgICAgICBsZTE2X3RvX2NwdSh2bGFuX3RhZykpO1xuIFx0fVxuK31cbitcbisvKipcbisgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuKyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cbisgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3JcbisgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW5cbisgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbisgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXG4rICoqL1xuK3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbitcdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4rXG4rXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gXG4gXHQvKiBtb2RpZmllcyB0aGUgc2tiIC0gY29uc3VtZXMgdGhlIGVuZXQgaGVhZGVyICovXG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJ4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXG5pbmRleCBlMjY4MDdmZDIxMjMyLi4zYzUyZTBlNjA0ODc2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXG5AQCAtOSw2ICs5LDggQEBcbiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcbiBcdFx0XHRcdCAgIHU2NCBxd29yZDEpO1xuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuK1x0XHRcdCAgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBpNDBlX3hkcF9yaW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbmluZGV4IDlmNDczODhlYWJhNTMuLmRmYTUxOWMzMGEwZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuQEAgLTMsNiArMyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bnJvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFx1MDAzZVxuICNpbmNsdWRlIFwiaTQwZV90eHJ4X2NvbW1vbi5oXCJcbiAjaW5jbHVkZSBcImk0MGVfeHNrLmhcIlxuQEAgLTI3Nyw3MCArMjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0cmV0dXJuIGNvdW50ID09IG5iX2J1ZmZzO1xuIH1cbiBcbi0vKipcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxuLSAqIEByeF9yaW5nOiBSeCByaW5nXG4tICogQHhkcDogeGRwX2J1ZmZcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuXG4tICpcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cbi0gKiovXG4tc3RhdGljIHN0cnVjdCBza19idWZmICppNDBlX2NvbnN0cnVjdF9za2JfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHR1bnNpZ25lZCBpbnQgdG90YWxzaXplID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0gTlVMTDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHR1MzIgbnJfZnJhZ3MgPSAwO1xuLVxuLVx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXHRcdG5yX2ZyYWdzID0gc2luZm8tXHUwMDNlbnJfZnJhZ3M7XG4tXHR9XG4tXHRuZXRfcHJlZmV0Y2goeGRwLVx1MDAzZWRhdGFfbWV0YSk7XG4tXG4tXHQvKiBhbGxvY2F0ZSBhIHNrYiB0byBzdG9yZSB0aGUgZnJhZ3MgKi9cbi1cdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgdG90YWxzaXplKTtcbi1cdGlmICh1bmxpa2VseSghc2tiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVx1MDAzZWRhdGFfbWV0YSxcbi1cdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xuLVxuLVx0aWYgKG1ldGFzaXplKSB7XG4tXHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XG4tXHRcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobGlrZWx5KCF4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2ZyYWdzOyBpKyspIHtcbi1cdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2tpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xuLVx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2luZm8tXHUwMDNlZnJhZ3NbaV07XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0XHR2b2lkICphZGRyO1xuLVxuLVx0XHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbi1cdFx0aWYgKCFwYWdlKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdGFkZHIgPSBwYWdlX3RvX3ZpcnQocGFnZSk7XG4tXG4tXHRcdG1lbWNweShhZGRyLCBza2JfZnJhZ19wYWdlKGZyYWcpLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcbi1cbi1cdFx0X19za2JfZmlsbF9wYWdlX2Rlc2Nfbm9hY2Moc2tpbmZvLCBza2luZm8tXHUwMDNlbnJfZnJhZ3MrKyxcbi1cdFx0XHRcdFx0ICAgYWRkciwgMCwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4tXHR9XG4tXG4tb3V0OlxuLVx0eHNrX2J1ZmZfZnJlZSh4ZHApO1xuLVx0cmV0dXJuIHNrYjtcbi19XG4tXG4gc3RhdGljIHZvaWQgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHBfYnVmZixcbiBcdFx0XHRcdCAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYyxcbkBAIC0zNzIsMjEgKzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdCAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0XG4gXHRcdCAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS5cbiBcdFx0ICovXG4tXHRcdHNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7XG4rXHRcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XG4gXHRcdGlmICghc2tiKSB7XG4rXHRcdFx0eHNrX2J1ZmZfZnJlZSh4ZHBfYnVmZik7XG4gXHRcdFx0cnhfcmluZy1cdTAwM2VyeF9zdGF0cy5hbGxvY19idWZmX2ZhaWxlZCsrO1xuIFx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbiBcdFx0XHQqcnhfYnl0ZXMgPSAwO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoZXRoX3NrYl9wYWQoc2tiKSkge1xuLVx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbi1cdFx0XHQqcnhfYnl0ZXMgPSAwO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVxuLVx0XHRpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuK1x0XHQvKiB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBhbHJlYWR5IHJhbiBldGhfdHlwZV90cmFucygpIGFuZFxuK1x0XHQgKiBza2JfcmVjb3JkX3J4X3F1ZXVlKCkuXG4rXHRcdCAqL1xuK1x0XHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4gXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2cnhfcmluZy1cdTAwM2VxX3ZlY3Rvci1cdTAwM2VuYXBpLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToxMi4yMDczOTE5MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTkyNDkzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaTQwZSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYGk0MGVgIG5ldHdvcmsgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkc2AsIHdoaWNoIGlzIGEgcmVmYWN0b3Jpbmcgb2Ygc29ydHMsIGFuZCBtb2RpZmllcyBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AgdG8gdXNlIGB4ZHBfYnVpbGRfc2tiX2Zyb21femNgIGluc3RlYWQgb2Ygc29tZSBjdXN0b20gZnVuY3Rpb24sIGBpNDBlX2NvbnN0cnVjdF9za2JfemNgLCB3aGljaCBpcyBub3cgcmVtb3ZlZC5cblxuTm93LCB3YWl0IGEgbWludXRlLCBgaTQwZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgYW4gSW50ZWwgRXRoZXJuZXQgZHJpdmVyLCByaWdodD8gWWVhaCwgaXQncyBmb3IgSW50ZWwncyA0MCBHaWdhYml0IEV0aGVybmV0LiBTbywgdGhpcyBpcyBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZSwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IHN0YW5kYXJkIFFFTVUgcHJvdmlkZXMgaTQwZSBlbXVsYXRpb24uIEl0IHVzdWFsbHkgY292ZXJzIHRoZSBiYXNpY3M6IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgbmUyaywgcGNuZXQuIEJ1dCBpNDBlPyBJJ20gbm90IHNlZWluZyBpdC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIE5vLCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpNDBlLiBSaWdodCwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGFuZCB0aGlzIGNvZGUgcHJvYmFibHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk9rYXksIHNvIG5vIFFFTVUgZW11bGF0aW9uLiBJdCdzIHRpbWUgdG8gY29uZmlybSB0aGlzLiBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBRRU1VIHNvdXJjZSByaWdodCBub3csIHNvIGxldCBtZSBqdXN0IHNlYXJjaCB0aGUga2VybmVsIHRyZWUuIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIGFueSBtZW50aW9ucyBvZiBpNDBlIGVtdWxhdGlvbi4gTm9wZSwgbm90IHNlZWluZyBhbnl0aGluZy5cblxuQSByZWxhdGVkIHRob3VnaHQsIGlzIHRoaXMgaTQwZSBjb2RlIHRlc3RhYmxlIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIG9mdGVuIHRhcmdldHMgdmlydHVhbCBkZXZpY2VzIG9yIGRldmljZXMgZW11bGF0ZWQgYnkgUUVNVSBsaWtlIGUxMDAwZSwgaWdiLiBCdXQgbm90IGk0MGUuIExldCBtZSBqdXN0IGJlIHN1cmUsIHRob3VnaC4gV2FpdCwgUUVNVSBkb2VzIGVtdWxhdGUgaWdiIG5vdy4gRG9lcyBpdCBlbXVsYXRlIGk0MGU/IE5vcGUsIGl0J3MgYSBwaHlzaWNhbCBkcml2ZXIuXG5cbk9rYXksIHNvIGl0J3MgYSBwaHlzaWNhbC1vbmx5IGRyaXZlciBhbmQgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgbWVhbnMgaXQncyBwcmV0dHkgbXVjaCB1bnJlYWNoYWJsZSBpbiBtb3N0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gTGV0J3MgbWFrZSBzdXJlLCB0aG91Z2guIE5vLCBpdCdzIGEgUENJIGRyaXZlci4gSXQncyBhIGRlYWQgZW5kLCByZWFsbHkuIFdlbGwsIEkndmUgZ290IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jYCBub3cgdG8gY29uZmlybSBhIGZldyBhc3N1bXB0aW9ucywgYnV0IGl0IHNlZW1zIHRoYXQgdGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MjEuNzk5ODg3NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDA2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXIuKmk0MGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYz0xNjYzMT1zdGF0aWMgaW50IF9faW5pdCBpNDBlX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjUxLVxcdGk0MGVfZGJnX2luaXQoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjE2NjUyOlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmk0MGVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjUzLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MjEuOTkyMjk5ODM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1NjY2NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpYWJpbGl0eSBvZiBGdXp6aW5nIHRoZSBpNDBlIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaTQwZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgaGF2ZSBkZWNlbnQgc3VwcG9ydCBmb3IgdGhpcz8gSSByZWNhbGwgc29tZSByZWNlbnQgYWRkaXRpb25zIGZvciBgaWdiYCwgYnV0IEknbSBwcmV0dHkgc3VyZSBgaTQwZWAgaXNuJ3QgaW4gdGhlIG1peC4gTGV0IG1lIGNvbmZpcm0gd2l0aCBhIHF1aWNrIHNlYXJjaCwgb3IgbWF5YmUganVzdCB0aGluayBpdCB0aHJvdWdoLi4uIFllYWgsIEknbSBmYWlybHkgY2VydGFpbiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgaTQwZS5cblxuSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBzeXprYWxsZXIgY29uZmlnczsgcGVyaGFwcyB0aGVyZSdzIHNvbWUgbWVudGlvbiBvZiBgQ09ORklHX0k0MEVgIG9yIGlmIGl0J3MgZ2VuZXJhbGx5IGZ1enplZC4gV2FpdCwgdGhlIHByb21wdCBpdHNlbGYgY2xhcmlmaWVzIHRoZSBpc3N1ZTogSXQgaGlnaGxpZ2h0cyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyAobGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYGFtZGdwdWApIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIGFuZCBhcmVuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTm93LCBpNDBlICppc24ndCogYSBTbWFydE5JQyBvciBQQ0llIHN3aXRjaCwgaXQgaXMsIGhvd2V2ZXIsIGFuIEludGVsIDQwR2JFIG5ldHdvcmsgZHJpdmVyIGFuZCAqZG9lcyogcmVxdWlyZSBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZC4gU28sIFFFTVUgaXMgZGVmaW5pdGVseSBub3QgZ29pbmcgdG8gaGVscCB1cyBoZXJlLlxuXG5SaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGk0MGUgKmNhbiogYmUgdGVzdGVkLiBJJ20gbGVhbmluZyB0b3dhcmQgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCBcImk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgc28gaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiXG5cbkhvd2V2ZXIsIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBzb21lIHZpcnR1YWwgaTQwZSBkcml2ZXIuIE5vLCB0aGVyZSdzIGBpNDBldmZgIChub3cgYGlhdmZgKS5cblxuT2theSwgbGV0J3MgY29uc2lkZXIgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkc2AgLSBpcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIHRoYXQgZnVuY3Rpb24gd2l0aG91dCBoYXJkd2FyZT8gSXQncyBjYWxsZWQgZnJvbSBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgaTQwZV9jbGVhbl9yeF9pcnFfemNgLiBUaGlzIGxhc3QgZnVuY3Rpb24gaXMgdGhlIE5BUEkgcG9sbCByb3V0aW5lIGZvciB6ZXJvLWNvcHkgWERQLiBUaGlzIG1lYW5zIGl0IHJlcXVpcmVzIHRoZSBoYXJkd2FyZSB0byByZWNlaXZlIHBhY2tldHMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSByaW5nIGJ1ZmZlcnMgc2ltcGx5IHdvbid0IGJlIHBvcHVsYXRlZCwgYW5kIHRoZSBOQVBJIHBvbGwgd2lsbCBuZXZlciBwcm9jZXNzIGFueSBwYWNrZXRzLiBTbywgdGhhdCBzcGVjaWZpYyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBoYXJkd2FyZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkbyBhIGZpbmFsIHF1aWNrIGNoZWNrLiBJcyB0aGVyZSBhbnkgc29mdHdhcmUgdGVzdGluZyBmcmFtZXdvcmsgaW4gdGhlIGtlcm5lbCBmb3IgaTQwZT9cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToyOS43NDg5Njk3NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjc5MTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpNDBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3RpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToyOS45Mjk2NTgwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTc2MDg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogSW50ZWwgNDBHYkUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhyb3VnaCB0aGUgdG9vbHMgYW5kIHRlc3RpbmcgZGlyZWN0b3JpZXMsIGFuZCBpdCdzIGEgbm8tZ28uIFRoaXMgaXMgbG9va2luZyBsaWtlIGEgc3RyYWlnaHQgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGk0MGUgbmV0d29yayBkcml2ZXIsIHdoaWNoIGRlYWxzIHdpdGggdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgUENJZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFRoaXMgbWVhbnMgdGhhdCwgdW5saWtlIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhc29uYWJseSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgZnV6emVycyBsaWtlIHN5emthbGxlciBnZW5lcmFsbHkgdXNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNpbmcgbXkga25vd2xlZGdlIG9mIFFFTVUncyBzdXBwb3J0ZWQgbmV0d29yayBkZXZpY2VzLiBJIGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2VzICpub3QqIGVtdWxhdGUgaTQwZS4gSSBjYW4gY29uZmlybSB0aGlzIGFnYWluc3QgbXkgbWVtb3J5OiBRRU1VJ3MgZ290IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgcGNuZXQsIG5lMmtfcGNpLCB2bXhuZXQzLCB2aXJ0aW8tbmV0LCBhbmQgdHVsaXAsIHdoaWNoIEkndmUgc2VlbiBpbiB0aGUgcGFzdC4gRXZlbiBpZiBieSBzb21lIGNoYW5jZSBpdCAqZGlkKiBlbXVsYXRlIGk0MGUsIHRoYXQgWERQIHplcm8tY29weSBzdHVmZiBpcyBsaWtlbHkgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQgaGFyZHdhcmUgbWlnaHQgbm90IGJlIGVtdWxhdGVkIGVpdGhlci4gQnV0IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCByZWFsaXN0aWNhbGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MzUuOTA1NzQ3NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIDQwR2JFIChpNDBlKSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gU2luY2UgaTQwZSBpcyBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgZHJpdmVyIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbmmj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 11:04:48 +0000 UTC FinishedAt: 2026-08-01 11:19:36 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhZDBmZjBkZWZhYjhlZTBmZDU0ODBmYjc4N2NmNjdmYzNkNDM2NDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjE5OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi44NzU1M2IxNGQzNGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTE4MzMsMTcgJiM0MzsxODMzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpNDBlX3J4X2hhc2goc3RydWN0IGk0MGVfcmluZyAqcmluZyxcbiB9XG4gXG4gLyoqXG4tICogaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgaGVhZGVyIGZpZWxkcyBmcm9tIFJ4IGRlc2NyaXB0b3JcbiYjNDM7ICogX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXG4gICogQHJ4X3Jpbmc6IHJ4IGRlc2NyaXB0b3IgcmluZyBwYWNrZXQgaXMgYmVpbmcgdHJhbnNhY3RlZCBvblxuICAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxuICAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkXG4gICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxuLSAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZFxuLSAqIG90aGVyIGZpZWxkcyB3aXRoaW4gdGhlIHNrYi5cbiYjNDM7ICogUG9wdWxhdGUgaGFzaCwgY2hlY2tzdW0sIFBUUCB0aW1lc3RhbXAgYW5kIFZMQU4gZnJvbSBAcnhfZGVzYy4gRG9lcyBub3RcbiYjNDM7ICogY2FsbCBza2JfcmVjb3JkX3J4X3F1ZXVlKCkgb3IgZXRoX3R5cGVfdHJhbnMoKTsgY2FsbGVycyB0aGF0IGFscmVhZHkgZ290XG4mIzQzOyAqIHRob3NlIGZyb20geGRwX2J1aWxkX3NrYl9mcm9tX3pjKCkgc2hvdWxkIHVzZSB0aGlzIGhlbHBlci5cbiAgKiovXG4tdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuLVx0XHRcdCAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1NjQgcXdvcmQgPSBsZTY0X3RvX2NwdShyeF9kZXNjLVx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcbiBcdHUzMiByeF9zdGF0dXMgPSBGSUVMRF9HRVQoSTQwRV9SWERfUVcxX1NUQVRVU19NQVNLLCBxd29yZCk7XG5AQCAtMTg1OCwxNCAmIzQzOzE4NTgsMzAgQEAgdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFxuIFx0aTQwZV9yeF9jaGVja3N1bShyeF9yaW5nLVx1MDAzZXZzaSwgc2tiLCByeF9kZXNjKTtcbiBcbi1cdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbi1cbiBcdGlmIChxd29yZCBcdTAwMjYgQklUKEk0MEVfUlhfREVTQ19TVEFUVVNfTDJUQUcxUF9TSElGVCkpIHtcbiBcdFx0X19sZTE2IHZsYW5fdGFnID0gcnhfZGVzYy1cdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxO1xuIFxuIFx0XHRfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwgaHRvbnMoRVRIX1BfODAyMVEpLFxuIFx0XHRcdFx0ICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuJiM0MzsgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uXG4mIzQzOyAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxuJiM0MzsgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxuJiM0MzsgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbiYjNDM7ICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLlxuJiM0MzsgKiovXG4mIzQzO3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4mIzQzO1xuJiM0MztcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiBcbiBcdC8qIG1vZGlmaWVzIHRoZSBza2IgLSBjb25zdW1lcyB0aGUgZW5ldCBoZWFkZXIgKi9cbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcnhfcmluZy1cdTAwM2VuZXRkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbmluZGV4IGUyNjgwN2ZkMjEyMzIuLjNjNTJlMGU2MDQ4NzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcbiBcdFx0XHRcdCAgIHU2NCBxd29yZDEpO1xuJiM0Mzt2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFx0XHRcdCAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiB2b2lkIGk0MGVfeGRwX3JpbmdfdXBkYXRlX3RhaWwoc3RydWN0IGk0MGVfcmluZyAqeGRwX3JpbmcpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuaW5kZXggOWY0NzM4OGVhYmE1My4uZGZhNTE5YzMwYTBkMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bnJvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQveGRwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQveGRwX3NvY2tfZHJ2LmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpNDBlX3R4cnhfY29tbW9uLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtpNDBlX3hzay5oXCYjMzQ7XG5AQCAtMjc3LDcwICYjNDM7Mjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0cmV0dXJuIGNvdW50ID09IG5iX2J1ZmZzO1xuIH1cbiBcbi0vKipcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxuLSAqIEByeF9yaW5nOiBSeCByaW5nXG4tICogQHhkcDogeGRwX2J1ZmZcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuXG4tICpcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cbi0gKiovXG4tc3RhdGljIHN0cnVjdCBza19idWZmICppNDBlX2NvbnN0cnVjdF9za2JfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHR1bnNpZ25lZCBpbnQgdG90YWxzaXplID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0gTlVMTDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHR1MzIgbnJfZnJhZ3MgPSAwO1xuLVxuLVx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXHRcdG5yX2ZyYWdzID0gc2luZm8tXHUwMDNlbnJfZnJhZ3M7XG4tXHR9XG4tXHRuZXRfcHJlZmV0Y2goeGRwLVx1MDAzZWRhdGFfbWV0YSk7XG4tXG4tXHQvKiBhbGxvY2F0ZSBhIHNrYiB0byBzdG9yZSB0aGUgZnJhZ3MgKi9cbi1cdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgdG90YWxzaXplKTtcbi1cdGlmICh1bmxpa2VseSghc2tiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVx1MDAzZWRhdGFfbWV0YSxcbi1cdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xuLVxuLVx0aWYgKG1ldGFzaXplKSB7XG4tXHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XG4tXHRcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobGlrZWx5KCF4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpza2luZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4tXHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZzaW5mby1cdTAwM2VmcmFnc1tpXTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXHRcdHZvaWQgKmFkZHI7XG4tXG4tXHRcdHBhZ2UgPSBkZXZfYWxsb2NfcGFnZSgpO1xuLVx0XHRpZiAoIXBhZ2UpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdH1cbi1cdFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcbi1cbi1cdFx0bWVtY3B5KGFkZHIsIHNrYl9mcmFnX3BhZ2UoZnJhZyksIHNrYl9mcmFnX3NpemUoZnJhZykpO1xuLVxuLVx0XHRfX3NrYl9maWxsX3BhZ2VfZGVzY19ub2FjYyhza2luZm8sIHNraW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MzssXG4tXHRcdFx0XHRcdCAgIGFkZHIsIDAsIHNrYl9mcmFnX3NpemUoZnJhZykpO1xuLVx0fVxuLVxuLW91dDpcbi1cdHhza19idWZmX2ZyZWUoeGRwKTtcbi1cdHJldHVybiBza2I7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwX2J1ZmYsXG4gXHRcdFx0XHQgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsXG5AQCAtMzcyLDIxICYjNDM7MzA5LDE5IEBAIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0ICogQklUKEk0MEVfUlhEX1FXMV9FUlJPUl9TSElGVCkuIFRoaXMgaXMgZHVlIHRvIHRoYXRcbiBcdFx0ICogU0JQIGlzICpub3QqIHNldCBpbiBQUlRfU0JQVlNJIChkZWZhdWx0IG5vdCBzZXQpLlxuIFx0XHQgKi9cbi1cdFx0c2tiID0gaTQwZV9jb25zdHJ1Y3Rfc2tiX3pjKHJ4X3JpbmcsIHhkcF9idWZmKTtcbiYjNDM7XHRcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XG4gXHRcdGlmICghc2tiKSB7XG4mIzQzO1x0XHRcdHhza19idWZmX2ZyZWUoeGRwX2J1ZmYpO1xuIFx0XHRcdHJ4X3JpbmctXHUwMDNlcnhfc3RhdHMuYWxsb2NfYnVmZl9mYWlsZWQmIzQzOyYjNDM7O1xuIFx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbiBcdFx0XHQqcnhfYnl0ZXMgPSAwO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoZXRoX3NrYl9wYWQoc2tiKSkge1xuLVx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbi1cdFx0XHQqcnhfYnl0ZXMgPSAwO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVxuLVx0XHRpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuJiM0MztcdFx0LyogeGRwX2J1aWxkX3NrYl9mcm9tX3pjKCkgYWxyZWFkeSByYW4gZXRoX3R5cGVfdHJhbnMoKSBhbmRcbiYjNDM7XHRcdCAqIHNrYl9yZWNvcmRfcnhfcXVldWUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0X19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuIFx0XHRuYXBpX2dyb19yZWNlaXZlKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgc2tiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYWQwZmYwZGVmYWI4ZWUwZmQ1NDgwZmI3ODdjZjY3ZmMzZDQzNjQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMToxOToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IGVmNWU2NTc4MTZmMDAuLjg3NTUzYjE0ZDM0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMTgzMywxNyAmIzQzOzE4MzMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGk0MGVfcnhfaGFzaChzdHJ1Y3QgaTQwZV9yaW5nICpyaW5nLAogfQogCiAvKioKLSAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yCiYjNDM7ICogX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yCiAgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uCiAgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3IKICAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkCiAgKgotICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW4KLSAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZAotICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLgomIzQzOyAqIFBvcHVsYXRlIGhhc2gsIGNoZWNrc3VtLCBQVFAgdGltZXN0YW1wIGFuZCBWTEFOIGZyb20gQHJ4X2Rlc2MuIERvZXMgbm90CiYjNDM7ICogY2FsbCBza2JfcmVjb3JkX3J4X3F1ZXVlKCkgb3IgZXRoX3R5cGVfdHJhbnMoKTsgY2FsbGVycyB0aGF0IGFscmVhZHkgZ290CiYjNDM7ICogdGhvc2UgZnJvbSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBzaG91bGQgdXNlIHRoaXMgaGVscGVyLgogICoqLwotdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAotCQkJICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7dm9pZCBfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiYjNDM7CQkJICAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1NjQgcXdvcmQgPSBsZTY0X3RvX2NwdShyeF9kZXNjLSZndDt3Yi5xd29yZDEuc3RhdHVzX2Vycm9yX2xlbik7CiAJdTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTsKQEAgLTE4NTgsMTQgJiM0MzsxODU4LDMwIEBAIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKIAogCWk0MGVfcnhfY2hlY2tzdW0ocnhfcmluZy0mZ3Q7dnNpLCBza2IsIHJ4X2Rlc2MpOwogCi0Jc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctJmd0O3F1ZXVlX2luZGV4KTsKLQogCWlmIChxd29yZCAmYW1wOyBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkgewogCQlfX2xlMTYgdmxhbl90YWcgPSByeF9kZXNjLSZndDt3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxOwogCiAJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7CiAJfQomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvcgomIzQzOyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb24KJiM0MzsgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3IKJiM0MzsgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZAomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW4KJiM0MzsgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmQKJiM0MzsgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuCiYjNDM7ICoqLwomIzQzO3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKJiM0MzsJCQkgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CV9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKJiM0MzsKJiM0MzsJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctJmd0O3F1ZXVlX2luZGV4KTsKIAogCS8qIG1vZGlmaWVzIHRoZSBza2IgLSBjb25zdW1lcyB0aGUgZW5ldCBoZWFkZXIgKi8KIAlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByeF9yaW5nLSZndDtuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaAppbmRleCBlMjY4MDdmZDIxMjMyLi4zYzUyZTBlNjA0ODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaApAQCAtOSw2ICYjNDM7OSw4IEBACiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7CiB2b2lkIGk0MGVfY2xlYW5fcHJvZ3JhbW1pbmdfc3RhdHVzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIHU2NCBxd29yZDBfcmF3LAogCQkJCSAgIHU2NCBxd29yZDEpOwomIzQzO3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAomIzQzOwkJCSAgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAogCQkJICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpNDBlX3hkcF9yaW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYwppbmRleCA5ZjQ3Mzg4ZWFiYTUzLi5kZmE1MTljMzBhMGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jCkBAIC0zLDYgJiM0MzszLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2JwZl90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vucm9sbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQveGRwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3hkcF9zb2NrX2Rydi5oJmd0OwogI2luY2x1ZGUgJiMzNDtpNDBlX3R4cnhfY29tbW9uLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpNDBlX3hzay5oJiMzNDsKQEAgLTI3Nyw3MCAmIzQzOzI3OCw2IEBAIGJvb2wgaTQwZV9hbGxvY19yeF9idWZmZXJzX3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsIHUxNiBjb3VudCkKIAlyZXR1cm4gY291bnQgPT0gbmJfYnVmZnM7CiB9CiAKLS8qKgotICogaTQwZV9jb25zdHJ1Y3Rfc2tiX3pjIC0gQ3JlYXRlIHNrYnVmZiBmcm9tIHplcm8tY29weSBSeCBidWZmZXIKLSAqIEByeF9yaW5nOiBSeCByaW5nCi0gKiBAeGRwOiB4ZHBfYnVmZgotICoKLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuCi0gKgotICogUmV0dXJucyB0aGUgc2tiLCBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKiovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmk0MGVfY29uc3RydWN0X3NrYl96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLAotCQkJCQkgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQotewotCXVuc2lnbmVkIGludCB0b3RhbHNpemUgPSB4ZHAtJmd0O2RhdGFfZW5kIC0geGRwLSZndDtkYXRhX21ldGE7Ci0JdW5zaWduZWQgaW50IG1ldGFzaXplID0geGRwLSZndDtkYXRhIC0geGRwLSZndDtkYXRhX21ldGE7Ci0Jc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSBOVUxMOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTMyIG5yX2ZyYWdzID0gMDsKLQotCWlmICh1bmxpa2VseSh4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpIHsKLQkJc2luZm8gPSB4ZHBfZ2V0X3NoYXJlZF9pbmZvX2Zyb21fYnVmZih4ZHApOwotCQlucl9mcmFncyA9IHNpbmZvLSZndDtucl9mcmFnczsKLQl9Ci0JbmV0X3ByZWZldGNoKHhkcC0mZ3Q7ZGF0YV9tZXRhKTsKLQotCS8qIGFsbG9jYXRlIGEgc2tiIHRvIHN0b3JlIHRoZSBmcmFncyAqLwotCXNrYiA9IG5hcGlfYWxsb2Nfc2tiKCZhbXA7cnhfcmluZy0mZ3Q7cV92ZWN0b3ItJmd0O25hcGksIHRvdGFsc2l6ZSk7Ci0JaWYgKHVubGlrZWx5KCFza2IpKQotCQlnb3RvIG91dDsKLQotCW1lbWNweShfX3NrYl9wdXQoc2tiLCB0b3RhbHNpemUpLCB4ZHAtJmd0O2RhdGFfbWV0YSwKLQkgICAgICAgQUxJR04odG90YWxzaXplLCBzaXplb2YobG9uZykpKTsKLQotCWlmIChtZXRhc2l6ZSkgewotCQlza2JfbWV0YWRhdGFfc2V0KHNrYiwgbWV0YXNpemUpOwotCQlfX3NrYl9wdWxsKHNrYiwgbWV0YXNpemUpOwotCX0KLQotCWlmIChsaWtlbHkoIXhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkKLQkJZ290byBvdXQ7Ci0KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IG5yX2ZyYWdzOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpza2luZm8gPSBza2Jfc2hpbmZvKHNrYik7Ci0JCXNrYl9mcmFnX3QgKmZyYWcgPSAmYW1wO3NpbmZvLSZndDtmcmFnc1tpXTsKLQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCXZvaWQgKmFkZHI7Ci0KLQkJcGFnZSA9IGRldl9hbGxvY19wYWdlKCk7Ci0JCWlmICghcGFnZSkgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJYWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTsKLQotCQltZW1jcHkoYWRkciwgc2tiX2ZyYWdfcGFnZShmcmFnKSwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7Ci0KLQkJX19za2JfZmlsbF9wYWdlX2Rlc2Nfbm9hY2Moc2tpbmZvLCBza2luZm8tJmd0O25yX2ZyYWdzJiM0MzsmIzQzOywKLQkJCQkJICAgYWRkciwgMCwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7Ci0JfQotCi1vdXQ6Ci0JeHNrX2J1ZmZfZnJlZSh4ZHApOwotCXJldHVybiBza2I7Ci19Ci0KIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywKIAkJCQkgICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcF9idWZmLAogCQkJCSAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywKQEAgLTM3MiwyMSAmIzQzOzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsCiAJCSAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0CiAJCSAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS4KIAkJICovCi0JCXNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7CiYjNDM7CQlza2IgPSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoeGRwX2J1ZmYpOwogCQlpZiAoIXNrYikgewomIzQzOwkJCXhza19idWZmX2ZyZWUoeGRwX2J1ZmYpOwogCQkJcnhfcmluZy0mZ3Q7cnhfc3RhdHMuYWxsb2NfYnVmZl9mYWlsZWQmIzQzOyYjNDM7OwogCQkJKnJ4X3BhY2tldHMgPSAwOwogCQkJKnJ4X2J5dGVzID0gMDsKIAkJCXJldHVybjsKIAkJfQogCi0JCWlmIChldGhfc2tiX3BhZChza2IpKSB7Ci0JCQkqcnhfcGFja2V0cyA9IDA7Ci0JCQkqcnhfYnl0ZXMgPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKJiM0MzsJCS8qIHhkcF9idWlsZF9za2JfZnJvbV96YygpIGFscmVhZHkgcmFuIGV0aF90eXBlX3RyYW5zKCkgYW5kCiYjNDM7CQkgKiBza2JfcmVjb3JkX3J4X3F1ZXVlKCkuCiYjNDM7CQkgKi8KJiM0MzsJCV9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTsKIAkJbmFwaV9ncm9fcmVjZWl2ZSgmYW1wO3J4X3JpbmctJmd0O3FfdmVjdG9yLSZndDtuYXBpLCBza2IpOwogCQlyZXR1cm47CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzUzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaTQwZSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBgaTQwZWAgbmV0d29yayBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzYCwgd2hpY2ggaXMgYSByZWZhY3RvcmluZyBvZiBzb3J0cywgYW5kIG1vZGlmaWVzIGBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjYCB0byB1c2UgYHhkcF9idWlsZF9za2JfZnJvbV96Y2AgaW5zdGVhZCBvZiBzb21lIGN1c3RvbSBmdW5jdGlvbiwgYGk0MGVfY29uc3RydWN0X3NrYl96Y2AsIHdoaWNoIGlzIG5vdyByZW1vdmVkLgoKTm93LCB3YWl0IGEgbWludXRlLCBgaTQwZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0JiMzOTtzIGFuIEludGVsIEV0aGVybmV0IGRyaXZlciwgcmlnaHQ/IFllYWgsIGl0JiMzOTtzIGZvciBJbnRlbCYjMzk7cyA0MCBHaWdhYml0IEV0aGVybmV0LiBTbywgdGhpcyBpcyBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZSwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IHN0YW5kYXJkIFFFTVUgcHJvdmlkZXMgaTQwZSBlbXVsYXRpb24uIEl0IHVzdWFsbHkgY292ZXJzIHRoZSBiYXNpY3M6IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgbmUyaywgcGNuZXQuIEJ1dCBpNDBlPyBJJiMzOTttIG5vdCBzZWVpbmcgaXQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaC4gTm8sIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBpNDBlLiBSaWdodCwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGFuZCB0aGlzIGNvZGUgcHJvYmFibHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCgpPa2F5LCBzbyBubyBRRU1VIGVtdWxhdGlvbi4gSXQmIzM5O3MgdGltZSB0byBjb25maXJtIHRoaXMuIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBRRU1VIHNvdXJjZSByaWdodCBub3csIHNvIGxldCBtZSBqdXN0IHNlYXJjaCB0aGUga2VybmVsIHRyZWUuIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBhbnkgbWVudGlvbnMgb2YgaTQwZSBlbXVsYXRpb24uIE5vcGUsIG5vdCBzZWVpbmcgYW55dGhpbmcuCgpBIHJlbGF0ZWQgdGhvdWdodCwgaXMgdGhpcyBpNDBlIGNvZGUgdGVzdGFibGUgaW4gc3l6a2FsbGVyPyBTeXprYWxsZXIgb2Z0ZW4gdGFyZ2V0cyB2aXJ0dWFsIGRldmljZXMgb3IgZGV2aWNlcyBlbXVsYXRlZCBieSBRRU1VIGxpa2UgZTEwMDBlLCBpZ2IuIEJ1dCBub3QgaTQwZS4gTGV0IG1lIGp1c3QgYmUgc3VyZSwgdGhvdWdoLiBXYWl0LCBRRU1VIGRvZXMgZW11bGF0ZSBpZ2Igbm93LiBEb2VzIGl0IGVtdWxhdGUgaTQwZT8gTm9wZSwgaXQmIzM5O3MgYSBwaHlzaWNhbCBkcml2ZXIuCgpPa2F5LCBzbyBpdCYjMzk7cyBhIHBoeXNpY2FsLW9ubHkgZHJpdmVyIGFuZCBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhhdCBtZWFucyBpdCYjMzk7cyBwcmV0dHkgbXVjaCB1bnJlYWNoYWJsZSBpbiBtb3N0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSwgdGhvdWdoLiBObywgaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLiBJdCYjMzk7cyBhIGRlYWQgZW5kLCByZWFsbHkuIFdlbGwsIEkmIzM5O3ZlIGdvdCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY2Agbm93IHRvIGNvbmZpcm0gYSBmZXcgYXNzdW1wdGlvbnMsIGJ1dCBpdCBzZWVtcyB0aGF0IHRoaXMgZHJpdmVyIHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyLippNDBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYz0xNjYzMT1zdGF0aWMgaW50IF9faW5pdCBpNDBlX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xNjY1MS1cdGk0MGVfZGJnX2luaXQoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM6MTY2NTI6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmk0MGVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTY2NTMtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpYWJpbGl0eSBvZiBGdXp6aW5nIHRoZSBpNDBlIERyaXZlcioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBpNDBlLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IGRvZXMgUUVNVSBoYXZlIGRlY2VudCBzdXBwb3J0IGZvciB0aGlzPyBJIHJlY2FsbCBzb21lIHJlY2VudCBhZGRpdGlvbnMgZm9yIGBpZ2JgLCBidXQgSSYjMzk7bSBwcmV0dHkgc3VyZSBgaTQwZWAgaXNuJiMzOTt0IGluIHRoZSBtaXguIExldCBtZSBjb25maXJtIHdpdGggYSBxdWljayBzZWFyY2gsIG9yIG1heWJlIGp1c3QgdGhpbmsgaXQgdGhyb3VnaC4uLiBZZWFoLCBJJiMzOTttIGZhaXJseSBjZXJ0YWluIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgaTQwZS4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCB0aGUgc3l6a2FsbGVyIGNvbmZpZ3M7IHBlcmhhcHMgdGhlcmUmIzM5O3Mgc29tZSBtZW50aW9uIG9mIGBDT05GSUdfSTQwRWAgb3IgaWYgaXQmIzM5O3MgZ2VuZXJhbGx5IGZ1enplZC4gV2FpdCwgdGhlIHByb21wdCBpdHNlbGYgY2xhcmlmaWVzIHRoZSBpc3N1ZTogSXQgaGlnaGxpZ2h0cyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyAobGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYGFtZGdwdWApIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIGFuZCBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIE5vdywgaTQwZSAqaXNuJiMzOTt0KiBhIFNtYXJ0TklDIG9yIFBDSWUgc3dpdGNoLCBpdCBpcywgaG93ZXZlciwgYW4gSW50ZWwgNDBHYkUgbmV0d29yayBkcml2ZXIgYW5kICpkb2VzKiByZXF1aXJlIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkLiBTbywgUUVNVSBpcyBkZWZpbml0ZWx5IG5vdCBnb2luZyB0byBoZWxwIHVzIGhlcmUuCgpSaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGk0MGUgKmNhbiogYmUgdGVzdGVkLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCwgd2l0aCB0aGUgcmVhc29uaW5nIHRoYXQgJiMzNDtpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHNvIGl0cyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OwoKSG93ZXZlciwgbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWUgdmlydHVhbCBpNDBlIGRyaXZlci4gTm8sIHRoZXJlJiMzOTtzIGBpNDBldmZgIChub3cgYGlhdmZgKS4KCk9rYXksIGxldCYjMzk7cyBjb25zaWRlciB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gYGk0MGVfcHJvY2Vzc19za2JfZmllbGRzYCAtIGlzIHRoZXJlIGFueSB3YXkgdG8gcmVhY2ggdGhhdCBmdW5jdGlvbiB3aXRob3V0IGhhcmR3YXJlPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgaTQwZV9jbGVhbl9yeF9pcnFfemNgLiBUaGlzIGxhc3QgZnVuY3Rpb24gaXMgdGhlIE5BUEkgcG9sbCByb3V0aW5lIGZvciB6ZXJvLWNvcHkgWERQLiBUaGlzIG1lYW5zIGl0IHJlcXVpcmVzIHRoZSBoYXJkd2FyZSB0byByZWNlaXZlIHBhY2tldHMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSByaW5nIGJ1ZmZlcnMgc2ltcGx5IHdvbiYjMzk7dCBiZSBwb3B1bGF0ZWQsIGFuZCB0aGUgTkFQSSBwb2xsIHdpbGwgbmV2ZXIgcHJvY2VzcyBhbnkgcGFja2V0cy4gU28sIHRoYXQgc3BlY2lmaWMgY29kZSBwYXRoIGlzIGRlZmluaXRlbHkgdW5yZWFjaGFibGUgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvIGEgZmluYWwgcXVpY2sgY2hlY2suIElzIHRoZXJlIGFueSBzb2Z0d2FyZSB0ZXN0aW5nIGZyYW1ld29yayBpbiB0aGUga2VybmVsIGZvciBpNDBlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aTQwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3RpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjY5CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IEludGVsIDQwR2JFIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgdGhyb3VnaCB0aGUgdG9vbHMgYW5kIHRlc3RpbmcgZGlyZWN0b3JpZXMsIGFuZCBpdCYjMzk7cyBhIG5vLWdvLiBUaGlzIGlzIGxvb2tpbmcgbGlrZSBhIHN0cmFpZ2h0IGhhcmR3YXJlIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBpNDBlIG5ldHdvcmsgZHJpdmVyLCB3aGljaCBkZWFscyB3aXRoIHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBhIFBDSWUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBUaGlzIG1lYW5zIHRoYXQsIHVubGlrZSBkcml2ZXJzIHRoYXQgY2FuIGJlIHJlYXNvbmFibHkgdGVzdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCB0aGVzZSBzcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBhbmQgdW50ZXN0YWJsZSB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB0aGF0IGZ1enplcnMgbGlrZSBzeXprYWxsZXIgZ2VuZXJhbGx5IHVzZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTttIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNpbmcgbXkga25vd2xlZGdlIG9mIFFFTVUmIzM5O3Mgc3VwcG9ydGVkIG5ldHdvcmsgZGV2aWNlcy4gSSBrbm93IGZvciBzdXJlIHRoYXQgaXQgZG9lcyAqbm90KiBlbXVsYXRlIGk0MGUuIEkgY2FuIGNvbmZpcm0gdGhpcyBhZ2FpbnN0IG15IG1lbW9yeTogUUVNVSYjMzk7cyBnb3QgZTEwMDAsIGUxMDAwZSwgaWdiLCBydGw4MTM5LCBwY25ldCwgbmUya19wY2ksIHZteG5ldDMsIHZpcnRpby1uZXQsIGFuZCB0dWxpcCwgd2hpY2ggSSYjMzk7dmUgc2VlbiBpbiB0aGUgcGFzdC4gRXZlbiBpZiBieSBzb21lIGNoYW5jZSBpdCAqZGlkKiBlbXVsYXRlIGk0MGUsIHRoYXQgWERQIHplcm8tY29weSBzdHVmZiBpcyBsaWtlbHkgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQgaGFyZHdhcmUgbWlnaHQgbm90IGJlIGVtdWxhdGVkIGVpdGhlci4gQnV0IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZG9lc24mIzM5O3QuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCByZWFsaXN0aWNhbGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudCwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjE5OjExLjg5OTczMDQ3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDA2MDQ1NzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgNDBHYkUgKGk0MGUpIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBTaW5jZSBpNDBlIGlzIGEgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXIgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGJ5IHN5emthbGxlciwgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDExOjE5OjExLjg5OTczNTg3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODkxNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2FkMGZmMGRlZmFiOGVlMGZkNTQ4MGZiNzg3Y2Y2N2ZjM2Q0MzY0MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDExOjE5OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuaW5kZXggZWY1ZTY1NzgxNmYwMC4uODc1NTNiMTRkMzRhNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xcbkBAIC0xODMzLDE3ICsxODMzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpNDBlX3J4X2hhc2goc3RydWN0IGk0MGVfcmluZyAqcmluZyxcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXFxuKyAqIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxcbiAgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIHBhY2tldCBpcyBiZWluZyB0cmFuc2FjdGVkIG9uXFxuICAqIEByeF9kZXNjOiBwb2ludGVyIHRvIHRoZSBFT1AgUnggZGVzY3JpcHRvclxcbiAgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmluZywgZGVzY3JpcHRvciwgYW5kIHBhY2tldCBpbmZvcm1hdGlvbiBpblxcbi0gKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcXG4tICogb3RoZXIgZmllbGRzIHdpdGhpbiB0aGUgc2tiLlxcbisgKiBQb3B1bGF0ZSBoYXNoLCBjaGVja3N1bSwgUFRQIHRpbWVzdGFtcCBhbmQgVkxBTiBmcm9tIEByeF9kZXNjLiBEb2VzIG5vdFxcbisgKiBjYWxsIHNrYl9yZWNvcmRfcnhfcXVldWUoKSBvciBldGhfdHlwZV90cmFucygpOyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBnb3RcXG4rICogdGhvc2UgZnJvbSB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBzaG91bGQgdXNlIHRoaXMgaGVscGVyLlxcbiAgKiovXFxuLXZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcXG4tXFx0XFx0XFx0ICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHU2NCBxd29yZCA9IGxlNjRfdG9fY3B1KHJ4X2Rlc2MtXFx1MDAzZXdiLnF3b3JkMS5zdGF0dXNfZXJyb3JfbGVuKTtcXG4gXFx0dTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTtcXG5AQCAtMTg1OCwxNCArMTg1OCwzMCBAQCB2b2lkIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcbiBcXHRpNDBlX3J4X2NoZWNrc3VtKHJ4X3JpbmctXFx1MDAzZXZzaSwgc2tiLCByeF9kZXNjKTtcXG4gXFxuLVxcdHNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLVxcdTAwM2VxdWV1ZV9pbmRleCk7XFxuLVxcbiBcXHRpZiAocXdvcmQgXFx1MDAyNiBCSVQoSTQwRV9SWF9ERVNDX1NUQVRVU19MMlRBRzFQX1NISUZUKSkge1xcbiBcXHRcXHRfX2xlMTYgdmxhbl90YWcgPSByeF9kZXNjLVxcdTAwM2V3Yi5xd29yZDAubG9fZHdvcmQubDJ0YWcxO1xcbiBcXG4gXFx0XFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGxlMTZfdG9fY3B1KHZsYW5fdGFnKSk7XFxuIFxcdH1cXG4rfVxcbitcXG4rLyoqXFxuKyAqIGk0MGVfcHJvY2Vzc19za2JfZmllbGRzIC0gUG9wdWxhdGUgc2tiIGhlYWRlciBmaWVsZHMgZnJvbSBSeCBkZXNjcmlwdG9yXFxuKyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cXG4rICogQHJ4X2Rlc2M6IHBvaW50ZXIgdG8gdGhlIEVPUCBSeCBkZXNjcmlwdG9yXFxuKyAqIEBza2I6IHBvaW50ZXIgdG8gY3VycmVudCBza2IgYmVpbmcgcG9wdWxhdGVkXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSByaW5nLCBkZXNjcmlwdG9yLCBhbmQgcGFja2V0IGluZm9ybWF0aW9uIGluXFxuKyAqIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBoYXNoLCBjaGVja3N1bSwgVkxBTiwgcHJvdG9jb2wsIGFuZFxcbisgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXFxuKyAqKi9cXG4rdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XFxuK1xcbitcXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiBcXG4gXFx0LyogbW9kaWZpZXMgdGhlIHNrYiAtIGNvbnN1bWVzIHRoZSBlbmV0IGhlYWRlciAqL1xcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByeF9yaW5nLVxcdTAwM2VuZXRkZXYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXFxuaW5kZXggZTI2ODA3ZmQyMTIzMi4uM2M1MmUwZTYwNDg3NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXFxuQEAgLTksNiArOSw4IEBAXFxuIGludCBpNDBlX3htaXRfeGRwX3R4X3Jpbmcoc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTtcXG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcXG4gXFx0XFx0XFx0XFx0ICAgdTY0IHF3b3JkMSk7XFxuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbitcXHRcXHRcXHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gdm9pZCBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbiBcXHRcXHRcXHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgaTQwZV94ZHBfcmluZ191cGRhdGVfdGFpbChzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xcbmluZGV4IDlmNDczODhlYWJhNTMuLmRmYTUxOWMzMGEwZDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3hzay5jXFxuQEAgLTMsNiArMyw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bnJvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC94ZHAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImk0MGVfdHhyeF9jb21tb24uaFxcXCJcXG4gI2luY2x1ZGUgXFxcImk0MGVfeHNrLmhcXFwiXFxuQEAgLTI3Nyw3MCArMjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxcbiBcXHRyZXR1cm4gY291bnQgPT0gbmJfYnVmZnM7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxcbi0gKiBAcnhfcmluZzogUnggcmluZ1xcbi0gKiBAeGRwOiB4ZHBfYnVmZlxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9ucyBhbGxvY2F0ZXMgYSBuZXcgc2tiIGZyb20gYSB6ZXJvLWNvcHkgUnggYnVmZmVyLlxcbi0gKlxcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4tICoqL1xcbi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmk0MGVfY29uc3RydWN0X3NrYl96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi17XFxuLVxcdHVuc2lnbmVkIGludCB0b3RhbHNpemUgPSB4ZHAtXFx1MDAzZWRhdGFfZW5kIC0geGRwLVxcdTAwM2VkYXRhX21ldGE7XFxuLVxcdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cXHUwMDNlZGF0YSAtIHhkcC1cXHUwMDNlZGF0YV9tZXRhO1xcbi1cXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IE5VTEw7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLVxcdHUzMiBucl9mcmFncyA9IDA7XFxuLVxcbi1cXHRpZiAodW5saWtlbHkoeGRwX2J1ZmZfaGFzX2ZyYWdzKHhkcCkpKSB7XFxuLVxcdFxcdHNpbmZvID0geGRwX2dldF9zaGFyZWRfaW5mb19mcm9tX2J1ZmYoeGRwKTtcXG4tXFx0XFx0bnJfZnJhZ3MgPSBzaW5mby1cXHUwMDNlbnJfZnJhZ3M7XFxuLVxcdH1cXG4tXFx0bmV0X3ByZWZldGNoKHhkcC1cXHUwMDNlZGF0YV9tZXRhKTtcXG4tXFxuLVxcdC8qIGFsbG9jYXRlIGEgc2tiIHRvIHN0b3JlIHRoZSBmcmFncyAqL1xcbi1cXHRza2IgPSBuYXBpX2FsbG9jX3NrYihcXHUwMDI2cnhfcmluZy1cXHUwMDNlcV92ZWN0b3ItXFx1MDAzZW5hcGksIHRvdGFsc2l6ZSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVxcdTAwM2VkYXRhX21ldGEsXFxuLVxcdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xcbi1cXG4tXFx0aWYgKG1ldGFzaXplKSB7XFxuLVxcdFxcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XFxuLVxcdFxcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChsaWtlbHkoIXhkcF9idWZmX2hhc19mcmFncyh4ZHApKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIG5yX2ZyYWdzOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2tpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbi1cXHRcXHRza2JfZnJhZ190ICpmcmFnID0gXFx1MDAyNnNpbmZvLVxcdTAwM2VmcmFnc1tpXTtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuLVxcdFxcdHZvaWQgKmFkZHI7XFxuLVxcbi1cXHRcXHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcXG4tXFx0XFx0aWYgKCFwYWdlKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdH1cXG4tXFx0XFx0YWRkciA9IHBhZ2VfdG9fdmlydChwYWdlKTtcXG4tXFxuLVxcdFxcdG1lbWNweShhZGRyLCBza2JfZnJhZ19wYWdlKGZyYWcpLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcXG4tXFxuLVxcdFxcdF9fc2tiX2ZpbGxfcGFnZV9kZXNjX25vYWNjKHNraW5mbywgc2tpbmZvLVxcdTAwM2Vucl9mcmFncysrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBhZGRyLCAwLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcXG4tXFx0fVxcbi1cXG4tb3V0Olxcbi1cXHR4c2tfYnVmZl9mcmVlKHhkcCk7XFxuLVxcdHJldHVybiBza2I7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIGk0MGVfaGFuZGxlX3hkcF9yZXN1bHRfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHBfYnVmZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLFxcbkBAIC0zNzIsMjEgKzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXFxuIFxcdFxcdCAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0XFxuIFxcdFxcdCAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7XFxuK1xcdFxcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XFxuIFxcdFxcdGlmICghc2tiKSB7XFxuK1xcdFxcdFxcdHhza19idWZmX2ZyZWUoeGRwX2J1ZmYpO1xcbiBcXHRcXHRcXHRyeF9yaW5nLVxcdTAwM2VyeF9zdGF0cy5hbGxvY19idWZmX2ZhaWxlZCsrO1xcbiBcXHRcXHRcXHQqcnhfcGFja2V0cyA9IDA7XFxuIFxcdFxcdFxcdCpyeF9ieXRlcyA9IDA7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGV0aF9za2JfcGFkKHNrYikpIHtcXG4tXFx0XFx0XFx0KnJ4X3BhY2tldHMgPSAwO1xcbi1cXHRcXHRcXHQqcnhfYnl0ZXMgPSAwO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGk0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XFxuK1xcdFxcdC8qIHhkcF9idWlsZF9za2JfZnJvbV96YygpIGFscmVhZHkgcmFuIGV0aF90eXBlX3RyYW5zKCkgYW5kXFxuK1xcdFxcdCAqIHNrYl9yZWNvcmRfcnhfcXVldWUoKS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMocnhfcmluZywgcnhfZGVzYywgc2tiKTtcXG4gXFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShcXHUwMDI2cnhfcmluZy1cXHUwMDNlcV92ZWN0b3ItXFx1MDAzZW5hcGksIHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToxMi4yMDczOTA1NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMzY5ODM3OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIDQwR2JFIChpNDBlKSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gU2luY2UgaTQwZSBpcyBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgZHJpdmVyIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYWQwZmYwZGVmYWI4ZWUwZmQ1NDgwZmI3ODdjZjY3ZmMzZDQzNjQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMToxOToxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXG5pbmRleCBlZjVlNjU3ODE2ZjAwLi44NzU1M2IxNGQzNGE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuQEAgLTE4MzMsMTcgKzE4MzMsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGk0MGVfcnhfaGFzaChzdHJ1Y3QgaTQwZV9yaW5nICpyaW5nLFxuIH1cbiBcbiAvKipcbi0gKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuKyAqIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMgLSBQb3B1bGF0ZSBza2IgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuICAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cbiAgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3JcbiAgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW5cbi0gKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbi0gKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXG4rICogUG9wdWxhdGUgaGFzaCwgY2hlY2tzdW0sIFBUUCB0aW1lc3RhbXAgYW5kIFZMQU4gZnJvbSBAcnhfZGVzYy4gRG9lcyBub3RcbisgKiBjYWxsIHNrYl9yZWNvcmRfcnhfcXVldWUoKSBvciBldGhfdHlwZV90cmFucygpOyBjYWxsZXJzIHRoYXQgYWxyZWFkeSBnb3RcbisgKiB0aG9zZSBmcm9tIHhkcF9idWlsZF9za2JfZnJvbV96YygpIHNob3VsZCB1c2UgdGhpcyBoZWxwZXIuXG4gICoqL1xuLXZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit2b2lkIF9faTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbitcdFx0XHQgICAgICAgdW5pb24gaTQwZV9yeF9kZXNjICpyeF9kZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHU2NCBxd29yZCA9IGxlNjRfdG9fY3B1KHJ4X2Rlc2MtXHUwMDNld2IucXdvcmQxLnN0YXR1c19lcnJvcl9sZW4pO1xuIFx0dTMyIHJ4X3N0YXR1cyA9IEZJRUxEX0dFVChJNDBFX1JYRF9RVzFfU1RBVFVTX01BU0ssIHF3b3JkKTtcbkBAIC0xODU4LDE0ICsxODU4LDMwIEBAIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcbiBcdGk0MGVfcnhfY2hlY2tzdW0ocnhfcmluZy1cdTAwM2V2c2ksIHNrYiwgcnhfZGVzYyk7XG4gXG4tXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4tXG4gXHRpZiAocXdvcmQgXHUwMDI2IEJJVChJNDBFX1JYX0RFU0NfU1RBVFVTX0wyVEFHMVBfU0hJRlQpKSB7XG4gXHRcdF9fbGUxNiB2bGFuX3RhZyA9IHJ4X2Rlc2MtXHUwMDNld2IucXdvcmQwLmxvX2R3b3JkLmwydGFnMTtcbiBcbiBcdFx0X192bGFuX2h3YWNjZWxfcHV0X3RhZyhza2IsIGh0b25zKEVUSF9QXzgwMjFRKSxcbiBcdFx0XHRcdCAgICAgICBsZTE2X3RvX2NwdSh2bGFuX3RhZykpO1xuIFx0fVxuK31cbitcbisvKipcbisgKiBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAtIFBvcHVsYXRlIHNrYiBoZWFkZXIgZmllbGRzIGZyb20gUnggZGVzY3JpcHRvclxuKyAqIEByeF9yaW5nOiByeCBkZXNjcmlwdG9yIHJpbmcgcGFja2V0IGlzIGJlaW5nIHRyYW5zYWN0ZWQgb25cbisgKiBAcnhfZGVzYzogcG9pbnRlciB0byB0aGUgRU9QIFJ4IGRlc2NyaXB0b3JcbisgKiBAc2tiOiBwb2ludGVyIHRvIGN1cnJlbnQgc2tiIGJlaW5nIHBvcHVsYXRlZFxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHJpbmcsIGRlc2NyaXB0b3IsIGFuZCBwYWNrZXQgaW5mb3JtYXRpb24gaW5cbisgKiBvcmRlciB0byBwb3B1bGF0ZSB0aGUgaGFzaCwgY2hlY2tzdW0sIFZMQU4sIHByb3RvY29sLCBhbmRcbisgKiBvdGhlciBmaWVsZHMgd2l0aGluIHRoZSBza2IuXG4rICoqL1xuK3ZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbitcdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4rXG4rXHRza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhfcmluZy1cdTAwM2VxdWV1ZV9pbmRleCk7XG4gXG4gXHQvKiBtb2RpZmllcyB0aGUgc2tiIC0gY29uc3VtZXMgdGhlIGVuZXQgaGVhZGVyICovXG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJ4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXG5pbmRleCBlMjY4MDdmZDIxMjMyLi4zYzUyZTBlNjA0ODc2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnhfY29tbW9uLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4X2NvbW1vbi5oXG5AQCAtOSw2ICs5LDggQEBcbiBpbnQgaTQwZV94bWl0X3hkcF90eF9yaW5nKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgaTQwZV9yaW5nICp4ZHBfcmluZyk7XG4gdm9pZCBpNDBlX2NsZWFuX3Byb2dyYW1taW5nX3N0YXR1cyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCB1NjQgcXdvcmQwX3JhdyxcbiBcdFx0XHRcdCAgIHU2NCBxd29yZDEpO1xuK3ZvaWQgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuK1x0XHRcdCAgICAgICB1bmlvbiBpNDBlX3J4X2Rlc2MgKnJ4X2Rlc2MsIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgaTQwZV9wcm9jZXNzX3NrYl9maWVsZHMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbiBcdFx0XHQgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gdm9pZCBpNDBlX3hkcF9yaW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBpNDBlX3JpbmcgKnhkcF9yaW5nKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbmluZGV4IDlmNDczODhlYWJhNTMuLmRmYTUxOWMzMGEwZDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfeHNrLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV94c2suY1xuQEAgLTMsNiArMyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3RyYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bnJvbGwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC94ZHAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFx1MDAzZVxuICNpbmNsdWRlIFwiaTQwZV90eHJ4X2NvbW1vbi5oXCJcbiAjaW5jbHVkZSBcImk0MGVfeHNrLmhcIlxuQEAgLTI3Nyw3MCArMjc4LDYgQEAgYm9vbCBpNDBlX2FsbG9jX3J4X2J1ZmZlcnNfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZywgdTE2IGNvdW50KVxuIFx0cmV0dXJuIGNvdW50ID09IG5iX2J1ZmZzO1xuIH1cbiBcbi0vKipcbi0gKiBpNDBlX2NvbnN0cnVjdF9za2JfemMgLSBDcmVhdGUgc2tidWZmIGZyb20gemVyby1jb3B5IFJ4IGJ1ZmZlclxuLSAqIEByeF9yaW5nOiBSeCByaW5nXG4tICogQHhkcDogeGRwX2J1ZmZcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb25zIGFsbG9jYXRlcyBhIG5ldyBza2IgZnJvbSBhIHplcm8tY29weSBSeCBidWZmZXIuXG4tICpcbi0gKiBSZXR1cm5zIHRoZSBza2IsIG9yIE5VTEwgb24gZmFpbHVyZS5cbi0gKiovXG4tc3RhdGljIHN0cnVjdCBza19idWZmICppNDBlX2NvbnN0cnVjdF9za2JfemMoc3RydWN0IGk0MGVfcmluZyAqcnhfcmluZyxcbi1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi17XG4tXHR1bnNpZ25lZCBpbnQgdG90YWxzaXplID0geGRwLVx1MDAzZWRhdGFfZW5kIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHVuc2lnbmVkIGludCBtZXRhc2l6ZSA9IHhkcC1cdTAwM2VkYXRhIC0geGRwLVx1MDAzZWRhdGFfbWV0YTtcbi1cdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNpbmZvID0gTlVMTDtcbi1cdHN0cnVjdCBza19idWZmICpza2I7XG4tXHR1MzIgbnJfZnJhZ3MgPSAwO1xuLVxuLVx0aWYgKHVubGlrZWx5KHhkcF9idWZmX2hhc19mcmFncyh4ZHApKSkge1xuLVx0XHRzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKHhkcCk7XG4tXHRcdG5yX2ZyYWdzID0gc2luZm8tXHUwMDNlbnJfZnJhZ3M7XG4tXHR9XG4tXHRuZXRfcHJlZmV0Y2goeGRwLVx1MDAzZWRhdGFfbWV0YSk7XG4tXG4tXHQvKiBhbGxvY2F0ZSBhIHNrYiB0byBzdG9yZSB0aGUgZnJhZ3MgKi9cbi1cdHNrYiA9IG5hcGlfYWxsb2Nfc2tiKFx1MDAyNnJ4X3JpbmctXHUwMDNlcV92ZWN0b3ItXHUwMDNlbmFwaSwgdG90YWxzaXplKTtcbi1cdGlmICh1bmxpa2VseSghc2tiKSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRtZW1jcHkoX19za2JfcHV0KHNrYiwgdG90YWxzaXplKSwgeGRwLVx1MDAzZWRhdGFfbWV0YSxcbi1cdCAgICAgICBBTElHTih0b3RhbHNpemUsIHNpemVvZihsb25nKSkpO1xuLVxuLVx0aWYgKG1ldGFzaXplKSB7XG4tXHRcdHNrYl9tZXRhZGF0YV9zZXQoc2tiLCBtZXRhc2l6ZSk7XG4tXHRcdF9fc2tiX3B1bGwoc2tiLCBtZXRhc2l6ZSk7XG4tXHR9XG4tXG4tXHRpZiAobGlrZWx5KCF4ZHBfYnVmZl9oYXNfZnJhZ3MoeGRwKSkpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIG5yX2ZyYWdzOyBpKyspIHtcbi1cdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2tpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xuLVx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2c2luZm8tXHUwMDNlZnJhZ3NbaV07XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuLVx0XHR2b2lkICphZGRyO1xuLVxuLVx0XHRwYWdlID0gZGV2X2FsbG9jX3BhZ2UoKTtcbi1cdFx0aWYgKCFwYWdlKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4tXHRcdGFkZHIgPSBwYWdlX3RvX3ZpcnQocGFnZSk7XG4tXG4tXHRcdG1lbWNweShhZGRyLCBza2JfZnJhZ19wYWdlKGZyYWcpLCBza2JfZnJhZ19zaXplKGZyYWcpKTtcbi1cbi1cdFx0X19za2JfZmlsbF9wYWdlX2Rlc2Nfbm9hY2Moc2tpbmZvLCBza2luZm8tXHUwMDNlbnJfZnJhZ3MrKyxcbi1cdFx0XHRcdFx0ICAgYWRkciwgMCwgc2tiX2ZyYWdfc2l6ZShmcmFnKSk7XG4tXHR9XG4tXG4tb3V0OlxuLVx0eHNrX2J1ZmZfZnJlZSh4ZHApO1xuLVx0cmV0dXJuIHNrYjtcbi19XG4tXG4gc3RhdGljIHZvaWQgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96YyhzdHJ1Y3QgaTQwZV9yaW5nICpyeF9yaW5nLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9idWZmICp4ZHBfYnVmZixcbiBcdFx0XHRcdCAgICAgIHVuaW9uIGk0MGVfcnhfZGVzYyAqcnhfZGVzYyxcbkBAIC0zNzIsMjEgKzMwOSwxOSBAQCBzdGF0aWMgdm9pZCBpNDBlX2hhbmRsZV94ZHBfcmVzdWx0X3pjKHN0cnVjdCBpNDBlX3JpbmcgKnJ4X3JpbmcsXG4gXHRcdCAqIEJJVChJNDBFX1JYRF9RVzFfRVJST1JfU0hJRlQpLiBUaGlzIGlzIGR1ZSB0byB0aGF0XG4gXHRcdCAqIFNCUCBpcyAqbm90KiBzZXQgaW4gUFJUX1NCUFZTSSAoZGVmYXVsdCBub3Qgc2V0KS5cbiBcdFx0ICovXG4tXHRcdHNrYiA9IGk0MGVfY29uc3RydWN0X3NrYl96YyhyeF9yaW5nLCB4ZHBfYnVmZik7XG4rXHRcdHNrYiA9IHhkcF9idWlsZF9za2JfZnJvbV96Yyh4ZHBfYnVmZik7XG4gXHRcdGlmICghc2tiKSB7XG4rXHRcdFx0eHNrX2J1ZmZfZnJlZSh4ZHBfYnVmZik7XG4gXHRcdFx0cnhfcmluZy1cdTAwM2VyeF9zdGF0cy5hbGxvY19idWZmX2ZhaWxlZCsrO1xuIFx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbiBcdFx0XHQqcnhfYnl0ZXMgPSAwO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRpZiAoZXRoX3NrYl9wYWQoc2tiKSkge1xuLVx0XHRcdCpyeF9wYWNrZXRzID0gMDtcbi1cdFx0XHQqcnhfYnl0ZXMgPSAwO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVxuLVx0XHRpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkcyhyeF9yaW5nLCByeF9kZXNjLCBza2IpO1xuK1x0XHQvKiB4ZHBfYnVpbGRfc2tiX2Zyb21femMoKSBhbHJlYWR5IHJhbiBldGhfdHlwZV90cmFucygpIGFuZFxuK1x0XHQgKiBza2JfcmVjb3JkX3J4X3F1ZXVlKCkuXG4rXHRcdCAqL1xuK1x0XHRfX2k0MGVfcHJvY2Vzc19za2JfZmllbGRzKHJ4X3JpbmcsIHJ4X2Rlc2MsIHNrYik7XG4gXHRcdG5hcGlfZ3JvX3JlY2VpdmUoXHUwMDI2cnhfcmluZy1cdTAwM2VxX3ZlY3Rvci1cdTAwM2VuYXBpLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToxMi4yMDczOTE5MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTkyNDkzMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaTQwZSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGZvciB0aGUgYGk0MGVgIG5ldHdvcmsgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uLCBgX19pNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkc2AsIHdoaWNoIGlzIGEgcmVmYWN0b3Jpbmcgb2Ygc29ydHMsIGFuZCBtb2RpZmllcyBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AgdG8gdXNlIGB4ZHBfYnVpbGRfc2tiX2Zyb21femNgIGluc3RlYWQgb2Ygc29tZSBjdXN0b20gZnVuY3Rpb24sIGBpNDBlX2NvbnN0cnVjdF9za2JfemNgLCB3aGljaCBpcyBub3cgcmVtb3ZlZC5cblxuTm93LCB3YWl0IGEgbWludXRlLCBgaTQwZWAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgYW4gSW50ZWwgRXRoZXJuZXQgZHJpdmVyLCByaWdodD8gWWVhaCwgaXQncyBmb3IgSW50ZWwncyA0MCBHaWdhYml0IEV0aGVybmV0LiBTbywgdGhpcyBpcyBmb3IgKnBoeXNpY2FsKiBoYXJkd2FyZSwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgZXZlbiBiZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvdWJ0IHN0YW5kYXJkIFFFTVUgcHJvdmlkZXMgaTQwZSBlbXVsYXRpb24uIEl0IHVzdWFsbHkgY292ZXJzIHRoZSBiYXNpY3M6IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgbmUyaywgcGNuZXQuIEJ1dCBpNDBlPyBJJ20gbm90IHNlZWluZyBpdC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2guIE5vLCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpNDBlLiBSaWdodCwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMsIGFuZCB0aGlzIGNvZGUgcHJvYmFibHkgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cbk9rYXksIHNvIG5vIFFFTVUgZW11bGF0aW9uLiBJdCdzIHRpbWUgdG8gY29uZmlybSB0aGlzLiBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBRRU1VIHNvdXJjZSByaWdodCBub3csIHNvIGxldCBtZSBqdXN0IHNlYXJjaCB0aGUga2VybmVsIHRyZWUuIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIGFueSBtZW50aW9ucyBvZiBpNDBlIGVtdWxhdGlvbi4gTm9wZSwgbm90IHNlZWluZyBhbnl0aGluZy5cblxuQSByZWxhdGVkIHRob3VnaHQsIGlzIHRoaXMgaTQwZSBjb2RlIHRlc3RhYmxlIGluIHN5emthbGxlcj8gU3l6a2FsbGVyIG9mdGVuIHRhcmdldHMgdmlydHVhbCBkZXZpY2VzIG9yIGRldmljZXMgZW11bGF0ZWQgYnkgUUVNVSBsaWtlIGUxMDAwZSwgaWdiLiBCdXQgbm90IGk0MGUuIExldCBtZSBqdXN0IGJlIHN1cmUsIHRob3VnaC4gV2FpdCwgUUVNVSBkb2VzIGVtdWxhdGUgaWdiIG5vdy4gRG9lcyBpdCBlbXVsYXRlIGk0MGU/IE5vcGUsIGl0J3MgYSBwaHlzaWNhbCBkcml2ZXIuXG5cbk9rYXksIHNvIGl0J3MgYSBwaHlzaWNhbC1vbmx5IGRyaXZlciBhbmQgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgbWVhbnMgaXQncyBwcmV0dHkgbXVjaCB1bnJlYWNoYWJsZSBpbiBtb3N0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gTGV0J3MgbWFrZSBzdXJlLCB0aG91Z2guIE5vLCBpdCdzIGEgUENJIGRyaXZlci4gSXQncyBhIGRlYWQgZW5kLCByZWFsbHkuIFdlbGwsIEkndmUgZ290IHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jYCBub3cgdG8gY29uZmlybSBhIGZldyBhc3N1bXB0aW9ucywgYnV0IGl0IHNlZW1zIHRoYXQgdGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzUzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MjEuNzk5ODg3NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDA2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXIuKmk0MGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYz0xNjYzMT1zdGF0aWMgaW50IF9faW5pdCBpNDBlX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjUxLVxcdGk0MGVfZGJnX2luaXQoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjE2NjUyOlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNmk0MGVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jLTE2NjUzLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MjEuOTkyMjk5ODM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1NjY2NzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpYWJpbGl0eSBvZiBGdXp6aW5nIHRoZSBpNDBlIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaTQwZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBkb2VzIFFFTVUgaGF2ZSBkZWNlbnQgc3VwcG9ydCBmb3IgdGhpcz8gSSByZWNhbGwgc29tZSByZWNlbnQgYWRkaXRpb25zIGZvciBgaWdiYCwgYnV0IEknbSBwcmV0dHkgc3VyZSBgaTQwZWAgaXNuJ3QgaW4gdGhlIG1peC4gTGV0IG1lIGNvbmZpcm0gd2l0aCBhIHF1aWNrIHNlYXJjaCwgb3IgbWF5YmUganVzdCB0aGluayBpdCB0aHJvdWdoLi4uIFllYWgsIEknbSBmYWlybHkgY2VydGFpbiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgaTQwZS5cblxuSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGF0IHRoZSBzeXprYWxsZXIgY29uZmlnczsgcGVyaGFwcyB0aGVyZSdzIHNvbWUgbWVudGlvbiBvZiBgQ09ORklHX0k0MEVgIG9yIGlmIGl0J3MgZ2VuZXJhbGx5IGZ1enplZC4gV2FpdCwgdGhlIHByb21wdCBpdHNlbGYgY2xhcmlmaWVzIHRoZSBpc3N1ZTogSXQgaGlnaGxpZ2h0cyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyAobGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYGFtZGdwdWApIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIGFuZCBhcmVuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gTm93LCBpNDBlICppc24ndCogYSBTbWFydE5JQyBvciBQQ0llIHN3aXRjaCwgaXQgaXMsIGhvd2V2ZXIsIGFuIEludGVsIDQwR2JFIG5ldHdvcmsgZHJpdmVyIGFuZCAqZG9lcyogcmVxdWlyZSBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZC4gU28sIFFFTVUgaXMgZGVmaW5pdGVseSBub3QgZ29pbmcgdG8gaGVscCB1cyBoZXJlLlxuXG5SaWdodCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGk0MGUgKmNhbiogYmUgdGVzdGVkLiBJJ20gbGVhbmluZyB0b3dhcmQgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCBcImk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgc28gaXRzIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiXG5cbkhvd2V2ZXIsIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBzb21lIHZpcnR1YWwgaTQwZSBkcml2ZXIuIE5vLCB0aGVyZSdzIGBpNDBldmZgIChub3cgYGlhdmZgKS5cblxuT2theSwgbGV0J3MgY29uc2lkZXIgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGBpNDBlX3Byb2Nlc3Nfc2tiX2ZpZWxkc2AgLSBpcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIHRoYXQgZnVuY3Rpb24gd2l0aG91dCBoYXJkd2FyZT8gSXQncyBjYWxsZWQgZnJvbSBgaTQwZV9oYW5kbGVfeGRwX3Jlc3VsdF96Y2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgaTQwZV9jbGVhbl9yeF9pcnFfemNgLiBUaGlzIGxhc3QgZnVuY3Rpb24gaXMgdGhlIE5BUEkgcG9sbCByb3V0aW5lIGZvciB6ZXJvLWNvcHkgWERQLiBUaGlzIG1lYW5zIGl0IHJlcXVpcmVzIHRoZSBoYXJkd2FyZSB0byByZWNlaXZlIHBhY2tldHMgYW5kIHRyaWdnZXIgaW50ZXJydXB0cy4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSByaW5nIGJ1ZmZlcnMgc2ltcGx5IHdvbid0IGJlIHBvcHVsYXRlZCwgYW5kIHRoZSBOQVBJIHBvbGwgd2lsbCBuZXZlciBwcm9jZXNzIGFueSBwYWNrZXRzLiBTbywgdGhhdCBzcGVjaWZpYyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSB1bnJlYWNoYWJsZSB3aXRob3V0IHRoZSBoYXJkd2FyZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBkbyBhIGZpbmFsIHF1aWNrIGNoZWNrLiBJcyB0aGVyZSBhbnkgc29mdHdhcmUgdGVzdGluZyBmcmFtZXdvcmsgaW4gdGhlIGtlcm5lbCBmb3IgaTQwZT9cblxuXG4iLCJJbnB1dFRva2VucyI6NjIzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToyOS43NDg5Njk3NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNjc5MTc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpNDBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3RpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMToxOToyOS45Mjk2NTgwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTc2MDg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogSW50ZWwgNDBHYkUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgdGhyb3VnaCB0aGUgdG9vbHMgYW5kIHRlc3RpbmcgZGlyZWN0b3JpZXMsIGFuZCBpdCdzIGEgbm8tZ28uIFRoaXMgaXMgbG9va2luZyBsaWtlIGEgc3RyYWlnaHQgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGk0MGUgbmV0d29yayBkcml2ZXIsIHdoaWNoIGRlYWxzIHdpdGggdGhlIFhEUCB6ZXJvLWNvcHkgcmVjZWl2ZSBwYXRoLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgUENJZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIFRoaXMgbWVhbnMgdGhhdCwgdW5saWtlIGRyaXZlcnMgdGhhdCBjYW4gYmUgcmVhc29uYWJseSB0ZXN0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIHRoZXNlIHNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGFuZCB1bnRlc3RhYmxlIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHRoYXQgZnV6emVycyBsaWtlIHN5emthbGxlciBnZW5lcmFsbHkgdXNlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdtIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNpbmcgbXkga25vd2xlZGdlIG9mIFFFTVUncyBzdXBwb3J0ZWQgbmV0d29yayBkZXZpY2VzLiBJIGtub3cgZm9yIHN1cmUgdGhhdCBpdCBkb2VzICpub3QqIGVtdWxhdGUgaTQwZS4gSSBjYW4gY29uZmlybSB0aGlzIGFnYWluc3QgbXkgbWVtb3J5OiBRRU1VJ3MgZ290IGUxMDAwLCBlMTAwMGUsIGlnYiwgcnRsODEzOSwgcGNuZXQsIG5lMmtfcGNpLCB2bXhuZXQzLCB2aXJ0aW8tbmV0LCBhbmQgdHVsaXAsIHdoaWNoIEkndmUgc2VlbiBpbiB0aGUgcGFzdC4gRXZlbiBpZiBieSBzb21lIGNoYW5jZSBpdCAqZGlkKiBlbXVsYXRlIGk0MGUsIHRoYXQgWERQIHplcm8tY29weSBzdHVmZiBpcyBsaWtlbHkgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQuIFRoYXQgaGFyZHdhcmUgbWlnaHQgbm90IGJlIGVtdWxhdGVkIGVpdGhlci4gQnV0IEknbSBwcmV0dHkgc3VyZSBpdCBkb2Vzbid0LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgaXMgaGFyZHdhcmUtc3BlY2lmaWMgYW5kIG5vdCByZWFsaXN0aWNhbGx5IHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI2OSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTE6MTk6MzUuOTA1NzQ3NjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCA0MEdiRSAoaTQwZSkgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgWERQIHplcm8tY29weSByZWNlaXZlIHBhdGguIFNpbmNlIGk0MGUgaXMgYSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGRyaXZlciBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgYnkgc3l6a2FsbGVyLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIDQwR2JFIChpNDBlKSBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBYRFAgemVyby1jb3B5IHJlY2VpdmUgcGF0aC4gU2luY2UgaTQwZSBpcyBhIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgZHJpdmVyIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBieSBzeXprYWxsZXIsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbbmmj[1] Phase: Running StartedAt: 2026-08-01 11:19:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbbmmj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 11:19:46 +0000 UTC FinishedAt: 2026-08-01 11:20:02 +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,}