Name: series-workflow5f778 Phase: Failed StartedAt: 2026-08-31 14:33:29 +0000 UTC FinishedAt: 2026-08-31 14:56:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f778[0] Phase: Succeeded StartedAt: 2026-08-31 14:33:29 +0000 UTC FinishedAt: 2026-08-31 14:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f778[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 14:33:29 +0000 UTC FinishedAt: 2026-08-31 14:56:45 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWZkYzcyYzM5ODZjZGEyNjc2YmY0ODk5YmZjYTczNTI0MGE2Y2IxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE0OjUwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbiYjNDM7XHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XG4gXHRjaGFyIHBhdGhbXTtcbiB9O1xuIFxuQEAgLTU4MDMsNiAmIzQzOzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcbiYjNDM7XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICoqbmFtZXM7XG4mIzQzO1x0c2l6ZV90IGksIGosIGNudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICghbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgb25lIGVudHJ5IGZvciBhbiBlbXB0eSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlXG4mIzQzO1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgbGlzdCBpcyBleHBlY3RlZCB0byBiZSBzbWFsbCwgc28gYSBzaW1wbGUgbmVzdGVkIHNjYW4gaXNcbiYjNDM7XHRcdCAqIHN1ZmZpY2llbnQgZm9yIGR1cGxpY2F0ZSBkZXRlY3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4mIzQzO1x0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTgyNSw2ICYjNDM7NTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgJiM0Mzs1OTcwLDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MTksMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3NDQsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMWNhYmY3ZTQ2NTU0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbiYjNDM7XHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcbiYjNDM7XHQgKiBjb250YWluIGR1cGxpY2F0ZSBlbnRyaWVzOyBvdGhlcndpc2UgLUVJTlZBTCBpcyByZXR1cm5lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWZmZWN0czpcbiYjNDM7XHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbiYjNDM7XHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzO1xuJiM0MztcdCAqIC0gbW9kdWxlLXF1YWxpZmllZCB0cmFjaW5nIG11bHRpLWF0dGFjaCB0YXJnZXRzO1xuJiM0MztcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuJiM0MztcdCAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4mIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42OGY0YThkNzM1NjA4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXMuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2xvYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0c2tlbCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4mIzQzOyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4mIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgTlVMTCB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC8qIE5vbi1OVUxMIHBvaW50ZXIgd2l0aCB6ZXJvIGVudHJpZXMgcmVwcmVzZW50cyBhbiBlbXB0eSBsaXN0LiAqL1xuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDAsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FU1JDSCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuJiM0MztcdGNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7IFwmIzM0O1wmIzM0OyB9O1xuJiM0MztcdGNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0ge1xuJiM0MztcdFx0XCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LFxuJiM0MztcdH07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4mIzQzO1x0XHQgIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBudWxsXCYjMzQ7KTtcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcbiYjNDM7XHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBlbXB0eV9uYW1lcztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcJiMzNDspO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1xuJiM0MztcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGR1cGxpY2F0ZV9uYW1lcztcbiYjNDM7XHRvcHRzLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAyO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4mIzQzO1x0XHQgIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnRmICptb2R1bGVfYnRmID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0aWYgKGxpYmJwZl9nZXRfZXJyb3Iodm1saW51eF9idGYpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi9cbiYjNDM7XHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIHZtbGludXhfYnRmKTtcbiYjNDM7XHRpZiAobGliYnBmX2dldF9lcnJvcihtb2R1bGVfYnRmKSkge1xuJiM0MztcdFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ0Zl9fZnJlZShtb2R1bGVfYnRmKTtcbiYjNDM7XHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmRjNzJjMzk4NmNkYTI2NzZiZjQ4OTliZmNhNzM1MjQwYTZjYjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTQ6NTA6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CWNoYXIgKipidGZfbW9kdWxlX25hbWVzOwomIzQzOwlzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lczsKJiM0MzsKIAljaGFyIHBhdGhbXTsKIH07CiAKQEAgLTU4MDMsNiAmIzQzOzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpOwomIzQzOwlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKm5hbWVzOwomIzQzOwlzaXplX3QgaSwgaiwgY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpOwomIzQzOwlpZiAoIW5hbWVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGxvY2F0ZSBvbmUgZW50cnkgZm9yIGFuIGVtcHR5IGxpc3QgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUKJiM0MzsJICogZGVmYXVsdCBiZWhhdmlvci4KJiM0MzsJICovCiYjNDM7CW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSwKJiM0MzsJCQkJICAgICAgIHNpemVvZigqb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKSk7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XG4mIzM0OywgaSk7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGxpc3QgaXMgZXhwZWN0ZWQgdG8gYmUgc21hbGwsIHNvIGEgc2ltcGxlIG5lc3RlZCBzY2FuIGlzCiYjNDM7CQkgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLgomIzQzOwkJICovCiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgaTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RyY21wKG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHsKJiM0MzsJCQkJcHJfd2FybigmIzM0O2R1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssCiYjNDM7CQkJCQluYW1lc1tpXSk7CiYjNDM7CQkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZXJyX291dDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0gPSBzdHJkdXAobmFtZXNbaV0pOwomIzQzOwkJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0pIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBpOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHN0cmNtcChvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfZGVidWcoJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcbiYjMzQ7LCBuYW1lKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBub19tb2R1bGVfYnRmc19uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiBvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgJmFtcDsmYW1wOyAhb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLSZndDtidGZfbW9kdWxlX2NudDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87CkBAIC01ODI1LDYgJiM0Mzs1OTI1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJaWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAl3aGlsZSAodHJ1ZSkgewogCQllcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCAmYW1wO2lkKTsKIAkJaWYgKGVyciAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCkKQEAgLTU4NjcsNiAmIzQzOzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewpAQCAtNTg5MSw2ICYjNDM7NTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSkKJiM0MzsJCQlicmVhazsKIAl9CiAKIAlpZiAoZXJyKSB7CkBAIC04NTA4LDYgJiM0Mzs4NjE5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJCX0KIAl9CiAKJiM0MzsJZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7CkBAIC05NjI5LDYgJiM0Mzs5NzQ0LDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQljbG9zZShvYmotJmd0O2p1bXB0YWJsZV9tYXBzW2ldLmZkKTsKIAl6ZnJlZSgmYW1wO29iai0mZ3Q7anVtcHRhYmxlX21hcHMpOwogCiYjNDM7CWJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7CiYjNDM7CiAJZnJlZShvYmopOwogfQogCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaAppbmRleCBiOTY1YWQ1NzE1NDAzLi4xY2FiZjdlNDY1NTQ2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKQEAgLTIyNCwxMCAmIzQzOzIyNCwzMiBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgewogCSAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLgogCSAqLwogCWNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoOwomIzQzOwkvKgomIzQzOwkgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLgomIzQzOwkgKiBucl9idGZfbW9kdWxlX25hbWVzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KJiM0MzsJICogYnRmX21vZHVsZV9uYW1lcy4KJiM0MzsJICoKJiM0MzsJICogV2l0aCBidGZfbW9kdWxlX25hbWVzOgomIzQzOwkgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7CiYjNDM7CSAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkOwomIzQzOwkgKiAtIHdoZW4gTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQgYXMgYmVmb3JlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90CiYjNDM7CSAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzOwomIzQzOwkgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0czsKJiM0MzsJICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247CiYjNDM7CSAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lcwogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42OGY0YThkNzM1NjA4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsJc2tlbCA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW0KJiM0MzsgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpbgomIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FU1JDSCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlcXVpcmVzIGJwZl90ZXN0bW9kIEJURiwgc28gaXQgZmFpbHMgdG8gbG9hZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBOVUxMIH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLyogTm9uLU5VTEwgcG9pbnRlciB3aXRoIHplcm8gZW50cmllcyByZXByZXNlbnRzIGFuIGVtcHR5IGxpc3QuICovCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMCwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHkmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9OwomIzQzOwljb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyAmIzM0OyYjMzQ7IH07CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0gewomIzQzOwkJJiMzNDticGZfdGVzdG1vZCYjMzQ7LCAmIzM0O2JwZl90ZXN0bW9kJiMzNDssCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCwKJiM0MzsJCSAgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsKJiM0MzsJb3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5JiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwlvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7CiYjNDM7CW9wdHMubnJfYnRmX21vZHVsZV9uYW1lcyA9IDI7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGR1cGxpY2F0ZSBuYW1lJiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnRmICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwomIzQzOwlpZiAobGliYnBmX2dldF9lcnJvcih2bWxpbnV4X2J0ZikpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi8KJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAobGliYnBmX2dldF9lcnJvcihtb2R1bGVfYnRmKSkgewomIzQzOwkJYnRmX19mcmVlKHZtbGludXhfYnRmKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlidGZfX2ZyZWUobW9kdWxlX2J0Zik7CiYjNDM7CWJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19sb2FkKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19za2lwJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eSYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX25hbWVzX2ludmFsaWQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OAoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTm8gS2VybmVsLUxldmVsIEZ1enppbmcgTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJJiMzOTttIG5vdGluZyBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIGZpbGVzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSB1c2VyLXNwYWNlIGZvY3VzZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBjaGFuZ2VzIGhlcmUgYXJlIHZlcnkgdW5saWtlbHkgdG8gcmVxdWlyZSBrZXJuZWwgZnV6emluZywgYnV0IEkmIzM5O2xsIGNvbmZpcm0uCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGNoYW5nZXMgdG8gYERvY3VtZW50YXRpb24vYCwgYEtjb25maWdgLCBjb21tZW50cywgbG9nZ2luZywgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycywgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBNb3JlIGltcG9ydGFudGx5LCBpdCBoaWdobGlnaHRzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUgKmNvcmUga2VybmVsIGxvZ2ljKiwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyBhcmUgdGhlIGtleSBmb2N1cy4KCk15IHF1aWNrIHNjYW4gc2hvd3Mgbm8gbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGRlZmluaXRlbHkgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMuIFNvLCBga2VybmVsL2AsIGBuZXQvYCwgYGRyaXZlcnMvYCwgYGZzL2AsIGBhcmNoL2AsIGFuZCBgaW5jbHVkZS9gIGFyZSBhbGwgdW50b3VjaGVkLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBmaWxlIGxpc3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkmIzM5O3ZlIGdvdCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY2AuIFllcCwgYWxsIHVuZGVyIGB0b29scy9gLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBhZGRpbmcgZmlsdGVyaW5nIHN1cHBvcnQgZm9yIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzIHdpdGhpbiBsaWJicGYgYW5kIHNlbGZ0ZXN0cywgd2hpY2ggYXJlIHVzZXItc3BhY2UgY29tcG9uZW50cywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgdGhhdCB3b3VsZCByZXF1aXJlIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoqICAgV29ydGhGdXp6aW5nOiBmYWxzZQoqICAgRW5hYmxlQ29uZmlnczogXFsgXSAoSSBkb24mIzM5O3Qgc2VlIGFueSBjb25maWcgY2hhbmdlcykKKiAgIEZvY3VzU3ltYm9sczogXFsgXSAoSXJyZWxldmFudCBmb3IgYSBwYXRjaCBvZiB0aGlzIHR5cGUpCiogICBSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgaW4gbGliYnBmLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZS4mIzM0OwoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb21wb25lbnRzICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBzdXBwb3J0IGZvciBmaWx0ZXJpbmcga2VybmVsIG1vZHVsZSBCVEYgbG9hZGluZyBpbiBsaWJicGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1MDoxNS44Njg4MTA0MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY5NTYyMDg5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE0OjUwOjE1Ljg2ODgxNTI3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjU2NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWZkYzcyYzM5ODZjZGEyNjc2YmY0ODk5YmZjYTczNTI0MGE2Y2IxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNDo1MDoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLmUxOWQwYWZkMjU5MjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcXG4gXFx0Y2hhciAqdG9rZW5fcGF0aDtcXG4gXFx0aW50IHRva2VuX2ZkO1xcbiBcXG4rXFx0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKylcXG4rXFx0XFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XFxuK1xcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpO1xcbitcXHRvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqKm5hbWVzO1xcbitcXHRzaXplX3QgaSwgaiwgY250O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmFtZXMgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX25hbWVzLCBOVUxMKTtcXG4rXFx0aWYgKCFuYW1lcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjbnQgPSBPUFRTX0dFVChvcHRzLCBucl9idGZfbW9kdWxlX25hbWVzLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxcbitcXHQgKiBkZWZhdWx0IGJlaGF2aW9yLlxcbitcXHQgKi9cXG4rXFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIHNtYWxsLCBzbyBhIHNpbXBsZSBuZXN0ZWQgc2NhbiBpc1xcbitcXHRcXHQgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKykge1xcbitcXHRcXHRcXHRpZiAoc3RyY21wKG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJyVzJ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bmFtZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcXG4rXFx0XFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMrKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRwcl9kZWJ1ZyhcXFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcXFxuXFxcIiwgbmFtZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbm9fbW9kdWxlX2J0ZnNfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNiAhb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbit7XFxuK1xcdHJldHVybiBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4MjUsNiArNTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKG5vX21vZHVsZV9idGZzX25lZWRlZChvYmopKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdGVyciA9IGJwZl9idGZfZ2V0X25leHRfaWQoaWQsIFxcdTAwMjZpZCk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5PRU5UKVxcbkBAIC01ODY3LDYgKzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU4OTEsNiArNTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtODUwOCw2ICs4NjE5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopO1xcbiBcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XFxuQEAgLTk2MjksNiArOTc0NCw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0Y2xvc2Uob2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XFxuIFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcXG4gXFxuK1xcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XFxuK1xcbiBcXHRmcmVlKG9iaik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMWNhYmY3ZTQ2NTU0NiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbkBAIC0yMjQsMTAgKzIyNCwzMiBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xcbiBcXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cXG4gXFx0ICovXFxuIFxcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xcbitcXHQvKlxcbitcXHQgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLlxcbitcXHQgKiBucl9idGZfbW9kdWxlX25hbWVzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW5cXG4rXFx0ICogYnRmX21vZHVsZV9uYW1lcy5cXG4rXFx0ICpcXG4rXFx0ICogV2l0aCBidGZfbW9kdWxlX25hbWVzOlxcbitcXHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XFxuK1xcdCAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkO1xcbitcXHQgKiAtIHdoZW4gTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQgYXMgYmVmb3JlLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90XFxuK1xcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGFmZmVjdHM6XFxuK1xcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xcbitcXHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzO1xcbitcXHQgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0cztcXG4rXFx0ICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247XFxuK1xcdCAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcXG4rXFx0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBucl9idGZfbW9kdWxlX25hbWVzXFxuIFxcbiAvKipcXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4ZjRhOGQ3MzU2MDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXFxuQEAgLTAsMCArMSwxNjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJ0Zl9tb2R1bGVfbmFtZXMuc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHQvKiBWZXJpZnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi9cXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGRlZmF1bHRcXFwiKTtcXG4rXFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHNrZWwgPSBOVUxMO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcXFwiKTtcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiB1bnJlcXVlc3RlZCBtb2R1bGUgQlRGIGlzIHNraXBwZWQuIFRoZSBCUEYgcHJvZ3JhbVxcbisgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpblxcbisgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcXG4rICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgTlVMTCB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC8qIE5vbi1OVUxMIHBvaW50ZXIgd2l0aCB6ZXJvIGVudHJpZXMgcmVwcmVzZW50cyBhbiBlbXB0eSBsaXN0LiAqL1xcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcXG4rXFx0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXFxcIlxcXCIgfTtcXG4rXFx0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XFxuK1xcdFxcdFxcXCJicGZfdGVzdG1vZFxcXCIsIFxcXCJicGZfdGVzdG1vZFxcXCIsXFxuK1xcdH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBudWxsXFxcIik7XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcbitcXHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBlbXB0eV9uYW1lcztcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxcbitcXHRcXHQgIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGR1cGxpY2F0ZV9uYW1lcztcXG4rXFx0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxcbitcXHRcXHQgIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZHVwbGljYXRlIG5hbWVcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xcbitcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGlmIChsaWJicGZfZ2V0X2Vycm9yKHZtbGludXhfYnRmKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXFxuK1xcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcXFwiYnBmX3Rlc3Rtb2RcXFwiLCB2bWxpbnV4X2J0Zik7XFxuK1xcdGlmIChsaWJicGZfZ2V0X2Vycm9yKG1vZHVsZV9idGYpKSB7XFxuK1xcdFxcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XFxuK1xcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE0OjUwOjE2LjQ5ODAzNDY3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY2MzI2OTczMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFmZGM3MmMzOTg2Y2RhMjY3NmJmNDg5OWJmY2E3MzUyNDBhNmNiMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNDo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICs3NzksOSBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuK1x0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICs1ODA2LDEwMyBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4rXHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqbmFtZXM7XG4rXHRzaXplX3QgaSwgaiwgY250O1xuK1x0aW50IGVycjtcbitcbitcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XG4rXHRpZiAoIW5hbWVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuK1xuK1x0LypcbitcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxuK1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbitcdCAqL1xuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsXG4rXHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuK1x0XHRcdHByX3dhcm4oXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCIsIGkpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIHNtYWxsLCBzbyBhIHNpbXBsZSBuZXN0ZWQgc2NhbiBpc1xuK1x0XHQgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxuK1x0XHQgKi9cbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKSB7XG4rXHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbitcdFx0XHRcdHByX3dhcm4oXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxuXCIsXG4rXHRcdFx0XHRcdG5hbWVzW2ldKTtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbitcdFx0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHByX2RlYnVnKFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbm9fbW9kdWxlX2J0ZnNfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4rfVxuK1xuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4MjUsNiArNTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChub19tb2R1bGVfYnRmc19uZWVkZWQob2JqKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgKzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19tb2R1bGVfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICs1OTk5LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiArODYxOSwxMCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRlcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcbkBAIC05NjI5LDYgKzk3NDQsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcbiBcdGZyZWUob2JqKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjFjYWJmN2U0NjU1NDYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5AQCAtMjI0LDEwICsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbitcdC8qXG4rXHQgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLlxuK1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4rXHQgKiBidGZfbW9kdWxlX25hbWVzLlxuK1x0ICpcbitcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbitcdCAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDtcbitcdCAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkO1xuK1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbitcdCAqXG4rXHQgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90XG4rXHQgKiBjb250YWluIGR1cGxpY2F0ZSBlbnRyaWVzOyBvdGhlcndpc2UgLUVJTlZBTCBpcyByZXR1cm5lZC5cbitcdCAqXG4rXHQgKiBUaGlzIGFmZmVjdHM6XG4rXHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbitcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgYXR0YWNoIHRhcmdldHM7XG4rXHQgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0cztcbitcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuK1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhmNGE4ZDczNTYwOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDE2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbitcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuK1x0KTtcbitcbitcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFwiKTtcbitcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rXHRza2VsID0gTlVMTDtcbitcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4rICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cbisgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbisgKiBwcm9ncmFtIHJlcXVpcmVzIGJwZl90ZXN0bW9kIEJURiwgc28gaXQgZmFpbHMgdG8gbG9hZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBOVUxMIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LyogTm9uLU5VTEwgcG9pbnRlciB3aXRoIHplcm8gZW50cmllcyByZXByZXNlbnRzIGFuIGVtcHR5IGxpc3QuICovXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDAsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XG4rXHRcdFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuK1x0XHQgIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4rXHRcdCAgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xuK1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbitcdFx0ICBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwiKTtcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0ZiAqdm1saW51eF9idGYgPSBOVUxMO1xuK1x0c3RydWN0IGJ0ZiAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXG4rXHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRpZiAobGliYnBmX2dldF9lcnJvcih2bWxpbnV4X2J0ZikpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi9cbitcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcImJwZl90ZXN0bW9kXCIsIHZtbGludXhfYnRmKTtcbitcdGlmIChsaWJicGZfZ2V0X2Vycm9yKG1vZHVsZV9idGYpKSB7XG4rXHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xuK1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2xvYWQoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19za2lwXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19lbXB0eVwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgKzEsMTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitTRUMoXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTQ6NTA6MTYuNDk4MDM3MTc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2MzI2OTQ2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBObyBLZXJuZWwtTGV2ZWwgRnV6emluZyBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJJ20gbm90aW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBhbmQgZmlsZXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHBvdGVudGlhbGx5IHVzZXItc3BhY2UgZm9jdXNlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGNoYW5nZXMgaGVyZSBhcmUgdmVyeSB1bmxpa2VseSB0byByZXF1aXJlIGtlcm5lbCBmdXp6aW5nLCBidXQgSSdsbCBjb25maXJtLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY2hhbmdlcyB0byBgRG9jdW1lbnRhdGlvbi9gLCBgS2NvbmZpZ2AsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIGRvbid0IHdhcnJhbnQgZnV6emluZy4gTW9yZSBpbXBvcnRhbnRseSwgaXQgaGlnaGxpZ2h0cyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlICpjb3JlIGtlcm5lbCBsb2dpYyosIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBrZXkgZm9jdXMuXG5cbk15IHF1aWNrIHNjYW4gc2hvd3Mgbm8gbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGRlZmluaXRlbHkgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMuIFNvLCBga2VybmVsL2AsIGBuZXQvYCwgYGRyaXZlcnMvYCwgYGZzL2AsIGBhcmNoL2AsIGFuZCBgaW5jbHVkZS9gIGFyZSBhbGwgdW50b3VjaGVkLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBmaWxlIGxpc3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSd2ZSBnb3QgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNgLiBZZXAsIGFsbCB1bmRlciBgdG9vbHMvYC5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGFkZGluZyBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgd2l0aGluIGxpYmJwZiBhbmQgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSBjb21wb25lbnRzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSB0aGF0IHdvdWxkIHJlcXVpcmUgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczpcbiogICBXb3J0aEZ1enppbmc6IGZhbHNlXG4qICAgRW5hYmxlQ29uZmlnczogXFxbIF0gKEkgZG9uJ3Qgc2VlIGFueSBjb25maWcgY2hhbmdlcylcbiogICBGb2N1c1N5bWJvbHM6IFxcWyBdIChJcnJlbGV2YW50IGZvciBhIHBhdGNoIG9mIHRoaXMgdHlwZSlcbiogICBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgaW4gbGliYnBmLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZS5cIlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzgsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1NjoyMi44MjQ5ODY2NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb21wb25lbnRzICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBzdXBwb3J0IGZvciBmaWx0ZXJpbmcga2VybmVsIG1vZHVsZSBCVEYgbG9hZGluZyBpbiBsaWJicGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1NjoyMi44MjUwMTA4NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5f778[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 14:33:29 +0000 UTC FinishedAt: 2026-08-31 14:56:24 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWZkYzcyYzM5ODZjZGEyNjc2YmY0ODk5YmZjYTczNTI0MGE2Y2IxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDE0OjUwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbiYjNDM7XHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XG4gXHRjaGFyIHBhdGhbXTtcbiB9O1xuIFxuQEAgLTU4MDMsNiAmIzQzOzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcbiYjNDM7XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICoqbmFtZXM7XG4mIzQzO1x0c2l6ZV90IGksIGosIGNudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICghbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgb25lIGVudHJ5IGZvciBhbiBlbXB0eSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlXG4mIzQzO1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgbGlzdCBpcyBleHBlY3RlZCB0byBiZSBzbWFsbCwgc28gYSBzaW1wbGUgbmVzdGVkIHNjYW4gaXNcbiYjNDM7XHRcdCAqIHN1ZmZpY2llbnQgZm9yIGR1cGxpY2F0ZSBkZXRlY3Rpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4mIzQzO1x0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTgyNSw2ICYjNDM7NTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgJiM0Mzs1OTcwLDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MTksMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3NDQsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMWNhYmY3ZTQ2NTU0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbiYjNDM7XHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBsaXN0IG11c3QgY29udGFpbiB2YWxpZCwgbm9uLWVtcHR5IG1vZHVsZSBuYW1lcyBhbmQgbXVzdCBub3RcbiYjNDM7XHQgKiBjb250YWluIGR1cGxpY2F0ZSBlbnRyaWVzOyBvdGhlcndpc2UgLUVJTlZBTCBpcyByZXR1cm5lZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgYWZmZWN0czpcbiYjNDM7XHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbiYjNDM7XHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzO1xuJiM0MztcdCAqIC0gbW9kdWxlLXF1YWxpZmllZCB0cmFjaW5nIG11bHRpLWF0dGFjaCB0YXJnZXRzO1xuJiM0MztcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuJiM0MztcdCAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4gXG4gXHRzaXplX3QgOjA7XG4gfTtcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXG4mIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xuIFxuIC8qKlxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi42OGY0YThkNzM1NjA4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXMuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2xvYWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoTlVMTCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1x0c2tlbCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfT0socmV0LCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4mIzQzOyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4mIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgTlVMTCB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC8qIE5vbi1OVUxMIHBvaW50ZXIgd2l0aCB6ZXJvIGVudHJpZXMgcmVwcmVzZW50cyBhbiBlbXB0eSBsaXN0LiAqL1xuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDAsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FU1JDSCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuJiM0MztcdGNvbnN0IGNoYXIgKmVtcHR5X25hbWVzW10gPSB7IFwmIzM0O1wmIzM0OyB9O1xuJiM0MztcdGNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0ge1xuJiM0MztcdFx0XCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LFxuJiM0MztcdH07XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuJiM0MztcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4mIzQzO1x0XHQgIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBudWxsXCYjMzQ7KTtcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcbiYjNDM7XHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBlbXB0eV9uYW1lcztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcJiMzNDspO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO1xuJiM0MztcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGR1cGxpY2F0ZV9uYW1lcztcbiYjNDM7XHRvcHRzLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAyO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4mIzQzO1x0XHQgIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgYnRmICptb2R1bGVfYnRmID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0aWYgKGxpYmJwZl9nZXRfZXJyb3Iodm1saW51eF9idGYpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi9cbiYjNDM7XHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXCYjMzQ7YnBmX3Rlc3Rtb2RcJiMzNDssIHZtbGludXhfYnRmKTtcbiYjNDM7XHRpZiAobGliYnBmX2dldF9lcnJvcihtb2R1bGVfYnRmKSkge1xuJiM0MztcdFx0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGJ0Zl9fZnJlZShtb2R1bGVfYnRmKTtcbiYjNDM7XHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2xvYWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZFwmIzM0OykpXG4mIzQzO1x0XHRidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCAmIzQzOzEsMTMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3RcJiMzNDspXG4mIzQzO2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZmRjNzJjMzk4NmNkYTI2NzZiZjQ4OTliZmNhNzM1MjQwYTZjYjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMTQ6NTA6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CWNoYXIgKipidGZfbW9kdWxlX25hbWVzOwomIzQzOwlzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lczsKJiM0MzsKIAljaGFyIHBhdGhbXTsKIH07CiAKQEAgLTU4MDMsNiAmIzQzOzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCXpmcmVlKCZhbXA7b2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2ldKTsKJiM0MzsJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpOwomIzQzOwlvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqKm5hbWVzOwomIzQzOwlzaXplX3QgaSwgaiwgY250OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwluYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpOwomIzQzOwlpZiAoIW5hbWVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBbGxvY2F0ZSBvbmUgZW50cnkgZm9yIGFuIGVtcHR5IGxpc3QgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUKJiM0MzsJICogZGVmYXVsdCBiZWhhdmlvci4KJiM0MzsJICovCiYjNDM7CW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSwKJiM0MzsJCQkJICAgICAgIHNpemVvZigqb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKSk7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjbnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkgewomIzQzOwkJCXByX3dhcm4oJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XG4mIzM0OywgaSk7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGxpc3QgaXMgZXhwZWN0ZWQgdG8gYmUgc21hbGwsIHNvIGEgc2ltcGxlIG5lc3RlZCBzY2FuIGlzCiYjNDM7CQkgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLgomIzQzOwkJICovCiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgaTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoc3RyY21wKG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHsKJiM0MzsJCQkJcHJfd2FybigmIzM0O2R1cGxpY2F0ZSBrZXJuZWwgbW9kdWxlIEJURiBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssCiYjNDM7CQkJCQluYW1lc1tpXSk7CiYjNDM7CQkJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQkJCWdvdG8gZXJyX291dDsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0gPSBzdHJkdXAobmFtZXNbaV0pOwomIzQzOwkJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0pIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX291dDoKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBpOwomIzQzOwomIzQzOwlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHN0cmNtcChvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfZGVidWcoJiMzNDtza2lwcGluZyBtb2R1bGUgQlRGICYjMzk7JXMmIzM5Oywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcbiYjMzQ7LCBuYW1lKTsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBub19tb2R1bGVfYnRmc19uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaikKJiM0Mzt7CiYjNDM7CXJldHVybiBvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMgJmFtcDsmYW1wOyAhb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXMgPT0gb2JqLSZndDtidGZfbW9kdWxlX2NudDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87CkBAIC01ODI1LDYgJiM0Mzs1OTI1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJaWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAl3aGlsZSAodHJ1ZSkgewogCQllcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCAmYW1wO2lkKTsKIAkJaWYgKGVyciAmYW1wOyZhbXA7IGVycm5vID09IEVOT0VOVCkKQEAgLTU4NjcsNiAmIzQzOzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQljb250aW51ZTsKIAkJfQogCiYjNDM7CQlpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHsKJiM0MzsJCQljbG9zZShmZCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCWJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLSZndDtidGZfdm1saW51eCk7CiAJCWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKIAkJaWYgKGVycikgewpAQCAtNTg5MSw2ICYjNDM7NTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQkJYnJlYWs7CiAJCX0KIAkJb2JqLSZndDtidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSkKJiM0MzsJCQlicmVhazsKIAl9CiAKIAlpZiAoZXJyKSB7CkBAIC04NTA4LDYgJiM0Mzs4NjE5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsCiAJCX0KIAl9CiAKJiM0MzsJZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopOwogCWVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7CkBAIC05NjI5LDYgJiM0Mzs5NzQ0LDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogCQljbG9zZShvYmotJmd0O2p1bXB0YWJsZV9tYXBzW2ldLmZkKTsKIAl6ZnJlZSgmYW1wO29iai0mZ3Q7anVtcHRhYmxlX21hcHMpOwogCiYjNDM7CWJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7CiYjNDM7CiAJZnJlZShvYmopOwogfQogCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaAppbmRleCBiOTY1YWQ1NzE1NDAzLi4xY2FiZjdlNDY1NTQ2IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKQEAgLTIyNCwxMCAmIzQzOzIyNCwzMiBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgewogCSAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLgogCSAqLwogCWNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoOwomIzQzOwkvKgomIzQzOwkgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLgomIzQzOwkgKiBucl9idGZfbW9kdWxlX25hbWVzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4KJiM0MzsJICogYnRmX21vZHVsZV9uYW1lcy4KJiM0MzsJICoKJiM0MzsJICogV2l0aCBidGZfbW9kdWxlX25hbWVzOgomIzQzOwkgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7CiYjNDM7CSAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkOwomIzQzOwkgKiAtIHdoZW4gTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQgYXMgYmVmb3JlLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90CiYjNDM7CSAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzOwomIzQzOwkgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0czsKJiM0MzsJICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247CiYjNDM7CSAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuCiYjNDM7CSAqLwomIzQzOwljb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lczsKJiM0MzsJc2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7CiAKIAlzaXplX3QgOjA7CiB9OwotI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBicGZfdG9rZW5fcGF0aAomIzQzOyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lcwogCiAvKioKICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42OGY0YThkNzM1NjA4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnRmX21vZHVsZV9uYW1lcy5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsJc2tlbCA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW0KJiM0MzsgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpbgomIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyAmIzM0O21vZHVsZV9ub25leGlzdCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FU1JDSCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlcXVpcmVzIGJwZl90ZXN0bW9kIEJURiwgc28gaXQgZmFpbHMgdG8gbG9hZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CWNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBOVUxMIH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLyogTm9uLU5VTEwgcG9pbnRlciB3aXRoIHplcm8gZW50cmllcyByZXByZXNlbnRzIGFuIGVtcHR5IGxpc3QuICovCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMCwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHkmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9OwomIzQzOwljb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyAmIzM0OyYjMzQ7IH07CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0gewomIzQzOwkJJiMzNDticGZfdGVzdG1vZCYjMzQ7LCAmIzM0O2JwZl90ZXN0bW9kJiMzNDssCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCwKJiM0MzsJCSAgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsKJiM0MzsJb3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5JiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwlvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7CiYjNDM7CW9wdHMubnJfYnRmX21vZHVsZV9uYW1lcyA9IDI7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGR1cGxpY2F0ZSBuYW1lJiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgYnRmICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwl2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpOwomIzQzOwlpZiAobGliYnBmX2dldF9lcnJvcih2bWxpbnV4X2J0ZikpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi8KJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAobGliYnBmX2dldF9lcnJvcihtb2R1bGVfYnRmKSkgewomIzQzOwkJYnRmX19mcmVlKHZtbGludXhfYnRmKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlidGZfX2ZyZWUobW9kdWxlX2J0Zik7CiYjNDM7CWJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19sb2FkKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19za2lwJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19za2lwKCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19lbXB0eSYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDtidGZfbW9kdWxlX25hbWVzX2ludmFsaWQmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2ZlbnRyeS9icGZfdGVzdG1vZF9sb29wX3Rlc3QmIzM0OykKJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OAoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTm8gS2VybmVsLUxldmVsIEZ1enppbmcgTmVlZGVkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJJiMzOTttIG5vdGluZyBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYW5kIGZpbGVzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSB1c2VyLXNwYWNlIGZvY3VzZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBjaGFuZ2VzIGhlcmUgYXJlIHZlcnkgdW5saWtlbHkgdG8gcmVxdWlyZSBrZXJuZWwgZnV6emluZywgYnV0IEkmIzM5O2xsIGNvbmZpcm0uCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGd1aWRlbGluZXMuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGNoYW5nZXMgdG8gYERvY3VtZW50YXRpb24vYCwgYEtjb25maWdgLCBjb21tZW50cywgbG9nZ2luZywgY29uc3RhbnRzLCB1bnJlYWNoYWJsZSBjb2RlLCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycywgYW5kIHRlYXJkb3duIGNhbGxiYWNrcyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBNb3JlIGltcG9ydGFudGx5LCBpdCBoaWdobGlnaHRzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byByZWFjaGFibGUgKmNvcmUga2VybmVsIGxvZ2ljKiwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyBhcmUgdGhlIGtleSBmb2N1cy4KCk15IHF1aWNrIHNjYW4gc2hvd3Mgbm8gbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGRlZmluaXRlbHkgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMuIFNvLCBga2VybmVsL2AsIGBuZXQvYCwgYGRyaXZlcnMvYCwgYGZzL2AsIGBhcmNoL2AsIGFuZCBgaW5jbHVkZS9gIGFyZSBhbGwgdW50b3VjaGVkLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRvci4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSBmaWxlIGxpc3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkmIzM5O3ZlIGdvdCBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY2AuIFllcCwgYWxsIHVuZGVyIGB0b29scy9gLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBhZGRpbmcgZmlsdGVyaW5nIHN1cHBvcnQgZm9yIGxvYWRpbmcga2VybmVsIG1vZHVsZSBCVEZzIHdpdGhpbiBsaWJicGYgYW5kIHNlbGZ0ZXN0cywgd2hpY2ggYXJlIHVzZXItc3BhY2UgY29tcG9uZW50cywgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGNvZGUgdGhhdCB3b3VsZCByZXF1aXJlIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoqICAgV29ydGhGdXp6aW5nOiBmYWxzZQoqICAgRW5hYmxlQ29uZmlnczogXFsgXSAoSSBkb24mIzM5O3Qgc2VlIGFueSBjb25maWcgY2hhbmdlcykKKiAgIEZvY3VzU3ltYm9sczogXFsgXSAoSXJyZWxldmFudCBmb3IgYSBwYXRjaCBvZiB0aGlzIHR5cGUpCiogICBSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgaW4gbGliYnBmLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZS4mIzM0OwoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb21wb25lbnRzICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBzdXBwb3J0IGZvciBmaWx0ZXJpbmcga2VybmVsIG1vZHVsZSBCVEYgbG9hZGluZyBpbiBsaWJicGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIGlzIG1vZGlmaWVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDE0OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1MDoxNS44Njg4MTA0MzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjY5NTYyMDg5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE0OjUwOjE1Ljg2ODgxNTI3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjU2NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWZkYzcyYzM5ODZjZGEyNjc2YmY0ODk5YmZjYTczNTI0MGE2Y2IxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNDo1MDoxNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbmluZGV4IDUxNGU0ZTlkYWE4MjUuLmUxOWQwYWZkMjU5MjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcXG5AQCAtNzc5LDYgKzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcXG4gXFx0Y2hhciAqdG9rZW5fcGF0aDtcXG4gXFx0aW50IHRva2VuX2ZkO1xcbiBcXG4rXFx0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbitcXG4gXFx0Y2hhciBwYXRoW107XFxuIH07XFxuIFxcbkBAIC01ODAzLDYgKzU4MDYsMTAzIEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbit7XFxuK1xcdHNpemVfdCBpO1xcbitcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKylcXG4rXFx0XFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XFxuK1xcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpO1xcbitcXHRvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmosXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXFxuK3tcXG4rXFx0Y29uc3QgY2hhciAqKm5hbWVzO1xcbitcXHRzaXplX3QgaSwgaiwgY250O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bmFtZXMgPSBPUFRTX0dFVChvcHRzLCBidGZfbW9kdWxlX25hbWVzLCBOVUxMKTtcXG4rXFx0aWYgKCFuYW1lcylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRjbnQgPSBPUFRTX0dFVChvcHRzLCBucl9idGZfbW9kdWxlX25hbWVzLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxcbitcXHQgKiBkZWZhdWx0IGJlaGF2aW9yLlxcbitcXHQgKi9cXG4rXFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKCpvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpKTtcXG4rXFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNudDsgaSsrKSB7XFxuK1xcdFxcdGlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7XFxuK1xcdFxcdFxcdHByX3dhcm4oXFxcImludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIHNtYWxsLCBzbyBhIHNpbXBsZSBuZXN0ZWQgc2NhbiBpc1xcbitcXHRcXHQgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKykge1xcbitcXHRcXHRcXHRpZiAoc3RyY21wKG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcXG4rXFx0XFx0XFx0XFx0cHJfd2FybihcXFwiZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJyVzJ1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0bmFtZXNbaV0pO1xcbitcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcXG4rXFx0XFx0aWYgKCFvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXMrKztcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c2l6ZV90IGk7XFxuK1xcbitcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHN0cmNtcChvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRwcl9kZWJ1ZyhcXFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcXFxuXFxcIiwgbmFtZSk7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbm9fbW9kdWxlX2J0ZnNfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNiAhb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbit7XFxuK1xcdHJldHVybiBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XFxuQEAgLTU4MjUsNiArNTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKG5vX21vZHVsZV9idGZzX25lZWRlZChvYmopKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHdoaWxlICh0cnVlKSB7XFxuIFxcdFxcdGVyciA9IGJwZl9idGZfZ2V0X25leHRfaWQoaWQsIFxcdTAwMjZpZCk7XFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRU5PRU5UKVxcbkBAIC01ODY3LDYgKzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcXG4rXFx0XFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotXFx1MDAzZWJ0Zl92bWxpbnV4KTtcXG4gXFx0XFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuQEAgLTU4OTEsNiArNTk5OSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XFxuK1xcbitcXHRcXHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChlcnIpIHtcXG5AQCAtODUwOCw2ICs4NjE5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX29iamVjdCAqYnBmX29iamVjdF9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKm9ial9idWYsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRlcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopO1xcbiBcXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XFxuQEAgLTk2MjksNiArOTc0NCw4IEBAIHZvaWQgYnBmX29iamVjdF9fY2xvc2Uoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0Y2xvc2Uob2JqLVxcdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XFxuIFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcXG4gXFxuK1xcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XFxuK1xcbiBcXHRmcmVlKG9iaik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uMWNhYmY3ZTQ2NTU0NiAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxcbkBAIC0yMjQsMTAgKzIyNCwzMiBAQCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMge1xcbiBcXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cXG4gXFx0ICovXFxuIFxcdGNvbnN0IGNoYXIgKmJwZl90b2tlbl9wYXRoO1xcbitcXHQvKlxcbitcXHQgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLlxcbitcXHQgKiBucl9idGZfbW9kdWxlX25hbWVzIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW5cXG4rXFx0ICogYnRmX21vZHVsZV9uYW1lcy5cXG4rXFx0ICpcXG4rXFx0ICogV2l0aCBidGZfbW9kdWxlX25hbWVzOlxcbitcXHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XFxuK1xcdCAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkO1xcbitcXHQgKiAtIHdoZW4gTlVMTCwgYWxsIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQgYXMgYmVmb3JlLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90XFxuK1xcdCAqIGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzIHJldHVybmVkLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGFmZmVjdHM6XFxuK1xcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xcbitcXHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGF0dGFjaCB0YXJnZXRzO1xcbitcXHQgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0cztcXG4rXFx0ICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247XFxuK1xcdCAqIC0gZXh0ZXJuIChrc3ltKSByZXNvbHV0aW9uIGZvciBrZXJuZWwgc3ltYm9scyBkZWZpbmVkIGluIG1vZHVsZXMuXFxuK1xcdCAqL1xcbitcXHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcXG4rXFx0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuIFxcbiBcXHRzaXplX3QgOjA7XFxuIH07XFxuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcXG4rI2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBucl9idGZfbW9kdWxlX25hbWVzXFxuIFxcbiAvKipcXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjY4ZjRhOGQ3MzU2MDhcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXFxuQEAgLTAsMCArMSwxNjIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJ0Zl9tb2R1bGVfbmFtZXMuc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcImJwZl90ZXN0bW9kXFxcIiB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHQvKiBWZXJpZnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi9cXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGRlZmF1bHRcXFwiKTtcXG4rXFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcdHNrZWwgPSBOVUxMO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcXFwiKTtcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiB1bnJlcXVlc3RlZCBtb2R1bGUgQlRGIGlzIHNraXBwZWQuIFRoZSBCUEYgcHJvZ3JhbVxcbisgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpblxcbisgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcXG4rICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgTlVMTCB9O1xcbitcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC8qIE5vbi1OVUxMIHBvaW50ZXIgd2l0aCB6ZXJvIGVudHJpZXMgcmVwcmVzZW50cyBhbiBlbXB0eSBsaXN0LiAqL1xcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAwLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZCBlbXB0eVxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcXG4rXFx0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXFxcIlxcXCIgfTtcXG4rXFx0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XFxuK1xcdFxcdFxcXCJicGZfdGVzdG1vZFxcXCIsIFxcXCJicGZfdGVzdG1vZFxcXCIsXFxuK1xcdH07XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxcbitcXHRcXHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBudWxsXFxcIik7XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK1xcbitcXHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBlbXB0eV9uYW1lcztcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxcbitcXHRcXHQgIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGR1cGxpY2F0ZV9uYW1lcztcXG4rXFx0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxcbitcXHRcXHQgIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZHVwbGljYXRlIG5hbWVcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X2J0Zl9tb2R1bGVfbmFtZXModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiA9IE5VTEw7XFxuK1xcdHN0cnVjdCBidGYgKm1vZHVsZV9idGYgPSBOVUxMO1xcbitcXG4rXFx0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGlmIChsaWJicGZfZ2V0X2Vycm9yKHZtbGludXhfYnRmKSkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogRW5zdXJlIGJwZl90ZXN0bW9kIEJURiBpcyBhdmFpbGFibGUuICovXFxuK1xcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcXFwiYnBmX3Rlc3Rtb2RcXFwiLCB2bWxpbnV4X2J0Zik7XFxuK1xcdGlmIChsaWJicGZfZ2V0X2Vycm9yKG1vZHVsZV9idGYpKSB7XFxuK1xcdFxcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XFxuK1xcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDE0OjUwOjE2LjQ5ODAzNDY3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzY2MzI2OTczMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgY29tcG9uZW50cyAodG9vbHMvbGliL2JwZiBhbmQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmKSB0byBhZGQgc3VwcG9ydCBmb3IgZmlsdGVyaW5nIGtlcm5lbCBtb2R1bGUgQlRGIGxvYWRpbmcgaW4gbGliYnBmLiBObyBrZXJuZWwtc3BhY2UgY29kZSBpcyBtb2RpZmllZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFmZGM3MmMzOTg2Y2RhMjY3NmJmNDg5OWJmY2E3MzUyNDBhNmNiMTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAxNDo1MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXG5pbmRleCA1MTRlNGU5ZGFhODI1Li5lMTlkMGFmZDI1OTI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuQEAgLTc3OSw2ICs3NzksOSBAQCBzdHJ1Y3QgYnBmX29iamVjdCB7XG4gXHRjaGFyICp0b2tlbl9wYXRoO1xuIFx0aW50IHRva2VuX2ZkO1xuIFxuK1x0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbitcbiBcdGNoYXIgcGF0aFtdO1xuIH07XG4gXG5AQCAtNTgwMyw2ICs1ODA2LDEwMyBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4rXHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqbmFtZXM7XG4rXHRzaXplX3QgaSwgaiwgY250O1xuK1x0aW50IGVycjtcbitcbitcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XG4rXHRpZiAoIW5hbWVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuK1xuK1x0LypcbitcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxuK1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbitcdCAqL1xuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsXG4rXHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuK1x0XHRcdHByX3dhcm4oXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCIsIGkpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBsaXN0IGlzIGV4cGVjdGVkIHRvIGJlIHNtYWxsLCBzbyBhIHNpbXBsZSBuZXN0ZWQgc2NhbiBpc1xuK1x0XHQgKiBzdWZmaWNpZW50IGZvciBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxuK1x0XHQgKi9cbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKSB7XG4rXHRcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tqXSwgbmFtZXNbaV0pID09IDApIHtcbitcdFx0XHRcdHByX3dhcm4oXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxuXCIsXG4rXHRcdFx0XHRcdG5hbWVzW2ldKTtcbitcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldID0gc3RyZHVwKG5hbWVzW2ldKTtcbitcdFx0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xuK1x0XHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzKys7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspIHtcbitcdFx0aWYgKHN0cmNtcChvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHByX2RlYnVnKFwic2tpcHBpbmcgbW9kdWxlIEJURiAnJXMnLCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xcblwiLCBuYW1lKTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgbm9fbW9kdWxlX2J0ZnNfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4rfVxuK1xuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbit9XG4rXG4gc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4ge1xuIFx0c3RydWN0IGJwZl9idGZfaW5mbyBpbmZvO1xuQEAgLTU4MjUsNiArNTkyNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmIChub19tb2R1bGVfYnRmc19uZWVkZWQob2JqKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgKzU5NzAsMTEgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19tb2R1bGVfYnRmX25lZWRlZChvYmosIG5hbWUpKSB7XG4rXHRcdFx0Y2xvc2UoZmQpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICs1OTk5LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcdFx0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfY250Kys7XG4rXG4rXHRcdGlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKVxuK1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiArODYxOSwxMCBAQCBzdGF0aWMgc3RydWN0IGJwZl9vYmplY3QgKmJwZl9vYmplY3Rfb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB2b2lkICpvYmpfYnVmLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRlcnIgPSBicGZfb2JqZWN0X19lbGZfaW5pdChvYmopO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19lbGZfY29sbGVjdChvYmopO1xuIFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcbkBAIC05NjI5LDYgKzk3NDQsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuK1x0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcbitcbiBcdGZyZWUob2JqKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbmluZGV4IGI5NjVhZDU3MTU0MDMuLjFjYWJmN2U0NjU1NDYgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5oXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5AQCAtMjI0LDEwICsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbitcdC8qXG4rXHQgKiBPcHRpb25hbCBsaXN0IG9mIGtlcm5lbCBtb2R1bGUgbmFtZXMgd2hvc2UgQlRGcyBzaG91bGQgYmUgbG9hZGVkLlxuK1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4rXHQgKiBidGZfbW9kdWxlX25hbWVzLlxuK1x0ICpcbitcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbitcdCAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDtcbitcdCAqIC0gd2hlbiBhbiBlbXB0eSBsaXN0IGlzIHByb3ZpZGVkLCBubyBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkO1xuK1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbitcdCAqXG4rXHQgKiBUaGUgbGlzdCBtdXN0IGNvbnRhaW4gdmFsaWQsIG5vbi1lbXB0eSBtb2R1bGUgbmFtZXMgYW5kIG11c3Qgbm90XG4rXHQgKiBjb250YWluIGR1cGxpY2F0ZSBlbnRyaWVzOyBvdGhlcndpc2UgLUVJTlZBTCBpcyByZXR1cm5lZC5cbitcdCAqXG4rXHQgKiBUaGlzIGFmZmVjdHM6XG4rXHQgKiAtIEJQRiBDTy1SRSByZWxvY2F0aW9ucyBhZ2FpbnN0IHR5cGVzIGRlZmluZWQgaW4gbW9kdWxlcztcbitcdCAqIC0gQlRGLWJhc2VkIHJlc29sdXRpb24gb2YgYXR0YWNoIHRhcmdldHM7XG4rXHQgKiAtIG1vZHVsZS1xdWFsaWZpZWQgdHJhY2luZyBtdWx0aS1hdHRhY2ggdGFyZ2V0cztcbitcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuK1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNjhmNGE4ZDczNTYwOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDE2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcImJwZl90ZXN0bW9kXCIgfTtcbitcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbitcdFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxuK1x0KTtcbitcbitcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFwiKTtcbitcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rXHRza2VsID0gTlVMTDtcbitcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXG4rICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cbisgKiBidGZfbW9kdWxlX25hbWVzLCBzbyBpdHMgQlRGIGlzIHNraXBwZWQgYW5kIHRoZSBCUEYgcHJvZ3JhbSBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxuK3tcbitcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcbitcdGludCByZXQ7XG4rXHRjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJtb2R1bGVfbm9uZXhpc3RcIiB9O1xuK1xuK1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0c1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbisgKiBwcm9ncmFtIHJlcXVpcmVzIGJwZl90ZXN0bW9kIEJURiwgc28gaXQgZmFpbHMgdG8gbG9hZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBOVUxMIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LyogTm9uLU5VTEwgcG9pbnRlciB3aXRoIHplcm8gZW50cmllcyByZXByZXNlbnRzIGFuIGVtcHR5IGxpc3QuICovXG4rXHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDAsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XG4rXHRcdFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuK1x0XHQgIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4rXHRcdCAgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xuK1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbitcdFx0ICBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwiKTtcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0ZiAqdm1saW51eF9idGYgPSBOVUxMO1xuK1x0c3RydWN0IGJ0ZiAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXG4rXHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHZtbGludXhfYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRpZiAobGliYnBmX2dldF9lcnJvcih2bWxpbnV4X2J0ZikpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBFbnN1cmUgYnBmX3Rlc3Rtb2QgQlRGIGlzIGF2YWlsYWJsZS4gKi9cbitcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcImJwZl90ZXN0bW9kXCIsIHZtbGludXhfYnRmKTtcbitcdGlmIChsaWJicGZfZ2V0X2Vycm9yKG1vZHVsZV9idGYpKSB7XG4rXHRcdGJ0Zl9fZnJlZSh2bWxpbnV4X2J0Zik7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xuK1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2xvYWQoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19za2lwXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19lbXB0eVwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xuK1xuK1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgKzEsMTMgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitTRUMoXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCIpXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMTQ6NTA6MTYuNDk4MDM3MTc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY2MzI2OTQ2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBObyBLZXJuZWwtTGV2ZWwgRnV6emluZyBOZWVkZWQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmaWxlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBJJ20gbm90aW5nIGB0b29scy9saWIvYnBmL2xpYmJwZi5jYCwgYHRvb2xzL2xpYi9icGYvbGliYnBmLmhgLCBhbmQgZmlsZXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHBvdGVudGlhbGx5IHVzZXItc3BhY2UgZm9jdXNlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGNoYW5nZXMgaGVyZSBhcmUgdmVyeSB1bmxpa2VseSB0byByZXF1aXJlIGtlcm5lbCBmdXp6aW5nLCBidXQgSSdsbCBjb25maXJtLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY2hhbmdlcyB0byBgRG9jdW1lbnRhdGlvbi9gLCBgS2NvbmZpZ2AsIGNvbW1lbnRzLCBsb2dnaW5nLCBjb25zdGFudHMsIHVucmVhY2hhYmxlIGNvZGUsIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBhbmQgdGVhcmRvd24gY2FsbGJhY2tzIGRvbid0IHdhcnJhbnQgZnV6emluZy4gTW9yZSBpbXBvcnRhbnRseSwgaXQgaGlnaGxpZ2h0cyB0aGF0IG1vZGlmaWNhdGlvbnMgdG8gcmVhY2hhYmxlICpjb3JlIGtlcm5lbCBsb2dpYyosIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgYXJlIHRoZSBrZXkgZm9jdXMuXG5cbk15IHF1aWNrIHNjYW4gc2hvd3Mgbm8gbW9kaWZpY2F0aW9ucyBvdXRzaWRlIG9mIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIGRlZmluaXRlbHkgbm8ga2VybmVsLWxldmVsIGNoYW5nZXMuIFNvLCBga2VybmVsL2AsIGBuZXQvYCwgYGRyaXZlcnMvYCwgYGZzL2AsIGBhcmNoL2AsIGFuZCBgaW5jbHVkZS9gIGFyZSBhbGwgdW50b3VjaGVkLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yLlxuXG5JJ20gZG91YmxlLWNoZWNraW5nIHRoZSBmaWxlIGxpc3QgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSd2ZSBnb3QgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNgLiBZZXAsIGFsbCB1bmRlciBgdG9vbHMvYC5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGFkZGluZyBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgd2l0aGluIGxpYmJwZiBhbmQgc2VsZnRlc3RzLCB3aGljaCBhcmUgdXNlci1zcGFjZSBjb21wb25lbnRzLCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IG1vZGlmeSBhbnkgY29yZSBrZXJuZWwgY29kZSB0aGF0IHdvdWxkIHJlcXVpcmUgZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczpcbiogICBXb3J0aEZ1enppbmc6IGZhbHNlXG4qICAgRW5hYmxlQ29uZmlnczogXFxbIF0gKEkgZG9uJ3Qgc2VlIGFueSBjb25maWcgY2hhbmdlcylcbiogICBGb2N1c1N5bWJvbHM6IFxcWyBdIChJcnJlbGV2YW50IGZvciBhIHBhdGNoIG9mIHRoaXMgdHlwZSlcbiogICBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29saW5nICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBmaWx0ZXJpbmcgc3VwcG9ydCBmb3IgbG9hZGluZyBrZXJuZWwgbW9kdWxlIEJURnMgaW4gbGliYnBmLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBrZXJuZWwgY29kZS5cIlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzgsIk91dHB1dFRva2VucyI6ODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1NjoyMi44MjQ5ODY2NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBjb21wb25lbnRzICh0b29scy9saWIvYnBmIGFuZCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYpIHRvIGFkZCBzdXBwb3J0IGZvciBmaWx0ZXJpbmcga2VybmVsIG1vZHVsZSBCVEYgbG9hZGluZyBpbiBsaWJicGYuIE5vIGtlcm5lbC1zcGFjZSBjb2RlIGlzIG1vZGlmaWVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIGNvbXBvbmVudHMgKHRvb2xzL2xpYi9icGYgYW5kIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZikgdG8gYWRkIHN1cHBvcnQgZm9yIGZpbHRlcmluZyBrZXJuZWwgbW9kdWxlIEJURiBsb2FkaW5nIGluIGxpYmJwZi4gTm8ga2VybmVsLXNwYWNlIGNvZGUgaXMgbW9kaWZpZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQxNDo1NjoyMi44MjUwMTA4NDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5f778[1] Phase: Running StartedAt: 2026-08-31 14:56:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5f778[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 14:56:45 +0000 UTC FinishedAt: 2026-08-31 14:56:49 +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,}