Name: series-workflow5s8cg Phase: Failed StartedAt: 2026-07-22 21:04:28 +0000 UTC FinishedAt: 2026-07-22 21:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5s8cg[0] Phase: Succeeded StartedAt: 2026-07-22 21:04:28 +0000 UTC FinishedAt: 2026-07-22 21:40:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5s8cg[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 21:04:28 +0000 UTC FinishedAt: 2026-07-22 21:40:10 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGZ1enogaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjE6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IGE2YmQzZmU2NDIzYWQ2Li5iZDAyNzM3N2RmZjZlZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC0xOTksNiAmIzQzOzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4mIzQzO1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICYjNDM7MjQxLDEwIEBAIFVzYWdlXG4gXHRcdFx0XHRcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3RnaWRsaXN0XHUwMDNlLlxuIFx0XHQtLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVx0U2VsZWN0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxuIFx0XHRcdFx0XHR0YXNrIGNvbW1hbmQgbmFtZSBhcHBlYXIgaW4gXHUwMDNjY21kbGlzdFx1MDAzZS5cbiYjNDM7XHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiYjNDM7XHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuJiM0MztcdFx0XHUwMDNjcGlkbGlzdFx1MDAzZSwgXHUwMDNjdGdpZGxpc3RcdTAwM2UsIFx1MDAzY2NtZGxpc3RcdTAwM2UsIFx1MDAzY21vZGxpc3RcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcbiBcdFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXG4gXG4gXG5AQCAtMjQ5LDYgJiM0MzsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbiYjNDM7XHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgJiM0MzsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0ZnRcdFx0ZnJlZV90c1x0XHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcbiBcdGF0XHRcdGFsbG9jX3RzXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5pbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbkBAIC0yNSwxMSAmIzQzOzI1LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTZcbiYjNDM7I2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbiYjNDM7XHRjaGFyICptb2R1bGU7IC8vIGtlcm5lbCBtb2R1bGUgbmFtZVxuIFx0X191NjQgdHNfbnNlYztcbiBcdGludCBsZW47XG4gXHRpbnQgbnVtO1xuQEAgLTQxLDcgJiM0Mzs0Myw4IEBAIHN0cnVjdCBibG9ja19saXN0IHtcbiBlbnVtIEZJTFRFUl9CSVQge1xuIFx0RklMVEVSX1BJRCA9IDFcdTAwM2NcdTAwM2MxLFxuIFx0RklMVEVSX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbi1cdEZJTFRFUl9DT01NID0gMVx1MDAzY1x1MDAzYzNcbiYjNDM7XHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuJiM0MztcdEZJTFRFUl9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNFxuIH07XG4gXG4gZW51bSBGSUxURVJfUkVTVUxUIHtcbkBAIC01NSw3ICYjNDM7NTgsOCBAQCBlbnVtIENVTExfQklUIHtcbiBcdENVTExfVEdJRCA9IDFcdTAwM2NcdTAwM2MyLFxuIFx0Q1VMTF9DT01NID0gMVx1MDAzY1x1MDAzYzMsXG4gXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXHUwMDNjXHUwMDNjNCxcbi1cdENVTExfQUxMT0NBVE9SID0gMVx1MDAzY1x1MDAzYzVcbiYjNDM7XHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuJiM0MztcdENVTExfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzZcbiB9O1xuIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gXHRBTExPQ0FUT1JfQ01BID0gMVx1MDAzY1x1MDAzYzEsXG5AQCAtNjUsNyAmIzQzOzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcbiB9O1xuIGVudW0gQVJHX1RZUEUge1xuIFx0QVJHX1RYVCwgQVJHX0NPTU0sIEFSR19TVEFDS1RSQUNFLCBBUkdfQUxMT0NfVFMsIEFSR19DVUxMX1RJTUUsXG4tXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxuJiM0MztcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuJiM0MztcdEFSR19NT0RVTEVcbiB9O1xuIGVudW0gU09SVF9PUkRFUiB7XG4gXHRTT1JUX0FTQyA9IDEsXG5AQCAtNzksMTUgJiM0Mzs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XG4gXHRDT01QX1NUQUNLID0gMVx1MDAzY1x1MDAzYzMsXG4gXHRDT01QX05VTSA9IDFcdTAwM2NcdTAwM2M0LFxuIFx0Q09NUF9UR0lEID0gMVx1MDAzY1x1MDAzYzUsXG4tXHRDT01QX0NPTU0gPSAxXHUwMDNjXHUwMDNjNlxuJiM0MztcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuJiM0MztcdENPTVBfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzdcbiB9O1xuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcbiBcdHBpZF90ICpwaWRzO1xuIFx0cGlkX3QgKnRnaWRzO1xuIFx0Y2hhciAqKmNvbW1zO1xuJiM0MztcdGNoYXIgKiptb2R1bGVzO1xuIFx0aW50IHBpZHNfc2l6ZTtcbiBcdGludCB0Z2lkc19zaXplO1xuIFx0aW50IGNvbW1zX3NpemU7XG4mIzQzO1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICYjNDM7MTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgdGdpZF9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IGNvbW1fcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XG4mIzQzO3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xuIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfbGlzdCAqbGlzdDtcbiBzdGF0aWMgaW50IGxpc3Rfc2l6ZTtcbiBzdGF0aWMgaW50IG1heF9zaXplO1xuQEAgLTE4NCw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0cmNtcChsMS1cdTAwM2Vtb2R1bGUsIGwyLVx1MDAzZW1vZHVsZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjb21wYXJlX3RzKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XG5AQCAtMjA3LDYgJiM0MzsyMjMsOCBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY3VsbF9jb25kaXRpb24oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIFx0XHRyZXR1cm4gY29tcGFyZV90Z2lkKHAxLCBwMik7XG4gXHRpZiAoKGN1bGwgXHUwMDI2IENVTExfQ09NTSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfY29tbShwMSwgcDIpKVxuIFx0XHRyZXR1cm4gY29tcGFyZV9jb21tKHAxLCBwMik7XG4mIzQzO1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4mIzQzO1x0XHRyZXR1cm4gY29tcGFyZV9tb2R1bGUocDEsIHAyKTtcbiBcdGlmICgoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIFx1MDAyNlx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxuIFx0XHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcbiBcdHJldHVybiAwO1xuQEAgLTQxMSw5ICYjNDM7NDI5LDIzIEBAIHN0YXRpYyBjaGFyICpnZXRfY29tbShjaGFyICpidWYpXG4gXHRyZXR1cm4gY29tbV9zdHI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICptb2R1bGVfc3RyID0gbWFsbG9jKE1PRFVMRV9OQU1FX0xFTik7XG4mIzQzO1xuJiM0MztcdGlmICghbW9kdWxlX3N0cilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdG1lbXNldChtb2R1bGVfc3RyLCAwLCBNT0RVTEVfTkFNRV9MRU4pO1xuJiM0MztcdGlmIChzZWFyY2hfcGF0dGVybihcdTAwMjZtb2R1bGVfcGF0dGVybiwgbW9kdWxlX3N0cixcbiYjNDM7XHRcdFx0ICAgTU9EVUxFX05BTUVfTEVOLCBidWYpIFx1MDAzYyAwKVxuJiM0MztcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwmIzM0O3ZtbGludXhcJiMzNDspO1xuJiM0MztcdHJldHVybiBtb2R1bGVfc3RyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZyZWVfYmxvY2tfbGlzdChzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2spXG4ge1xuIFx0ZnJlZShibG9jay1cdTAwM2Vjb21tKTtcbiYjNDM7XHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICYjNDM7NDY1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKVxuIFx0XHRyZXR1cm4gQVJHX0FMTE9DX1RTO1xuIFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFwmIzM0O2FsbG9jYXRvclwmIzM0OykgfHwgIXN0cmNtcChhcmcsIFwmIzM0O2F0b3JcJiMzNDspKVxuIFx0XHRyZXR1cm4gQVJHX0FMTE9DQVRPUjtcbiYjNDM7XHRlbHNlIGlmICghc3RyY21wKGFyZywgXCYjMzQ7bW9kdWxlXCYjMzQ7KSB8fCAhc3RyY21wKGFyZywgXCYjMzQ7bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiBBUkdfTU9EVUxFO1xuIFx0ZWxzZSB7XG4gXHRcdHJldHVybiBBUkdfVU5LTk9XTjtcbiBcdH1cbkBAIC00ODMsMjUgJiM0Mzs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4mIzQzO1x0Y2hhciAqY29tbSwgKm1vZHVsZTtcbiBcbiBcdGlmICgoZmlsdGVyIFx1MDAyNiBGSUxURVJfUElEKSBcdTAwMjZcdTAwMjYgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9UR0lEKSBcdTAwMjZcdTAwMjZcbiBcdFx0IW1hdGNoX251bV9saXN0KGdldF90Z2lkKGJ1ZiksIGZjLnRnaWRzLCBmYy50Z2lkc19zaXplKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuLVx0aWYgKCEoZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSkpXG4mIzQzO1x0aWYgKCEoZmlsdGVyIFx1MDAyNiAoRklMVEVSX0NPTU0gfCBGSUxURVJfTU9EVUxFKSkpXG4gXHRcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gXG4tXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcbi1cdGlmICghY29tbSlcbi1cdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbi1cbi1cdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XG4mIzQzO1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbiYjNDM7XHRcdGNvbW0gPSBnZXRfY29tbShidWYpO1xuJiM0MztcdFx0aWYgKCFjb21tKVxuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuJiM0MztcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnJlZShjb21tKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuJiM0MztcdFx0fVxuIFx0XHRmcmVlKGNvbW0pO1xuLVx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHR9XG4tXHRmcmVlKGNvbW0pO1xuJiM0MztcdGlmIChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpIHtcbiYjNDM7XHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbiYjNDM7XHRcdGlmICghbW9kdWxlKVxuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuJiM0MztcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnJlZShtb2R1bGUpO1xuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRmcmVlKG1vZHVsZSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIEZJTFRFUl9NQVRDSDtcbiB9XG4gXG5AQCAtNTQ3LDYgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSYjNDM7JiM0Mzs7XG4gXHRsaXN0W2xpc3Rfc2l6ZV0udHNfbnNlYyA9IGdldF90c19uc2VjKGJ1Zik7XG4gXHRsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpO1xuJiM0MztcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4mIzQzO1x0aWYgKCFsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7T3V0IG9mIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcmVlX2Jsb2NrX2xpc3QoXHUwMDI2bGlzdFtsaXN0X3NpemVdKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXHRsaXN0X3NpemUmIzQzOyYjNDM7O1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCYjMzQ7bG9hZGVkICVkXFxyXCYjMzQ7LCBsaXN0X3NpemUpO1xuQEAgLTU3Myw2ICYjNDM7NjI0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbiYjNDM7XHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpXG4mIzQzO1x0XHRcdGN1bGwgfD0gQ1VMTF9NT0RVTEU7XG4gXHRcdGVsc2Uge1xuIFx0XHRcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNjM1LDYgJiM0Mzs2ODgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuJiM0MztcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbiYjNDM7XHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0c2Muc2l6ZSA9IDA7XG5AQCAtNjkxLDcgJiM0Mzs3NDYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcJiMzNDstcFxcdFxcdFxcdFNvcnQgYnkgcGlkLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cJiMzNDtcbiBcdFx0XCYjMzQ7LXNcXHRcXHRcXHRTb3J0IGJ5IHRoZSBzdGFja3RyYWNlLlxcblwmIzM0O1xuLVx0XHRcJiMzNDstdFxcdFxcdFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXG5cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LU1cXHRcXHRcXHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxcblxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwmIzM0O1xuIFx0XHRcJiMzNDsgb2ZcXG5cXHRcXHRcXHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiBcdTAwM2NwaWRsaXN0XHUwMDNlLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXRnaWQgXHUwMDNjdGdpZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwmIzM0O1xuQEAgLTcwMCwxMSAmIzQzOzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcJiMzNDstLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVxcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGVcJiMzNDtcbiBcdFx0XCYjMzQ7IGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCYjMzQ7XG4gXHRcdFwmIzM0OyBcdTAwM2NjbWRsaXN0XHUwMDNlLlxcblwmIzM0O1xuLVx0XHRcJiMzNDstLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBcJiMzNDtcbi1cdFx0XCYjMzQ7c2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcJiMzNDtcbi1cdFx0XCYjMzQ7d2l0aCBzb21lXFxuXFx0XFx0XFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIFwmIzM0O1xuLVx0XHRcJiMzNDtzdGFja3RyYWNlLCBhbGxvY2F0b3IpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstLW1vZHVsZSBcdTAwM2Ntb2RsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IG1vZHVsZSBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRvZiBibG9ja3Mgd2hvc2UgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LS1jdWxsIFx1MDAzY3J1bGVzXHUwMDNlXFx0XFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFx1MDAzY3J1bGVzXHUwMDNlIGlzIGEgc2luZ2xlXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsmIzQzO3wtXWtleVssWyYjNDM7fC1da2V5WywuLi5dXVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0QXZhaWxhYmxlIGtleXM6XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIHBpZChwKSwgdGdpZCh0ZyksIG5hbWUobiksIHN0YWNrdHJhY2Uoc3QpLFxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0ICB0eHQoVCksIGFsbG9jX3RzKGF0KSwgYWxsb2NhdG9yKGF0b3IpLCBtb2R1bGUobW9kKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0VGhlIFxcXCYjMzQ7JiM0MztcXFwmIzM0OyBpcyBvcHRpb25hbCBzaW5jZSBkZWZhdWx0IGRpcmVjdGlvbiBpc1xcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0aW5jcmVhc2luZyBudW1lcmljYWwgb3IgbGV4aWNvZ3JhcGhpYyBvcmRlci5cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdE1peGVkIHVzZSBvZiBhYmJyZXZpYXRlZCBhbmQgY29tcGxldGUtZm9ybSBpcyBhbGxvd2VkLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0RXhhbXBsZXM6XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIC0tc29ydD1uLCYjNDM7cGlkLC10Z2lkXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cJiMzNDtcbiBcdCk7XG4gfVxuIFxuQEAgLTcyMSwxMyAmIzQzOzc4NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdHsgXCYjMzQ7bmFtZVwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDMgfSxcbiBcdFx0eyBcJiMzNDtjdWxsXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwmIzM0O3NvcnRcJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sXG4mIzQzO1x0XHR7IFwmIzM0O21vZHVsZVwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDYgfSxcbiBcdFx0eyBcJiMzNDtoZWxwXCYjMzQ7LCBub19hcmd1bWVudCwgTlVMTCwgJiMzOTtoJiMzOTsgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2FkbW5wc3RQaFwmIzM0OywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2FkbW5wc3RQTWhcJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQUxMT0M7XG5AQCAtNzUzLDYgJiM0Mzs4MjAsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJiMzOTtuJiMzOTs6XG4gXHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtNJiMzOTs6XG4mIzQzO1x0XHRcdGNvbXBhcmVfZmxhZyB8PSBDT01QX01PRFVMRTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4gXHRcdFx0dXNhZ2UoKTtcbiBcdFx0XHRleGl0KDApO1xuQEAgLTc5Miw2ICYjNDM7ODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA2OlxuJiM0MztcdFx0XHRmaWx0ZXIgPSBmaWx0ZXIgfCBGSUxURVJfTU9EVUxFO1xuJiM0MztcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgmIzM5OywmIzM5Oywgb3B0YXJnLCBcdTAwMjZmYy5tb2R1bGVzX3NpemUpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgJiM0Mzs4OTUsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX3N0YWNrdHJhY2UsIFNPUlRfQVNDKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIENPTVBfTk9fRkxBRzpcbiYjNDM7XHRcdGlmIChzYy5zaXplIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfbnVtLCBTT1JUX0RFU0MpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIENPTVBfTlVNOlxuIFx0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTtcbiBcdFx0YnJlYWs7XG5AQCAtODMwLDYgJiM0Mzs5MDgsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQ09NUF9NT0RVTEU6XG4mIzQzO1x0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX21vZHVsZSwgU09SVF9BU0MpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICYjNDM7OTM0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRnb3RvIG91dF9jb21tO1xuIFx0aWYgKCFjaGVja19yZWdjb21wKFx1MDAyNnRzX25zZWNfcGF0dGVybiwgXCYjMzQ7dHNcXFxccyooWzAtOV0qKVxcXFxzKm5zXCYjMzQ7KSlcbiBcdFx0Z290byBvdXRfdHM7XG4mIzQzO1x0aWYgKCFjaGVja19yZWdjb21wKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBcJiMzNDtcXFxcWyhbYS16QS1aMC05X10mIzQzOylcXFxcXVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICYjNDM7OTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIFRHSUQgJWRcJiMzNDssIGxpc3RbaV0udGdpZCk7XG4gXHRcdFx0aWYgKGN1bGwgXHUwMDI2IENVTExfQ09NTSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIHRhc2tfY29tbV9uYW1lOiAlc1wmIzM0OywgbGlzdFtpXS5jb21tKTtcbiYjNDM7XHRcdFx0aWYgKGN1bGwgXHUwMDI2IENVTExfTU9EVUxFIHx8IGZpbHRlciBcdTAwMjYgRklMVEVSX01PRFVMRSlcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwmIzM0OywgbW9kdWxlOiAlc1wmIzM0OywgbGlzdFtpXS5tb2R1bGUpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikge1xuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIFwmIzM0Oyk7XG4gXHRcdFx0XHRwcmludF9hbGxvY2F0b3IoZm91dCwgbGlzdFtpXS5hbGxvY2F0b3IpO1xuQEAgLTkzMSw2ICYjNDM7MTAxNiw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRmcmVlX2Jsb2NrX2xpc3QoXHUwMDI2bGlzdFtpXSk7XG4gXHRcdGZyZWUobGlzdCk7XG4gXHR9XG4mIzQzO291dF9tb2R1bGU6XG4mIzQzO1x0cmVnZnJlZShcdTAwMjZtb2R1bGVfcGF0dGVybik7XG4gb3V0X3RzOlxuIFx0cmVnZnJlZShcdTAwMjZ0c19uc2VjX3BhdHRlcm4pO1xuIG91dF9jb21tOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdAppbmRleCBhNmJkM2ZlNjQyM2FkNi4uYmQwMjczNzdkZmY2ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdApAQCAtMTk5LDYgJiM0MzsxOTksNyBAQCBVc2FnZQogCQktcAkJU29ydCBieSBwaWQuCiAJCS1QCQlTb3J0IGJ5IHRnaWQuCiAJCS1uCQlTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLgomIzQzOwkJLU0JCVNvcnQgYnkgbW9kdWxlIG5hbWUuCiAJCS1yCQlTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuCiAJCS1zCQlTb3J0IGJ5IHN0YWNrIHRyYWNlLgogCQktdAkJU29ydCBieSB0aW1lcyAoZGVmYXVsdCkuCkBAIC0yNDAsOCAmIzQzOzI0MSwxMCBAQCBVc2FnZQogCQkJCQlncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7dGdpZGxpc3QmZ3Q7LgogCQktLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7CVNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2UKIAkJCQkJdGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluICZsdDtjbWRsaXN0Jmd0Oy4KJiM0MzsJCS0tbW9kdWxlICZsdDttb2RsaXN0Jmd0OwlTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlCiYjNDM7CQkJCQltb2R1bGUgbmFtZSBhcHBlYXIgaW4gJmx0O21vZGxpc3QmZ3Q7LgogCi0JCSZsdDtwaWRsaXN0Jmd0OywgJmx0O3RnaWRsaXN0Jmd0OywgJmx0O2NtZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiYjNDM7CQkmbHQ7cGlkbGlzdCZndDssICZsdDt0Z2lkbGlzdCZndDssICZsdDtjbWRsaXN0Jmd0OywgJmx0O21vZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiAJCXdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLgogCiAKQEAgLTI0OSw2ICYjNDM7MjUyLDcgQEAgVXNhZ2UKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tcGlkPTEKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tdGdpZD0xLDIsMwogCQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1uYW1lIG5hbWUxLG5hbWUyCiYjNDM7CQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1tb2R1bGUgeGZzLGV4dDQKIAogU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjUsNiAmIzQzOzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZnQJCWZyZWVfdHMJCXRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZAogCWF0CQlhbGxvY190cwl0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CW1vZAkJbW9kdWxlCQlrZXJuZWwgbW9kdWxlIG5hbWUKIAogICBGb3IgLS1jdWxsIG9wdGlvbjoKIApAQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSUwogCWYJCWZyZWUJCXdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90CiAJc3QJCXN0YWNrdHJhY2UJc3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbgogCWF0b3IJCWFsbG9jYXRvcgltZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlcwomIzQzOwltb2QJCW1vZHVsZQkJa2VybmVsIG1vZHVsZSBuYW1lCiAKIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwppbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jCkBAIC0yNSwxMSAmIzQzOzI1LDEzIEBACiAjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiAKICNkZWZpbmUgVEFTS19DT01NX0xFTiAxNgomIzQzOyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0CiAKIHN0cnVjdCBibG9ja19saXN0IHsKIAljaGFyICp0eHQ7CiAJY2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWUKIAljaGFyICpzdGFja3RyYWNlOwomIzQzOwljaGFyICptb2R1bGU7IC8vIGtlcm5lbCBtb2R1bGUgbmFtZQogCV9fdTY0IHRzX25zZWM7CiAJaW50IGxlbjsKIAlpbnQgbnVtOwpAQCAtNDEsNyAmIzQzOzQzLDggQEAgc3RydWN0IGJsb2NrX2xpc3QgewogZW51bSBGSUxURVJfQklUIHsKIAlGSUxURVJfUElEID0gMSZsdDsmbHQ7MSwKIAlGSUxURVJfVEdJRCA9IDEmbHQ7Jmx0OzIsCi0JRklMVEVSX0NPTU0gPSAxJmx0OyZsdDszCiYjNDM7CUZJTFRFUl9DT01NID0gMSZsdDsmbHQ7MywKJiM0MzsJRklMVEVSX01PRFVMRSA9IDEmbHQ7Jmx0OzQKIH07CiAKIGVudW0gRklMVEVSX1JFU1VMVCB7CkBAIC01NSw3ICYjNDM7NTgsOCBAQCBlbnVtIENVTExfQklUIHsKIAlDVUxMX1RHSUQgPSAxJmx0OyZsdDsyLAogCUNVTExfQ09NTSA9IDEmbHQ7Jmx0OzMsCiAJQ1VMTF9TVEFDS1RSQUNFID0gMSZsdDsmbHQ7NCwKLQlDVUxMX0FMTE9DQVRPUiA9IDEmbHQ7Jmx0OzUKJiM0MzsJQ1VMTF9BTExPQ0FUT1IgPSAxJmx0OyZsdDs1LAomIzQzOwlDVUxMX01PRFVMRSA9IDEmbHQ7Jmx0OzYKIH07CiBlbnVtIEFMTE9DQVRPUl9CSVQgewogCUFMTE9DQVRPUl9DTUEgPSAxJmx0OyZsdDsxLApAQCAtNjUsNyAmIzQzOzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHsKIH07CiBlbnVtIEFSR19UWVBFIHsKIAlBUkdfVFhULCBBUkdfQ09NTSwgQVJHX1NUQUNLVFJBQ0UsIEFSR19BTExPQ19UUywgQVJHX0NVTExfVElNRSwKLQlBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUgomIzQzOwlBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUiwKJiM0MzsJQVJHX01PRFVMRQogfTsKIGVudW0gU09SVF9PUkRFUiB7CiAJU09SVF9BU0MgPSAxLApAQCAtNzksMTUgJiM0Mzs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7CiAJQ09NUF9TVEFDSyA9IDEmbHQ7Jmx0OzMsCiAJQ09NUF9OVU0gPSAxJmx0OyZsdDs0LAogCUNPTVBfVEdJRCA9IDEmbHQ7Jmx0OzUsCi0JQ09NUF9DT01NID0gMSZsdDsmbHQ7NgomIzQzOwlDT01QX0NPTU0gPSAxJmx0OyZsdDs2LAomIzQzOwlDT01QX01PRFVMRSA9IDEmbHQ7Jmx0OzcKIH07CiBzdHJ1Y3QgZmlsdGVyX2NvbmRpdGlvbiB7CiAJcGlkX3QgKnBpZHM7CiAJcGlkX3QgKnRnaWRzOwogCWNoYXIgKipjb21tczsKJiM0MzsJY2hhciAqKm1vZHVsZXM7CiAJaW50IHBpZHNfc2l6ZTsKIAlpbnQgdGdpZHNfc2l6ZTsKIAlpbnQgY29tbXNfc2l6ZTsKJiM0MzsJaW50IG1vZHVsZXNfc2l6ZTsKIH07CiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24gewogCWludCAoKipjbXBzKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CkBAIC0xMDEsNiAmIzQzOzEwOSw3IEBAIHN0YXRpYyByZWdleF90IHBpZF9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgdGdpZF9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgdHNfbnNlY19wYXR0ZXJuOwomIzQzO3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuOwogc3RhdGljIHN0cnVjdCBibG9ja19saXN0ICpsaXN0Owogc3RhdGljIGludCBsaXN0X3NpemU7CiBzdGF0aWMgaW50IG1heF9zaXplOwpAQCAtMTg0LDYgJiM0MzsxOTMsMTMgQEAgc3RhdGljIGludCBjb21wYXJlX2NvbW0oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCXJldHVybiBzdHJjbXAobDEtJmd0O2NvbW0sIGwyLSZndDtjb21tKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyOwomIzQzOwomIzQzOwlyZXR1cm4gc3RyY21wKGwxLSZndDttb2R1bGUsIGwyLSZndDttb2R1bGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY29tcGFyZV90cyhjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCiB7CiAJY29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyOwpAQCAtMjA3LDYgJiM0MzsyMjMsOCBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY3VsbF9jb25kaXRpb24oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCQlyZXR1cm4gY29tcGFyZV90Z2lkKHAxLCBwMik7CiAJaWYgKChjdWxsICZhbXA7IENVTExfQ09NTSkgJmFtcDsmYW1wOyBjb21wYXJlX2NvbW0ocDEsIHAyKSkKIAkJcmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpOwomIzQzOwlpZiAoKGN1bGwgJmFtcDsgQ1VMTF9NT0RVTEUpICZhbXA7JmFtcDsgY29tcGFyZV9tb2R1bGUocDEsIHAyKSkKJiM0MzsJCXJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpOwogCWlmICgoY3VsbCAmYW1wOyBDVUxMX0FMTE9DQVRPUikgJmFtcDsmYW1wOyBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKQogCQlyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTsKIAlyZXR1cm4gMDsKQEAgLTQxMSw5ICYjNDM7NDI5LDIzIEBAIHN0YXRpYyBjaGFyICpnZXRfY29tbShjaGFyICpidWYpCiAJcmV0dXJuIGNvbW1fc3RyOwogfQogCiYjNDM7c3RhdGljIGNoYXIgKmdldF9tb2R1bGUoY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJY2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pOwomIzQzOwomIzQzOwlpZiAoIW1vZHVsZV9zdHIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7CiYjNDM7CWlmIChzZWFyY2hfcGF0dGVybigmYW1wO21vZHVsZV9wYXR0ZXJuLCBtb2R1bGVfc3RyLAomIzQzOwkJCSAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSAmbHQ7IDApCiYjNDM7CQlzdHJjcHkobW9kdWxlX3N0ciwgJiMzNDt2bWxpbnV4JiMzNDspOwomIzQzOwlyZXR1cm4gbW9kdWxlX3N0cjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKQogewogCWZyZWUoYmxvY2stJmd0O2NvbW0pOwomIzQzOwlmcmVlKGJsb2NrLSZndDttb2R1bGUpOwogCWZyZWUoYmxvY2stJmd0O3R4dCk7CiB9CiAKQEAgLTQzMyw2ICYjNDM7NDY1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKQogCQlyZXR1cm4gQVJHX0FMTE9DX1RTOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAmIzM0O2FsbG9jYXRvciYjMzQ7KSB8fCAhc3RyY21wKGFyZywgJiMzNDthdG9yJiMzNDspKQogCQlyZXR1cm4gQVJHX0FMTE9DQVRPUjsKJiM0MzsJZWxzZSBpZiAoIXN0cmNtcChhcmcsICYjMzQ7bW9kdWxlJiMzNDspIHx8ICFzdHJjbXAoYXJnLCAmIzM0O21vZCYjMzQ7KSkKJiM0MzsJCXJldHVybiBBUkdfTU9EVUxFOwogCWVsc2UgewogCQlyZXR1cm4gQVJHX1VOS05PV047CiAJfQpAQCAtNDgzLDI1ICYjNDM7NTE3LDM2IEBAIHN0YXRpYyBib29sIG1hdGNoX3N0cl9saXN0KGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmxpc3QsIGludCBsaXN0X3NpemUpCiAKIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpCiB7Ci0JY2hhciAqY29tbTsKJiM0MzsJY2hhciAqY29tbSwgKm1vZHVsZTsKIAogCWlmICgoZmlsdGVyICZhbXA7IEZJTFRFUl9QSUQpICZhbXA7JmFtcDsgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSkKIAkJcmV0dXJuIEZJTFRFUl9TS0lQOwogCWlmICgoZmlsdGVyICZhbXA7IEZJTFRFUl9UR0lEKSAmYW1wOyZhbXA7CiAJCSFtYXRjaF9udW1fbGlzdChnZXRfdGdpZChidWYpLCBmYy50Z2lkcywgZmMudGdpZHNfc2l6ZSkpCiAJCXJldHVybiBGSUxURVJfU0tJUDsKLQlpZiAoIShmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pKQomIzQzOwlpZiAoIShmaWx0ZXIgJmFtcDsgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKQogCQlyZXR1cm4gRklMVEVSX01BVENIOwogCi0JY29tbSA9IGdldF9jb21tKGJ1Zik7Ci0JaWYgKCFjb21tKQotCQlyZXR1cm4gRklMVEVSX0VSUk9SOwotCi0JaWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHsKJiM0MzsJaWYgKGZpbHRlciAmYW1wOyBGSUxURVJfQ09NTSkgewomIzQzOwkJY29tbSA9IGdldF9jb21tKGJ1Zik7CiYjNDM7CQlpZiAoIWNvbW0pCiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKJiM0MzsJCWlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7CiYjNDM7CQkJZnJlZShjb21tKTsKJiM0MzsJCQlyZXR1cm4gRklMVEVSX1NLSVA7CiYjNDM7CQl9CiAJCWZyZWUoY29tbSk7Ci0JCXJldHVybiBGSUxURVJfU0tJUDsKIAl9Ci0JZnJlZShjb21tKTsKJiM0MzsJaWYgKGZpbHRlciAmYW1wOyBGSUxURVJfTU9EVUxFKSB7CiYjNDM7CQltb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7CiYjNDM7CQlpZiAoIW1vZHVsZSkKJiM0MzsJCQlyZXR1cm4gRklMVEVSX0VSUk9SOwomIzQzOwkJaWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHsKJiM0MzsJCQlmcmVlKG1vZHVsZSk7CiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9TS0lQOwomIzQzOwkJfQomIzQzOwkJZnJlZShtb2R1bGUpOwomIzQzOwl9CiAJcmV0dXJuIEZJTFRFUl9NQVRDSDsKIH0KIApAQCAtNTQ3LDYgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKQogCQlsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSYjNDM7JiM0Mzs7CiAJbGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpOwogCWxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7CiYjNDM7CWxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7CiYjNDM7CWlmICghbGlzdFtsaXN0X3NpemVdLm1vZHVsZSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7T3V0IG9mIG1lbW9yeVxuJiMzNDspOwomIzQzOwkJZnJlZV9ibG9ja19saXN0KCZhbXA7bGlzdFtsaXN0X3NpemVdKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCWxpc3Rfc2l6ZSYjNDM7JiM0Mzs7CiAJaWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkgewogCQlwcmludGYoJiMzNDtsb2FkZWQgJWRcciYjMzQ7LCBsaXN0X3NpemUpOwpAQCAtNTczLDYgJiM0Mzs2MjQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cikKIAkJCWN1bGwgfD0gQ1VMTF9TVEFDS1RSQUNFOwogCQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfQUxMT0NBVE9SKQogCQkJY3VsbCB8PSBDVUxMX0FMTE9DQVRPUjsKJiM0MzsJCWVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpCiYjNDM7CQkJY3VsbCB8PSBDVUxMX01PRFVMRTsKIAkJZWxzZSB7CiAJCQlmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC02MzUsNiAmIzQzOzY4OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKQogCQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfdHh0OwogCQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfQUxMT0NBVE9SKQogCQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yOwomIzQzOwkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSkKJiM0MzsJCQlzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7CiAJCWVsc2UgewogCQkJZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpOwogCQkJc2Muc2l6ZSA9IDA7CkBAIC02OTEsNyAmIzQzOzc0Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiAJCSYjMzQ7LXBcdFx0XHRTb3J0IGJ5IHBpZC5cbiYjMzQ7CiAJCSYjMzQ7LVBcdFx0XHRTb3J0IGJ5IHRnaWQuXG4mIzM0OwogCQkmIzM0Oy1zXHRcdFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cbiYjMzQ7Ci0JCSYjMzQ7LXRcdFx0XHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXG5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy10XHRcdFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxuJiMzNDsKJiM0MzsJCSYjMzQ7LU1cdFx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuXG4mIzM0OwogCQkmIzM0Oy0tcGlkICZsdDtwaWRsaXN0Jmd0O1x0XHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uJiMzNDsKIAkJJiMzNDsgb2Zcblx0XHRcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluICZsdDtwaWRsaXN0Jmd0Oy5cbiYjMzQ7CiAJCSYjMzQ7LS10Z2lkICZsdDt0Z2lkbGlzdCZndDtcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uJiMzNDsKQEAgLTcwMCwxMSAmIzQzOzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCQkmIzM0Oy0tbmFtZSAmbHQ7Y21kbGlzdCZndDtcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUmIzM0OwogCQkmIzM0OyBpbmZvcm1hdGlvblxuXHRcdFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluJiMzNDsKIAkJJiMzNDsgJmx0O2NtZGxpc3QmZ3Q7LlxuJiMzNDsKLQkJJiMzNDstLWN1bGwgJmx0O3J1bGVzJmd0O1x0XHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gJmx0O3J1bGVzJmd0OyBpcyBhICYjMzQ7Ci0JCSYjMzQ7c2luZ2xlXG5cdFx0XHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0ICYjMzQ7Ci0JCSYjMzQ7d2l0aCBzb21lXG5cdFx0XHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgJiMzNDsKLQkJJiMzNDtzdGFja3RyYWNlLCBhbGxvY2F0b3IpXG4mIzM0OwomIzQzOwkJJiMzNDstLW1vZHVsZSAmbHQ7bW9kbGlzdCZndDtcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0b2YgYmxvY2tzIHdob3NlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gJmx0O21vZGxpc3QmZ3Q7LlxuJiMzNDsKJiM0MzsJCSYjMzQ7LS1jdWxsICZsdDtydWxlcyZndDtcdFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuICZsdDtydWxlcyZndDsgaXMgYSBzaW5nbGVcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXG4mIzM0OwogCQkmIzM0Oy0tc29ydCAmbHQ7b3JkZXImZ3Q7XHRcdFNwZWNpZnkgc29ydCBvcmRlciBhczogWyYjNDM7fC1da2V5WyxbJiM0Mzt8LV1rZXlbLC4uLl1dXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRBdmFpbGFibGUga2V5czpcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRUaGUgXCYjMzQ7JiM0MztcJiMzNDsgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdEV4YW1wbGVzOlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICAtLXNvcnQ9biwmIzQzO3BpZCwtdGdpZFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICAtLXNvcnQ9bW9kLGF0XG4mIzM0OwogCSk7CiB9CiAKQEAgLTcyMSwxMyAmIzQzOzc4NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsgJiMzNDtuYW1lJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAzIH0sCiAJCXsgJiMzNDtjdWxsJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sCiAJCXsgJiMzNDtzb3J0JiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sCiYjNDM7CQl7ICYjMzQ7bW9kdWxlJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sCiAJCXsgJiMzNDtoZWxwJiMzNDssIG5vX2FyZ3VtZW50LCBOVUxMLCAmIzM5O2gmIzM5OyB9LAogCQl7IDAsIDAsIDAsIDB9LAogCX07CiAKIAljb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7YWRtbnBzdFBoJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpCiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgJiMzNDthZG1ucHN0UE1oJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpCiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTthJiMzOTs6CiAJCQljb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQzsKQEAgLTc1Myw2ICYjNDM7ODIwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7biYjMzk7OgogCQkJY29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O00mIzM5OzoKJiM0MzsJCQljb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCQl1c2FnZSgpOwogCQkJZXhpdCgwKTsKQEAgLTc5Miw2ICYjNDM7ODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlleGl0KDEpOwogCQkJfQogCQkJYnJlYWs7CiYjNDM7CQljYXNlIDY6CiYjNDM7CQkJZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTsKJiM0MzsJCQlmYy5tb2R1bGVzID0gZXhwbG9kZSgmIzM5OywmIzM5Oywgb3B0YXJnLCAmYW1wO2ZjLm1vZHVsZXNfc2l6ZSk7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwogCQkJZXhpdCgxKTsKQEAgLTgyMSw2ICYjNDM7ODk1LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwogCWNhc2UgQ09NUF9OT19GTEFHOgomIzQzOwkJaWYgKHNjLnNpemUgJmd0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7CiYjNDM7CQlicmVhazsKIAljYXNlIENPTVBfTlVNOgogCQlzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTsKIAkJYnJlYWs7CkBAIC04MzAsNiAmIzQzOzkwOCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljYXNlIENPTVBfQ09NTToKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwomIzQzOwljYXNlIENPTVBfTU9EVUxFOgomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYWdlKCk7CiAJCWV4aXQoMSk7CkBAIC04NTMsNiAmIzQzOzkzNCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ290byBvdXRfY29tbTsKIAlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDt0c19uc2VjX3BhdHRlcm4sICYjMzQ7dHNcXHMqKFswLTldKilcXHMqbnMmIzM0OykpCiAJCWdvdG8gb3V0X3RzOwomIzQzOwlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDttb2R1bGVfcGF0dGVybiwgJiMzNDtcXFsoW2EtekEtWjAtOV9dJiM0MzspXFxdJiMzNDspKQomIzQzOwkJZ290byBvdXRfbW9kdWxlOwogCiAJZnN0YXQoZmlsZW5vKGZpbiksICZhbXA7c3QpOwogCW1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi8KQEAgLTkxMSw2ICYjNDM7OTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWZwcmludGYoZm91dCwgJiMzNDssIFRHSUQgJWQmIzM0OywgbGlzdFtpXS50Z2lkKTsKIAkJCWlmIChjdWxsICZhbXA7IENVTExfQ09NTSB8fCBmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pCiAJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgdGFza19jb21tX25hbWU6ICVzJiMzNDssIGxpc3RbaV0uY29tbSk7CiYjNDM7CQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9NT0RVTEUgfHwgZmlsdGVyICZhbXA7IEZJTFRFUl9NT0RVTEUpCiYjNDM7CQkJCWZwcmludGYoZm91dCwgJiMzNDssIG1vZHVsZTogJXMmIzM0OywgbGlzdFtpXS5tb2R1bGUpOwogCQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9BTExPQ0FUT1IpIHsKIAkJCQlmcHJpbnRmKGZvdXQsICYjMzQ7LCAmIzM0Oyk7CiAJCQkJcHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTsKQEAgLTkzMSw2ICYjNDM7MTAxNiw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWZyZWVfYmxvY2tfbGlzdCgmYW1wO2xpc3RbaV0pOwogCQlmcmVlKGxpc3QpOwogCX0KJiM0MztvdXRfbW9kdWxlOgomIzQzOwlyZWdmcmVlKCZhbXA7bW9kdWxlX3BhdHRlcm4pOwogb3V0X3RzOgogCXJlZ2ZyZWUoJmFtcDt0c19uc2VjX3BhdHRlcm4pOwogb3V0X2NvbW06CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTMKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBIFVzZXJzcGFjZSBUb29sIEVuaGFuY2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgZmlsZXM6IGBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0YCBhbmQgYHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UqLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGBwYWdlX293bmVyX3NvcnRgIHRvb2wuIEkga25vdyB0aGF0IHRvb2w7IGl0JiMzOTtzIGVudGlyZWx5IHVzZXJzcGFjZS4KCkxldCBtZSBqdXN0IGJlIGFic29sdXRlbHkgc3VyZS4uLiBoYW5nIG9uLCBkb3VibGUtY2hlY2tpbmfigKYgeWVwLCB0aGUgZGlmZiBvbmx5IHNob3dzIHRob3NlIHR3byBmaWxlcy4gTm8ga2VybmVsIGNvZGUuIFBlcmZlY3QuCgpTaW5jZSB0aGlzIHBhdGNoIGlzICpzb2xlbHkqIGNvbmNlcm5lZCB3aXRoIGEgdXNlcnNwYWNlIHV0aWxpdHkgYW5kIHVwZGF0aW5nIGl0cyBkb2N1bWVudGF0aW9uLCBpdCBsb2dpY2FsbHkgZm9sbG93cyB0aGF0IGl0IGRvZXNuJiMzOTt0IGFmZmVjdCBhbnkga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuIFRoZXJlIGFyZSBubyBrZXJuZWwtbGV2ZWwgY2hhbmdlcyB0byBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLiBObyBrZXJuZWwtbGV2ZWwgY2hhbmdlcyBtZWFucyBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpPa2F5LCBkb3VibGUgY2hlY2suLi4gYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLi4uIGNvbmZpcm1lZC4KClRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FsbC4gVGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGEgdXNlcnNwYWNlIHRvb2wsIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMgbWVhbnMgaXQmIzM5O3Mgbm90IGEgY2FuZGlkYXRlIGZvciBrZXJuZWwgZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIxOjM5OjUzLjI5MjEyMTQzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzM0NjgxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGZ1enogaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIxOjM5OjUzLjI5MjEyNzA4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDY4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTQ2Y2MyOGFmNDRhNDRhMGY4MWEyNzhkMjM0YzcxMWJkMWY3OTNjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAyMTozOTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IGE2YmQzZmU2NDIzYWQ2Li5iZDAyNzM3N2RmZjZlZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC0xOTksNiArMTk5LDcgQEAgVXNhZ2VcXG4gXFx0XFx0LXBcXHRcXHRTb3J0IGJ5IHBpZC5cXG4gXFx0XFx0LVBcXHRcXHRTb3J0IGJ5IHRnaWQuXFxuIFxcdFxcdC1uXFx0XFx0U29ydCBieSB0YXNrIGNvbW1hbmQgbmFtZS5cXG4rXFx0XFx0LU1cXHRcXHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxcbiBcXHRcXHQtclxcdFxcdFNvcnQgYnkgbWVtb3J5IHJlbGVhc2UgdGltZS5cXG4gXFx0XFx0LXNcXHRcXHRTb3J0IGJ5IHN0YWNrIHRyYWNlLlxcbiBcXHRcXHQtdFxcdFxcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxcbkBAIC0yNDAsOCArMjQxLDEwIEBAIFVzYWdlXFxuIFxcdFxcdFxcdFxcdFxcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFxcdTAwM2N0Z2lkbGlzdFxcdTAwM2UuXFxuIFxcdFxcdC0tbmFtZSBcXHUwMDNjY21kbGlzdFxcdTAwM2VcXHRTZWxlY3QgYnkgdGFzayBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXFxuIFxcdFxcdFxcdFxcdFxcdHRhc2sgY29tbWFuZCBuYW1lIGFwcGVhciBpbiBcXHUwMDNjY21kbGlzdFxcdTAwM2UuXFxuK1xcdFxcdC0tbW9kdWxlIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZVxcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcXG4rXFx0XFx0XFx0XFx0XFx0bW9kdWxlIG5hbWUgYXBwZWFyIGluIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZS5cXG4gXFxuLVxcdFxcdFxcdTAwM2NwaWRsaXN0XFx1MDAzZSwgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZSwgXFx1MDAzY2NtZGxpc3RcXHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXFxuK1xcdFxcdFxcdTAwM2NwaWRsaXN0XFx1MDAzZSwgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZSwgXFx1MDAzY2NtZGxpc3RcXHUwMDNlLCBcXHUwMDNjbW9kbGlzdFxcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcXG4gXFx0XFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXFxuIFxcbiBcXG5AQCAtMjQ5LDYgKzI1Miw3IEBAIFVzYWdlXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1waWQ9MVxcbiBcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tdGdpZD0xLDIsM1xcbiBcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tbmFtZSBuYW1lMSxuYW1lMlxcbitcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tbW9kdWxlIHhmcyxleHQ0XFxuIFxcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0yNjUsNiArMjY5LDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZnRcXHRcXHRmcmVlX3RzXFx0XFx0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIHJlbGVhc2VkXFxuIFxcdGF0XFx0XFx0YWxsb2NfdHNcXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXHRtb2RcXHRcXHRtb2R1bGVcXHRcXHRrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFxuICAgRm9yIC0tY3VsbCBvcHRpb246XFxuIFxcbkBAIC0yNzUsNiArMjgwLDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXHRtb2RcXHRcXHRtb2R1bGVcXHRcXHRrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG5pbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbkBAIC0yNSwxMSArMjUsMTMgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XFxuKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XFxuIFxcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIFxcdGNoYXIgKnR4dDtcXG4gXFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcXG4gXFx0Y2hhciAqc3RhY2t0cmFjZTtcXG4rXFx0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFx0X191NjQgdHNfbnNlYztcXG4gXFx0aW50IGxlbjtcXG4gXFx0aW50IG51bTtcXG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIGVudW0gRklMVEVSX0JJVCB7XFxuIFxcdEZJTFRFUl9QSUQgPSAxXFx1MDAzY1xcdTAwM2MxLFxcbiBcXHRGSUxURVJfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzIsXFxuLVxcdEZJTFRFUl9DT01NID0gMVxcdTAwM2NcXHUwMDNjM1xcbitcXHRGSUxURVJfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzMsXFxuK1xcdEZJTFRFUl9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M0XFxuIH07XFxuIFxcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xcbkBAIC01NSw3ICs1OCw4IEBAIGVudW0gQ1VMTF9CSVQge1xcbiBcXHRDVUxMX1RHSUQgPSAxXFx1MDAzY1xcdTAwM2MyLFxcbiBcXHRDVUxMX0NPTU0gPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXFx1MDAzY1xcdTAwM2M0LFxcbi1cXHRDVUxMX0FMTE9DQVRPUiA9IDFcXHUwMDNjXFx1MDAzYzVcXG4rXFx0Q1VMTF9BTExPQ0FUT1IgPSAxXFx1MDAzY1xcdTAwM2M1LFxcbitcXHRDVUxMX01PRFVMRSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4gfTtcXG4gZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gXFx0QUxMT0NBVE9SX0NNQSA9IDFcXHUwMDNjXFx1MDAzYzEsXFxuQEAgLTY1LDcgKzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gfTtcXG4gZW51bSBBUkdfVFlQRSB7XFxuIFxcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxcbi1cXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxcbitcXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcXG4rXFx0QVJHX01PRFVMRVxcbiB9O1xcbiBlbnVtIFNPUlRfT1JERVIge1xcbiBcXHRTT1JUX0FTQyA9IDEsXFxuQEAgLTc5LDE1ICs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XFxuIFxcdENPTVBfU1RBQ0sgPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDT01QX05VTSA9IDFcXHUwMDNjXFx1MDAzYzQsXFxuIFxcdENPTVBfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzUsXFxuLVxcdENPTVBfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4rXFx0Q09NUF9DT01NID0gMVxcdTAwM2NcXHUwMDNjNixcXG4rXFx0Q09NUF9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M3XFxuIH07XFxuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcXG4gXFx0cGlkX3QgKnBpZHM7XFxuIFxcdHBpZF90ICp0Z2lkcztcXG4gXFx0Y2hhciAqKmNvbW1zO1xcbitcXHRjaGFyICoqbW9kdWxlcztcXG4gXFx0aW50IHBpZHNfc2l6ZTtcXG4gXFx0aW50IHRnaWRzX3NpemU7XFxuIFxcdGludCBjb21tc19zaXplO1xcbitcXHRpbnQgbW9kdWxlc19zaXplO1xcbiB9O1xcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xcbiBcXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xcbkBAIC0xMDEsNiArMTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XFxuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcXG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XFxuK3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XFxuIHN0YXRpYyBpbnQgbGlzdF9zaXplO1xcbiBzdGF0aWMgaW50IG1heF9zaXplO1xcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4gXFx0cmV0dXJuIHN0cmNtcChsMS1cXHUwMDNlY29tbSwgbDItXFx1MDAzZWNvbW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKGwxLVxcdTAwM2Vtb2R1bGUsIGwyLVxcdTAwM2Vtb2R1bGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcXG5AQCAtMjA3LDYgKzIyMyw4IEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jdWxsX2NvbmRpdGlvbihjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXFxuIFxcdFxcdHJldHVybiBjb21wYXJlX3RnaWQocDEsIHAyKTtcXG4gXFx0aWYgKChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcXG4gXFx0XFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xcbitcXHRpZiAoKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgY29tcGFyZV9tb2R1bGUocDEsIHAyKSlcXG4rXFx0XFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XFxuIFxcdGlmICgoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxcbiBcXHRcXHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQxMSw5ICs0MjksMjMgQEAgc3RhdGljIGNoYXIgKmdldF9jb21tKGNoYXIgKmJ1ZilcXG4gXFx0cmV0dXJuIGNvbW1fc3RyO1xcbiB9XFxuIFxcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXFxuK3tcXG4rXFx0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xcbitcXG4rXFx0aWYgKCFtb2R1bGVfc3RyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0bWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7XFxuK1xcdGlmIChzZWFyY2hfcGF0dGVybihcXHUwMDI2bW9kdWxlX3BhdHRlcm4sIG1vZHVsZV9zdHIsXFxuK1xcdFxcdFxcdCAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSBcXHUwMDNjIDApXFxuK1xcdFxcdHN0cmNweShtb2R1bGVfc3RyLCBcXFwidm1saW51eFxcXCIpO1xcbitcXHRyZXR1cm4gbW9kdWxlX3N0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaylcXG4ge1xcbiBcXHRmcmVlKGJsb2NrLVxcdTAwM2Vjb21tKTtcXG4rXFx0ZnJlZShibG9jay1cXHUwMDNlbW9kdWxlKTtcXG4gXFx0ZnJlZShibG9jay1cXHUwMDNldHh0KTtcXG4gfVxcbiBcXG5AQCAtNDMzLDYgKzQ2NSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2FyZ190eXBlKGNvbnN0IGNoYXIgKmFyZylcXG4gXFx0XFx0cmV0dXJuIEFSR19BTExPQ19UUztcXG4gXFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFxcXCJhbGxvY2F0b3JcXFwiKSB8fCAhc3RyY21wKGFyZywgXFxcImF0b3JcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XFxuK1xcdGVsc2UgaWYgKCFzdHJjbXAoYXJnLCBcXFwibW9kdWxlXFxcIikgfHwgIXN0cmNtcChhcmcsIFxcXCJtb2RcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIEFSR19NT0RVTEU7XFxuIFxcdGVsc2Uge1xcbiBcXHRcXHRyZXR1cm4gQVJHX1VOS05PV047XFxuIFxcdH1cXG5AQCAtNDgzLDI1ICs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcXG4gXFxuIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpXFxuIHtcXG4tXFx0Y2hhciAqY29tbTtcXG4rXFx0Y2hhciAqY29tbSwgKm1vZHVsZTtcXG4gXFxuIFxcdGlmICgoZmlsdGVyIFxcdTAwMjYgRklMVEVSX1BJRCkgXFx1MDAyNlxcdTAwMjYgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSlcXG4gXFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbiBcXHRpZiAoKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9UR0lEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuLVxcdGlmICghKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKSlcXG4rXFx0aWYgKCEoZmlsdGVyIFxcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX01BVENIO1xcbiBcXG4tXFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XFxuLVxcdGlmICghY29tbSlcXG4tXFx0XFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcXG4tXFxuLVxcdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XFxuK1xcdGlmIChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfQ09NTSkge1xcbitcXHRcXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcXG4rXFx0XFx0aWYgKCFjb21tKVxcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX0VSUk9SO1xcbitcXHRcXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xcbitcXHRcXHRcXHRmcmVlKGNvbW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZnJlZShjb21tKTtcXG4tXFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbiBcXHR9XFxuLVxcdGZyZWUoY29tbSk7XFxuK1xcdGlmIChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XFxuK1xcdFxcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcXG4rXFx0XFx0aWYgKCFtb2R1bGUpXFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfRVJST1I7XFxuK1xcdFxcdGlmICghbWF0Y2hfc3RyX2xpc3QobW9kdWxlLCBmYy5tb2R1bGVzLCBmYy5tb2R1bGVzX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZyZWUobW9kdWxlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZyZWUobW9kdWxlKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gRklMVEVSX01BVENIO1xcbiB9XFxuIFxcbkBAIC01NDcsNiArNTkyLDEyIEBAIHN0YXRpYyBib29sIGFkZF9saXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY2hhciAqZXh0X2J1ZilcXG4gXFx0XFx0bGlzdFtsaXN0X3NpemVdLnN0YWNrdHJhY2UrKztcXG4gXFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xcbiBcXHRsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpO1xcbitcXHRsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xcbitcXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJPdXQgb2YgbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZnJlZV9ibG9ja19saXN0KFxcdTAwMjZsaXN0W2xpc3Rfc2l6ZV0pO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFx0bGlzdF9zaXplKys7XFxuIFxcdGlmIChsaXN0X3NpemUgJSAxMDAwID09IDApIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJsb2FkZWQgJWRcXFxcclxcXCIsIGxpc3Rfc2l6ZSk7XFxuQEAgLTU3Myw2ICs2MjQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcXG4gXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XFxuIFxcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXFxuIFxcdFxcdFxcdGN1bGwgfD0gQ1VMTF9BTExPQ0FUT1I7XFxuK1xcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpXFxuK1xcdFxcdFxcdGN1bGwgfD0gQ1VMTF9NT0RVTEU7XFxuIFxcdFxcdGVsc2Uge1xcbiBcXHRcXHRcXHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjM1LDYgKzY4OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxcbiBcXHRcXHRcXHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XFxuIFxcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXFxuIFxcdFxcdFxcdHNjLmNtcHNbaV0gPSBjb21wYXJlX2FsbG9jYXRvcjtcXG4rXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcXG4rXFx0XFx0XFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlO1xcbiBcXHRcXHRlbHNlIHtcXG4gXFx0XFx0XFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xcbiBcXHRcXHRcXHRzYy5zaXplID0gMDtcXG5AQCAtNjkxLDcgKzc0Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdFxcdFxcXCItcFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgcGlkLlxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLVBcXFxcdFxcXFx0XFxcXHRTb3J0IGJ5IHRnaWQuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItc1xcXFx0XFxcXHRcXFxcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCItdFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXFxcblxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLXRcXFxcdFxcXFx0XFxcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItTVxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxcXG5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi0tcGlkIFxcdTAwM2NwaWRsaXN0XFx1MDAzZVxcXFx0XFxcXHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXFxcIlxcbiBcXHRcXHRcXFwiIG9mXFxcXG5cXFxcdFxcXFx0XFxcXHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiBcXHUwMDNjcGlkbGlzdFxcdTAwM2UuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItLXRnaWQgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZVxcXFx0U2VsZWN0IGJ5IHRnaWQuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFwiXFxuQEAgLTcwMCwxMSArNzU2LDIxIEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdFxcdFxcXCItLW5hbWUgXFx1MDAzY2NtZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlXFxcIlxcbiBcXHRcXHRcXFwiIGluZm9ybWF0aW9uXFxcXG5cXFxcdFxcXFx0XFxcXHRvZiBibG9ja3Mgd2hvc2UgY29tbWFuZCBuYW1lIGFwcGVhcnMgaW5cXFwiXFxuIFxcdFxcdFxcXCIgXFx1MDAzY2NtZGxpc3RcXHUwMDNlLlxcXFxuXFxcIlxcbi1cXHRcXHRcXFwiLS1jdWxsIFxcdTAwM2NydWxlc1xcdTAwM2VcXFxcdFxcXFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFxcdTAwM2NydWxlc1xcdTAwM2UgaXMgYSBcXFwiXFxuLVxcdFxcdFxcXCJzaW5nbGVcXFxcblxcXFx0XFxcXHRcXFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgXFxcIlxcbi1cXHRcXHRcXFwid2l0aCBzb21lXFxcXG5cXFxcdFxcXFx0XFxcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgXFxcIlxcbi1cXHRcXHRcXFwic3RhY2t0cmFjZSwgYWxsb2NhdG9yKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLS1tb2R1bGUgXFx1MDAzY21vZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZS5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIi0tY3VsbCBcXHUwMDNjcnVsZXNcXHUwMDNlXFxcXHRcXFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcXHUwMDNjcnVsZXNcXHUwMDNlIGlzIGEgc2luZ2xlXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLS1zb3J0IFxcdTAwM2NvcmRlclxcdTAwM2VcXFxcdFxcXFx0U3BlY2lmeSBzb3J0IG9yZGVyIGFzOiBbK3wtXWtleVssWyt8LV1rZXlbLC4uLl1dXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRBdmFpbGFibGUga2V5czpcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRUaGUgXFxcXFxcXCIrXFxcXFxcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdEV4YW1wbGVzOlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIC0tc29ydD1tb2QsYXRcXFxcblxcXCJcXG4gXFx0KTtcXG4gfVxcbiBcXG5AQCAtNzIxLDEzICs3ODcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHR7IFxcXCJuYW1lXFxcIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDMgfSxcXG4gXFx0XFx0eyBcXFwiY3VsbFxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sXFxuIFxcdFxcdHsgXFxcInNvcnRcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxcbitcXHRcXHR7IFxcXCJtb2R1bGVcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LFxcbiBcXHRcXHR7IFxcXCJoZWxwXFxcIiwgbm9fYXJndW1lbnQsIE5VTEwsICdoJyB9LFxcbiBcXHRcXHR7IDAsIDAsIDAsIDB9LFxcbiBcXHR9O1xcbiBcXG4gXFx0Y29tcGFyZV9mbGFnID0gQ09NUF9OT19GTEFHO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiYWRtbnBzdFBoXFxcIiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiYWRtbnBzdFBNaFxcXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ2EnOlxcbiBcXHRcXHRcXHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcXG5AQCAtNzUzLDYgKzgyMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Y2FzZSAnbic6XFxuIFxcdFxcdFxcdGNvbXBhcmVfZmxhZyB8PSBDT01QX0NPTU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdNJzpcXG4rXFx0XFx0XFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnaCc6XFxuIFxcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdFxcdGV4aXQoMCk7XFxuQEAgLTc5Miw2ICs4NjIsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIDY6XFxuK1xcdFxcdFxcdGZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7XFxuK1xcdFxcdFxcdGZjLm1vZHVsZXMgPSBleHBsb2RlKCcsJywgb3B0YXJnLCBcXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdFxcdGV4aXQoMSk7XFxuQEAgLTgyMSw2ICs4OTUsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX3N0YWNrdHJhY2UsIFNPUlRfQVNDKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQ09NUF9OT19GTEFHOlxcbitcXHRcXHRpZiAoc2Muc2l6ZSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQ09NUF9OVU06XFxuIFxcdFxcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfbnVtLCBTT1JUX0RFU0MpO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtODMwLDYgKzkwOCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0Y2FzZSBDT01QX0NPTU06XFxuIFxcdFxcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfY29tbSwgU09SVF9BU0MpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBDT01QX01PRFVMRTpcXG4rXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdGV4aXQoMSk7XFxuQEAgLTg1Myw2ICs5MzQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGdvdG8gb3V0X2NvbW07XFxuIFxcdGlmICghY2hlY2tfcmVnY29tcChcXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcXFwidHNcXFxcXFxcXHMqKFswLTldKilcXFxcXFxcXHMqbnNcXFwiKSlcXG4gXFx0XFx0Z290byBvdXRfdHM7XFxuK1xcdGlmICghY2hlY2tfcmVnY29tcChcXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFxcXCJcXFxcXFxcXFsoW2EtekEtWjAtOV9dKylcXFxcXFxcXF1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlO1xcbiBcXG4gXFx0ZnN0YXQoZmlsZW5vKGZpbiksIFxcdTAwMjZzdCk7XFxuIFxcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cXG5AQCAtOTExLDYgKzk5NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBUR0lEICVkXFxcIiwgbGlzdFtpXS50Z2lkKTtcXG4gXFx0XFx0XFx0aWYgKGN1bGwgXFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFxcdTAwMjYgRklMVEVSX0NPTU0pXFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgdGFza19jb21tX25hbWU6ICVzXFxcIiwgbGlzdFtpXS5jb21tKTtcXG4rXFx0XFx0XFx0aWYgKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXFx1MDAyNiBGSUxURVJfTU9EVUxFKVxcbitcXHRcXHRcXHRcXHRmcHJpbnRmKGZvdXQsIFxcXCIsIG1vZHVsZTogJXNcXFwiLCBsaXN0W2ldLm1vZHVsZSk7XFxuIFxcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcXG4gXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBcXFwiKTtcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTtcXG5AQCAtOTMxLDYgKzEwMTYsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGZyZWVfYmxvY2tfbGlzdChcXHUwMDI2bGlzdFtpXSk7XFxuIFxcdFxcdGZyZWUobGlzdCk7XFxuIFxcdH1cXG4rb3V0X21vZHVsZTpcXG4rXFx0cmVnZnJlZShcXHUwMDI2bW9kdWxlX3BhdHRlcm4pO1xcbiBvdXRfdHM6XFxuIFxcdHJlZ2ZyZWUoXFx1MDAyNnRzX25zZWNfcGF0dGVybik7XFxuIG91dF9jb21tOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMTozOTo1My44MzYyMDY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTI4OTM3ODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggYTZiZDNmZTY0MjNhZDYuLmJkMDI3Mzc3ZGZmNmVlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTE5OSw2ICsxOTksNyBAQCBVc2FnZVxuIFx0XHQtcFx0XHRTb3J0IGJ5IHBpZC5cbiBcdFx0LVBcdFx0U29ydCBieSB0Z2lkLlxuIFx0XHQtblx0XHRTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLlxuK1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICsyNDEsMTAgQEAgVXNhZ2VcbiBcdFx0XHRcdFx0Z3JvdXAgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjdGdpZGxpc3RcdTAwM2UuXG4gXHRcdC0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXHRTZWxlY3QgYnkgdGFzayBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXG4gXHRcdFx0XHRcdHRhc2sgY29tbWFuZCBuYW1lIGFwcGVhciBpbiBcdTAwM2NjbWRsaXN0XHUwMDNlLlxuK1x0XHQtLW1vZHVsZSBcdTAwM2Ntb2RsaXN0XHUwMDNlXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXG4rXHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuK1x0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSwgXHUwMDNjbW9kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuIFx0XHR3aGljaCBvZmZlcnMgYSB3YXkgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNlbGVjdGluZyBydWxlcy5cbiBcbiBcbkBAIC0yNDksNiArMjUyLDcgQEAgVXNhZ2VcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXBpZD0xXG4gXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS10Z2lkPTEsMiwzXG4gXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1uYW1lIG5hbWUxLG5hbWUyXG4rXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgKzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmdFx0XHRmcmVlX3RzXHRcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZFxuIFx0YXRcdFx0YWxsb2NfdHNcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyBhbGxvY2F0ZWRcbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuK1x0bW9kXHRcdG1vZHVsZVx0XHRrZXJuZWwgbW9kdWxlIG5hbWVcbiBcbiAgIEZvciAtLWN1bGwgb3B0aW9uOlxuIFxuQEAgLTI3NSw2ICsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbitcdG1vZFx0XHRtb2R1bGVcdFx0a2VybmVsIG1vZHVsZSBuYW1lXG4gXG4gRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbmluZGV4IDM1ZDNkMjU0OTQxYzk0Li43YTFiYzA1NGQyOTVkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuQEAgLTI1LDExICsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4rI2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbitcdGNoYXIgKm1vZHVsZTsgLy8ga2VybmVsIG1vZHVsZSBuYW1lXG4gXHRfX3U2NCB0c19uc2VjO1xuIFx0aW50IGxlbjtcbiBcdGludCBudW07XG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4rXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuK1x0RklMVEVSX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M0XG4gfTtcbiBcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xuQEAgLTU1LDcgKzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4rXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuK1x0Q1VMTF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNlxuIH07XG4gZW51bSBBTExPQ0FUT1JfQklUIHtcbiBcdEFMTE9DQVRPUl9DTUEgPSAxXHUwMDNjXHUwMDNjMSxcbkBAIC02NSw3ICs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbitcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuK1x0QVJHX01PRFVMRVxuIH07XG4gZW51bSBTT1JUX09SREVSIHtcbiBcdFNPUlRfQVNDID0gMSxcbkBAIC03OSwxNSArODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbitcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuK1x0Q09NUF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjN1xuIH07XG4gc3RydWN0IGZpbHRlcl9jb25kaXRpb24ge1xuIFx0cGlkX3QgKnBpZHM7XG4gXHRwaWRfdCAqdGdpZHM7XG4gXHRjaGFyICoqY29tbXM7XG4rXHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuK1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0Z2lkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjtcbitzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbitcbitcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuK31cbitcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbkBAIC0yMDcsNiArMjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuK1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4rXHRcdHJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikgXHUwMDI2XHUwMDI2IGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMikpXG4gXHRcdHJldHVybiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDExLDkgKzQyOSwyMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4re1xuK1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuK1xuK1x0aWYgKCFtb2R1bGVfc3RyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdG1lbXNldChtb2R1bGVfc3RyLCAwLCBNT0RVTEVfTkFNRV9MRU4pO1xuK1x0aWYgKHNlYXJjaF9wYXR0ZXJuKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBtb2R1bGVfc3RyLFxuK1x0XHRcdCAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSBcdTAwM2MgMClcbitcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwidm1saW51eFwiKTtcbitcdHJldHVybiBtb2R1bGVfc3RyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxuIHtcbiBcdGZyZWUoYmxvY2stXHUwMDNlY29tbSk7XG4rXHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICs0NjUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJhbGxvY2F0b3JcIikgfHwgIXN0cmNtcChhcmcsIFwiYXRvclwiKSlcbiBcdFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XG4rXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJtb2R1bGVcIikgfHwgIXN0cmNtcChhcmcsIFwibW9kXCIpKVxuK1x0XHRyZXR1cm4gQVJHX01PRFVMRTtcbiBcdGVsc2Uge1xuIFx0XHRyZXR1cm4gQVJHX1VOS05PV047XG4gXHR9XG5AQCAtNDgzLDI1ICs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4rXHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbitcdGlmICghKGZpbHRlciBcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxuIFx0XHRyZXR1cm4gRklMVEVSX01BVENIO1xuIFxuLVx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4tXHRpZiAoIWNvbW0pXG4tXHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4tXG4tXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbitcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4rXHRcdGlmICghY29tbSlcbitcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuK1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0XHRcdGZyZWUoY29tbSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4rXHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XG4rXHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbitcdFx0aWYgKCFtb2R1bGUpXG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbitcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbitcdFx0XHRmcmVlKG1vZHVsZSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4rXHRcdGZyZWUobW9kdWxlKTtcbitcdH1cbiBcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gfVxuIFxuQEAgLTU0Nyw2ICs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xuIFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xuIFx0bGlzdFtsaXN0X3NpemVdLmFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoYnVmLCBleHRfYnVmKTtcbitcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4rXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiT3V0IG9mIG1lbW9yeVxcblwiKTtcbitcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdGxpc3Rfc2l6ZSsrO1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCJsb2FkZWQgJWRcXHJcIiwgbGlzdF9zaXplKTtcbkBAIC01NzMsNiArNjI0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbitcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbitcdFx0XHRjdWxsIHw9IENVTExfTU9EVUxFO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYzNSw2ICs2ODgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuK1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuK1x0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX21vZHVsZTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHNjLnNpemUgPSAwO1xuQEAgLTY5MSw3ICs3NDYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCJcbiBcdFx0XCItUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cIlxuIFx0XHRcIi1zXFx0XFx0XFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXG5cIlxuLVx0XHRcIi10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwiXG4rXHRcdFwiLXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCJcbitcdFx0XCItTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCJcbiBcdFx0XCItLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwiXG4gXHRcdFwiIG9mXFxuXFx0XFx0XFx0YmxvY2tzIHdob3NlIHByb2Nlc3MgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjcGlkbGlzdFx1MDAzZS5cXG5cIlxuIFx0XHRcIi0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCJcbkBAIC03MDAsMTEgKzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwiXG4gXHRcdFwiIGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCJcbiBcdFx0XCIgXHUwMDNjY21kbGlzdFx1MDAzZS5cXG5cIlxuLVx0XHRcIi0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwiXG4tXHRcdFwic2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcIlxuLVx0XHRcIndpdGggc29tZVxcblxcdFxcdFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcIlxuLVx0XHRcInN0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cIlxuK1x0XHRcIi0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCJcbitcdFx0XCItLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCJcbiBcdFx0XCItLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEF2YWlsYWJsZSBrZXlzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdFRoZSBcXFwiK1xcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEV4YW1wbGVzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxuXCJcbitcdFx0XCJcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cIlxuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICs3ODcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHR7IFwibmFtZVwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwiY3VsbFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwic29ydFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxuK1x0XHR7IFwibW9kdWxlXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXG4gXHRcdHsgXCJoZWxwXCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCcgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBoXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBNaFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiArODIwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdNJzpcbitcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2gnOlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgwKTtcbkBAIC03OTIsNiArODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDY6XG4rXHRcdFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcbitcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgnLCcsIG9wdGFyZywgXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgKzg5NSwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfc3RhY2t0cmFjZSwgU09SVF9BU0MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQ09NUF9OT19GTEFHOlxuK1x0XHRpZiAoc2Muc2l6ZSBcdTAwM2UgMClcbitcdFx0XHRicmVhaztcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICs5MDgsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDT01QX01PRFVMRTpcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICs5MzQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdvdG8gb3V0X2NvbW07XG4gXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcInRzXFxcXHMqKFswLTldKilcXFxccypuc1wiKSlcbiBcdFx0Z290byBvdXRfdHM7XG4rXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFwiXFxcXFsoW2EtekEtWjAtOV9dKylcXFxcXVwiKSlcbitcdFx0Z290byBvdXRfbW9kdWxlO1xuIFxuIFx0ZnN0YXQoZmlsZW5vKGZpbiksIFx1MDAyNnN0KTtcbiBcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cbkBAIC05MTEsNiArOTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcIiwgVEdJRCAlZFwiLCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIHRhc2tfY29tbV9uYW1lOiAlc1wiLCBsaXN0W2ldLmNvbW0pO1xuK1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4rXHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwiLCBtb2R1bGU6ICVzXCIsIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIFwiKTtcbiBcdFx0XHRcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XG5AQCAtOTMxLDYgKzEwMTYsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuK291dF9tb2R1bGU6XG4rXHRyZWdmcmVlKFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcbiBvdXRfdHM6XG4gXHRyZWdmcmVlKFx1MDAyNnRzX25zZWNfcGF0dGVybik7XG4gb3V0X2NvbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMTozOTo1My44MzYyMDc2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg5MzU2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQSBVc2Vyc3BhY2UgVG9vbCBFbmhhbmNlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLiBSaWdodCBhd2F5LCB0aGlzIHNjcmVhbXMgKnVzZXJzcGFjZSouIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBtb2R1bGUgbmFtZSBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUgYHBhZ2Vfb3duZXJfc29ydGAgdG9vbC4gSSBrbm93IHRoYXQgdG9vbDsgaXQncyBlbnRpcmVseSB1c2Vyc3BhY2UuXG5cbkxldCBtZSBqdXN0IGJlIGFic29sdXRlbHkgc3VyZS4uLiBoYW5nIG9uLCBkb3VibGUtY2hlY2tpbmfigKYgeWVwLCB0aGUgZGlmZiBvbmx5IHNob3dzIHRob3NlIHR3byBmaWxlcy4gTm8ga2VybmVsIGNvZGUuIFBlcmZlY3QuXG5cblNpbmNlIHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogY29uY2VybmVkIHdpdGggYSB1c2Vyc3BhY2UgdXRpbGl0eSBhbmQgdXBkYXRpbmcgaXRzIGRvY3VtZW50YXRpb24sIGl0IGxvZ2ljYWxseSBmb2xsb3dzIHRoYXQgaXQgZG9lc24ndCBhZmZlY3QgYW55IGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGVyZSBhcmUgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMgdG8gaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4gTm8ga2VybmVsLWxldmVsIGNoYW5nZXMgbWVhbnMgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Pa2F5LCBkb3VibGUgY2hlY2suLi4gYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLi4uIGNvbmZpcm1lZC5cblxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLiBUaGUgcGF0Y2gncyBzY29wZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBhIHVzZXJzcGFjZSB0b29sLCBhbmQgaXRzIGRvY3VtZW50YXRpb24uIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zIG1lYW5zIGl0J3Mgbm90IGEgY2FuZGlkYXRlIGZvciBrZXJuZWwgZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUzLCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjE6Mzk6NTkuMTI1NTY1NzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5s8cg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 21:04:28 +0000 UTC FinishedAt: 2026-07-22 21:40:00 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGZ1enogaW4gdGhlIGtlcm5lbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMjE6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbmluZGV4IGE2YmQzZmU2NDIzYWQ2Li5iZDAyNzM3N2RmZjZlZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RcbkBAIC0xOTksNiAmIzQzOzE5OSw3IEBAIFVzYWdlXG4gXHRcdC1wXHRcdFNvcnQgYnkgcGlkLlxuIFx0XHQtUFx0XHRTb3J0IGJ5IHRnaWQuXG4gXHRcdC1uXHRcdFNvcnQgYnkgdGFzayBjb21tYW5kIG5hbWUuXG4mIzQzO1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICYjNDM7MjQxLDEwIEBAIFVzYWdlXG4gXHRcdFx0XHRcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFx1MDAzY3RnaWRsaXN0XHUwMDNlLlxuIFx0XHQtLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVx0U2VsZWN0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGJsb2NrcyB3aG9zZVxuIFx0XHRcdFx0XHR0YXNrIGNvbW1hbmQgbmFtZSBhcHBlYXIgaW4gXHUwMDNjY21kbGlzdFx1MDAzZS5cbiYjNDM7XHRcdC0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcbiYjNDM7XHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuJiM0MztcdFx0XHUwMDNjcGlkbGlzdFx1MDAzZSwgXHUwMDNjdGdpZGxpc3RcdTAwM2UsIFx1MDAzY2NtZGxpc3RcdTAwM2UsIFx1MDAzY21vZGxpc3RcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcbiBcdFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXG4gXG4gXG5AQCAtMjQ5LDYgJiM0MzsyNTIsNyBAQCBVc2FnZVxuIFx0XHRcdFx0Li9wYWdlX293bmVyX3NvcnQgXHUwMDNjaW5wdXRcdTAwM2UgXHUwMDNjb3V0cHV0XHUwMDNlIC0tcGlkPTFcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXRnaWQ9MSwyLDNcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLW5hbWUgbmFtZTEsbmFtZTJcbiYjNDM7XHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgJiM0MzsyNjksNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0ZnRcdFx0ZnJlZV90c1x0XHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgcmVsZWFzZWRcbiBcdGF0XHRcdGFsbG9jX3RzXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuICAgRm9yIC0tY3VsbCBvcHRpb246XG4gXG5AQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbiYjNDM7XHRtb2RcdFx0bW9kdWxlXHRcdGtlcm5lbCBtb2R1bGUgbmFtZVxuIFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG5pbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0XG4tLS0gYS90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbkBAIC0yNSwxMSAmIzQzOzI1LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2V0b3B0LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTZcbiYjNDM7I2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbiYjNDM7XHRjaGFyICptb2R1bGU7IC8vIGtlcm5lbCBtb2R1bGUgbmFtZVxuIFx0X191NjQgdHNfbnNlYztcbiBcdGludCBsZW47XG4gXHRpbnQgbnVtO1xuQEAgLTQxLDcgJiM0Mzs0Myw4IEBAIHN0cnVjdCBibG9ja19saXN0IHtcbiBlbnVtIEZJTFRFUl9CSVQge1xuIFx0RklMVEVSX1BJRCA9IDFcdTAwM2NcdTAwM2MxLFxuIFx0RklMVEVSX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbi1cdEZJTFRFUl9DT01NID0gMVx1MDAzY1x1MDAzYzNcbiYjNDM7XHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuJiM0MztcdEZJTFRFUl9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNFxuIH07XG4gXG4gZW51bSBGSUxURVJfUkVTVUxUIHtcbkBAIC01NSw3ICYjNDM7NTgsOCBAQCBlbnVtIENVTExfQklUIHtcbiBcdENVTExfVEdJRCA9IDFcdTAwM2NcdTAwM2MyLFxuIFx0Q1VMTF9DT01NID0gMVx1MDAzY1x1MDAzYzMsXG4gXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXHUwMDNjXHUwMDNjNCxcbi1cdENVTExfQUxMT0NBVE9SID0gMVx1MDAzY1x1MDAzYzVcbiYjNDM7XHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuJiM0MztcdENVTExfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzZcbiB9O1xuIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gXHRBTExPQ0FUT1JfQ01BID0gMVx1MDAzY1x1MDAzYzEsXG5AQCAtNjUsNyAmIzQzOzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcbiB9O1xuIGVudW0gQVJHX1RZUEUge1xuIFx0QVJHX1RYVCwgQVJHX0NPTU0sIEFSR19TVEFDS1RSQUNFLCBBUkdfQUxMT0NfVFMsIEFSR19DVUxMX1RJTUUsXG4tXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxuJiM0MztcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuJiM0MztcdEFSR19NT0RVTEVcbiB9O1xuIGVudW0gU09SVF9PUkRFUiB7XG4gXHRTT1JUX0FTQyA9IDEsXG5AQCAtNzksMTUgJiM0Mzs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XG4gXHRDT01QX1NUQUNLID0gMVx1MDAzY1x1MDAzYzMsXG4gXHRDT01QX05VTSA9IDFcdTAwM2NcdTAwM2M0LFxuIFx0Q09NUF9UR0lEID0gMVx1MDAzY1x1MDAzYzUsXG4tXHRDT01QX0NPTU0gPSAxXHUwMDNjXHUwMDNjNlxuJiM0MztcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuJiM0MztcdENPTVBfTU9EVUxFID0gMVx1MDAzY1x1MDAzYzdcbiB9O1xuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcbiBcdHBpZF90ICpwaWRzO1xuIFx0cGlkX3QgKnRnaWRzO1xuIFx0Y2hhciAqKmNvbW1zO1xuJiM0MztcdGNoYXIgKiptb2R1bGVzO1xuIFx0aW50IHBpZHNfc2l6ZTtcbiBcdGludCB0Z2lkc19zaXplO1xuIFx0aW50IGNvbW1zX3NpemU7XG4mIzQzO1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICYjNDM7MTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgdGdpZF9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IGNvbW1fcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XG4mIzQzO3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xuIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfbGlzdCAqbGlzdDtcbiBzdGF0aWMgaW50IGxpc3Rfc2l6ZTtcbiBzdGF0aWMgaW50IG1heF9zaXplO1xuQEAgLTE4NCw2ICYjNDM7MTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0cmNtcChsMS1cdTAwM2Vtb2R1bGUsIGwyLVx1MDAzZW1vZHVsZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjb21wYXJlX3RzKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XG5AQCAtMjA3LDYgJiM0MzsyMjMsOCBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY3VsbF9jb25kaXRpb24oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIFx0XHRyZXR1cm4gY29tcGFyZV90Z2lkKHAxLCBwMik7XG4gXHRpZiAoKGN1bGwgXHUwMDI2IENVTExfQ09NTSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfY29tbShwMSwgcDIpKVxuIFx0XHRyZXR1cm4gY29tcGFyZV9jb21tKHAxLCBwMik7XG4mIzQzO1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4mIzQzO1x0XHRyZXR1cm4gY29tcGFyZV9tb2R1bGUocDEsIHAyKTtcbiBcdGlmICgoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIFx1MDAyNlx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxuIFx0XHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcbiBcdHJldHVybiAwO1xuQEAgLTQxMSw5ICYjNDM7NDI5LDIzIEBAIHN0YXRpYyBjaGFyICpnZXRfY29tbShjaGFyICpidWYpXG4gXHRyZXR1cm4gY29tbV9zdHI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICptb2R1bGVfc3RyID0gbWFsbG9jKE1PRFVMRV9OQU1FX0xFTik7XG4mIzQzO1xuJiM0MztcdGlmICghbW9kdWxlX3N0cilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdG1lbXNldChtb2R1bGVfc3RyLCAwLCBNT0RVTEVfTkFNRV9MRU4pO1xuJiM0MztcdGlmIChzZWFyY2hfcGF0dGVybihcdTAwMjZtb2R1bGVfcGF0dGVybiwgbW9kdWxlX3N0cixcbiYjNDM7XHRcdFx0ICAgTU9EVUxFX05BTUVfTEVOLCBidWYpIFx1MDAzYyAwKVxuJiM0MztcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwmIzM0O3ZtbGludXhcJiMzNDspO1xuJiM0MztcdHJldHVybiBtb2R1bGVfc3RyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZyZWVfYmxvY2tfbGlzdChzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2spXG4ge1xuIFx0ZnJlZShibG9jay1cdTAwM2Vjb21tKTtcbiYjNDM7XHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICYjNDM7NDY1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKVxuIFx0XHRyZXR1cm4gQVJHX0FMTE9DX1RTO1xuIFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFwmIzM0O2FsbG9jYXRvclwmIzM0OykgfHwgIXN0cmNtcChhcmcsIFwmIzM0O2F0b3JcJiMzNDspKVxuIFx0XHRyZXR1cm4gQVJHX0FMTE9DQVRPUjtcbiYjNDM7XHRlbHNlIGlmICghc3RyY21wKGFyZywgXCYjMzQ7bW9kdWxlXCYjMzQ7KSB8fCAhc3RyY21wKGFyZywgXCYjMzQ7bW9kXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiBBUkdfTU9EVUxFO1xuIFx0ZWxzZSB7XG4gXHRcdHJldHVybiBBUkdfVU5LTk9XTjtcbiBcdH1cbkBAIC00ODMsMjUgJiM0Mzs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4mIzQzO1x0Y2hhciAqY29tbSwgKm1vZHVsZTtcbiBcbiBcdGlmICgoZmlsdGVyIFx1MDAyNiBGSUxURVJfUElEKSBcdTAwMjZcdTAwMjYgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9UR0lEKSBcdTAwMjZcdTAwMjZcbiBcdFx0IW1hdGNoX251bV9saXN0KGdldF90Z2lkKGJ1ZiksIGZjLnRnaWRzLCBmYy50Z2lkc19zaXplKSlcbiBcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuLVx0aWYgKCEoZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSkpXG4mIzQzO1x0aWYgKCEoZmlsdGVyIFx1MDAyNiAoRklMVEVSX0NPTU0gfCBGSUxURVJfTU9EVUxFKSkpXG4gXHRcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gXG4tXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcbi1cdGlmICghY29tbSlcbi1cdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbi1cbi1cdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XG4mIzQzO1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbiYjNDM7XHRcdGNvbW0gPSBnZXRfY29tbShidWYpO1xuJiM0MztcdFx0aWYgKCFjb21tKVxuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuJiM0MztcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnJlZShjb21tKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuJiM0MztcdFx0fVxuIFx0XHRmcmVlKGNvbW0pO1xuLVx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHR9XG4tXHRmcmVlKGNvbW0pO1xuJiM0MztcdGlmIChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpIHtcbiYjNDM7XHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbiYjNDM7XHRcdGlmICghbW9kdWxlKVxuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuJiM0MztcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbiYjNDM7XHRcdFx0ZnJlZShtb2R1bGUpO1xuJiM0MztcdFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRmcmVlKG1vZHVsZSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIEZJTFRFUl9NQVRDSDtcbiB9XG4gXG5AQCAtNTQ3LDYgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSYjNDM7JiM0Mzs7XG4gXHRsaXN0W2xpc3Rfc2l6ZV0udHNfbnNlYyA9IGdldF90c19uc2VjKGJ1Zik7XG4gXHRsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpO1xuJiM0MztcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4mIzQzO1x0aWYgKCFsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7T3V0IG9mIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcmVlX2Jsb2NrX2xpc3QoXHUwMDI2bGlzdFtsaXN0X3NpemVdKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4gXHRsaXN0X3NpemUmIzQzOyYjNDM7O1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCYjMzQ7bG9hZGVkICVkXFxyXCYjMzQ7LCBsaXN0X3NpemUpO1xuQEAgLTU3Myw2ICYjNDM7NjI0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbiYjNDM7XHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpXG4mIzQzO1x0XHRcdGN1bGwgfD0gQ1VMTF9NT0RVTEU7XG4gXHRcdGVsc2Uge1xuIFx0XHRcdGZyZWVfZXhwbG9kZShhcmdzLCBzaXplKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG5AQCAtNjM1LDYgJiM0Mzs2ODgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuJiM0MztcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbiYjNDM7XHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0c2Muc2l6ZSA9IDA7XG5AQCAtNjkxLDcgJiM0Mzs3NDYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcJiMzNDstcFxcdFxcdFxcdFNvcnQgYnkgcGlkLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cJiMzNDtcbiBcdFx0XCYjMzQ7LXNcXHRcXHRcXHRTb3J0IGJ5IHRoZSBzdGFja3RyYWNlLlxcblwmIzM0O1xuLVx0XHRcJiMzNDstdFxcdFxcdFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXG5cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0Oy10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LU1cXHRcXHRcXHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxcblxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwmIzM0O1xuIFx0XHRcJiMzNDsgb2ZcXG5cXHRcXHRcXHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiBcdTAwM2NwaWRsaXN0XHUwMDNlLlxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXRnaWQgXHUwMDNjdGdpZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgdGdpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwmIzM0O1xuQEAgLTcwMCwxMSAmIzQzOzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcJiMzNDstLW5hbWUgXHUwMDNjY21kbGlzdFx1MDAzZVxcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGVcJiMzNDtcbiBcdFx0XCYjMzQ7IGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCYjMzQ7XG4gXHRcdFwmIzM0OyBcdTAwM2NjbWRsaXN0XHUwMDNlLlxcblwmIzM0O1xuLVx0XHRcJiMzNDstLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBcJiMzNDtcbi1cdFx0XCYjMzQ7c2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcJiMzNDtcbi1cdFx0XCYjMzQ7d2l0aCBzb21lXFxuXFx0XFx0XFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIFwmIzM0O1xuLVx0XHRcJiMzNDtzdGFja3RyYWNlLCBhbGxvY2F0b3IpXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDstLW1vZHVsZSBcdTAwM2Ntb2RsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IG1vZHVsZSBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRvZiBibG9ja3Mgd2hvc2UgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7LS1jdWxsIFx1MDAzY3J1bGVzXHUwMDNlXFx0XFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFx1MDAzY3J1bGVzXHUwMDNlIGlzIGEgc2luZ2xlXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxcblwmIzM0O1xuIFx0XHRcJiMzNDstLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsmIzQzO3wtXWtleVssWyYjNDM7fC1da2V5WywuLi5dXVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0QXZhaWxhYmxlIGtleXM6XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIHBpZChwKSwgdGdpZCh0ZyksIG5hbWUobiksIHN0YWNrdHJhY2Uoc3QpLFxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0ICB0eHQoVCksIGFsbG9jX3RzKGF0KSwgYWxsb2NhdG9yKGF0b3IpLCBtb2R1bGUobW9kKVxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0VGhlIFxcXCYjMzQ7JiM0MztcXFwmIzM0OyBpcyBvcHRpb25hbCBzaW5jZSBkZWZhdWx0IGRpcmVjdGlvbiBpc1xcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0aW5jcmVhc2luZyBudW1lcmljYWwgb3IgbGV4aWNvZ3JhcGhpYyBvcmRlci5cXG5cJiMzNDtcbiYjNDM7XHRcdFwmIzM0O1xcdFxcdFxcdE1peGVkIHVzZSBvZiBhYmJyZXZpYXRlZCBhbmQgY29tcGxldGUtZm9ybSBpcyBhbGxvd2VkLlxcblwmIzM0O1xuJiM0MztcdFx0XCYjMzQ7XFx0XFx0XFx0RXhhbXBsZXM6XFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIC0tc29ydD1uLCYjNDM7cGlkLC10Z2lkXFxuXCYjMzQ7XG4mIzQzO1x0XHRcJiMzNDtcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cJiMzNDtcbiBcdCk7XG4gfVxuIFxuQEAgLTcyMSwxMyAmIzQzOzc4NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdHsgXCYjMzQ7bmFtZVwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDMgfSxcbiBcdFx0eyBcJiMzNDtjdWxsXCYjMzQ7LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwmIzM0O3NvcnRcJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sXG4mIzQzO1x0XHR7IFwmIzM0O21vZHVsZVwmIzM0OywgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDYgfSxcbiBcdFx0eyBcJiMzNDtoZWxwXCYjMzQ7LCBub19hcmd1bWVudCwgTlVMTCwgJiMzOTtoJiMzOTsgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2FkbW5wc3RQaFwmIzM0OywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcbiYjNDM7XHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwmIzM0O2FkbW5wc3RQTWhcJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4gXHRcdHN3aXRjaCAob3B0KSB7XG4gXHRcdGNhc2UgJiMzOTthJiMzOTs6XG4gXHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQUxMT0M7XG5AQCAtNzUzLDYgJiM0Mzs4MjAsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGNhc2UgJiMzOTtuJiMzOTs6XG4gXHRcdFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgJiMzOTtNJiMzOTs6XG4mIzQzO1x0XHRcdGNvbXBhcmVfZmxhZyB8PSBDT01QX01PRFVMRTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJiMzOTtoJiMzOTs6XG4gXHRcdFx0dXNhZ2UoKTtcbiBcdFx0XHRleGl0KDApO1xuQEAgLTc5Miw2ICYjNDM7ODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSA2OlxuJiM0MztcdFx0XHRmaWx0ZXIgPSBmaWx0ZXIgfCBGSUxURVJfTU9EVUxFO1xuJiM0MztcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgmIzM5OywmIzM5Oywgb3B0YXJnLCBcdTAwMjZmYy5tb2R1bGVzX3NpemUpO1xuJiM0MztcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgJiM0Mzs4OTUsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX3N0YWNrdHJhY2UsIFNPUlRfQVNDKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIENPTVBfTk9fRkxBRzpcbiYjNDM7XHRcdGlmIChzYy5zaXplIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfbnVtLCBTT1JUX0RFU0MpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIENPTVBfTlVNOlxuIFx0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTtcbiBcdFx0YnJlYWs7XG5AQCAtODMwLDYgJiM0Mzs5MDgsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQ09NUF9NT0RVTEU6XG4mIzQzO1x0XHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX21vZHVsZSwgU09SVF9BU0MpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICYjNDM7OTM0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRnb3RvIG91dF9jb21tO1xuIFx0aWYgKCFjaGVja19yZWdjb21wKFx1MDAyNnRzX25zZWNfcGF0dGVybiwgXCYjMzQ7dHNcXFxccyooWzAtOV0qKVxcXFxzKm5zXCYjMzQ7KSlcbiBcdFx0Z290byBvdXRfdHM7XG4mIzQzO1x0aWYgKCFjaGVja19yZWdjb21wKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBcJiMzNDtcXFxcWyhbYS16QS1aMC05X10mIzQzOylcXFxcXVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9tb2R1bGU7XG4gXG4gXHRmc3RhdChmaWxlbm8oZmluKSwgXHUwMDI2c3QpO1xuIFx0bWF4X3NpemUgPSBzdC5zdF9zaXplIC8gMTAwOyAvKiBoYWNrIC4uLiAqL1xuQEAgLTkxMSw2ICYjNDM7OTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIFRHSUQgJWRcJiMzNDssIGxpc3RbaV0udGdpZCk7XG4gXHRcdFx0aWYgKGN1bGwgXHUwMDI2IENVTExfQ09NTSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIHRhc2tfY29tbV9uYW1lOiAlc1wmIzM0OywgbGlzdFtpXS5jb21tKTtcbiYjNDM7XHRcdFx0aWYgKGN1bGwgXHUwMDI2IENVTExfTU9EVUxFIHx8IGZpbHRlciBcdTAwMjYgRklMVEVSX01PRFVMRSlcbiYjNDM7XHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwmIzM0OywgbW9kdWxlOiAlc1wmIzM0OywgbGlzdFtpXS5tb2R1bGUpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikge1xuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcJiMzNDssIFwmIzM0Oyk7XG4gXHRcdFx0XHRwcmludF9hbGxvY2F0b3IoZm91dCwgbGlzdFtpXS5hbGxvY2F0b3IpO1xuQEAgLTkzMSw2ICYjNDM7MTAxNiw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRmcmVlX2Jsb2NrX2xpc3QoXHUwMDI2bGlzdFtpXSk7XG4gXHRcdGZyZWUobGlzdCk7XG4gXHR9XG4mIzQzO291dF9tb2R1bGU6XG4mIzQzO1x0cmVnZnJlZShcdTAwMjZtb2R1bGVfcGF0dGVybik7XG4gb3V0X3RzOlxuIFx0cmVnZnJlZShcdTAwMjZ0c19uc2VjX3BhdHRlcm4pO1xuIG91dF9jb21tOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdAppbmRleCBhNmJkM2ZlNjQyM2FkNi4uYmQwMjczNzdkZmY2ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdApAQCAtMTk5LDYgJiM0MzsxOTksNyBAQCBVc2FnZQogCQktcAkJU29ydCBieSBwaWQuCiAJCS1QCQlTb3J0IGJ5IHRnaWQuCiAJCS1uCQlTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLgomIzQzOwkJLU0JCVNvcnQgYnkgbW9kdWxlIG5hbWUuCiAJCS1yCQlTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuCiAJCS1zCQlTb3J0IGJ5IHN0YWNrIHRyYWNlLgogCQktdAkJU29ydCBieSB0aW1lcyAoZGVmYXVsdCkuCkBAIC0yNDAsOCAmIzQzOzI0MSwxMCBAQCBVc2FnZQogCQkJCQlncm91cCBJRCBudW1iZXJzIGFwcGVhciBpbiAmbHQ7dGdpZGxpc3QmZ3Q7LgogCQktLW5hbWUgJmx0O2NtZGxpc3QmZ3Q7CVNlbGVjdCBieSB0YXNrIGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2UKIAkJCQkJdGFzayBjb21tYW5kIG5hbWUgYXBwZWFyIGluICZsdDtjbWRsaXN0Jmd0Oy4KJiM0MzsJCS0tbW9kdWxlICZsdDttb2RsaXN0Jmd0OwlTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlCiYjNDM7CQkJCQltb2R1bGUgbmFtZSBhcHBlYXIgaW4gJmx0O21vZGxpc3QmZ3Q7LgogCi0JCSZsdDtwaWRsaXN0Jmd0OywgJmx0O3RnaWRsaXN0Jmd0OywgJmx0O2NtZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiYjNDM7CQkmbHQ7cGlkbGlzdCZndDssICZsdDt0Z2lkbGlzdCZndDssICZsdDtjbWRsaXN0Jmd0OywgJmx0O21vZGxpc3QmZ3Q7IGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsCiAJCXdoaWNoIG9mZmVycyBhIHdheSB0byBzcGVjaWZ5IGluZGl2aWR1YWwgc2VsZWN0aW5nIHJ1bGVzLgogCiAKQEAgLTI0OSw2ICYjNDM7MjUyLDcgQEAgVXNhZ2UKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tcGlkPTEKIAkJCQkuL3BhZ2Vfb3duZXJfc29ydCAmbHQ7aW5wdXQmZ3Q7ICZsdDtvdXRwdXQmZ3Q7IC0tdGdpZD0xLDIsMwogCQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1uYW1lIG5hbWUxLG5hbWUyCiYjNDM7CQkJCS4vcGFnZV9vd25lcl9zb3J0ICZsdDtpbnB1dCZndDsgJmx0O291dHB1dCZndDsgLS1tb2R1bGUgeGZzLGV4dDQKIAogU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlMKID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNjUsNiAmIzQzOzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTCiAJZnQJCWZyZWVfdHMJCXRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZAogCWF0CQlhbGxvY190cwl0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkCiAJYXRvcgkJYWxsb2NhdG9yCW1lbW9yeSBhbGxvY2F0b3IgZm9yIHBhZ2VzCiYjNDM7CW1vZAkJbW9kdWxlCQlrZXJuZWwgbW9kdWxlIG5hbWUKIAogICBGb3IgLS1jdWxsIG9wdGlvbjoKIApAQCAtMjc1LDYgJiM0MzsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSUwogCWYJCWZyZWUJCXdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90CiAJc3QJCXN0YWNrdHJhY2UJc3RhY2sgdHJhY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbgogCWF0b3IJCWFsbG9jYXRvcgltZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlcwomIzQzOwltb2QJCW1vZHVsZQkJa2VybmVsIG1vZHVsZSBuYW1lCiAKIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuYwppbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jCkBAIC0yNSwxMSAmIzQzOzI1LDEzIEBACiAjaW5jbHVkZSAmbHQ7Z2V0b3B0LmgmZ3Q7CiAKICNkZWZpbmUgVEFTS19DT01NX0xFTiAxNgomIzQzOyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0CiAKIHN0cnVjdCBibG9ja19saXN0IHsKIAljaGFyICp0eHQ7CiAJY2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWUKIAljaGFyICpzdGFja3RyYWNlOwomIzQzOwljaGFyICptb2R1bGU7IC8vIGtlcm5lbCBtb2R1bGUgbmFtZQogCV9fdTY0IHRzX25zZWM7CiAJaW50IGxlbjsKIAlpbnQgbnVtOwpAQCAtNDEsNyAmIzQzOzQzLDggQEAgc3RydWN0IGJsb2NrX2xpc3QgewogZW51bSBGSUxURVJfQklUIHsKIAlGSUxURVJfUElEID0gMSZsdDsmbHQ7MSwKIAlGSUxURVJfVEdJRCA9IDEmbHQ7Jmx0OzIsCi0JRklMVEVSX0NPTU0gPSAxJmx0OyZsdDszCiYjNDM7CUZJTFRFUl9DT01NID0gMSZsdDsmbHQ7MywKJiM0MzsJRklMVEVSX01PRFVMRSA9IDEmbHQ7Jmx0OzQKIH07CiAKIGVudW0gRklMVEVSX1JFU1VMVCB7CkBAIC01NSw3ICYjNDM7NTgsOCBAQCBlbnVtIENVTExfQklUIHsKIAlDVUxMX1RHSUQgPSAxJmx0OyZsdDsyLAogCUNVTExfQ09NTSA9IDEmbHQ7Jmx0OzMsCiAJQ1VMTF9TVEFDS1RSQUNFID0gMSZsdDsmbHQ7NCwKLQlDVUxMX0FMTE9DQVRPUiA9IDEmbHQ7Jmx0OzUKJiM0MzsJQ1VMTF9BTExPQ0FUT1IgPSAxJmx0OyZsdDs1LAomIzQzOwlDVUxMX01PRFVMRSA9IDEmbHQ7Jmx0OzYKIH07CiBlbnVtIEFMTE9DQVRPUl9CSVQgewogCUFMTE9DQVRPUl9DTUEgPSAxJmx0OyZsdDsxLApAQCAtNjUsNyAmIzQzOzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHsKIH07CiBlbnVtIEFSR19UWVBFIHsKIAlBUkdfVFhULCBBUkdfQ09NTSwgQVJHX1NUQUNLVFJBQ0UsIEFSR19BTExPQ19UUywgQVJHX0NVTExfVElNRSwKLQlBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUgomIzQzOwlBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUiwKJiM0MzsJQVJHX01PRFVMRQogfTsKIGVudW0gU09SVF9PUkRFUiB7CiAJU09SVF9BU0MgPSAxLApAQCAtNzksMTUgJiM0Mzs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7CiAJQ09NUF9TVEFDSyA9IDEmbHQ7Jmx0OzMsCiAJQ09NUF9OVU0gPSAxJmx0OyZsdDs0LAogCUNPTVBfVEdJRCA9IDEmbHQ7Jmx0OzUsCi0JQ09NUF9DT01NID0gMSZsdDsmbHQ7NgomIzQzOwlDT01QX0NPTU0gPSAxJmx0OyZsdDs2LAomIzQzOwlDT01QX01PRFVMRSA9IDEmbHQ7Jmx0OzcKIH07CiBzdHJ1Y3QgZmlsdGVyX2NvbmRpdGlvbiB7CiAJcGlkX3QgKnBpZHM7CiAJcGlkX3QgKnRnaWRzOwogCWNoYXIgKipjb21tczsKJiM0MzsJY2hhciAqKm1vZHVsZXM7CiAJaW50IHBpZHNfc2l6ZTsKIAlpbnQgdGdpZHNfc2l6ZTsKIAlpbnQgY29tbXNfc2l6ZTsKJiM0MzsJaW50IG1vZHVsZXNfc2l6ZTsKIH07CiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24gewogCWludCAoKipjbXBzKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CkBAIC0xMDEsNiAmIzQzOzEwOSw3IEBAIHN0YXRpYyByZWdleF90IHBpZF9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgdGdpZF9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuOwogc3RhdGljIHJlZ2V4X3QgdHNfbnNlY19wYXR0ZXJuOwomIzQzO3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuOwogc3RhdGljIHN0cnVjdCBibG9ja19saXN0ICpsaXN0Owogc3RhdGljIGludCBsaXN0X3NpemU7CiBzdGF0aWMgaW50IG1heF9zaXplOwpAQCAtMTg0LDYgJiM0MzsxOTMsMTMgQEAgc3RhdGljIGludCBjb21wYXJlX2NvbW0oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCXJldHVybiBzdHJjbXAobDEtJmd0O2NvbW0sIGwyLSZndDtjb21tKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyOwomIzQzOwomIzQzOwlyZXR1cm4gc3RyY21wKGwxLSZndDttb2R1bGUsIGwyLSZndDttb2R1bGUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY29tcGFyZV90cyhjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCiB7CiAJY29uc3Qgc3RydWN0IGJsb2NrX2xpc3QgKmwxID0gcDEsICpsMiA9IHAyOwpAQCAtMjA3LDYgJiM0MzsyMjMsOCBAQCBzdGF0aWMgaW50IGNvbXBhcmVfY3VsbF9jb25kaXRpb24oY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCQlyZXR1cm4gY29tcGFyZV90Z2lkKHAxLCBwMik7CiAJaWYgKChjdWxsICZhbXA7IENVTExfQ09NTSkgJmFtcDsmYW1wOyBjb21wYXJlX2NvbW0ocDEsIHAyKSkKIAkJcmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpOwomIzQzOwlpZiAoKGN1bGwgJmFtcDsgQ1VMTF9NT0RVTEUpICZhbXA7JmFtcDsgY29tcGFyZV9tb2R1bGUocDEsIHAyKSkKJiM0MzsJCXJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpOwogCWlmICgoY3VsbCAmYW1wOyBDVUxMX0FMTE9DQVRPUikgJmFtcDsmYW1wOyBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKQogCQlyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTsKIAlyZXR1cm4gMDsKQEAgLTQxMSw5ICYjNDM7NDI5LDIzIEBAIHN0YXRpYyBjaGFyICpnZXRfY29tbShjaGFyICpidWYpCiAJcmV0dXJuIGNvbW1fc3RyOwogfQogCiYjNDM7c3RhdGljIGNoYXIgKmdldF9tb2R1bGUoY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJY2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pOwomIzQzOwomIzQzOwlpZiAoIW1vZHVsZV9zdHIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJbWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7CiYjNDM7CWlmIChzZWFyY2hfcGF0dGVybigmYW1wO21vZHVsZV9wYXR0ZXJuLCBtb2R1bGVfc3RyLAomIzQzOwkJCSAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSAmbHQ7IDApCiYjNDM7CQlzdHJjcHkobW9kdWxlX3N0ciwgJiMzNDt2bWxpbnV4JiMzNDspOwomIzQzOwlyZXR1cm4gbW9kdWxlX3N0cjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKQogewogCWZyZWUoYmxvY2stJmd0O2NvbW0pOwomIzQzOwlmcmVlKGJsb2NrLSZndDttb2R1bGUpOwogCWZyZWUoYmxvY2stJmd0O3R4dCk7CiB9CiAKQEAgLTQzMyw2ICYjNDM7NDY1LDggQEAgc3RhdGljIGludCBnZXRfYXJnX3R5cGUoY29uc3QgY2hhciAqYXJnKQogCQlyZXR1cm4gQVJHX0FMTE9DX1RTOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAmIzM0O2FsbG9jYXRvciYjMzQ7KSB8fCAhc3RyY21wKGFyZywgJiMzNDthdG9yJiMzNDspKQogCQlyZXR1cm4gQVJHX0FMTE9DQVRPUjsKJiM0MzsJZWxzZSBpZiAoIXN0cmNtcChhcmcsICYjMzQ7bW9kdWxlJiMzNDspIHx8ICFzdHJjbXAoYXJnLCAmIzM0O21vZCYjMzQ7KSkKJiM0MzsJCXJldHVybiBBUkdfTU9EVUxFOwogCWVsc2UgewogCQlyZXR1cm4gQVJHX1VOS05PV047CiAJfQpAQCAtNDgzLDI1ICYjNDM7NTE3LDM2IEBAIHN0YXRpYyBib29sIG1hdGNoX3N0cl9saXN0KGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmxpc3QsIGludCBsaXN0X3NpemUpCiAKIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpCiB7Ci0JY2hhciAqY29tbTsKJiM0MzsJY2hhciAqY29tbSwgKm1vZHVsZTsKIAogCWlmICgoZmlsdGVyICZhbXA7IEZJTFRFUl9QSUQpICZhbXA7JmFtcDsgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSkKIAkJcmV0dXJuIEZJTFRFUl9TS0lQOwogCWlmICgoZmlsdGVyICZhbXA7IEZJTFRFUl9UR0lEKSAmYW1wOyZhbXA7CiAJCSFtYXRjaF9udW1fbGlzdChnZXRfdGdpZChidWYpLCBmYy50Z2lkcywgZmMudGdpZHNfc2l6ZSkpCiAJCXJldHVybiBGSUxURVJfU0tJUDsKLQlpZiAoIShmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pKQomIzQzOwlpZiAoIShmaWx0ZXIgJmFtcDsgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKQogCQlyZXR1cm4gRklMVEVSX01BVENIOwogCi0JY29tbSA9IGdldF9jb21tKGJ1Zik7Ci0JaWYgKCFjb21tKQotCQlyZXR1cm4gRklMVEVSX0VSUk9SOwotCi0JaWYgKCFtYXRjaF9zdHJfbGlzdChjb21tLCBmYy5jb21tcywgZmMuY29tbXNfc2l6ZSkpIHsKJiM0MzsJaWYgKGZpbHRlciAmYW1wOyBGSUxURVJfQ09NTSkgewomIzQzOwkJY29tbSA9IGdldF9jb21tKGJ1Zik7CiYjNDM7CQlpZiAoIWNvbW0pCiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9FUlJPUjsKJiM0MzsJCWlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7CiYjNDM7CQkJZnJlZShjb21tKTsKJiM0MzsJCQlyZXR1cm4gRklMVEVSX1NLSVA7CiYjNDM7CQl9CiAJCWZyZWUoY29tbSk7Ci0JCXJldHVybiBGSUxURVJfU0tJUDsKIAl9Ci0JZnJlZShjb21tKTsKJiM0MzsJaWYgKGZpbHRlciAmYW1wOyBGSUxURVJfTU9EVUxFKSB7CiYjNDM7CQltb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7CiYjNDM7CQlpZiAoIW1vZHVsZSkKJiM0MzsJCQlyZXR1cm4gRklMVEVSX0VSUk9SOwomIzQzOwkJaWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHsKJiM0MzsJCQlmcmVlKG1vZHVsZSk7CiYjNDM7CQkJcmV0dXJuIEZJTFRFUl9TS0lQOwomIzQzOwkJfQomIzQzOwkJZnJlZShtb2R1bGUpOwomIzQzOwl9CiAJcmV0dXJuIEZJTFRFUl9NQVRDSDsKIH0KIApAQCAtNTQ3LDYgJiM0Mzs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKQogCQlsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSYjNDM7JiM0Mzs7CiAJbGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpOwogCWxpc3RbbGlzdF9zaXplXS5hbGxvY2F0b3IgPSBnZXRfYWxsb2NhdG9yKGJ1ZiwgZXh0X2J1Zik7CiYjNDM7CWxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7CiYjNDM7CWlmICghbGlzdFtsaXN0X3NpemVdLm1vZHVsZSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7T3V0IG9mIG1lbW9yeVxuJiMzNDspOwomIzQzOwkJZnJlZV9ibG9ja19saXN0KCZhbXA7bGlzdFtsaXN0X3NpemVdKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCWxpc3Rfc2l6ZSYjNDM7JiM0Mzs7CiAJaWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkgewogCQlwcmludGYoJiMzNDtsb2FkZWQgJWRcciYjMzQ7LCBsaXN0X3NpemUpOwpAQCAtNTczLDYgJiM0Mzs2MjQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cikKIAkJCWN1bGwgfD0gQ1VMTF9TVEFDS1RSQUNFOwogCQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfQUxMT0NBVE9SKQogCQkJY3VsbCB8PSBDVUxMX0FMTE9DQVRPUjsKJiM0MzsJCWVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpCiYjNDM7CQkJY3VsbCB8PSBDVUxMX01PRFVMRTsKIAkJZWxzZSB7CiAJCQlmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7CiAJCQlyZXR1cm4gZmFsc2U7CkBAIC02MzUsNiAmIzQzOzY4OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKQogCQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfdHh0OwogCQllbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfQUxMT0NBVE9SKQogCQkJc2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yOwomIzQzOwkJZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSkKJiM0MzsJCQlzYy5jbXBzW2ldID0gY29tcGFyZV9tb2R1bGU7CiAJCWVsc2UgewogCQkJZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpOwogCQkJc2Muc2l6ZSA9IDA7CkBAIC02OTEsNyAmIzQzOzc0Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiAJCSYjMzQ7LXBcdFx0XHRTb3J0IGJ5IHBpZC5cbiYjMzQ7CiAJCSYjMzQ7LVBcdFx0XHRTb3J0IGJ5IHRnaWQuXG4mIzM0OwogCQkmIzM0Oy1zXHRcdFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cbiYjMzQ7Ci0JCSYjMzQ7LXRcdFx0XHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXG5cbiYjMzQ7CiYjNDM7CQkmIzM0Oy10XHRcdFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxuJiMzNDsKJiM0MzsJCSYjMzQ7LU1cdFx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuXG4mIzM0OwogCQkmIzM0Oy0tcGlkICZsdDtwaWRsaXN0Jmd0O1x0XHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uJiMzNDsKIAkJJiMzNDsgb2Zcblx0XHRcdGJsb2NrcyB3aG9zZSBwcm9jZXNzIElEIG51bWJlcnMgYXBwZWFyIGluICZsdDtwaWRsaXN0Jmd0Oy5cbiYjMzQ7CiAJCSYjMzQ7LS10Z2lkICZsdDt0Z2lkbGlzdCZndDtcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uJiMzNDsKQEAgLTcwMCwxMSAmIzQzOzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogCQkmIzM0Oy0tbmFtZSAmbHQ7Y21kbGlzdCZndDtcdFNlbGVjdCBieSBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUmIzM0OwogCQkmIzM0OyBpbmZvcm1hdGlvblxuXHRcdFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluJiMzNDsKIAkJJiMzNDsgJmx0O2NtZGxpc3QmZ3Q7LlxuJiMzNDsKLQkJJiMzNDstLWN1bGwgJmx0O3J1bGVzJmd0O1x0XHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gJmx0O3J1bGVzJmd0OyBpcyBhICYjMzQ7Ci0JCSYjMzQ7c2luZ2xlXG5cdFx0XHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0ICYjMzQ7Ci0JCSYjMzQ7d2l0aCBzb21lXG5cdFx0XHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgJiMzNDsKLQkJJiMzNDtzdGFja3RyYWNlLCBhbGxvY2F0b3IpXG4mIzM0OwomIzQzOwkJJiMzNDstLW1vZHVsZSAmbHQ7bW9kbGlzdCZndDtcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0b2YgYmxvY2tzIHdob3NlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gJmx0O21vZGxpc3QmZ3Q7LlxuJiMzNDsKJiM0MzsJCSYjMzQ7LS1jdWxsICZsdDtydWxlcyZndDtcdFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuICZsdDtydWxlcyZndDsgaXMgYSBzaW5nbGVcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXG4mIzM0OwogCQkmIzM0Oy0tc29ydCAmbHQ7b3JkZXImZ3Q7XHRcdFNwZWNpZnkgc29ydCBvcmRlciBhczogWyYjNDM7fC1da2V5WyxbJiM0Mzt8LV1rZXlbLC4uLl1dXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRBdmFpbGFibGUga2V5czpcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRUaGUgXCYjMzQ7JiM0MztcJiMzNDsgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXG4mIzM0OwomIzQzOwkJJiMzNDtcdFx0XHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cbiYjMzQ7CiYjNDM7CQkmIzM0O1x0XHRcdEV4YW1wbGVzOlxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICAtLXNvcnQ9biwmIzQzO3BpZCwtdGdpZFxuJiMzNDsKJiM0MzsJCSYjMzQ7XHRcdFx0ICAtLXNvcnQ9bW9kLGF0XG4mIzM0OwogCSk7CiB9CiAKQEAgLTcyMSwxMyAmIzQzOzc4NywxNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsgJiMzNDtuYW1lJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAzIH0sCiAJCXsgJiMzNDtjdWxsJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sCiAJCXsgJiMzNDtzb3J0JiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA1IH0sCiYjNDM7CQl7ICYjMzQ7bW9kdWxlJiMzNDssIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sCiAJCXsgJiMzNDtoZWxwJiMzNDssIG5vX2FyZ3VtZW50LCBOVUxMLCAmIzM5O2gmIzM5OyB9LAogCQl7IDAsIDAsIDAsIDB9LAogCX07CiAKIAljb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICYjMzQ7YWRtbnBzdFBoJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpCiYjNDM7CXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgJiMzNDthZG1ucHN0UE1oJiMzNDssIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpCiAJCXN3aXRjaCAob3B0KSB7CiAJCWNhc2UgJiMzOTthJiMzOTs6CiAJCQljb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQzsKQEAgLTc1Myw2ICYjNDM7ODIwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljYXNlICYjMzk7biYjMzk7OgogCQkJY29tcGFyZV9mbGFnIHw9IENPTVBfQ09NTTsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSAmIzM5O00mIzM5OzoKJiM0MzsJCQljb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgJiMzOTtoJiMzOTs6CiAJCQl1c2FnZSgpOwogCQkJZXhpdCgwKTsKQEAgLTc5Miw2ICYjNDM7ODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlleGl0KDEpOwogCQkJfQogCQkJYnJlYWs7CiYjNDM7CQljYXNlIDY6CiYjNDM7CQkJZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTsKJiM0MzsJCQlmYy5tb2R1bGVzID0gZXhwbG9kZSgmIzM5OywmIzM5Oywgb3B0YXJnLCAmYW1wO2ZjLm1vZHVsZXNfc2l6ZSk7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwogCQkJZXhpdCgxKTsKQEAgLTgyMSw2ICYjNDM7ODk1LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9zdGFja3RyYWNlLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwogCWNhc2UgQ09NUF9OT19GTEFHOgomIzQzOwkJaWYgKHNjLnNpemUgJmd0OyAwKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7CiYjNDM7CQlicmVhazsKIAljYXNlIENPTVBfTlVNOgogCQlzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTsKIAkJYnJlYWs7CkBAIC04MzAsNiAmIzQzOzkwOCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljYXNlIENPTVBfQ09NTToKIAkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7CiAJCWJyZWFrOwomIzQzOwljYXNlIENPTVBfTU9EVUxFOgomIzQzOwkJc2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYWdlKCk7CiAJCWV4aXQoMSk7CkBAIC04NTMsNiAmIzQzOzkzNCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJZ290byBvdXRfY29tbTsKIAlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDt0c19uc2VjX3BhdHRlcm4sICYjMzQ7dHNcXHMqKFswLTldKilcXHMqbnMmIzM0OykpCiAJCWdvdG8gb3V0X3RzOwomIzQzOwlpZiAoIWNoZWNrX3JlZ2NvbXAoJmFtcDttb2R1bGVfcGF0dGVybiwgJiMzNDtcXFsoW2EtekEtWjAtOV9dJiM0MzspXFxdJiMzNDspKQomIzQzOwkJZ290byBvdXRfbW9kdWxlOwogCiAJZnN0YXQoZmlsZW5vKGZpbiksICZhbXA7c3QpOwogCW1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi8KQEAgLTkxMSw2ICYjNDM7OTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWZwcmludGYoZm91dCwgJiMzNDssIFRHSUQgJWQmIzM0OywgbGlzdFtpXS50Z2lkKTsKIAkJCWlmIChjdWxsICZhbXA7IENVTExfQ09NTSB8fCBmaWx0ZXIgJmFtcDsgRklMVEVSX0NPTU0pCiAJCQkJZnByaW50Zihmb3V0LCAmIzM0OywgdGFza19jb21tX25hbWU6ICVzJiMzNDssIGxpc3RbaV0uY29tbSk7CiYjNDM7CQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9NT0RVTEUgfHwgZmlsdGVyICZhbXA7IEZJTFRFUl9NT0RVTEUpCiYjNDM7CQkJCWZwcmludGYoZm91dCwgJiMzNDssIG1vZHVsZTogJXMmIzM0OywgbGlzdFtpXS5tb2R1bGUpOwogCQkJaWYgKGN1bGwgJmFtcDsgQ1VMTF9BTExPQ0FUT1IpIHsKIAkJCQlmcHJpbnRmKGZvdXQsICYjMzQ7LCAmIzM0Oyk7CiAJCQkJcHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTsKQEAgLTkzMSw2ICYjNDM7MTAxNiw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCWZyZWVfYmxvY2tfbGlzdCgmYW1wO2xpc3RbaV0pOwogCQlmcmVlKGxpc3QpOwogCX0KJiM0MztvdXRfbW9kdWxlOgomIzQzOwlyZWdmcmVlKCZhbXA7bW9kdWxlX3BhdHRlcm4pOwogb3V0X3RzOgogCXJlZ2ZyZWUoJmFtcDt0c19uc2VjX3BhdHRlcm4pOwogb3V0X2NvbW06CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTMKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBBIFVzZXJzcGFjZSBUb29sIEVuaGFuY2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSBrZXkgZmlsZXM6IGBEb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0YCBhbmQgYHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jYC4gUmlnaHQgYXdheSwgdGhpcyBzY3JlYW1zICp1c2Vyc3BhY2UqLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgbW9kdWxlIG5hbWUgc29ydGluZyBhbmQgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyB3aXRoaW4gdGhlIGBwYWdlX293bmVyX3NvcnRgIHRvb2wuIEkga25vdyB0aGF0IHRvb2w7IGl0JiMzOTtzIGVudGlyZWx5IHVzZXJzcGFjZS4KCkxldCBtZSBqdXN0IGJlIGFic29sdXRlbHkgc3VyZS4uLiBoYW5nIG9uLCBkb3VibGUtY2hlY2tpbmfigKYgeWVwLCB0aGUgZGlmZiBvbmx5IHNob3dzIHRob3NlIHR3byBmaWxlcy4gTm8ga2VybmVsIGNvZGUuIFBlcmZlY3QuCgpTaW5jZSB0aGlzIHBhdGNoIGlzICpzb2xlbHkqIGNvbmNlcm5lZCB3aXRoIGEgdXNlcnNwYWNlIHV0aWxpdHkgYW5kIHVwZGF0aW5nIGl0cyBkb2N1bWVudGF0aW9uLCBpdCBsb2dpY2FsbHkgZm9sbG93cyB0aGF0IGl0IGRvZXNuJiMzOTt0IGFmZmVjdCBhbnkga2VybmVsIGZ1bmN0aW9uYWxpdHkgdGhhdCB3b3VsZCB3YXJyYW50IGZ1enppbmcuIFRoZXJlIGFyZSBubyBrZXJuZWwtbGV2ZWwgY2hhbmdlcyB0byBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzLiBObyBrZXJuZWwtbGV2ZWwgY2hhbmdlcyBtZWFucyBJIHNob3VsZCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpPa2F5LCBkb3VibGUgY2hlY2suLi4gYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLi4uIGNvbmZpcm1lZC4KClRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgY2FsbC4gVGhlIHBhdGNoJiMzOTtzIHNjb3BlIGlzIHN0cmljdGx5IGNvbmZpbmVkIHRvIGEgdXNlcnNwYWNlIHRvb2wsIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMgbWVhbnMgaXQmIzM5O3Mgbm90IGEgY2FuZGlkYXRlIGZvciBrZXJuZWwgZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDIxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIxOjM5OjUzLjI5MjEyMTQzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzM0NjgxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYSB1c2Vyc3BhY2UgdG9vbCAodG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmMpIGFuZCBpdHMgZG9jdW1lbnRhdGlvbi4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGZ1enogaW4gdGhlIGtlcm5lbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDIxOjM5OjUzLjI5MjEyNzA4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzNDY4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTQ2Y2MyOGFmNDRhNDRhMGY4MWEyNzhkMjM0YzcxMWJkMWY3OTNjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAyMTozOTo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbmluZGV4IGE2YmQzZmU2NDIzYWQ2Li5iZDAyNzM3N2RmZjZlZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxcbkBAIC0xOTksNiArMTk5LDcgQEAgVXNhZ2VcXG4gXFx0XFx0LXBcXHRcXHRTb3J0IGJ5IHBpZC5cXG4gXFx0XFx0LVBcXHRcXHRTb3J0IGJ5IHRnaWQuXFxuIFxcdFxcdC1uXFx0XFx0U29ydCBieSB0YXNrIGNvbW1hbmQgbmFtZS5cXG4rXFx0XFx0LU1cXHRcXHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxcbiBcXHRcXHQtclxcdFxcdFNvcnQgYnkgbWVtb3J5IHJlbGVhc2UgdGltZS5cXG4gXFx0XFx0LXNcXHRcXHRTb3J0IGJ5IHN0YWNrIHRyYWNlLlxcbiBcXHRcXHQtdFxcdFxcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxcbkBAIC0yNDAsOCArMjQxLDEwIEBAIFVzYWdlXFxuIFxcdFxcdFxcdFxcdFxcdGdyb3VwIElEIG51bWJlcnMgYXBwZWFyIGluIFxcdTAwM2N0Z2lkbGlzdFxcdTAwM2UuXFxuIFxcdFxcdC0tbmFtZSBcXHUwMDNjY21kbGlzdFxcdTAwM2VcXHRTZWxlY3QgYnkgdGFzayBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXFxuIFxcdFxcdFxcdFxcdFxcdHRhc2sgY29tbWFuZCBuYW1lIGFwcGVhciBpbiBcXHUwMDNjY21kbGlzdFxcdTAwM2UuXFxuK1xcdFxcdC0tbW9kdWxlIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZVxcdFNlbGVjdCBieSBtb2R1bGUgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZSBibG9ja3Mgd2hvc2VcXG4rXFx0XFx0XFx0XFx0XFx0bW9kdWxlIG5hbWUgYXBwZWFyIGluIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZS5cXG4gXFxuLVxcdFxcdFxcdTAwM2NwaWRsaXN0XFx1MDAzZSwgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZSwgXFx1MDAzY2NtZGxpc3RcXHUwMDNlIGFyZSBzaW5nbGUgYXJndW1lbnRzIGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsXFxuK1xcdFxcdFxcdTAwM2NwaWRsaXN0XFx1MDAzZSwgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZSwgXFx1MDAzY2NtZGxpc3RcXHUwMDNlLCBcXHUwMDNjbW9kbGlzdFxcdTAwM2UgYXJlIHNpbmdsZSBhcmd1bWVudHMgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCxcXG4gXFx0XFx0d2hpY2ggb2ZmZXJzIGEgd2F5IHRvIHNwZWNpZnkgaW5kaXZpZHVhbCBzZWxlY3RpbmcgcnVsZXMuXFxuIFxcbiBcXG5AQCAtMjQ5LDYgKzI1Miw3IEBAIFVzYWdlXFxuIFxcdFxcdFxcdFxcdC4vcGFnZV9vd25lcl9zb3J0IFxcdTAwM2NpbnB1dFxcdTAwM2UgXFx1MDAzY291dHB1dFxcdTAwM2UgLS1waWQ9MVxcbiBcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tdGdpZD0xLDIsM1xcbiBcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tbmFtZSBuYW1lMSxuYW1lMlxcbitcXHRcXHRcXHRcXHQuL3BhZ2Vfb3duZXJfc29ydCBcXHUwMDNjaW5wdXRcXHUwMDNlIFxcdTAwM2NvdXRwdXRcXHUwMDNlIC0tbW9kdWxlIHhmcyxleHQ0XFxuIFxcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0yNjUsNiArMjY5LDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZnRcXHRcXHRmcmVlX3RzXFx0XFx0dGltZXN0YW1wIG9mIHRoZSBwYWdlIHdoZW4gaXQgd2FzIHJlbGVhc2VkXFxuIFxcdGF0XFx0XFx0YWxsb2NfdHNcXHR0aW1lc3RhbXAgb2YgdGhlIHBhZ2Ugd2hlbiBpdCB3YXMgYWxsb2NhdGVkXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXHRtb2RcXHRcXHRtb2R1bGVcXHRcXHRrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFxuICAgRm9yIC0tY3VsbCBvcHRpb246XFxuIFxcbkBAIC0yNzUsNiArMjgwLDcgQEAgU1RBTkRBUkQgRk9STUFUIFNQRUNJRklFUlNcXG4gXFx0ZlxcdFxcdGZyZWVcXHRcXHR3aGV0aGVyIHRoZSBwYWdlIGhhcyBiZWVuIHJlbGVhc2VkIG9yIG5vdFxcbiBcXHRzdFxcdFxcdHN0YWNrdHJhY2VcXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXFxuIFxcdGF0b3JcXHRcXHRhbGxvY2F0b3JcXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xcbitcXHRtb2RcXHRcXHRtb2R1bGVcXHRcXHRrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFxuIEZpbHRlcmluZyBwYWdlX293bmVyIG91dHB1dFxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG5pbmRleCAzNWQzZDI1NDk0MWM5NC4uN2ExYmMwNTRkMjk1ZGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xcbkBAIC0yNSwxMSArMjUsMTMgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2dldG9wdC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XFxuKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOIDY0XFxuIFxcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIFxcdGNoYXIgKnR4dDtcXG4gXFx0Y2hhciAqY29tbTsgLy8gdGFzayBjb21tYW5kIG5hbWVcXG4gXFx0Y2hhciAqc3RhY2t0cmFjZTtcXG4rXFx0Y2hhciAqbW9kdWxlOyAvLyBrZXJuZWwgbW9kdWxlIG5hbWVcXG4gXFx0X191NjQgdHNfbnNlYztcXG4gXFx0aW50IGxlbjtcXG4gXFx0aW50IG51bTtcXG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XFxuIGVudW0gRklMVEVSX0JJVCB7XFxuIFxcdEZJTFRFUl9QSUQgPSAxXFx1MDAzY1xcdTAwM2MxLFxcbiBcXHRGSUxURVJfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzIsXFxuLVxcdEZJTFRFUl9DT01NID0gMVxcdTAwM2NcXHUwMDNjM1xcbitcXHRGSUxURVJfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzMsXFxuK1xcdEZJTFRFUl9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M0XFxuIH07XFxuIFxcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xcbkBAIC01NSw3ICs1OCw4IEBAIGVudW0gQ1VMTF9CSVQge1xcbiBcXHRDVUxMX1RHSUQgPSAxXFx1MDAzY1xcdTAwM2MyLFxcbiBcXHRDVUxMX0NPTU0gPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDVUxMX1NUQUNLVFJBQ0UgPSAxXFx1MDAzY1xcdTAwM2M0LFxcbi1cXHRDVUxMX0FMTE9DQVRPUiA9IDFcXHUwMDNjXFx1MDAzYzVcXG4rXFx0Q1VMTF9BTExPQ0FUT1IgPSAxXFx1MDAzY1xcdTAwM2M1LFxcbitcXHRDVUxMX01PRFVMRSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4gfTtcXG4gZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gXFx0QUxMT0NBVE9SX0NNQSA9IDFcXHUwMDNjXFx1MDAzYzEsXFxuQEAgLTY1LDcgKzY5LDggQEAgZW51bSBBTExPQ0FUT1JfQklUIHtcXG4gfTtcXG4gZW51bSBBUkdfVFlQRSB7XFxuIFxcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxcbi1cXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUlxcbitcXHRBUkdfUEFHRV9OVU0sIEFSR19QSUQsIEFSR19UR0lELCBBUkdfVU5LTk9XTiwgQVJHX0FMTE9DQVRPUixcXG4rXFx0QVJHX01PRFVMRVxcbiB9O1xcbiBlbnVtIFNPUlRfT1JERVIge1xcbiBcXHRTT1JUX0FTQyA9IDEsXFxuQEAgLTc5LDE1ICs4NCwxOCBAQCBlbnVtIENPTVBfRkxBRyB7XFxuIFxcdENPTVBfU1RBQ0sgPSAxXFx1MDAzY1xcdTAwM2MzLFxcbiBcXHRDT01QX05VTSA9IDFcXHUwMDNjXFx1MDAzYzQsXFxuIFxcdENPTVBfVEdJRCA9IDFcXHUwMDNjXFx1MDAzYzUsXFxuLVxcdENPTVBfQ09NTSA9IDFcXHUwMDNjXFx1MDAzYzZcXG4rXFx0Q09NUF9DT01NID0gMVxcdTAwM2NcXHUwMDNjNixcXG4rXFx0Q09NUF9NT0RVTEUgPSAxXFx1MDAzY1xcdTAwM2M3XFxuIH07XFxuIHN0cnVjdCBmaWx0ZXJfY29uZGl0aW9uIHtcXG4gXFx0cGlkX3QgKnBpZHM7XFxuIFxcdHBpZF90ICp0Z2lkcztcXG4gXFx0Y2hhciAqKmNvbW1zO1xcbitcXHRjaGFyICoqbW9kdWxlcztcXG4gXFx0aW50IHBpZHNfc2l6ZTtcXG4gXFx0aW50IHRnaWRzX3NpemU7XFxuIFxcdGludCBjb21tc19zaXplO1xcbitcXHRpbnQgbW9kdWxlc19zaXplO1xcbiB9O1xcbiBzdHJ1Y3Qgc29ydF9jb25kaXRpb24ge1xcbiBcXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xcbkBAIC0xMDEsNiArMTA5LDcgQEAgc3RhdGljIHJlZ2V4X3QgcGlkX3BhdHRlcm47XFxuIHN0YXRpYyByZWdleF90IHRnaWRfcGF0dGVybjtcXG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xcbiBzdGF0aWMgcmVnZXhfdCB0c19uc2VjX3BhdHRlcm47XFxuK3N0YXRpYyByZWdleF90IG1vZHVsZV9wYXR0ZXJuO1xcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XFxuIHN0YXRpYyBpbnQgbGlzdF9zaXplO1xcbiBzdGF0aWMgaW50IG1heF9zaXplO1xcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4gXFx0cmV0dXJuIHN0cmNtcChsMS1cXHUwMDNlY29tbSwgbDItXFx1MDAzZWNvbW0pO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGNvbXBhcmVfbW9kdWxlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmxvY2tfbGlzdCAqbDEgPSBwMSwgKmwyID0gcDI7XFxuK1xcbitcXHRyZXR1cm4gc3RyY21wKGwxLVxcdTAwM2Vtb2R1bGUsIGwyLVxcdTAwM2Vtb2R1bGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcXG5AQCAtMjA3LDYgKzIyMyw4IEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jdWxsX2NvbmRpdGlvbihjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpXFxuIFxcdFxcdHJldHVybiBjb21wYXJlX3RnaWQocDEsIHAyKTtcXG4gXFx0aWYgKChjdWxsIFxcdTAwMjYgQ1VMTF9DT01NKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcXG4gXFx0XFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xcbitcXHRpZiAoKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSkgXFx1MDAyNlxcdTAwMjYgY29tcGFyZV9tb2R1bGUocDEsIHAyKSlcXG4rXFx0XFx0cmV0dXJuIGNvbXBhcmVfbW9kdWxlKHAxLCBwMik7XFxuIFxcdGlmICgoY3VsbCBcXHUwMDI2IENVTExfQUxMT0NBVE9SKSBcXHUwMDI2XFx1MDAyNiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpKVxcbiBcXHRcXHRyZXR1cm4gY29tcGFyZV9hbGxvY2F0b3IocDEsIHAyKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQxMSw5ICs0MjksMjMgQEAgc3RhdGljIGNoYXIgKmdldF9jb21tKGNoYXIgKmJ1ZilcXG4gXFx0cmV0dXJuIGNvbW1fc3RyO1xcbiB9XFxuIFxcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXFxuK3tcXG4rXFx0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xcbitcXG4rXFx0aWYgKCFtb2R1bGVfc3RyKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0bWVtc2V0KG1vZHVsZV9zdHIsIDAsIE1PRFVMRV9OQU1FX0xFTik7XFxuK1xcdGlmIChzZWFyY2hfcGF0dGVybihcXHUwMDI2bW9kdWxlX3BhdHRlcm4sIG1vZHVsZV9zdHIsXFxuK1xcdFxcdFxcdCAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSBcXHUwMDNjIDApXFxuK1xcdFxcdHN0cmNweShtb2R1bGVfc3RyLCBcXFwidm1saW51eFxcXCIpO1xcbitcXHRyZXR1cm4gbW9kdWxlX3N0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZnJlZV9ibG9ja19saXN0KHN0cnVjdCBibG9ja19saXN0ICpibG9jaylcXG4ge1xcbiBcXHRmcmVlKGJsb2NrLVxcdTAwM2Vjb21tKTtcXG4rXFx0ZnJlZShibG9jay1cXHUwMDNlbW9kdWxlKTtcXG4gXFx0ZnJlZShibG9jay1cXHUwMDNldHh0KTtcXG4gfVxcbiBcXG5AQCAtNDMzLDYgKzQ2NSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2FyZ190eXBlKGNvbnN0IGNoYXIgKmFyZylcXG4gXFx0XFx0cmV0dXJuIEFSR19BTExPQ19UUztcXG4gXFx0ZWxzZSBpZiAoIXN0cmNtcChhcmcsIFxcXCJhbGxvY2F0b3JcXFwiKSB8fCAhc3RyY21wKGFyZywgXFxcImF0b3JcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XFxuK1xcdGVsc2UgaWYgKCFzdHJjbXAoYXJnLCBcXFwibW9kdWxlXFxcIikgfHwgIXN0cmNtcChhcmcsIFxcXCJtb2RcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIEFSR19NT0RVTEU7XFxuIFxcdGVsc2Uge1xcbiBcXHRcXHRyZXR1cm4gQVJHX1VOS05PV047XFxuIFxcdH1cXG5AQCAtNDgzLDI1ICs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcXG4gXFxuIHN0YXRpYyBlbnVtIEZJTFRFUl9SRVNVTFQgZmlsdGVyX3JlY29yZChjaGFyICpidWYpXFxuIHtcXG4tXFx0Y2hhciAqY29tbTtcXG4rXFx0Y2hhciAqY29tbSwgKm1vZHVsZTtcXG4gXFxuIFxcdGlmICgoZmlsdGVyIFxcdTAwMjYgRklMVEVSX1BJRCkgXFx1MDAyNlxcdTAwMjYgIW1hdGNoX251bV9saXN0KGdldF9waWQoYnVmKSwgZmMucGlkcywgZmMucGlkc19zaXplKSlcXG4gXFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbiBcXHRpZiAoKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9UR0lEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuLVxcdGlmICghKGZpbHRlciBcXHUwMDI2IEZJTFRFUl9DT01NKSlcXG4rXFx0aWYgKCEoZmlsdGVyIFxcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxcbiBcXHRcXHRyZXR1cm4gRklMVEVSX01BVENIO1xcbiBcXG4tXFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XFxuLVxcdGlmICghY29tbSlcXG4tXFx0XFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcXG4tXFxuLVxcdGlmICghbWF0Y2hfc3RyX2xpc3QoY29tbSwgZmMuY29tbXMsIGZjLmNvbW1zX3NpemUpKSB7XFxuK1xcdGlmIChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfQ09NTSkge1xcbitcXHRcXHRjb21tID0gZ2V0X2NvbW0oYnVmKTtcXG4rXFx0XFx0aWYgKCFjb21tKVxcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX0VSUk9SO1xcbitcXHRcXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xcbitcXHRcXHRcXHRmcmVlKGNvbW0pO1xcbitcXHRcXHRcXHRyZXR1cm4gRklMVEVSX1NLSVA7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZnJlZShjb21tKTtcXG4tXFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbiBcXHR9XFxuLVxcdGZyZWUoY29tbSk7XFxuK1xcdGlmIChmaWx0ZXIgXFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XFxuK1xcdFxcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcXG4rXFx0XFx0aWYgKCFtb2R1bGUpXFxuK1xcdFxcdFxcdHJldHVybiBGSUxURVJfRVJST1I7XFxuK1xcdFxcdGlmICghbWF0Y2hfc3RyX2xpc3QobW9kdWxlLCBmYy5tb2R1bGVzLCBmYy5tb2R1bGVzX3NpemUpKSB7XFxuK1xcdFxcdFxcdGZyZWUobW9kdWxlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xcbitcXHRcXHR9XFxuK1xcdFxcdGZyZWUobW9kdWxlKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gRklMVEVSX01BVENIO1xcbiB9XFxuIFxcbkBAIC01NDcsNiArNTkyLDEyIEBAIHN0YXRpYyBib29sIGFkZF9saXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY2hhciAqZXh0X2J1ZilcXG4gXFx0XFx0bGlzdFtsaXN0X3NpemVdLnN0YWNrdHJhY2UrKztcXG4gXFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xcbiBcXHRsaXN0W2xpc3Rfc2l6ZV0uYWxsb2NhdG9yID0gZ2V0X2FsbG9jYXRvcihidWYsIGV4dF9idWYpO1xcbitcXHRsaXN0W2xpc3Rfc2l6ZV0ubW9kdWxlID0gZ2V0X21vZHVsZShidWYpO1xcbitcXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJPdXQgb2YgbWVtb3J5XFxcXG5cXFwiKTtcXG4rXFx0XFx0ZnJlZV9ibG9ja19saXN0KFxcdTAwMjZsaXN0W2xpc3Rfc2l6ZV0pO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFx0bGlzdF9zaXplKys7XFxuIFxcdGlmIChsaXN0X3NpemUgJSAxMDAwID09IDApIHtcXG4gXFx0XFx0cHJpbnRmKFxcXCJsb2FkZWQgJWRcXFxcclxcXCIsIGxpc3Rfc2l6ZSk7XFxuQEAgLTU3Myw2ICs2MjQsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9jdWxsX2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcXG4gXFx0XFx0XFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XFxuIFxcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXFxuIFxcdFxcdFxcdGN1bGwgfD0gQ1VMTF9BTExPQ0FUT1I7XFxuK1xcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19NT0RVTEUpXFxuK1xcdFxcdFxcdGN1bGwgfD0gQ1VMTF9NT0RVTEU7XFxuIFxcdFxcdGVsc2Uge1xcbiBcXHRcXHRcXHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5AQCAtNjM1LDYgKzY4OCw4IEBAIHN0YXRpYyBib29sIHBhcnNlX3NvcnRfYXJncyhjb25zdCBjaGFyICphcmdfc3RyKVxcbiBcXHRcXHRcXHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XFxuIFxcdFxcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXFxuIFxcdFxcdFxcdHNjLmNtcHNbaV0gPSBjb21wYXJlX2FsbG9jYXRvcjtcXG4rXFx0XFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcXG4rXFx0XFx0XFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfbW9kdWxlO1xcbiBcXHRcXHRlbHNlIHtcXG4gXFx0XFx0XFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xcbiBcXHRcXHRcXHRzYy5zaXplID0gMDtcXG5AQCAtNjkxLDcgKzc0Niw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdFxcdFxcXCItcFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgcGlkLlxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLVBcXFxcdFxcXFx0XFxcXHRTb3J0IGJ5IHRnaWQuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItc1xcXFx0XFxcXHRcXFxcdFNvcnQgYnkgdGhlIHN0YWNrdHJhY2UuXFxcXG5cXFwiXFxuLVxcdFxcdFxcXCItdFxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbnVtYmVyIG9mIHRpbWVzIHJlY29yZCBpcyBzZWVuIChkZWZhdWx0KS5cXFxcblxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLXRcXFxcdFxcXFx0XFxcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCItTVxcXFx0XFxcXHRcXFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxcXG5cXFxcblxcXCJcXG4gXFx0XFx0XFxcIi0tcGlkIFxcdTAwM2NwaWRsaXN0XFx1MDAzZVxcXFx0XFxcXHRTZWxlY3QgYnkgcGlkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXFxcIlxcbiBcXHRcXHRcXFwiIG9mXFxcXG5cXFxcdFxcXFx0XFxcXHRibG9ja3Mgd2hvc2UgcHJvY2VzcyBJRCBudW1iZXJzIGFwcGVhciBpbiBcXHUwMDNjcGlkbGlzdFxcdTAwM2UuXFxcXG5cXFwiXFxuIFxcdFxcdFxcXCItLXRnaWQgXFx1MDAzY3RnaWRsaXN0XFx1MDAzZVxcXFx0U2VsZWN0IGJ5IHRnaWQuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFwiXFxuQEAgLTcwMCwxMSArNzU2LDIxIEBAIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpXFxuIFxcdFxcdFxcXCItLW5hbWUgXFx1MDAzY2NtZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgY29tbWFuZCBuYW1lLiBUaGlzIHNlbGVjdHMgdGhlXFxcIlxcbiBcXHRcXHRcXFwiIGluZm9ybWF0aW9uXFxcXG5cXFxcdFxcXFx0XFxcXHRvZiBibG9ja3Mgd2hvc2UgY29tbWFuZCBuYW1lIGFwcGVhcnMgaW5cXFwiXFxuIFxcdFxcdFxcXCIgXFx1MDAzY2NtZGxpc3RcXHUwMDNlLlxcXFxuXFxcIlxcbi1cXHRcXHRcXFwiLS1jdWxsIFxcdTAwM2NydWxlc1xcdTAwM2VcXFxcdFxcXFx0Q3VsbCBieSB1c2VyLWRlZmluZWQgcnVsZXMuIFxcdTAwM2NydWxlc1xcdTAwM2UgaXMgYSBcXFwiXFxuLVxcdFxcdFxcXCJzaW5nbGVcXFxcblxcXFx0XFxcXHRcXFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgXFxcIlxcbi1cXHRcXHRcXFwid2l0aCBzb21lXFxcXG5cXFxcdFxcXFx0XFxcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgXFxcIlxcbi1cXHRcXHRcXFwic3RhY2t0cmFjZSwgYWxsb2NhdG9yKVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiLS1tb2R1bGUgXFx1MDAzY21vZGxpc3RcXHUwMDNlXFxcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFxcdTAwM2Ntb2RsaXN0XFx1MDAzZS5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIi0tY3VsbCBcXHUwMDNjcnVsZXNcXHUwMDNlXFxcXHRcXFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcXHUwMDNjcnVsZXNcXHUwMDNlIGlzIGEgc2luZ2xlXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRhcmd1bWVudCBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHdpdGggc29tZVxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0Y29tbW9uIGZpZWxkcyBwcmVkZWZpbmVkIChwaWQsIHRnaWQsIGNvbW0sIHN0YWNrdHJhY2UsIGFsbG9jYXRvciwgbW9kdWxlKVxcXFxuXFxcIlxcbiBcXHRcXHRcXFwiLS1zb3J0IFxcdTAwM2NvcmRlclxcdTAwM2VcXFxcdFxcXFx0U3BlY2lmeSBzb3J0IG9yZGVyIGFzOiBbK3wtXWtleVssWyt8LV1rZXlbLC4uLl1dXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRBdmFpbGFibGUga2V5czpcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdCAgcGlkKHApLCB0Z2lkKHRnKSwgbmFtZShuKSwgc3RhY2t0cmFjZShzdCksXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIHR4dChUKSwgYWxsb2NfdHMoYXQpLCBhbGxvY2F0b3IoYXRvciksIG1vZHVsZShtb2QpXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRUaGUgXFxcXFxcXCIrXFxcXFxcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXFxcblxcXCJcXG4rXFx0XFx0XFxcIlxcXFx0XFxcXHRcXFxcdEV4YW1wbGVzOlxcXFxuXFxcIlxcbitcXHRcXHRcXFwiXFxcXHRcXFxcdFxcXFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxcXG5cXFwiXFxuK1xcdFxcdFxcXCJcXFxcdFxcXFx0XFxcXHQgIC0tc29ydD1tb2QsYXRcXFxcblxcXCJcXG4gXFx0KTtcXG4gfVxcbiBcXG5AQCAtNzIxLDEzICs3ODcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHR7IFxcXCJuYW1lXFxcIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDMgfSxcXG4gXFx0XFx0eyBcXFwiY3VsbFxcXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0IH0sXFxuIFxcdFxcdHsgXFxcInNvcnRcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxcbitcXHRcXHR7IFxcXCJtb2R1bGVcXFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNiB9LFxcbiBcXHRcXHR7IFxcXCJoZWxwXFxcIiwgbm9fYXJndW1lbnQsIE5VTEwsICdoJyB9LFxcbiBcXHRcXHR7IDAsIDAsIDAsIDB9LFxcbiBcXHR9O1xcbiBcXG4gXFx0Y29tcGFyZV9mbGFnID0gQ09NUF9OT19GTEFHO1xcbiBcXG4tXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiYWRtbnBzdFBoXFxcIiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSlcXG4rXFx0d2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCBcXFwiYWRtbnBzdFBNaFxcXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXFxuIFxcdFxcdHN3aXRjaCAob3B0KSB7XFxuIFxcdFxcdGNhc2UgJ2EnOlxcbiBcXHRcXHRcXHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcXG5AQCAtNzUzLDYgKzgyMCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0Y2FzZSAnbic6XFxuIFxcdFxcdFxcdGNvbXBhcmVfZmxhZyB8PSBDT01QX0NPTU07XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlICdNJzpcXG4rXFx0XFx0XFx0Y29tcGFyZV9mbGFnIHw9IENPTVBfTU9EVUxFO1xcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSAnaCc6XFxuIFxcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdFxcdGV4aXQoMCk7XFxuQEAgLTc5Miw2ICs4NjIsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRcXHRcXHRleGl0KDEpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIDY6XFxuK1xcdFxcdFxcdGZpbHRlciA9IGZpbHRlciB8IEZJTFRFUl9NT0RVTEU7XFxuK1xcdFxcdFxcdGZjLm1vZHVsZXMgPSBleHBsb2RlKCcsJywgb3B0YXJnLCBcXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdFxcdGV4aXQoMSk7XFxuQEAgLTgyMSw2ICs4OTUsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX3N0YWNrdHJhY2UsIFNPUlRfQVNDKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQ09NUF9OT19GTEFHOlxcbitcXHRcXHRpZiAoc2Muc2l6ZSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRzZXRfc2luZ2xlX2NtcChjb21wYXJlX251bSwgU09SVF9ERVNDKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgQ09NUF9OVU06XFxuIFxcdFxcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfbnVtLCBTT1JUX0RFU0MpO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtODMwLDYgKzkwOCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0Y2FzZSBDT01QX0NPTU06XFxuIFxcdFxcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfY29tbSwgU09SVF9BU0MpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBDT01QX01PRFVMRTpcXG4rXFx0XFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHVzYWdlKCk7XFxuIFxcdFxcdGV4aXQoMSk7XFxuQEAgLTg1Myw2ICs5MzQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdGdvdG8gb3V0X2NvbW07XFxuIFxcdGlmICghY2hlY2tfcmVnY29tcChcXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcXFwidHNcXFxcXFxcXHMqKFswLTldKilcXFxcXFxcXHMqbnNcXFwiKSlcXG4gXFx0XFx0Z290byBvdXRfdHM7XFxuK1xcdGlmICghY2hlY2tfcmVnY29tcChcXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFxcXCJcXFxcXFxcXFsoW2EtekEtWjAtOV9dKylcXFxcXFxcXF1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfbW9kdWxlO1xcbiBcXG4gXFx0ZnN0YXQoZmlsZW5vKGZpbiksIFxcdTAwMjZzdCk7XFxuIFxcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cXG5AQCAtOTExLDYgKzk5NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4gXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBUR0lEICVkXFxcIiwgbGlzdFtpXS50Z2lkKTtcXG4gXFx0XFx0XFx0aWYgKGN1bGwgXFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFxcdTAwMjYgRklMVEVSX0NPTU0pXFxuIFxcdFxcdFxcdFxcdGZwcmludGYoZm91dCwgXFxcIiwgdGFza19jb21tX25hbWU6ICVzXFxcIiwgbGlzdFtpXS5jb21tKTtcXG4rXFx0XFx0XFx0aWYgKGN1bGwgXFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXFx1MDAyNiBGSUxURVJfTU9EVUxFKVxcbitcXHRcXHRcXHRcXHRmcHJpbnRmKGZvdXQsIFxcXCIsIG1vZHVsZTogJXNcXFwiLCBsaXN0W2ldLm1vZHVsZSk7XFxuIFxcdFxcdFxcdGlmIChjdWxsIFxcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcXG4gXFx0XFx0XFx0XFx0ZnByaW50Zihmb3V0LCBcXFwiLCBcXFwiKTtcXG4gXFx0XFx0XFx0XFx0cHJpbnRfYWxsb2NhdG9yKGZvdXQsIGxpc3RbaV0uYWxsb2NhdG9yKTtcXG5AQCAtOTMxLDYgKzEwMTYsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuIFxcdFxcdFxcdGZyZWVfYmxvY2tfbGlzdChcXHUwMDI2bGlzdFtpXSk7XFxuIFxcdFxcdGZyZWUobGlzdCk7XFxuIFxcdH1cXG4rb3V0X21vZHVsZTpcXG4rXFx0cmVnZnJlZShcXHUwMDI2bW9kdWxlX3BhdHRlcm4pO1xcbiBvdXRfdHM6XFxuIFxcdHJlZ2ZyZWUoXFx1MDAyNnRzX25zZWNfcGF0dGVybik7XFxuIG91dF9jb21tOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMTozOTo1My44MzYyMDY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTI4OTM3ODAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBhIHVzZXJzcGFjZSB0b29sICh0b29scy9tbS9wYWdlX293bmVyX3NvcnQuYykgYW5kIGl0cyBkb2N1bWVudGF0aW9uLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBpdHNlbGYsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZnV6eiBpbiB0aGUga2VybmVsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDZjYzI4YWY0NGE0NGEwZjgxYTI3OGQyMzRjNzExYmQxZjc5M2M0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMjE6Mzk6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3BhZ2Vfb3duZXIucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuaW5kZXggYTZiZDNmZTY0MjNhZDYuLmJkMDI3Mzc3ZGZmNmVlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wYWdlX293bmVyLnJzdFxuQEAgLTE5OSw2ICsxOTksNyBAQCBVc2FnZVxuIFx0XHQtcFx0XHRTb3J0IGJ5IHBpZC5cbiBcdFx0LVBcdFx0U29ydCBieSB0Z2lkLlxuIFx0XHQtblx0XHRTb3J0IGJ5IHRhc2sgY29tbWFuZCBuYW1lLlxuK1x0XHQtTVx0XHRTb3J0IGJ5IG1vZHVsZSBuYW1lLlxuIFx0XHQtclx0XHRTb3J0IGJ5IG1lbW9yeSByZWxlYXNlIHRpbWUuXG4gXHRcdC1zXHRcdFNvcnQgYnkgc3RhY2sgdHJhY2UuXG4gXHRcdC10XHRcdFNvcnQgYnkgdGltZXMgKGRlZmF1bHQpLlxuQEAgLTI0MCw4ICsyNDEsMTAgQEAgVXNhZ2VcbiBcdFx0XHRcdFx0Z3JvdXAgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjdGdpZGxpc3RcdTAwM2UuXG4gXHRcdC0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXHRTZWxlY3QgYnkgdGFzayBjb21tYW5kIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXG4gXHRcdFx0XHRcdHRhc2sgY29tbWFuZCBuYW1lIGFwcGVhciBpbiBcdTAwM2NjbWRsaXN0XHUwMDNlLlxuK1x0XHQtLW1vZHVsZSBcdTAwM2Ntb2RsaXN0XHUwMDNlXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgYmxvY2tzIHdob3NlXG4rXHRcdFx0XHRcdG1vZHVsZSBuYW1lIGFwcGVhciBpbiBcdTAwM2Ntb2RsaXN0XHUwMDNlLlxuIFxuLVx0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuK1x0XHRcdTAwM2NwaWRsaXN0XHUwMDNlLCBcdTAwM2N0Z2lkbGlzdFx1MDAzZSwgXHUwMDNjY21kbGlzdFx1MDAzZSwgXHUwMDNjbW9kbGlzdFx1MDAzZSBhcmUgc2luZ2xlIGFyZ3VtZW50cyBpbiB0aGUgZm9ybSBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LFxuIFx0XHR3aGljaCBvZmZlcnMgYSB3YXkgdG8gc3BlY2lmeSBpbmRpdmlkdWFsIHNlbGVjdGluZyBydWxlcy5cbiBcbiBcbkBAIC0yNDksNiArMjUyLDcgQEAgVXNhZ2VcbiBcdFx0XHRcdC4vcGFnZV9vd25lcl9zb3J0IFx1MDAzY2lucHV0XHUwMDNlIFx1MDAzY291dHB1dFx1MDAzZSAtLXBpZD0xXG4gXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS10Z2lkPTEsMiwzXG4gXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1uYW1lIG5hbWUxLG5hbWUyXG4rXHRcdFx0XHQuL3BhZ2Vfb3duZXJfc29ydCBcdTAwM2NpbnB1dFx1MDAzZSBcdTAwM2NvdXRwdXRcdTAwM2UgLS1tb2R1bGUgeGZzLGV4dDRcbiBcbiBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuID09PT09PT09PT09PT09PT09PT09PT09PT09XG5AQCAtMjY1LDYgKzI2OSw3IEBAIFNUQU5EQVJEIEZPUk1BVCBTUEVDSUZJRVJTXG4gXHRmdFx0XHRmcmVlX3RzXHRcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyByZWxlYXNlZFxuIFx0YXRcdFx0YWxsb2NfdHNcdHRpbWVzdGFtcCBvZiB0aGUgcGFnZSB3aGVuIGl0IHdhcyBhbGxvY2F0ZWRcbiBcdGF0b3JcdFx0YWxsb2NhdG9yXHRtZW1vcnkgYWxsb2NhdG9yIGZvciBwYWdlc1xuK1x0bW9kXHRcdG1vZHVsZVx0XHRrZXJuZWwgbW9kdWxlIG5hbWVcbiBcbiAgIEZvciAtLWN1bGwgb3B0aW9uOlxuIFxuQEAgLTI3NSw2ICsyODAsNyBAQCBTVEFOREFSRCBGT1JNQVQgU1BFQ0lGSUVSU1xuIFx0Zlx0XHRmcmVlXHRcdHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gcmVsZWFzZWQgb3Igbm90XG4gXHRzdFx0XHRzdGFja3RyYWNlXHRzdGFjayB0cmFjZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uXG4gXHRhdG9yXHRcdGFsbG9jYXRvclx0bWVtb3J5IGFsbG9jYXRvciBmb3IgcGFnZXNcbitcdG1vZFx0XHRtb2R1bGVcdFx0a2VybmVsIG1vZHVsZSBuYW1lXG4gXG4gRmlsdGVyaW5nIHBhZ2Vfb3duZXIgb3V0cHV0XG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZGlmZiAtLWdpdCBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jIGIvdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbmluZGV4IDM1ZDNkMjU0OTQxYzk0Li43YTFiYzA1NGQyOTVkYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jXG4rKysgYi90b29scy9tbS9wYWdlX293bmVyX3NvcnQuY1xuQEAgLTI1LDExICsyNSwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2dldG9wdC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUQVNLX0NPTU1fTEVOIDE2XG4rI2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gNjRcbiBcbiBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gXHRjaGFyICp0eHQ7XG4gXHRjaGFyICpjb21tOyAvLyB0YXNrIGNvbW1hbmQgbmFtZVxuIFx0Y2hhciAqc3RhY2t0cmFjZTtcbitcdGNoYXIgKm1vZHVsZTsgLy8ga2VybmVsIG1vZHVsZSBuYW1lXG4gXHRfX3U2NCB0c19uc2VjO1xuIFx0aW50IGxlbjtcbiBcdGludCBudW07XG5AQCAtNDEsNyArNDMsOCBAQCBzdHJ1Y3QgYmxvY2tfbGlzdCB7XG4gZW51bSBGSUxURVJfQklUIHtcbiBcdEZJTFRFUl9QSUQgPSAxXHUwMDNjXHUwMDNjMSxcbiBcdEZJTFRFUl9UR0lEID0gMVx1MDAzY1x1MDAzYzIsXG4tXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzXG4rXHRGSUxURVJfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuK1x0RklMVEVSX01PRFVMRSA9IDFcdTAwM2NcdTAwM2M0XG4gfTtcbiBcbiBlbnVtIEZJTFRFUl9SRVNVTFQge1xuQEAgLTU1LDcgKzU4LDggQEAgZW51bSBDVUxMX0JJVCB7XG4gXHRDVUxMX1RHSUQgPSAxXHUwMDNjXHUwMDNjMixcbiBcdENVTExfQ09NTSA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q1VMTF9TVEFDS1RSQUNFID0gMVx1MDAzY1x1MDAzYzQsXG4tXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1XG4rXHRDVUxMX0FMTE9DQVRPUiA9IDFcdTAwM2NcdTAwM2M1LFxuK1x0Q1VMTF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjNlxuIH07XG4gZW51bSBBTExPQ0FUT1JfQklUIHtcbiBcdEFMTE9DQVRPUl9DTUEgPSAxXHUwMDNjXHUwMDNjMSxcbkBAIC02NSw3ICs2OSw4IEBAIGVudW0gQUxMT0NBVE9SX0JJVCB7XG4gfTtcbiBlbnVtIEFSR19UWVBFIHtcbiBcdEFSR19UWFQsIEFSR19DT01NLCBBUkdfU1RBQ0tUUkFDRSwgQVJHX0FMTE9DX1RTLCBBUkdfQ1VMTF9USU1FLFxuLVx0QVJHX1BBR0VfTlVNLCBBUkdfUElELCBBUkdfVEdJRCwgQVJHX1VOS05PV04sIEFSR19BTExPQ0FUT1JcbitcdEFSR19QQUdFX05VTSwgQVJHX1BJRCwgQVJHX1RHSUQsIEFSR19VTktOT1dOLCBBUkdfQUxMT0NBVE9SLFxuK1x0QVJHX01PRFVMRVxuIH07XG4gZW51bSBTT1JUX09SREVSIHtcbiBcdFNPUlRfQVNDID0gMSxcbkBAIC03OSwxNSArODQsMTggQEAgZW51bSBDT01QX0ZMQUcge1xuIFx0Q09NUF9TVEFDSyA9IDFcdTAwM2NcdTAwM2MzLFxuIFx0Q09NUF9OVU0gPSAxXHUwMDNjXHUwMDNjNCxcbiBcdENPTVBfVEdJRCA9IDFcdTAwM2NcdTAwM2M1LFxuLVx0Q09NUF9DT01NID0gMVx1MDAzY1x1MDAzYzZcbitcdENPTVBfQ09NTSA9IDFcdTAwM2NcdTAwM2M2LFxuK1x0Q09NUF9NT0RVTEUgPSAxXHUwMDNjXHUwMDNjN1xuIH07XG4gc3RydWN0IGZpbHRlcl9jb25kaXRpb24ge1xuIFx0cGlkX3QgKnBpZHM7XG4gXHRwaWRfdCAqdGdpZHM7XG4gXHRjaGFyICoqY29tbXM7XG4rXHRjaGFyICoqbW9kdWxlcztcbiBcdGludCBwaWRzX3NpemU7XG4gXHRpbnQgdGdpZHNfc2l6ZTtcbiBcdGludCBjb21tc19zaXplO1xuK1x0aW50IG1vZHVsZXNfc2l6ZTtcbiB9O1xuIHN0cnVjdCBzb3J0X2NvbmRpdGlvbiB7XG4gXHRpbnQgKCoqY21wcykoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopO1xuQEAgLTEwMSw2ICsxMDksNyBAQCBzdGF0aWMgcmVnZXhfdCBwaWRfcGF0dGVybjtcbiBzdGF0aWMgcmVnZXhfdCB0Z2lkX3BhdHRlcm47XG4gc3RhdGljIHJlZ2V4X3QgY29tbV9wYXR0ZXJuO1xuIHN0YXRpYyByZWdleF90IHRzX25zZWNfcGF0dGVybjtcbitzdGF0aWMgcmVnZXhfdCBtb2R1bGVfcGF0dGVybjtcbiBzdGF0aWMgc3RydWN0IGJsb2NrX2xpc3QgKmxpc3Q7XG4gc3RhdGljIGludCBsaXN0X3NpemU7XG4gc3RhdGljIGludCBtYXhfc2l6ZTtcbkBAIC0xODQsNiArMTkzLDEzIEBAIHN0YXRpYyBpbnQgY29tcGFyZV9jb21tKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlY29tbSwgbDItXHUwMDNlY29tbSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgY29tcGFyZV9tb2R1bGUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbitcbitcdHJldHVybiBzdHJjbXAobDEtXHUwMDNlbW9kdWxlLCBsMi1cdTAwM2Vtb2R1bGUpO1xuK31cbitcbiBzdGF0aWMgaW50IGNvbXBhcmVfdHMoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBibG9ja19saXN0ICpsMSA9IHAxLCAqbDIgPSBwMjtcbkBAIC0yMDcsNiArMjIzLDggQEAgc3RhdGljIGludCBjb21wYXJlX2N1bGxfY29uZGl0aW9uKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMilcbiBcdFx0cmV0dXJuIGNvbXBhcmVfdGdpZChwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0NPTU0pIFx1MDAyNlx1MDAyNiBjb21wYXJlX2NvbW0ocDEsIHAyKSlcbiBcdFx0cmV0dXJuIGNvbXBhcmVfY29tbShwMSwgcDIpO1xuK1x0aWYgKChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSkgXHUwMDI2XHUwMDI2IGNvbXBhcmVfbW9kdWxlKHAxLCBwMikpXG4rXHRcdHJldHVybiBjb21wYXJlX21vZHVsZShwMSwgcDIpO1xuIFx0aWYgKChjdWxsIFx1MDAyNiBDVUxMX0FMTE9DQVRPUikgXHUwMDI2XHUwMDI2IGNvbXBhcmVfYWxsb2NhdG9yKHAxLCBwMikpXG4gXHRcdHJldHVybiBjb21wYXJlX2FsbG9jYXRvcihwMSwgcDIpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNDExLDkgKzQyOSwyMyBAQCBzdGF0aWMgY2hhciAqZ2V0X2NvbW0oY2hhciAqYnVmKVxuIFx0cmV0dXJuIGNvbW1fc3RyO1xuIH1cbiBcbitzdGF0aWMgY2hhciAqZ2V0X21vZHVsZShjaGFyICpidWYpXG4re1xuK1x0Y2hhciAqbW9kdWxlX3N0ciA9IG1hbGxvYyhNT0RVTEVfTkFNRV9MRU4pO1xuK1xuK1x0aWYgKCFtb2R1bGVfc3RyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdG1lbXNldChtb2R1bGVfc3RyLCAwLCBNT0RVTEVfTkFNRV9MRU4pO1xuK1x0aWYgKHNlYXJjaF9wYXR0ZXJuKFx1MDAyNm1vZHVsZV9wYXR0ZXJuLCBtb2R1bGVfc3RyLFxuK1x0XHRcdCAgIE1PRFVMRV9OQU1FX0xFTiwgYnVmKSBcdTAwM2MgMClcbitcdFx0c3RyY3B5KG1vZHVsZV9zdHIsIFwidm1saW51eFwiKTtcbitcdHJldHVybiBtb2R1bGVfc3RyO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX2Jsb2NrX2xpc3Qoc3RydWN0IGJsb2NrX2xpc3QgKmJsb2NrKVxuIHtcbiBcdGZyZWUoYmxvY2stXHUwMDNlY29tbSk7XG4rXHRmcmVlKGJsb2NrLVx1MDAzZW1vZHVsZSk7XG4gXHRmcmVlKGJsb2NrLVx1MDAzZXR4dCk7XG4gfVxuIFxuQEAgLTQzMyw2ICs0NjUsOCBAQCBzdGF0aWMgaW50IGdldF9hcmdfdHlwZShjb25zdCBjaGFyICphcmcpXG4gXHRcdHJldHVybiBBUkdfQUxMT0NfVFM7XG4gXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJhbGxvY2F0b3JcIikgfHwgIXN0cmNtcChhcmcsIFwiYXRvclwiKSlcbiBcdFx0cmV0dXJuIEFSR19BTExPQ0FUT1I7XG4rXHRlbHNlIGlmICghc3RyY21wKGFyZywgXCJtb2R1bGVcIikgfHwgIXN0cmNtcChhcmcsIFwibW9kXCIpKVxuK1x0XHRyZXR1cm4gQVJHX01PRFVMRTtcbiBcdGVsc2Uge1xuIFx0XHRyZXR1cm4gQVJHX1VOS05PV047XG4gXHR9XG5AQCAtNDgzLDI1ICs1MTcsMzYgQEAgc3RhdGljIGJvb2wgbWF0Y2hfc3RyX2xpc3QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqbGlzdCwgaW50IGxpc3Rfc2l6ZSlcbiBcbiBzdGF0aWMgZW51bSBGSUxURVJfUkVTVUxUIGZpbHRlcl9yZWNvcmQoY2hhciAqYnVmKVxuIHtcbi1cdGNoYXIgKmNvbW07XG4rXHRjaGFyICpjb21tLCAqbW9kdWxlO1xuIFxuIFx0aWYgKChmaWx0ZXIgXHUwMDI2IEZJTFRFUl9QSUQpIFx1MDAyNlx1MDAyNiAhbWF0Y2hfbnVtX2xpc3QoZ2V0X3BpZChidWYpLCBmYy5waWRzLCBmYy5waWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4gXHRpZiAoKGZpbHRlciBcdTAwMjYgRklMVEVSX1RHSUQpIFx1MDAyNlx1MDAyNlxuIFx0XHQhbWF0Y2hfbnVtX2xpc3QoZ2V0X3RnaWQoYnVmKSwgZmMudGdpZHMsIGZjLnRnaWRzX3NpemUpKVxuIFx0XHRyZXR1cm4gRklMVEVSX1NLSVA7XG4tXHRpZiAoIShmaWx0ZXIgXHUwMDI2IEZJTFRFUl9DT01NKSlcbitcdGlmICghKGZpbHRlciBcdTAwMjYgKEZJTFRFUl9DT01NIHwgRklMVEVSX01PRFVMRSkpKVxuIFx0XHRyZXR1cm4gRklMVEVSX01BVENIO1xuIFxuLVx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4tXHRpZiAoIWNvbW0pXG4tXHRcdHJldHVybiBGSUxURVJfRVJST1I7XG4tXG4tXHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0aWYgKGZpbHRlciBcdTAwMjYgRklMVEVSX0NPTU0pIHtcbitcdFx0Y29tbSA9IGdldF9jb21tKGJ1Zik7XG4rXHRcdGlmICghY29tbSlcbitcdFx0XHRyZXR1cm4gRklMVEVSX0VSUk9SO1xuK1x0XHRpZiAoIW1hdGNoX3N0cl9saXN0KGNvbW0sIGZjLmNvbW1zLCBmYy5jb21tc19zaXplKSkge1xuK1x0XHRcdGZyZWUoY29tbSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4gXHRcdGZyZWUoY29tbSk7XG4tXHRcdHJldHVybiBGSUxURVJfU0tJUDtcbiBcdH1cbi1cdGZyZWUoY29tbSk7XG4rXHRpZiAoZmlsdGVyIFx1MDAyNiBGSUxURVJfTU9EVUxFKSB7XG4rXHRcdG1vZHVsZSA9IGdldF9tb2R1bGUoYnVmKTtcbitcdFx0aWYgKCFtb2R1bGUpXG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9FUlJPUjtcbitcdFx0aWYgKCFtYXRjaF9zdHJfbGlzdChtb2R1bGUsIGZjLm1vZHVsZXMsIGZjLm1vZHVsZXNfc2l6ZSkpIHtcbitcdFx0XHRmcmVlKG1vZHVsZSk7XG4rXHRcdFx0cmV0dXJuIEZJTFRFUl9TS0lQO1xuK1x0XHR9XG4rXHRcdGZyZWUobW9kdWxlKTtcbitcdH1cbiBcdHJldHVybiBGSUxURVJfTUFUQ0g7XG4gfVxuIFxuQEAgLTU0Nyw2ICs1OTIsMTIgQEAgc3RhdGljIGJvb2wgYWRkX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCBjaGFyICpleHRfYnVmKVxuIFx0XHRsaXN0W2xpc3Rfc2l6ZV0uc3RhY2t0cmFjZSsrO1xuIFx0bGlzdFtsaXN0X3NpemVdLnRzX25zZWMgPSBnZXRfdHNfbnNlYyhidWYpO1xuIFx0bGlzdFtsaXN0X3NpemVdLmFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoYnVmLCBleHRfYnVmKTtcbitcdGxpc3RbbGlzdF9zaXplXS5tb2R1bGUgPSBnZXRfbW9kdWxlKGJ1Zik7XG4rXHRpZiAoIWxpc3RbbGlzdF9zaXplXS5tb2R1bGUpIHtcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwiT3V0IG9mIG1lbW9yeVxcblwiKTtcbitcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbbGlzdF9zaXplXSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcdGxpc3Rfc2l6ZSsrO1xuIFx0aWYgKGxpc3Rfc2l6ZSAlIDEwMDAgPT0gMCkge1xuIFx0XHRwcmludGYoXCJsb2FkZWQgJWRcXHJcIiwgbGlzdF9zaXplKTtcbkBAIC01NzMsNiArNjI0LDggQEAgc3RhdGljIGJvb2wgcGFyc2VfY3VsbF9hcmdzKGNvbnN0IGNoYXIgKmFyZ19zdHIpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX1NUQUNLVFJBQ0U7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0Y3VsbCB8PSBDVUxMX0FMTE9DQVRPUjtcbitcdFx0ZWxzZSBpZiAoYXJnX3R5cGUgPT0gQVJHX01PRFVMRSlcbitcdFx0XHRjdWxsIHw9IENVTExfTU9EVUxFO1xuIFx0XHRlbHNlIHtcbiBcdFx0XHRmcmVlX2V4cGxvZGUoYXJncywgc2l6ZSk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuQEAgLTYzNSw2ICs2ODgsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZV9zb3J0X2FyZ3MoY29uc3QgY2hhciAqYXJnX3N0cilcbiBcdFx0XHRzYy5jbXBzW2ldID0gY29tcGFyZV90eHQ7XG4gXHRcdGVsc2UgaWYgKGFyZ190eXBlID09IEFSR19BTExPQ0FUT1IpXG4gXHRcdFx0c2MuY21wc1tpXSA9IGNvbXBhcmVfYWxsb2NhdG9yO1xuK1x0XHRlbHNlIGlmIChhcmdfdHlwZSA9PSBBUkdfTU9EVUxFKVxuK1x0XHRcdHNjLmNtcHNbaV0gPSBjb21wYXJlX21vZHVsZTtcbiBcdFx0ZWxzZSB7XG4gXHRcdFx0ZnJlZV9leHBsb2RlKGFyZ3MsIHNpemUpO1xuIFx0XHRcdHNjLnNpemUgPSAwO1xuQEAgLTY5MSw3ICs3NDYsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi1wXFx0XFx0XFx0U29ydCBieSBwaWQuXFxuXCJcbiBcdFx0XCItUFxcdFxcdFxcdFNvcnQgYnkgdGdpZC5cXG5cIlxuIFx0XHRcIi1zXFx0XFx0XFx0U29ydCBieSB0aGUgc3RhY2t0cmFjZS5cXG5cIlxuLVx0XHRcIi10XFx0XFx0XFx0U29ydCBieSBudW1iZXIgb2YgdGltZXMgcmVjb3JkIGlzIHNlZW4gKGRlZmF1bHQpLlxcblxcblwiXG4rXHRcdFwiLXRcXHRcXHRcXHRTb3J0IGJ5IG51bWJlciBvZiB0aW1lcyByZWNvcmQgaXMgc2VlbiAoZGVmYXVsdCkuXFxuXCJcbitcdFx0XCItTVxcdFxcdFxcdFNvcnQgYnkgbW9kdWxlIG5hbWUuXFxuXFxuXCJcbiBcdFx0XCItLXBpZCBcdTAwM2NwaWRsaXN0XHUwMDNlXFx0XFx0U2VsZWN0IGJ5IHBpZC4gVGhpcyBzZWxlY3RzIHRoZSBpbmZvcm1hdGlvblwiXG4gXHRcdFwiIG9mXFxuXFx0XFx0XFx0YmxvY2tzIHdob3NlIHByb2Nlc3MgSUQgbnVtYmVycyBhcHBlYXIgaW4gXHUwMDNjcGlkbGlzdFx1MDAzZS5cXG5cIlxuIFx0XHRcIi0tdGdpZCBcdTAwM2N0Z2lkbGlzdFx1MDAzZVxcdFNlbGVjdCBieSB0Z2lkLiBUaGlzIHNlbGVjdHMgdGhlIGluZm9ybWF0aW9uXCJcbkBAIC03MDAsMTEgKzc1NiwyMSBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKVxuIFx0XHRcIi0tbmFtZSBcdTAwM2NjbWRsaXN0XHUwMDNlXFx0U2VsZWN0IGJ5IGNvbW1hbmQgbmFtZS4gVGhpcyBzZWxlY3RzIHRoZVwiXG4gXHRcdFwiIGluZm9ybWF0aW9uXFxuXFx0XFx0XFx0b2YgYmxvY2tzIHdob3NlIGNvbW1hbmQgbmFtZSBhcHBlYXJzIGluXCJcbiBcdFx0XCIgXHUwMDNjY21kbGlzdFx1MDAzZS5cXG5cIlxuLVx0XHRcIi0tY3VsbCBcdTAwM2NydWxlc1x1MDAzZVxcdFxcdEN1bGwgYnkgdXNlci1kZWZpbmVkIHJ1bGVzLiBcdTAwM2NydWxlc1x1MDAzZSBpcyBhIFwiXG4tXHRcdFwic2luZ2xlXFxuXFx0XFx0XFx0YXJndW1lbnQgaW4gdGhlIGZvcm0gb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBcIlxuLVx0XHRcIndpdGggc29tZVxcblxcdFxcdFxcdGNvbW1vbiBmaWVsZHMgcHJlZGVmaW5lZCAocGlkLCB0Z2lkLCBjb21tLCBcIlxuLVx0XHRcInN0YWNrdHJhY2UsIGFsbG9jYXRvcilcXG5cIlxuK1x0XHRcIi0tbW9kdWxlIFx1MDAzY21vZGxpc3RcdTAwM2VcXHRTZWxlY3QgYnkgbW9kdWxlIG5hbWUuIFRoaXMgc2VsZWN0cyB0aGUgaW5mb3JtYXRpb25cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdG9mIGJsb2NrcyB3aG9zZSBtb2R1bGUgbmFtZSBhcHBlYXJzIGluIFx1MDAzY21vZGxpc3RcdTAwM2UuXFxuXCJcbitcdFx0XCItLWN1bGwgXHUwMDNjcnVsZXNcdTAwM2VcXHRcXHRDdWxsIGJ5IHVzZXItZGVmaW5lZCBydWxlcy4gXHUwMDNjcnVsZXNcdTAwM2UgaXMgYSBzaW5nbGVcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGFyZ3VtZW50IGluIHRoZSBmb3JtIG9mIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCBzb21lXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRjb21tb24gZmllbGRzIHByZWRlZmluZWQgKHBpZCwgdGdpZCwgY29tbSwgc3RhY2t0cmFjZSwgYWxsb2NhdG9yLCBtb2R1bGUpXFxuXCJcbiBcdFx0XCItLXNvcnQgXHUwMDNjb3JkZXJcdTAwM2VcXHRcXHRTcGVjaWZ5IHNvcnQgb3JkZXIgYXM6IFsrfC1da2V5WyxbK3wtXWtleVssLi4uXV1cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEF2YWlsYWJsZSBrZXlzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICBwaWQocCksIHRnaWQodGcpLCBuYW1lKG4pLCBzdGFja3RyYWNlKHN0KSxcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdCAgdHh0KFQpLCBhbGxvY190cyhhdCksIGFsbG9jYXRvcihhdG9yKSwgbW9kdWxlKG1vZClcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdFRoZSBcXFwiK1xcXCIgaXMgb3B0aW9uYWwgc2luY2UgZGVmYXVsdCBkaXJlY3Rpb24gaXNcXG5cIlxuK1x0XHRcIlxcdFxcdFxcdGluY3JlYXNpbmcgbnVtZXJpY2FsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIuXFxuXCJcbitcdFx0XCJcXHRcXHRcXHRNaXhlZCB1c2Ugb2YgYWJicmV2aWF0ZWQgYW5kIGNvbXBsZXRlLWZvcm0gaXMgYWxsb3dlZC5cXG5cIlxuK1x0XHRcIlxcdFxcdFxcdEV4YW1wbGVzOlxcblwiXG4rXHRcdFwiXFx0XFx0XFx0ICAtLXNvcnQ9biwrcGlkLC10Z2lkXFxuXCJcbitcdFx0XCJcXHRcXHRcXHQgIC0tc29ydD1tb2QsYXRcXG5cIlxuIFx0KTtcbiB9XG4gXG5AQCAtNzIxLDEzICs3ODcsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHR7IFwibmFtZVwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMyB9LFxuIFx0XHR7IFwiY3VsbFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNCB9LFxuIFx0XHR7IFwic29ydFwiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNSB9LFxuK1x0XHR7IFwibW9kdWxlXCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2IH0sXG4gXHRcdHsgXCJoZWxwXCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCcgfSxcbiBcdFx0eyAwLCAwLCAwLCAwfSxcbiBcdH07XG4gXG4gXHRjb21wYXJlX2ZsYWcgPSBDT01QX05PX0ZMQUc7XG4gXG4tXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBoXCIsIGxvbmdvcHRzLCBOVUxMKSkgIT0gLTEpXG4rXHR3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIFwiYWRtbnBzdFBNaFwiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKVxuIFx0XHRzd2l0Y2ggKG9wdCkge1xuIFx0XHRjYXNlICdhJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9BTExPQztcbkBAIC03NTMsNiArODIwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRjYXNlICduJzpcbiBcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9DT01NO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlICdNJzpcbitcdFx0XHRjb21wYXJlX2ZsYWcgfD0gQ09NUF9NT0RVTEU7XG4rXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgJ2gnOlxuIFx0XHRcdHVzYWdlKCk7XG4gXHRcdFx0ZXhpdCgwKTtcbkBAIC03OTIsNiArODYyLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiBcdFx0XHRcdGV4aXQoMSk7XG4gXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIDY6XG4rXHRcdFx0ZmlsdGVyID0gZmlsdGVyIHwgRklMVEVSX01PRFVMRTtcbitcdFx0XHRmYy5tb2R1bGVzID0gZXhwbG9kZSgnLCcsIG9wdGFyZywgXHUwMDI2ZmMubW9kdWxlc19zaXplKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHR1c2FnZSgpO1xuIFx0XHRcdGV4aXQoMSk7XG5AQCAtODIxLDYgKzg5NSwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdHNldF9zaW5nbGVfY21wKGNvbXBhcmVfc3RhY2t0cmFjZSwgU09SVF9BU0MpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQ09NUF9OT19GTEFHOlxuK1x0XHRpZiAoc2Muc2l6ZSBcdTAwM2UgMClcbitcdFx0XHRicmVhaztcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4rXHRcdGJyZWFrO1xuIFx0Y2FzZSBDT01QX05VTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9udW0sIFNPUlRfREVTQyk7XG4gXHRcdGJyZWFrO1xuQEAgLTgzMCw2ICs5MDgsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjYXNlIENPTVBfQ09NTTpcbiBcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9jb21tLCBTT1JUX0FTQyk7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBDT01QX01PRFVMRTpcbitcdFx0c2V0X3NpbmdsZV9jbXAoY29tcGFyZV9tb2R1bGUsIFNPUlRfQVNDKTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR1c2FnZSgpO1xuIFx0XHRleGl0KDEpO1xuQEAgLTg1Myw2ICs5MzQsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdGdvdG8gb3V0X2NvbW07XG4gXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2dHNfbnNlY19wYXR0ZXJuLCBcInRzXFxcXHMqKFswLTldKilcXFxccypuc1wiKSlcbiBcdFx0Z290byBvdXRfdHM7XG4rXHRpZiAoIWNoZWNrX3JlZ2NvbXAoXHUwMDI2bW9kdWxlX3BhdHRlcm4sIFwiXFxcXFsoW2EtekEtWjAtOV9dKylcXFxcXVwiKSlcbitcdFx0Z290byBvdXRfbW9kdWxlO1xuIFxuIFx0ZnN0YXQoZmlsZW5vKGZpbiksIFx1MDAyNnN0KTtcbiBcdG1heF9zaXplID0gc3Quc3Rfc2l6ZSAvIDEwMDsgLyogaGFjayAuLi4gKi9cbkBAIC05MTEsNiArOTk0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuIFx0XHRcdFx0ZnByaW50Zihmb3V0LCBcIiwgVEdJRCAlZFwiLCBsaXN0W2ldLnRnaWQpO1xuIFx0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX0NPTU0gfHwgZmlsdGVyIFx1MDAyNiBGSUxURVJfQ09NTSlcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIHRhc2tfY29tbV9uYW1lOiAlc1wiLCBsaXN0W2ldLmNvbW0pO1xuK1x0XHRcdGlmIChjdWxsIFx1MDAyNiBDVUxMX01PRFVMRSB8fCBmaWx0ZXIgXHUwMDI2IEZJTFRFUl9NT0RVTEUpXG4rXHRcdFx0XHRmcHJpbnRmKGZvdXQsIFwiLCBtb2R1bGU6ICVzXCIsIGxpc3RbaV0ubW9kdWxlKTtcbiBcdFx0XHRpZiAoY3VsbCBcdTAwMjYgQ1VMTF9BTExPQ0FUT1IpIHtcbiBcdFx0XHRcdGZwcmludGYoZm91dCwgXCIsIFwiKTtcbiBcdFx0XHRcdHByaW50X2FsbG9jYXRvcihmb3V0LCBsaXN0W2ldLmFsbG9jYXRvcik7XG5AQCAtOTMxLDYgKzEwMTYsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRcdFx0ZnJlZV9ibG9ja19saXN0KFx1MDAyNmxpc3RbaV0pO1xuIFx0XHRmcmVlKGxpc3QpO1xuIFx0fVxuK291dF9tb2R1bGU6XG4rXHRyZWdmcmVlKFx1MDAyNm1vZHVsZV9wYXR0ZXJuKTtcbiBvdXRfdHM6XG4gXHRyZWdmcmVlKFx1MDAyNnRzX25zZWNfcGF0dGVybik7XG4gb3V0X2NvbW06XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQyMTozOTo1My44MzYyMDc2ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg5MzU2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogQSBVc2Vyc3BhY2UgVG9vbCBFbmhhbmNlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBicmFpbiB6ZXJvZXMgaW4gb24gdGhlIGtleSBmaWxlczogYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLiBSaWdodCBhd2F5LCB0aGlzIHNjcmVhbXMgKnVzZXJzcGFjZSouIFRoZSBwYXRjaCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBtb2R1bGUgbmFtZSBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUgYHBhZ2Vfb3duZXJfc29ydGAgdG9vbC4gSSBrbm93IHRoYXQgdG9vbDsgaXQncyBlbnRpcmVseSB1c2Vyc3BhY2UuXG5cbkxldCBtZSBqdXN0IGJlIGFic29sdXRlbHkgc3VyZS4uLiBoYW5nIG9uLCBkb3VibGUtY2hlY2tpbmfigKYgeWVwLCB0aGUgZGlmZiBvbmx5IHNob3dzIHRob3NlIHR3byBmaWxlcy4gTm8ga2VybmVsIGNvZGUuIFBlcmZlY3QuXG5cblNpbmNlIHRoaXMgcGF0Y2ggaXMgKnNvbGVseSogY29uY2VybmVkIHdpdGggYSB1c2Vyc3BhY2UgdXRpbGl0eSBhbmQgdXBkYXRpbmcgaXRzIGRvY3VtZW50YXRpb24sIGl0IGxvZ2ljYWxseSBmb2xsb3dzIHRoYXQgaXQgZG9lc24ndCBhZmZlY3QgYW55IGtlcm5lbCBmdW5jdGlvbmFsaXR5IHRoYXQgd291bGQgd2FycmFudCBmdXp6aW5nLiBUaGVyZSBhcmUgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMgdG8gaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcy4gTm8ga2VybmVsLWxldmVsIGNoYW5nZXMgbWVhbnMgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Pa2F5LCBkb3VibGUgY2hlY2suLi4gYERvY3VtZW50YXRpb24vbW0vcGFnZV9vd25lci5yc3RgIGFuZCBgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNgLi4uIGNvbmZpcm1lZC5cblxuVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLiBUaGUgcGF0Y2gncyBzY29wZSBpcyBzdHJpY3RseSBjb25maW5lZCB0byBhIHVzZXJzcGFjZSB0b29sLCBhbmQgaXRzIGRvY3VtZW50YXRpb24uIE5vIGtlcm5lbCBtb2RpZmljYXRpb25zIG1lYW5zIGl0J3Mgbm90IGEgY2FuZGlkYXRlIGZvciBrZXJuZWwgZnV6emluZy4gSSB3aWxsIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtYXJrIGl0IGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTUzLCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMjE6Mzk6NTkuMTI1NTY1NzQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGEgdXNlcnNwYWNlIHRvb2wgKHRvb2xzL21tL3BhZ2Vfb3duZXJfc29ydC5jKSBhbmQgaXRzIGRvY3VtZW50YXRpb24uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZiwgc28gdGhlcmUgaXMgbm90aGluZyB0byBmdXp6IGluIHRoZSBrZXJuZWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5s8cg[1] Phase: Running StartedAt: 2026-07-22 21:40:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5s8cg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 21:40:10 +0000 UTC FinishedAt: 2026-07-22 21:40:20 +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,}