Name: series-workflowgnw4s Phase: Failed StartedAt: 2026-08-13 11:49:20 +0000 UTC FinishedAt: 2026-08-13 12:37:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnw4s[0] Phase: Succeeded StartedAt: 2026-08-13 11:49:20 +0000 UTC FinishedAt: 2026-08-13 12:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnw4s[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 11:49:20 +0000 UTC FinishedAt: 2026-08-13 12:37:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi42ODViYWVmZWJkYjEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMjUsNiAmIzQzOzI1LDE5IEBAXG4gI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSBcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXHUwMDNlXHUwMDNlIElOU05fU0hJRlRfRlVOQ1QzKVxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fQ1NSX01BU0spIFx1MDAzZVx1MDAzZSBJTlNOX0NTUl9TSElGVClcbiBcbiYjNDM7LyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbiYjNDM7I2RlZmluZSBSVl9JTlNOX09QQ09ERV9NQVNLXHQweDdmXG4mIzQzOyNkZWZpbmUgUlZHX09QQ09ERV9TWVNURU1cdDB4NzNcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuJiM0MzsjZGVmaW5lIFJWVl9PUENPREVfVkxcdFx0MHgwN1xuJiM0MzsjZGVmaW5lIFJWVl9PUENPREVfVlNcdFx0MHgyN1xuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XHQ1XG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyXHQ2XG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4mIzQzOyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcdCgoKGluc24pIFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4NylcbiYjNDM7I2RlZmluZSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pXHQoKChpbnNuKSBcdTAwM2VcdTAwM2UgMjApIFx1MDAyNiAweGZmZilcbiYjNDM7XG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiAmIzQzOzE3LDExIEBAXG4gXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcbiBcbiYjNDM7c3RydWN0IGhhbmRsZXJzIHtcbiYjNDM7XHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4mIzQzO1x0Ym9vbCB2X2F2YWlsYWJsZTtcbiYjNDM7fTtcbiYjNDM7XG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KVxuIFx0XHRjb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZClcbi17XG4tXHRzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULFxuLVx0XHQgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLFxuLVx0XHQgIDAsIDAsIDAsIDAsIDAsIDApO1xuLX1cbi1cbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7XG5AQCAtMzQ4LDggJiM0MzszNDYsMjYgQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9hcmNoX3ZjcHVfYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZClcbiBcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3NjcmF0Y2gpLCB2Y3B1X2lkKTtcbiBcbi1cdC8qIFNldHVwIGRlZmF1bHQgZXhjZXB0aW9uIHZlY3RvciBvZiBndWVzdCAqL1xuLVx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzdHZlYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X3VuZXhwX3RyYXApO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcbiYjNDM7XHQgKiBpZ25vcmUgZXJyb3JzIHNpbmNlIHRoZSB0ZXN0cyB3b3JrIHdpdGhvdXQgViB0b28uIFVzZSB0aGUgZnVsbFxuJiM0MztcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4mIzQzO1x0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4mIzQzO1x0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcbiYjNDM7XHR2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XG4mIzQzO1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4mIzQzO1x0ICogVk0td2lkZSBwcm9wZXJ0eS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVx1MDAzZWhhbmRsZXJzKTtcbiYjNDM7XG4mIzQzO1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB2Y3B1O1xuIH1cbkBAIC00MDgsMTkgJiM0Mzs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG4gXG4gXHRpZiAoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcbiYjNDM7XHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXCYjMzQ7LFxuIFx0XHRcdHVjLmFyZ3NbMF0sIHVjLmFyZ3NbMV0pO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgaGFuZGxlcnMge1xuLVx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xuLX07XG4mIzQzO3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG9wY29kZSA9IGluc24gXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XG4mIzQzO1x0dTMyIHdpZHRoLCBjc3I7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBWLXJlbGF0ZWQgaW5zdHJ1Y3Rpb25zIGFyZSA0LWJ5dGUsIGkuZS4gbm90IGNvbXByZXNzZWQuICovXG4mIzQzO1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvcGNvZGUpIHtcbiYjNDM7XHRjYXNlIFJWVl9PUENPREVfVkVDVE9SOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuJiM0MztcdGNhc2UgUlZWX09QQ09ERV9WUzpcbiYjNDM7XHRcdHdpZHRoID0gUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbik7XG4mIzQzO1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4mIzQzO1x0XHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcbiYjNDM7XHRjYXNlIFJWR19PUENPREVfU1lTVEVNOlxuJiM0MztcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbiYjNDM7XHRcdHJldHVybiAoY3NyIFx1MDAzZT0gQ1NSX1ZTVEFSVCBcdTAwMjZcdTAwMjYgY3NyIFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XG4mIzQzO1x0XHQgICAgICAgKGNzciBcdTAwM2U9IENTUl9WTCBcdTAwMjZcdTAwMjYgY3NyIFx1MDAzYz0gQ1NSX1ZMRU5CKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuJiM0MztcdGludCB2ZWN0b3IgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZWM7XG4gXG4gXHRlYyA9IHJlZ3MtXHUwMDNlY2F1c2UgXHUwMDI2IH5DQVVTRV9JUlFfRkxBRztcbiBcdGlmIChlYyBcdTAwM2U9IE5SX0VYQ0VQVElPTlMpXG5AQCAtNDMyLDYgJiM0Mzs0NzIsMzYgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcbiYjNDM7XHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4mIzQzO1x0ICogYW5kIHJlLWV4ZWN1dGUgaXQsIGxpa2UgdGhlIGtlcm5lbCYjMzk7cyByaXNjdl92X2ZpcnN0X3VzZV9oYW5kbGVyKCkuXG4mIzQzO1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuJiM0MztcdCAqIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoYW5kbGVycyBcdTAwMjZcdTAwMjYgaGFuZGxlcnMtXHUwMDNldl9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICEocmVncy1cdTAwM2VzdGF0dXMgXHUwMDI2IFNSX1ZTKSkge1xuJiM0MztcdFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXHUwMDNlYmFkYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3RcbiYjNDM7XHRcdCAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXRcbiYjNDM7XHRcdCAqIGZyb20gdHdvIGhhbGZ3b3JkcyB0byBhdm9pZCBhbiB1bmFsaWduZWQgMzItYml0IGFjY2Vzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFpbnNuKSB7XG4mIzQzO1x0XHRcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVx1MDAzZWVwYztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgoaGFsZiBcdTAwMjYgMHgzKSA9PSAweDMpXG4mIzQzO1x0XHRcdFx0aW5zbiA9ICh1MzIpaGFsZiB8ICgodTMyKSoodTE2ICopKHJlZ3MtXHUwMDNlZXBjICYjNDM7IDIpIFx1MDAzY1x1MDAzYyAxNik7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XG4mIzQzO1x0XHRcdHJlZ3MtXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10pXG4gXHRcdHJldHVybiBoYW5kbGVycy1cdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7XG4gXG5AQCAtNDQ4LDYgJiM0Mzs1MTgsOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4mIzQzO1x0aWYgKHZtLVx1MDAzZWhhbmRsZXJzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHZtLVx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHRcdCAgTUVNX1JFR0lPTl9EQVRBKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTI1LDYgJiM0MzsyNSwxOSBAQAogI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSAmYW1wOyBJTlNOX01BU0tfRlVOQ1QzKSAmZ3Q7Jmd0OyBJTlNOX1NISUZUX0ZVTkNUMykKICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgJmFtcDsgSU5TTl9DU1JfTUFTSykgJmd0OyZndDsgSU5TTl9DU1JfU0hJRlQpCiAKJiM0MzsvKiBWZWN0b3IgKFYpIGluc3RydWN0aW9uIGRlY29kaW5nLCBtYXRjaGluZyBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2luc24uaCAqLwomIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTSwkweDdmCiYjNDM7I2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTQkweDczCiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUgkweDU3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMCQkweDA3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTCQkweDI3CiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOAkwCiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTYJNQomIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyCTYKJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NAk3CiYjNDM7I2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAxMikgJmFtcDsgMHg3KQomIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAyMCkgJmFtcDsgMHhmZmYpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBfX2t2bV9yZWdfaWQodTY0IHR5cGUsIHU2NCBzdWJ0eXBlLCB1NjQgaWR4LCB1NjQgc2l6ZSkKIHsKIAlyZXR1cm4gS1ZNX1JFR19SSVNDViB8IHR5cGUgfCBzdWJ0eXBlIHwgaWR4IHwgc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAKIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7CiAKJiM0MztzdHJ1Y3QgaGFuZGxlcnMgewomIzQzOwlleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107CiYjNDM7CWJvb2wgdl9hdmFpbGFibGU7CiYjNDM7fTsKJiM0MzsKIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwpAQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KQogCQljb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZCkKLXsKLQlzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULAotCQkgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLAotCQkgIDAsIDAsIDAsIDAsIDAsIDApOwotfQotCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQogewogCXZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7CkBAIC0zNDgsOCAmIzQzOzM0NiwyNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX2FyY2hfdmNwdV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkKQogCS8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi8KIAl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7CiAKLQkvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi8KLQl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHN0dmVjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfdW5leHBfdHJhcCk7CiYjNDM7CS8qCiYjNDM7CSAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7CiYjNDM7CSAqIGlnbm9yZSBlcnJvcnMgc2luY2UgdGhlIHRlc3RzIHdvcmsgd2l0aG91dCBWIHRvby4gVXNlIHRoZSBmdWxsCiYjNDM7CSAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpCiYjNDM7CSAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwlfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7CiYjNDM7CXZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7CiYjNDM7CXZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHZjcHUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0CiYjNDM7CSAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYQomIzQzOwkgKiBWTS13aWRlIHByb3BlcnR5LgomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJc3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS0mZ3Q7aGFuZGxlcnMpOwomIzQzOwomIzQzOwkJaC0mZ3Q7dl9hdmFpbGFibGUgPSBfX3ZjcHVfaGFzX2lzYV9leHQodmNwdSwgS1ZNX1JJU0NWX0lTQV9FWFRfVik7CiYjNDM7CX0KIAogCXJldHVybiB2Y3B1OwogfQpAQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCWlmIChnZXRfdWNhbGwodmNwdSwgJmFtcDt1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7CiYjNDM7CQl2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTsKIAkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpJiMzNDssCiAJCQl1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTsKIAl9CiB9CiAKLXN0cnVjdCBoYW5kbGVycyB7Ci0JZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdOwotfTsKJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbikKJiM0Mzt7CiYjNDM7CXUzMiBvcGNvZGUgPSBpbnNuICZhbXA7IFJWX0lOU05fT1BDT0RFX01BU0s7CiYjNDM7CXUzMiB3aWR0aCwgY3NyOwomIzQzOwomIzQzOwkvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqLwomIzQzOwlpZiAoKGluc24gJmFtcDsgMHgzKSAhPSAweDMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAob3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlZWX09QQ09ERV9WRUNUT1I6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBSVlZfT1BDT0RFX1ZMOgomIzQzOwljYXNlIFJWVl9PUENPREVfVlM6CiYjNDM7CQl3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pOwomIzQzOwkJcmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fAomIzQzOwkJICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7CiYjNDM7CWNhc2UgUlZHX09QQ09ERV9TWVNURU06CiYjNDM7CQljc3IgPSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pOwomIzQzOwkJcmV0dXJuIChjc3IgJmd0Oz0gQ1NSX1ZTVEFSVCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkNTUikgfHwKJiM0MzsJCSAgICAgICAoY3NyICZndDs9IENTUl9WTCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkxFTkIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzOwotCWludCB2ZWN0b3IgPSAwLCBlYzsKJiM0MzsJaW50IHZlY3RvciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZWM7CiAKIAllYyA9IHJlZ3MtJmd0O2NhdXNlICZhbXA7IH5DQVVTRV9JUlFfRkxBRzsKIAlpZiAoZWMgJmd0Oz0gTlJfRVhDRVBUSU9OUykKQEAgLTQzMiw2ICYjNDM7NDcyLDM2IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQllYyA9IDA7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmcKJiM0MzsJICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbAomIzQzOwkgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJiMzOTtzIHJpc2N2X3ZfZmlyc3RfdXNlX2hhbmRsZXIoKS4KJiM0MzsJICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvbgomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCEocmVncy0mZ3Q7Y2F1c2UgJmFtcDsgQ0FVU0VfSVJRX0ZMQUcpICZhbXA7JmFtcDsgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCAmYW1wOyZhbXA7CiYjNDM7CSAgICBoYW5kbGVycyAmYW1wOyZhbXA7IGhhbmRsZXJzLSZndDt2X2F2YWlsYWJsZSAmYW1wOyZhbXA7ICEocmVncy0mZ3Q7c3RhdHVzICZhbXA7IFNSX1ZTKSkgewomIzQzOwkJdTMyIGluc24gPSAodTMyKXJlZ3MtJmd0O2JhZGFkZHI7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3QKJiM0MzsJCSAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXQKJiM0MzsJCSAqIGZyb20gdHdvIGhhbGZ3b3JkcyB0byBhdm9pZCBhbiB1bmFsaWduZWQgMzItYml0IGFjY2Vzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbnNuKSB7CiYjNDM7CQkJdTE2IGhhbGYgPSAqKHUxNiAqKXJlZ3MtJmd0O2VwYzsKJiM0MzsKJiM0MzsJCQlpZiAoKGhhbGYgJmFtcDsgMHgzKSA9PSAweDMpCiYjNDM7CQkJCWluc24gPSAodTMyKWhhbGYgfCAoKHUzMikqKHUxNiAqKShyZWdzLSZndDtlcGMgJiM0MzsgMikgJmx0OyZsdDsgMTYpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7CiYjNDM7CQkJcmVncy0mZ3Q7c3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJaWYgKGhhbmRsZXJzICZhbXA7JmFtcDsgaGFuZGxlcnMtJmd0O2V4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSkKIAkJcmV0dXJuIGhhbmRsZXJzLSZndDtleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7CiAKQEAgLTQ0OCw2ICYjNDM7NTE4LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHZvaWQgdm1faW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdm0gKnZtKQogewomIzQzOwlpZiAodm0tJmd0O2hhbmRsZXJzKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXZtLSZndDtoYW5kbGVycyA9IF9fdm1fYWxsb2Modm0sIHNpemVvZihzdHJ1Y3QgaGFuZGxlcnMpLCB2bS0mZ3Q7cGFnZV9zaXplLAogCQkJCSAgTUVNX1JFR0lPTl9EQVRBKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA0CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogNDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCYjMzk7cyB0d2Vha2luZyB0aGUgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBlbmFibGluZyBvZiB0aGUgViBleHRlbnNpb24gd2l0aGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1NlbGYtdGVzdHMgb25seSwgcmlnaHQ/JiMzNDsgQnV0IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeS4gUmlnaHQsIGl0JiMzOTtzIGV4cGxpY2l0bHkgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKmAgc3VidHJlZS4gT2theSwgKnRoYXQqIGNvbmZpcm1zIGl0LiBObyBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIGtlcm5lbCBpdHNlbGYuIE5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGJleW9uZCB0aGUgdGVzdGluZyBmcmFtZXdvcmsuIE5vdGhpbmcgdGhhdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbCBiZWhhdmlvci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRpZmYgdGhlIGZpbGVzIHRvIGRvdWJsZS1jaGVjay4gWXVwLCBqdXN0IHRob3NlIHR3byBmaWxlcy4gQWxsIGdvb2QuCgpTbywgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHNlbGZ0ZXN0cywgYWRkaW5nIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6aWx5IGVuYWJsaW5nIHRoZSBWIGV4dGVuc2lvbiBpbiB0aGUgZ3Vlc3QgZXhjZXB0aW9uIGhhbmRsZXIsIGFuZCBoYXMgYWJzb2x1dGVseSB6ZXJvIGltcGFjdCBvbiBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYW55IG90aGVyIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnRzLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGZ1enogdGhpcy4gVGhpcyBpcyBhIHB1cmVseSB0ZXN0aW5nLWZvY3VzZWQgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MzY6NDguNzgyMjQ0NjE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjc5Mzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gYWRkIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBWIGV4dGVuc2lvbiBlbmFibGVtZW50IGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjQ4Ljc4MjI1MTM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzYwODY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MzY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0yNSw2ICsyNSwxOSBAQFxcbiAjZGVmaW5lIEdFVF9STShpbnNuKSAgICAgICAgICAgICgoKGluc24pIFxcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXFx1MDAzZVxcdTAwM2UgSU5TTl9TSElGVF9GVU5DVDMpXFxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBJTlNOX0NTUl9TSElGVClcXG4gXFxuKy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXFxuKyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1xcdDB4N2ZcXG4rI2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTVxcdDB4NzNcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlxcdDB4NTdcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZMXFx0XFx0MHgwN1xcbisjZGVmaW5lIFJWVl9PUENPREVfVlNcXHRcXHQweDI3XFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzhcXHQwXFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XFx0NVxcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlxcdDZcXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfNjRcXHQ3XFxuKyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcXHQoKChpbnNuKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDcpXFxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVxcdCgoKGluc24pIFxcdTAwM2VcXHUwMDNlIDIwKSBcXHUwMDI2IDB4ZmZmKVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uZDAwYWM5OTcyOTFjMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC0xNyw2ICsxNywxMSBAQFxcbiBcXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcXG4gXFxuK3N0cnVjdCBoYW5kbGVycyB7XFxuK1xcdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcXG4rXFx0Ym9vbCB2X2F2YWlsYWJsZTtcXG4rfTtcXG4rXFxuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xcbkBAIC0yOTgsMTMgKzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcXG4gXFx0XFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXFxuLXtcXG4tXFx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcXG4tXFx0XFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcXG4tXFx0XFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcXG4tfVxcbi1cXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG4ge1xcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXFxuIFxcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzc2NyYXRjaCksIHZjcHVfaWQpO1xcbiBcXG4tXFx0LyogU2V0dXAgZGVmYXVsdCBleGNlcHRpb24gdmVjdG9yIG9mIGd1ZXN0ICovXFxuLVxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcXG4rXFx0LypcXG4rXFx0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcXG4rXFx0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcXG4rXFx0ICogZXhjZXB0aW9uIHZlY3RvciB0YWJsZSAod2hpY2ggbGF6aWx5IGVuYWJsZXMgViBpbiByb3V0ZV9leGNlcHRpb24oKSlcXG4rXFx0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdF9fdmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0lTQV9FWFRfUkVHKEtWTV9SSVNDVl9JU0FfRVhUX1YpLCAxKTtcXG4rXFx0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcXG4rXFx0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XFxuK1xcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxcbitcXHQgKiBWTS13aWRlIHByb3BlcnR5LlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVxcdTAwM2VoYW5kbGVycyk7XFxuK1xcbitcXHRcXHRoLVxcdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZjcHU7XFxuIH1cXG5AQCAtNDA4LDE5ICs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuIFxcdGlmIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcXG4rXFx0XFx0dmNwdV9kdW1wKHN0ZGVyciwgdmNwdSwgMik7XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXFxcIixcXG4gXFx0XFx0XFx0dWMuYXJnc1swXSwgdWMuYXJnc1sxXSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGhhbmRsZXJzIHtcXG4tXFx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xcbi19O1xcbitzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcXG4re1xcbitcXHR1MzIgb3Bjb2RlID0gaW5zbiBcXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XFxuK1xcdHUzMiB3aWR0aCwgY3NyO1xcbitcXG4rXFx0LyogQWxsIFYtcmVsYXRlZCBpbnN0cnVjdGlvbnMgYXJlIDQtYnl0ZSwgaS5lLiBub3QgY29tcHJlc3NlZC4gKi9cXG4rXFx0aWYgKChpbnNuIFxcdTAwMjYgMHgzKSAhPSAweDMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAob3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIFJWVl9PUENPREVfVkw6XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WUzpcXG4rXFx0XFx0d2lkdGggPSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxcbitcXHRcXHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcXG4rXFx0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcXG4rXFx0XFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIChjc3IgXFx1MDAzZT0gQ1NSX1ZTVEFSVCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XFxuK1xcdFxcdCAgICAgICAoY3NyIFxcdTAwM2U9IENTUl9WTCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZMRU5CKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcXG4tXFx0aW50IHZlY3RvciA9IDAsIGVjO1xcbitcXHRpbnQgdmVjdG9yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlYztcXG4gXFxuIFxcdGVjID0gcmVncy1cXHUwMDNlY2F1c2UgXFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XFxuIFxcdGlmIChlYyBcXHUwMDNlPSBOUl9FWENFUFRJT05TKVxcbkBAIC00MzIsNiArNDcyLDM2IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRlYyA9IDA7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcXG4rXFx0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxcbitcXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxcbitcXHQgKiBHZW51aW5lbHkgaWxsZWdhbCBpbnN0cnVjdGlvbnMgY29udGludWUgdG8gdGhlIHVuZXhwZWN0ZWQtZXhjZXB0aW9uXFxuK1xcdCAqIHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIShyZWdzLVxcdTAwM2VjYXVzZSBcXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoYW5kbGVycyBcXHUwMDI2XFx1MDAyNiBoYW5kbGVycy1cXHUwMDNldl9hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgIShyZWdzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBTUl9WUykpIHtcXG4rXFx0XFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXFx1MDAzZWJhZGFkZHI7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdHZhbCBpcyBub3QgZ3VhcmFudGVlZCB0byBob2xkIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gY2hlY2sgdGhlIGZpcnN0XFxuK1xcdFxcdCAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXRcXG4rXFx0XFx0ICogZnJvbSB0d28gaGFsZndvcmRzIHRvIGF2b2lkIGFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbnNuKSB7XFxuK1xcdFxcdFxcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVxcdTAwM2VlcGM7XFxuK1xcbitcXHRcXHRcXHRpZiAoKGhhbGYgXFx1MDAyNiAweDMpID09IDB4MylcXG4rXFx0XFx0XFx0XFx0aW5zbiA9ICh1MzIpaGFsZiB8ICgodTMyKSoodTE2ICopKHJlZ3MtXFx1MDAzZWVwYyArIDIpIFxcdTAwM2NcXHUwMDNjIDE2KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XFxuK1xcdFxcdFxcdHJlZ3MtXFx1MDAzZXN0YXR1cyB8PSBTUl9WU19JTklUSUFMO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGhhbmRsZXJzIFxcdTAwMjZcXHUwMDI2IGhhbmRsZXJzLVxcdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10pXFxuIFxcdFxcdHJldHVybiBoYW5kbGVycy1cXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKHJlZ3MpO1xcbiBcXG5AQCAtNDQ4LDYgKzUxOCw5IEBAIHZvaWQgdmNwdV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4rXFx0aWYgKHZtLVxcdTAwM2VoYW5kbGVycylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0dm0tXFx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVxcdTAwM2VwYWdlX3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgTUVNX1JFR0lPTl9EQVRBKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjUwLjIyMDg1NTUxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0OTgxMzc4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gYWRkIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBWIGV4dGVuc2lvbiBlbmFibGVtZW50IGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbkBAIC0yNSw2ICsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4rLyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbisjZGVmaW5lIFJWX0lOU05fT1BDT0RFX01BU0tcdDB4N2ZcbisjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuKyNkZWZpbmUgUlZWX09QQ09ERV9WTFx0XHQweDA3XG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTZcdDVcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4rI2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDEyKSBcdTAwMjYgMHg3KVxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4rXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiArMTcsMTEgQEBcbiBcbiBzdGF0aWMgZ3ZhX3QgZXhjZXB0aW9uX2hhbmRsZXJzO1xuIFxuK3N0cnVjdCBoYW5kbGVycyB7XG4rXHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4rXHRib29sIHZfYXZhaWxhYmxlO1xuK307XG4rXG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICszMDMsNiBAQCB2b2lkIHZjcHVfYXJjaF9kdW1wKEZJTEUgKnN0cmVhbSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBpbmRlbnQpXG4gXHRcdGNvcmUucmVncy50MywgY29yZS5yZWdzLnQ0LCBjb3JlLnJlZ3MudDUsIGNvcmUucmVncy50Nik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYWxpZ25lZCgxNikgZ3Vlc3RfdW5leHBfdHJhcCh2b2lkKVxuLXtcbi1cdHNiaV9lY2FsbChLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9FWFQsXG4tXHRcdCAgS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfVU5FWFAsXG4tXHRcdCAgMCwgMCwgMCwgMCwgMCwgMCk7XG4tfVxuLVxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0NPUkVfUkVHKHJlZ3MucGMpLCAodW5zaWduZWQgbG9uZylndWVzdF9jb2RlKTtcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbitcdC8qXG4rXHQgKiBBZHZlcnRpc2UgViB0byBLVk0gc28gLU8yIGF1dG8tdmVjdG9yaXphdGlvbiBpbiBndWVzdCBjb2RlIGlzIHZhbGlkO1xuK1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbitcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4rXHQgKiBhcyB0aGUgZGVmYXVsdCBoYW5kbGVyOyB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoKSBpcyBpZGVtcG90ZW50LlxuK1x0ICovXG4rXHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4rXHR2bV9pbml0X3ZlY3Rvcl90YWJsZXModm0pO1xuK1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuK1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4rXHQgKiBWTS13aWRlIHByb3BlcnR5LlxuK1x0ICovXG4rXHR7XG4rXHRcdHN0cnVjdCBoYW5kbGVycyAqaCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm0tXHUwMDNlaGFuZGxlcnMpO1xuK1xuK1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHZjcHU7XG4gfVxuQEAgLTQwOCwxOSArNDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4rXHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAodmVjdG9yOjB4JWx4LCBlYzoweCVseClcIixcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuK3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuK3tcbitcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuK1x0dTMyIHdpZHRoLCBjc3I7XG4rXG4rXHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuK1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChvcGNvZGUpIHtcbitcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZTOlxuK1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuK1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4rXHRcdCAgICAgICB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfMzIgfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzY0O1xuK1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbitcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbitcdFx0cmV0dXJuIChjc3IgXHUwMDNlPSBDU1JfVlNUQVJUIFx1MDAyNlx1MDAyNiBjc3IgXHUwMDNjPSBDU1JfVkNTUikgfHxcbitcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuK1x0aW50IHZlY3RvciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICs0NzIsMzYgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4rXHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4rXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuK1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2V2X2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgIShyZWdzLVx1MDAzZXN0YXR1cyBcdTAwMjYgU1JfVlMpKSB7XG4rXHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuK1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3RcbitcdFx0ICogMTYtYml0IGhhbGZ3b3JkIGFuZCwgZm9yIGEgMzItYml0IGluc3RydWN0aW9uLCBhc3NlbWJsZSBpdFxuK1x0XHQgKiBmcm9tIHR3byBoYWxmd29yZHMgdG8gYXZvaWQgYW4gdW5hbGlnbmVkIDMyLWJpdCBhY2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluc24pIHtcbitcdFx0XHR1MTYgaGFsZiA9ICoodTE2ICopcmVncy1cdTAwM2VlcGM7XG4rXG4rXHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbitcdFx0XHRcdGluc24gPSAodTMyKWhhbGYgfCAoKHUzMikqKHUxNiAqKShyZWdzLVx1MDAzZWVwYyArIDIpIFx1MDAzY1x1MDAzYyAxNik7XG4rXHRcdH1cbitcbitcdFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XG4rXHRcdFx0cmVncy1cdTAwM2VzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChoYW5kbGVycyBcdTAwMjZcdTAwMjYgaGFuZGxlcnMtXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKVxuIFx0XHRyZXR1cm4gaGFuZGxlcnMtXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKHJlZ3MpO1xuIFxuQEAgLTQ0OCw2ICs1MTgsOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4rXHRpZiAodm0tXHUwMDNlaGFuZGxlcnMpXG4rXHRcdHJldHVybjtcbitcbiBcdHZtLVx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHRcdCAgTUVNX1JFR0lPTl9EQVRBKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjUwLjIyMDg1NzYyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTgwOTg4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIFNlbGZ0ZXN0IFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCdzIHR3ZWFraW5nIHRoZSBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYsIHNwZWNpZmljYWxseSBhZGRpbmcgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IGVuYWJsaW5nIG9mIHRoZSBWIGV4dGVuc2lvbiB3aXRoaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2VsZi10ZXN0cyBvbmx5LCByaWdodD9cIiBCdXQgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeS4gUmlnaHQsIGl0J3MgZXhwbGljaXRseSBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWJ0cmVlLiBPa2F5LCAqdGhhdCogY29uZmlybXMgaXQuIE5vIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvcmUga2VybmVsIGl0c2VsZi4gTm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgYmV5b25kIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4gTm90aGluZyB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuIEknbSBnb2luZyB0byBxdWlja2x5IGRpZmYgdGhlIGZpbGVzIHRvIGRvdWJsZS1jaGVjay4gWXVwLCBqdXN0IHRob3NlIHR3byBmaWxlcy4gQWxsIGdvb2QuXG5cblNvLCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgc2VsZnRlc3RzLCBhZGRpbmcgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXppbHkgZW5hYmxpbmcgdGhlIFYgZXh0ZW5zaW9uIGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlciwgYW5kIGhhcyBhYnNvbHV0ZWx5IHplcm8gaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnkgb3RoZXIgY3JpdGljYWwga2VybmVsIGNvbXBvbmVudHMsIHRoZXJlJ3Mgbm8gbmVlZCB0byBmdXp6IHRoaXMuIFRoaXMgaXMgYSBwdXJlbHkgdGVzdGluZy1mb2N1c2VkIGNoYW5nZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDQsIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjozNjo1Ni43MTg5NjA0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MzY6NTYuNzE4OTk1OTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnw4s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 11:49:20 +0000 UTC FinishedAt: 2026-08-13 12:36:57 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi42ODViYWVmZWJkYjEyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMjUsNiAmIzQzOzI1LDE5IEBAXG4gI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSBcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXHUwMDNlXHUwMDNlIElOU05fU0hJRlRfRlVOQ1QzKVxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fQ1NSX01BU0spIFx1MDAzZVx1MDAzZSBJTlNOX0NTUl9TSElGVClcbiBcbiYjNDM7LyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbiYjNDM7I2RlZmluZSBSVl9JTlNOX09QQ09ERV9NQVNLXHQweDdmXG4mIzQzOyNkZWZpbmUgUlZHX09QQ09ERV9TWVNURU1cdDB4NzNcbiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuJiM0MzsjZGVmaW5lIFJWVl9PUENPREVfVkxcdFx0MHgwN1xuJiM0MzsjZGVmaW5lIFJWVl9PUENPREVfVlNcdFx0MHgyN1xuJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XHQ1XG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyXHQ2XG4mIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4mIzQzOyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcdCgoKGluc24pIFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4NylcbiYjNDM7I2RlZmluZSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pXHQoKChpbnNuKSBcdTAwM2VcdTAwM2UgMjApIFx1MDAyNiAweGZmZilcbiYjNDM7XG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiAmIzQzOzE3LDExIEBAXG4gXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcbiBcbiYjNDM7c3RydWN0IGhhbmRsZXJzIHtcbiYjNDM7XHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4mIzQzO1x0Ym9vbCB2X2F2YWlsYWJsZTtcbiYjNDM7fTtcbiYjNDM7XG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KVxuIFx0XHRjb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZClcbi17XG4tXHRzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULFxuLVx0XHQgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLFxuLVx0XHQgIDAsIDAsIDAsIDAsIDAsIDApO1xuLX1cbi1cbiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKVxuIHtcbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7XG5AQCAtMzQ4LDggJiM0MzszNDYsMjYgQEAgc3RydWN0IGt2bV92Y3B1ICp2bV9hcmNoX3ZjcHVfYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgdmNwdV9pZClcbiBcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cbiBcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3NjcmF0Y2gpLCB2Y3B1X2lkKTtcbiBcbi1cdC8qIFNldHVwIGRlZmF1bHQgZXhjZXB0aW9uIHZlY3RvciBvZiBndWVzdCAqL1xuLVx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzdHZlYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X3VuZXhwX3RyYXApO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcbiYjNDM7XHQgKiBpZ25vcmUgZXJyb3JzIHNpbmNlIHRoZSB0ZXN0cyB3b3JrIHdpdGhvdXQgViB0b28uIFVzZSB0aGUgZnVsbFxuJiM0MztcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4mIzQzO1x0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4mIzQzO1x0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcbiYjNDM7XHR2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XG4mIzQzO1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4mIzQzO1x0ICogVk0td2lkZSBwcm9wZXJ0eS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR7XG4mIzQzO1x0XHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVx1MDAzZWhhbmRsZXJzKTtcbiYjNDM7XG4mIzQzO1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB2Y3B1O1xuIH1cbkBAIC00MDgsMTkgJiM0Mzs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdWNhbGwgdWM7XG4gXG4gXHRpZiAoZ2V0X3VjYWxsKHZjcHUsIFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcbiYjNDM7XHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXCYjMzQ7LFxuIFx0XHRcdHVjLmFyZ3NbMF0sIHVjLmFyZ3NbMV0pO1xuIFx0fVxuIH1cbiBcbi1zdHJ1Y3QgaGFuZGxlcnMge1xuLVx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xuLX07XG4mIzQzO3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG9wY29kZSA9IGluc24gXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XG4mIzQzO1x0dTMyIHdpZHRoLCBjc3I7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBWLXJlbGF0ZWQgaW5zdHJ1Y3Rpb25zIGFyZSA0LWJ5dGUsIGkuZS4gbm90IGNvbXByZXNzZWQuICovXG4mIzQzO1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChvcGNvZGUpIHtcbiYjNDM7XHRjYXNlIFJWVl9PUENPREVfVkVDVE9SOlxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuJiM0MztcdGNhc2UgUlZWX09QQ09ERV9WUzpcbiYjNDM7XHRcdHdpZHRoID0gUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbik7XG4mIzQzO1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4mIzQzO1x0XHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcbiYjNDM7XHRjYXNlIFJWR19PUENPREVfU1lTVEVNOlxuJiM0MztcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbiYjNDM7XHRcdHJldHVybiAoY3NyIFx1MDAzZT0gQ1NSX1ZTVEFSVCBcdTAwMjZcdTAwMjYgY3NyIFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XG4mIzQzO1x0XHQgICAgICAgKGNzciBcdTAwM2U9IENTUl9WTCBcdTAwMjZcdTAwMjYgY3NyIFx1MDAzYz0gQ1NSX1ZMRU5CKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuJiM0MztcdGludCB2ZWN0b3IgPSAwO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZWM7XG4gXG4gXHRlYyA9IHJlZ3MtXHUwMDNlY2F1c2UgXHUwMDI2IH5DQVVTRV9JUlFfRkxBRztcbiBcdGlmIChlYyBcdTAwM2U9IE5SX0VYQ0VQVElPTlMpXG5AQCAtNDMyLDYgJiM0Mzs0NzIsMzYgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcbiYjNDM7XHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4mIzQzO1x0ICogYW5kIHJlLWV4ZWN1dGUgaXQsIGxpa2UgdGhlIGtlcm5lbCYjMzk7cyByaXNjdl92X2ZpcnN0X3VzZV9oYW5kbGVyKCkuXG4mIzQzO1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuJiM0MztcdCAqIHBhdGguXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBoYW5kbGVycyBcdTAwMjZcdTAwMjYgaGFuZGxlcnMtXHUwMDNldl9hdmFpbGFibGUgXHUwMDI2XHUwMDI2ICEocmVncy1cdTAwM2VzdGF0dXMgXHUwMDI2IFNSX1ZTKSkge1xuJiM0MztcdFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXHUwMDNlYmFkYWRkcjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uXG4mIzQzO1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3RcbiYjNDM7XHRcdCAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXRcbiYjNDM7XHRcdCAqIGZyb20gdHdvIGhhbGZ3b3JkcyB0byBhdm9pZCBhbiB1bmFsaWduZWQgMzItYml0IGFjY2Vzcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCFpbnNuKSB7XG4mIzQzO1x0XHRcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVx1MDAzZWVwYztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgoaGFsZiBcdTAwMjYgMHgzKSA9PSAweDMpXG4mIzQzO1x0XHRcdFx0aW5zbiA9ICh1MzIpaGFsZiB8ICgodTMyKSoodTE2ICopKHJlZ3MtXHUwMDNlZXBjICYjNDM7IDIpIFx1MDAzY1x1MDAzYyAxNik7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XG4mIzQzO1x0XHRcdHJlZ3MtXHUwMDNlc3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10pXG4gXHRcdHJldHVybiBoYW5kbGVycy1cdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7XG4gXG5AQCAtNDQ4LDYgJiM0Mzs1MTgsOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4mIzQzO1x0aWYgKHZtLVx1MDAzZWhhbmRsZXJzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHZtLVx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHRcdCAgTUVNX1JFR0lPTl9EQVRBKTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNjg1YmFlZmViZGIxMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTI1LDYgJiM0MzsyNSwxOSBAQAogI2RlZmluZSBHRVRfUk0oaW5zbikgICAgICAgICAgICAoKChpbnNuKSAmYW1wOyBJTlNOX01BU0tfRlVOQ1QzKSAmZ3Q7Jmd0OyBJTlNOX1NISUZUX0ZVTkNUMykKICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgJmFtcDsgSU5TTl9DU1JfTUFTSykgJmd0OyZndDsgSU5TTl9DU1JfU0hJRlQpCiAKJiM0MzsvKiBWZWN0b3IgKFYpIGluc3RydWN0aW9uIGRlY29kaW5nLCBtYXRjaGluZyBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2luc24uaCAqLwomIzQzOyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTSwkweDdmCiYjNDM7I2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTQkweDczCiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUgkweDU3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZMCQkweDA3CiYjNDM7I2RlZmluZSBSVlZfT1BDT0RFX1ZTCQkweDI3CiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfOAkwCiYjNDM7I2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTYJNQomIzQzOyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzMyCTYKJiM0MzsjZGVmaW5lIFJWVl9WTF9WU19XSURUSF82NAk3CiYjNDM7I2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAxMikgJmFtcDsgMHg3KQomIzQzOyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKQkoKChpbnNuKSAmZ3Q7Jmd0OyAyMCkgJmFtcDsgMHhmZmYpCiYjNDM7CiBzdGF0aWMgaW5saW5lIHU2NCBfX2t2bV9yZWdfaWQodTY0IHR5cGUsIHU2NCBzdWJ0eXBlLCB1NjQgaWR4LCB1NjQgc2l6ZSkKIHsKIAlyZXR1cm4gS1ZNX1JFR19SSVNDViB8IHR5cGUgfCBzdWJ0eXBlIHwgaWR4IHwgc2l6ZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAKIHN0YXRpYyBndmFfdCBleGNlcHRpb25faGFuZGxlcnM7CiAKJiM0MztzdHJ1Y3QgaGFuZGxlcnMgewomIzQzOwlleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107CiYjNDM7CWJvb2wgdl9hdmFpbGFibGU7CiYjNDM7fTsKJiM0MzsKIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwOwpAQCAtMjk4LDEzICYjNDM7MzAzLDYgQEAgdm9pZCB2Y3B1X2FyY2hfZHVtcChGSUxFICpzdHJlYW0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggaW5kZW50KQogCQljb3JlLnJlZ3MudDMsIGNvcmUucmVncy50NCwgY29yZS5yZWdzLnQ1LCBjb3JlLnJlZ3MudDYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2FsaWduZWQoMTYpIGd1ZXN0X3VuZXhwX3RyYXAodm9pZCkKLXsKLQlzYmlfZWNhbGwoS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfRVhULAotCQkgIEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX1VORVhQLAotCQkgIDAsIDAsIDAsIDAsIDAsIDApOwotfQotCiB2b2lkIHZjcHVfYXJjaF9zZXRfZW50cnlfcG9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB2b2lkICpndWVzdF9jb2RlKQogewogCXZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9DT1JFX1JFRyhyZWdzLnBjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfY29kZSk7CkBAIC0zNDgsOCAmIzQzOzM0NiwyNiBAQCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZtX2FyY2hfdmNwdV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIHUzMiB2Y3B1X2lkKQogCS8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi8KIAl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7CiAKLQkvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi8KLQl2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHN0dmVjKSwgKHVuc2lnbmVkIGxvbmcpZ3Vlc3RfdW5leHBfdHJhcCk7CiYjNDM7CS8qCiYjNDM7CSAqIEFkdmVydGlzZSBWIHRvIEtWTSBzbyAtTzIgYXV0by12ZWN0b3JpemF0aW9uIGluIGd1ZXN0IGNvZGUgaXMgdmFsaWQ7CiYjNDM7CSAqIGlnbm9yZSBlcnJvcnMgc2luY2UgdGhlIHRlc3RzIHdvcmsgd2l0aG91dCBWIHRvby4gVXNlIHRoZSBmdWxsCiYjNDM7CSAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpCiYjNDM7CSAqIGFzIHRoZSBkZWZhdWx0IGhhbmRsZXI7IHZtX2luaXRfdmVjdG9yX3RhYmxlcygpIGlzIGlkZW1wb3RlbnQuCiYjNDM7CSAqLwomIzQzOwlfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7CiYjNDM7CXZtX2luaXRfdmVjdG9yX3RhYmxlcyh2bSk7CiYjNDM7CXZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHZjcHUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0CiYjNDM7CSAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYQomIzQzOwkgKiBWTS13aWRlIHByb3BlcnR5LgomIzQzOwkgKi8KJiM0MzsJewomIzQzOwkJc3RydWN0IGhhbmRsZXJzICpoID0gYWRkcl9ndmEyaHZhKHZtLCB2bS0mZ3Q7aGFuZGxlcnMpOwomIzQzOwomIzQzOwkJaC0mZ3Q7dl9hdmFpbGFibGUgPSBfX3ZjcHVfaGFzX2lzYV9leHQodmNwdSwgS1ZNX1JJU0NWX0lTQV9FWFRfVik7CiYjNDM7CX0KIAogCXJldHVybiB2Y3B1OwogfQpAQCAtNDA4LDE5ICYjNDM7NDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCXN0cnVjdCB1Y2FsbCB1YzsKIAogCWlmIChnZXRfdWNhbGwodmNwdSwgJmFtcDt1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7CiYjNDM7CQl2Y3B1X2R1bXAoc3RkZXJyLCB2Y3B1LCAyKTsKIAkJVEVTVF9GQUlMKCYjMzQ7VW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpJiMzNDssCiAJCQl1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTsKIAl9CiB9CiAKLXN0cnVjdCBoYW5kbGVycyB7Ci0JZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdOwotfTsKJiM0MztzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbikKJiM0Mzt7CiYjNDM7CXUzMiBvcGNvZGUgPSBpbnNuICZhbXA7IFJWX0lOU05fT1BDT0RFX01BU0s7CiYjNDM7CXUzMiB3aWR0aCwgY3NyOwomIzQzOwomIzQzOwkvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqLwomIzQzOwlpZiAoKGluc24gJmFtcDsgMHgzKSAhPSAweDMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXN3aXRjaCAob3Bjb2RlKSB7CiYjNDM7CWNhc2UgUlZWX09QQ09ERV9WRUNUT1I6CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJY2FzZSBSVlZfT1BDT0RFX1ZMOgomIzQzOwljYXNlIFJWVl9PUENPREVfVlM6CiYjNDM7CQl3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pOwomIzQzOwkJcmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fAomIzQzOwkJICAgICAgIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8zMiB8fCB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfNjQ7CiYjNDM7CWNhc2UgUlZHX09QQ09ERV9TWVNURU06CiYjNDM7CQljc3IgPSBSVkdfRVhUUkFDVF9TWVNURU1fQ1NSKGluc24pOwomIzQzOwkJcmV0dXJuIChjc3IgJmd0Oz0gQ1NSX1ZTVEFSVCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkNTUikgfHwKJiM0MzsJCSAgICAgICAoY3NyICZndDs9IENTUl9WTCAmYW1wOyZhbXA7IGNzciAmbHQ7PSBDU1JfVkxFTkIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiAKIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzOwotCWludCB2ZWN0b3IgPSAwLCBlYzsKJiM0MzsJaW50IHZlY3RvciA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZWM7CiAKIAllYyA9IHJlZ3MtJmd0O2NhdXNlICZhbXA7IH5DQVVTRV9JUlFfRkxBRzsKIAlpZiAoZWMgJmd0Oz0gTlJfRVhDRVBUSU9OUykKQEAgLTQzMiw2ICYjNDM7NDcyLDM2IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQllYyA9IDA7CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmcKJiM0MzsJICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbAomIzQzOwkgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJiMzOTtzIHJpc2N2X3ZfZmlyc3RfdXNlX2hhbmRsZXIoKS4KJiM0MzsJICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvbgomIzQzOwkgKiBwYXRoLgomIzQzOwkgKi8KJiM0MzsJaWYgKCEocmVncy0mZ3Q7Y2F1c2UgJmFtcDsgQ0FVU0VfSVJRX0ZMQUcpICZhbXA7JmFtcDsgZWMgPT0gRVhDX0lOU1RfSUxMRUdBTCAmYW1wOyZhbXA7CiYjNDM7CSAgICBoYW5kbGVycyAmYW1wOyZhbXA7IGhhbmRsZXJzLSZndDt2X2F2YWlsYWJsZSAmYW1wOyZhbXA7ICEocmVncy0mZ3Q7c3RhdHVzICZhbXA7IFNSX1ZTKSkgewomIzQzOwkJdTMyIGluc24gPSAodTMyKXJlZ3MtJmd0O2JhZGFkZHI7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogc3R2YWwgaXMgbm90IGd1YXJhbnRlZWQgdG8gaG9sZCB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCiYjNDM7CQkgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3QKJiM0MzsJCSAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXQKJiM0MzsJCSAqIGZyb20gdHdvIGhhbGZ3b3JkcyB0byBhdm9pZCBhbiB1bmFsaWduZWQgMzItYml0IGFjY2Vzcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbnNuKSB7CiYjNDM7CQkJdTE2IGhhbGYgPSAqKHUxNiAqKXJlZ3MtJmd0O2VwYzsKJiM0MzsKJiM0MzsJCQlpZiAoKGhhbGYgJmFtcDsgMHgzKSA9PSAweDMpCiYjNDM7CQkJCWluc24gPSAodTMyKWhhbGYgfCAoKHUzMikqKHUxNiAqKShyZWdzLSZndDtlcGMgJiM0MzsgMikgJmx0OyZsdDsgMTYpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7CiYjNDM7CQkJcmVncy0mZ3Q7c3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJaWYgKGhhbmRsZXJzICZhbXA7JmFtcDsgaGFuZGxlcnMtJmd0O2V4Y2VwdGlvbl9oYW5kbGVyc1t2ZWN0b3JdW2VjXSkKIAkJcmV0dXJuIGhhbmRsZXJzLSZndDtleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10ocmVncyk7CiAKQEAgLTQ0OCw2ICYjNDM7NTE4LDkgQEAgdm9pZCB2Y3B1X2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAKIHZvaWQgdm1faW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdm0gKnZtKQogewomIzQzOwlpZiAodm0tJmd0O2hhbmRsZXJzKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXZtLSZndDtoYW5kbGVycyA9IF9fdm1fYWxsb2Modm0sIHNpemVvZihzdHJ1Y3QgaGFuZGxlcnMpLCB2bS0mZ3Q7cGFnZV9zaXplLAogCQkJCSAgTUVNX1JFR0lPTl9EQVRBKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzA0CgkJCQkJCQlvdXRwdXQ6IDg4CgkJCQkJCQl0aG91Z2h0czogNDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBTZWxmdGVzdCBQYXRjaCBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCYjMzk7cyB0d2Vha2luZyB0aGUgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBlbmFibGluZyBvZiB0aGUgViBleHRlbnNpb24gd2l0aGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1NlbGYtdGVzdHMgb25seSwgcmlnaHQ/JiMzNDsgQnV0IEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4KCkxldCYjMzk7cyBxdWlja2x5IHZlcmlmeS4gUmlnaHQsIGl0JiMzOTtzIGV4cGxpY2l0bHkgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKmAgc3VidHJlZS4gT2theSwgKnRoYXQqIGNvbmZpcm1zIGl0LiBObyBtb2RpZmljYXRpb25zIHRvIHRoZSBjb3JlIGtlcm5lbCBpdHNlbGYuIE5vIGRyaXZlcnMsIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGJleW9uZCB0aGUgdGVzdGluZyBmcmFtZXdvcmsuIE5vdGhpbmcgdGhhdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBrZXJuZWwmIzM5O3MgZnVuY3Rpb25hbCBiZWhhdmlvci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGRpZmYgdGhlIGZpbGVzIHRvIGRvdWJsZS1jaGVjay4gWXVwLCBqdXN0IHRob3NlIHR3byBmaWxlcy4gQWxsIGdvb2QuCgpTbywgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoICpvbmx5KiB0b3VjaGVzIHNlbGZ0ZXN0cywgYWRkaW5nIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6aWx5IGVuYWJsaW5nIHRoZSBWIGV4dGVuc2lvbiBpbiB0aGUgZ3Vlc3QgZXhjZXB0aW9uIGhhbmRsZXIsIGFuZCBoYXMgYWJzb2x1dGVseSB6ZXJvIGltcGFjdCBvbiBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYW55IG90aGVyIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnRzLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGZ1enogdGhpcy4gVGhpcyBpcyBhIHB1cmVseSB0ZXN0aW5nLWZvY3VzZWQgY2hhbmdlLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MzY6NDguNzgyMjQ0NjE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzNjc5Mzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gYWRkIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBWIGV4dGVuc2lvbiBlbmFibGVtZW50IGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjQ4Ljc4MjI1MTM4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzYwODY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MzY6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0yNSw2ICsyNSwxOSBAQFxcbiAjZGVmaW5lIEdFVF9STShpbnNuKSAgICAgICAgICAgICgoKGluc24pIFxcdTAwMjYgSU5TTl9NQVNLX0ZVTkNUMykgXFx1MDAzZVxcdTAwM2UgSU5TTl9TSElGVF9GVU5DVDMpXFxuICNkZWZpbmUgR0VUX0NTUl9OVU0oaW5zbikgICAgICAgKCgoaW5zbikgXFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBJTlNOX0NTUl9TSElGVClcXG4gXFxuKy8qIFZlY3RvciAoVikgaW5zdHJ1Y3Rpb24gZGVjb2RpbmcsIG1hdGNoaW5nIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20vaW5zbi5oICovXFxuKyNkZWZpbmUgUlZfSU5TTl9PUENPREVfTUFTS1xcdDB4N2ZcXG4rI2RlZmluZSBSVkdfT1BDT0RFX1NZU1RFTVxcdDB4NzNcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlxcdDB4NTdcXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZMXFx0XFx0MHgwN1xcbisjZGVmaW5lIFJWVl9PUENPREVfVlNcXHRcXHQweDI3XFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzhcXHQwXFxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzE2XFx0NVxcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlxcdDZcXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfNjRcXHQ3XFxuKyNkZWZpbmUgUlZWX0VYVFJBQ1RfVkxfVlNfV0lEVEgoaW5zbilcXHQoKChpbnNuKSBcXHUwMDNlXFx1MDAzZSAxMikgXFx1MDAyNiAweDcpXFxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVxcdCgoKGluc24pIFxcdTAwM2VcXHUwMDNlIDIwKSBcXHUwMDI2IDB4ZmZmKVxcbitcXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXFxuIHtcXG4gXFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZGVkNTQyOWYzNDQ4My4uZDAwYWM5OTcyOTFjMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xcbkBAIC0xNyw2ICsxNywxMSBAQFxcbiBcXG4gc3RhdGljIGd2YV90IGV4Y2VwdGlvbl9oYW5kbGVycztcXG4gXFxuK3N0cnVjdCBoYW5kbGVycyB7XFxuK1xcdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcXG4rXFx0Ym9vbCB2X2F2YWlsYWJsZTtcXG4rfTtcXG4rXFxuIGJvb2wgX192Y3B1X2hhc19leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZXh0KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAwO1xcbkBAIC0yOTgsMTMgKzMwMyw2IEBAIHZvaWQgdmNwdV9hcmNoX2R1bXAoRklMRSAqc3RyZWFtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU4IGluZGVudClcXG4gXFx0XFx0Y29yZS5yZWdzLnQzLCBjb3JlLnJlZ3MudDQsIGNvcmUucmVncy50NSwgY29yZS5yZWdzLnQ2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgX19hbGlnbmVkKDE2KSBndWVzdF91bmV4cF90cmFwKHZvaWQpXFxuLXtcXG4tXFx0c2JpX2VjYWxsKEtWTV9SSVNDVl9TRUxGVEVTVFNfU0JJX0VYVCxcXG4tXFx0XFx0ICBLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9VTkVYUCxcXG4tXFx0XFx0ICAwLCAwLCAwLCAwLCAwLCAwKTtcXG4tfVxcbi1cXG4gdm9pZCB2Y3B1X2FyY2hfc2V0X2VudHJ5X3BvaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqZ3Vlc3RfY29kZSlcXG4ge1xcbiBcXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfQ09SRV9SRUcocmVncy5wYyksICh1bnNpZ25lZCBsb25nKWd1ZXN0X2NvZGUpO1xcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXFxuIFxcdC8qIFNldHVwIHNzY3JhdGNoIGZvciBndWVzdF9nZXRfdmNwdWlkKCkgKi9cXG4gXFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0dFTkVSQUxfQ1NSX1JFRyhzc2NyYXRjaCksIHZjcHVfaWQpO1xcbiBcXG4tXFx0LyogU2V0dXAgZGVmYXVsdCBleGNlcHRpb24gdmVjdG9yIG9mIGd1ZXN0ICovXFxuLVxcdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcXG4rXFx0LypcXG4rXFx0ICogQWR2ZXJ0aXNlIFYgdG8gS1ZNIHNvIC1PMiBhdXRvLXZlY3Rvcml6YXRpb24gaW4gZ3Vlc3QgY29kZSBpcyB2YWxpZDtcXG4rXFx0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcXG4rXFx0ICogZXhjZXB0aW9uIHZlY3RvciB0YWJsZSAod2hpY2ggbGF6aWx5IGVuYWJsZXMgViBpbiByb3V0ZV9leGNlcHRpb24oKSlcXG4rXFx0ICogYXMgdGhlIGRlZmF1bHQgaGFuZGxlcjsgdm1faW5pdF92ZWN0b3JfdGFibGVzKCkgaXMgaWRlbXBvdGVudC5cXG4rXFx0ICovXFxuK1xcdF9fdmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0lTQV9FWFRfUkVHKEtWTV9SSVNDVl9JU0FfRVhUX1YpLCAxKTtcXG4rXFx0dm1faW5pdF92ZWN0b3JfdGFibGVzKHZtKTtcXG4rXFx0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWNvcmQgViBhdmFpbGFiaWxpdHkgZm9yIHJvdXRlX2V4Y2VwdGlvbigpLCB3aGljaCBydW5zIGluIGd1ZXN0XFxuK1xcdCAqIGNvbnRleHQuIFYgaXMgZW5hYmxlZCB1bmlmb3JtbHkgZm9yIGV2ZXJ5IHZDUFUsIHNvIHRoaXMgaXMgYVxcbitcXHQgKiBWTS13aWRlIHByb3BlcnR5LlxcbitcXHQgKi9cXG4rXFx0e1xcbitcXHRcXHRzdHJ1Y3QgaGFuZGxlcnMgKmggPSBhZGRyX2d2YTJodmEodm0sIHZtLVxcdTAwM2VoYW5kbGVycyk7XFxuK1xcbitcXHRcXHRoLVxcdTAwM2V2X2F2YWlsYWJsZSA9IF9fdmNwdV9oYXNfaXNhX2V4dCh2Y3B1LCBLVk1fUklTQ1ZfSVNBX0VYVF9WKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZjcHU7XFxuIH1cXG5AQCAtNDA4LDE5ICs0MjQsNDMgQEAgdm9pZCBhc3NlcnRfb25fdW5oYW5kbGVkX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdHN0cnVjdCB1Y2FsbCB1YztcXG4gXFxuIFxcdGlmIChnZXRfdWNhbGwodmNwdSwgXFx1MDAyNnVjKSA9PSBVQ0FMTF9VTkhBTkRMRUQpIHtcXG4rXFx0XFx0dmNwdV9kdW1wKHN0ZGVyciwgdmNwdSwgMik7XFxuIFxcdFxcdFRFU1RfRkFJTChcXFwiVW5leHBlY3RlZCBleGNlcHRpb24gKHZlY3RvcjoweCVseCwgZWM6MHglbHgpXFxcIixcXG4gXFx0XFx0XFx0dWMuYXJnc1swXSwgdWMuYXJnc1sxXSk7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RydWN0IGhhbmRsZXJzIHtcXG4tXFx0ZXhjZXB0aW9uX2hhbmRsZXJfZm4gZXhjZXB0aW9uX2hhbmRsZXJzW05SX1ZFQ1RPUlNdW05SX0VYQ0VQVElPTlNdO1xcbi19O1xcbitzdGF0aWMgYm9vbCBpbnNuX2lzX3ZlY3Rvcih1MzIgaW5zbilcXG4re1xcbitcXHR1MzIgb3Bjb2RlID0gaW5zbiBcXHUwMDI2IFJWX0lOU05fT1BDT0RFX01BU0s7XFxuK1xcdHUzMiB3aWR0aCwgY3NyO1xcbitcXG4rXFx0LyogQWxsIFYtcmVsYXRlZCBpbnN0cnVjdGlvbnMgYXJlIDQtYnl0ZSwgaS5lLiBub3QgY29tcHJlc3NlZC4gKi9cXG4rXFx0aWYgKChpbnNuIFxcdTAwMjYgMHgzKSAhPSAweDMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN3aXRjaCAob3Bjb2RlKSB7XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIFJWVl9PUENPREVfVkw6XFxuK1xcdGNhc2UgUlZWX09QQ09ERV9WUzpcXG4rXFx0XFx0d2lkdGggPSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIHdpZHRoID09IFJWVl9WTF9WU19XSURUSF84IHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF8xNiB8fFxcbitcXHRcXHQgICAgICAgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzMyIHx8IHdpZHRoID09IFJWVl9WTF9WU19XSURUSF82NDtcXG4rXFx0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcXG4rXFx0XFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcXG4rXFx0XFx0cmV0dXJuIChjc3IgXFx1MDAzZT0gQ1NSX1ZTVEFSVCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZDU1IpIHx8XFxuK1xcdFxcdCAgICAgICAoY3NyIFxcdTAwM2U9IENTUl9WTCBcXHUwMDI2XFx1MDAyNiBjc3IgXFx1MDAzYz0gQ1NSX1ZMRU5CKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuIFxcbiB2b2lkIHJvdXRlX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbiBcXHRzdHJ1Y3QgaGFuZGxlcnMgKmhhbmRsZXJzID0gKHN0cnVjdCBoYW5kbGVycyAqKWV4Y2VwdGlvbl9oYW5kbGVycztcXG4tXFx0aW50IHZlY3RvciA9IDAsIGVjO1xcbitcXHRpbnQgdmVjdG9yID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlYztcXG4gXFxuIFxcdGVjID0gcmVncy1cXHUwMDNlY2F1c2UgXFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XFxuIFxcdGlmIChlYyBcXHUwMDNlPSBOUl9FWENFUFRJT05TKVxcbkBAIC00MzIsNiArNDcyLDM2IEBAIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbiBcXHRcXHRlYyA9IDA7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExhemlseSBlbmFibGUgViBvbiB0aGUgZmlyc3QgdmVjdG9yIGluc3RydWN0aW9uOiBpZiB0aGUgZmF1bHRpbmdcXG4rXFx0ICogaW5zdHJ1Y3Rpb24gZGVjb2RlcyBhcyB2ZWN0b3Igd2hpbGUgVlMgaXMgb2ZmLCBzZXQgVlMgdG8gSW5pdGlhbFxcbitcXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxcbitcXHQgKiBHZW51aW5lbHkgaWxsZWdhbCBpbnN0cnVjdGlvbnMgY29udGludWUgdG8gdGhlIHVuZXhwZWN0ZWQtZXhjZXB0aW9uXFxuK1xcdCAqIHBhdGguXFxuK1xcdCAqL1xcbitcXHRpZiAoIShyZWdzLVxcdTAwM2VjYXVzZSBcXHUwMDI2IENBVVNFX0lSUV9GTEFHKSBcXHUwMDI2XFx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBoYW5kbGVycyBcXHUwMDI2XFx1MDAyNiBoYW5kbGVycy1cXHUwMDNldl9hdmFpbGFibGUgXFx1MDAyNlxcdTAwMjYgIShyZWdzLVxcdTAwM2VzdGF0dXMgXFx1MDAyNiBTUl9WUykpIHtcXG4rXFx0XFx0dTMyIGluc24gPSAodTMyKXJlZ3MtXFx1MDAzZWJhZGFkZHI7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBzdHZhbCBpcyBub3QgZ3VhcmFudGVlZCB0byBob2xkIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbi5cXG4rXFx0XFx0ICogVmVjdG9yIGluc3RydWN0aW9ucyBhcmUgYWx3YXlzIDMyLWJpdCwgc28gY2hlY2sgdGhlIGZpcnN0XFxuK1xcdFxcdCAqIDE2LWJpdCBoYWxmd29yZCBhbmQsIGZvciBhIDMyLWJpdCBpbnN0cnVjdGlvbiwgYXNzZW1ibGUgaXRcXG4rXFx0XFx0ICogZnJvbSB0d28gaGFsZndvcmRzIHRvIGF2b2lkIGFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFpbnNuKSB7XFxuK1xcdFxcdFxcdHUxNiBoYWxmID0gKih1MTYgKilyZWdzLVxcdTAwM2VlcGM7XFxuK1xcbitcXHRcXHRcXHRpZiAoKGhhbGYgXFx1MDAyNiAweDMpID09IDB4MylcXG4rXFx0XFx0XFx0XFx0aW5zbiA9ICh1MzIpaGFsZiB8ICgodTMyKSoodTE2ICopKHJlZ3MtXFx1MDAzZWVwYyArIDIpIFxcdTAwM2NcXHUwMDNjIDE2KTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XFxuK1xcdFxcdFxcdHJlZ3MtXFx1MDAzZXN0YXR1cyB8PSBTUl9WU19JTklUSUFMO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0aWYgKGhhbmRsZXJzIFxcdTAwMjZcXHUwMDI2IGhhbmRsZXJzLVxcdTAwM2VleGNlcHRpb25faGFuZGxlcnNbdmVjdG9yXVtlY10pXFxuIFxcdFxcdHJldHVybiBoYW5kbGVycy1cXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKHJlZ3MpO1xcbiBcXG5AQCAtNDQ4LDYgKzUxOCw5IEBAIHZvaWQgdmNwdV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXG4gdm9pZCB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4rXFx0aWYgKHZtLVxcdTAwM2VoYW5kbGVycylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0dm0tXFx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVxcdTAwM2VwYWdlX3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgTUVNX1JFR0lPTl9EQVRBKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjUwLjIyMDg1NTUxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0OTgxMzc4NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgS1ZNIHNlbGZ0ZXN0cyBmb3IgUklTQy1WICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vKikgdG8gYWRkIHZlY3RvciBpbnN0cnVjdGlvbiBkZWNvZGluZyBhbmQgbGF6eSBWIGV4dGVuc2lvbiBlbmFibGVtZW50IGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlci4gSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ4NTAxM2UwYjBlODFhOWI5ZjM1Yzg4NDI3YmM5MjYyZjYzYzU1YTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjozNjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjY4NWJhZWZlYmRiMTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbkBAIC0yNSw2ICsyNSwxOSBAQFxuICNkZWZpbmUgR0VUX1JNKGluc24pICAgICAgICAgICAgKCgoaW5zbikgXHUwMDI2IElOU05fTUFTS19GVU5DVDMpIFx1MDAzZVx1MDAzZSBJTlNOX1NISUZUX0ZVTkNUMylcbiAjZGVmaW5lIEdFVF9DU1JfTlVNKGluc24pICAgICAgICgoKGluc24pIFx1MDAyNiBJTlNOX0NTUl9NQVNLKSBcdTAwM2VcdTAwM2UgSU5TTl9DU1JfU0hJRlQpXG4gXG4rLyogVmVjdG9yIChWKSBpbnN0cnVjdGlvbiBkZWNvZGluZywgbWF0Y2hpbmcgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9pbnNuLmggKi9cbisjZGVmaW5lIFJWX0lOU05fT1BDT0RFX01BU0tcdDB4N2ZcbisjZGVmaW5lIFJWR19PUENPREVfU1lTVEVNXHQweDczXG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZFQ1RPUlx0MHg1N1xuKyNkZWZpbmUgUlZWX09QQ09ERV9WTFx0XHQweDA3XG4rI2RlZmluZSBSVlZfT1BDT0RFX1ZTXHRcdDB4MjdcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF84XHQwXG4rI2RlZmluZSBSVlZfVkxfVlNfV0lEVEhfMTZcdDVcbisjZGVmaW5lIFJWVl9WTF9WU19XSURUSF8zMlx0NlxuKyNkZWZpbmUgUlZWX1ZMX1ZTX1dJRFRIXzY0XHQ3XG4rI2RlZmluZSBSVlZfRVhUUkFDVF9WTF9WU19XSURUSChpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDEyKSBcdTAwMjYgMHg3KVxuKyNkZWZpbmUgUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKVx0KCgoaW5zbikgXHUwMDNlXHUwMDNlIDIwKSBcdTAwMjYgMHhmZmYpXG4rXG4gc3RhdGljIGlubGluZSB1NjQgX19rdm1fcmVnX2lkKHU2NCB0eXBlLCB1NjQgc3VidHlwZSwgdTY0IGlkeCwgdTY0IHNpemUpXG4ge1xuIFx0cmV0dXJuIEtWTV9SRUdfUklTQ1YgfCB0eXBlIHwgc3VidHlwZSB8IGlkeCB8IHNpemU7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmQwMGFjOTk3MjkxYzAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtMTcsNiArMTcsMTEgQEBcbiBcbiBzdGF0aWMgZ3ZhX3QgZXhjZXB0aW9uX2hhbmRsZXJzO1xuIFxuK3N0cnVjdCBoYW5kbGVycyB7XG4rXHRleGNlcHRpb25faGFuZGxlcl9mbiBleGNlcHRpb25faGFuZGxlcnNbTlJfVkVDVE9SU11bTlJfRVhDRVBUSU9OU107XG4rXHRib29sIHZfYXZhaWxhYmxlO1xuK307XG4rXG4gYm9vbCBfX3ZjcHVfaGFzX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBleHQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IDA7XG5AQCAtMjk4LDEzICszMDMsNiBAQCB2b2lkIHZjcHVfYXJjaF9kdW1wKEZJTEUgKnN0cmVhbSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1OCBpbmRlbnQpXG4gXHRcdGNvcmUucmVncy50MywgY29yZS5yZWdzLnQ0LCBjb3JlLnJlZ3MudDUsIGNvcmUucmVncy50Nik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYWxpZ25lZCgxNikgZ3Vlc3RfdW5leHBfdHJhcCh2b2lkKVxuLXtcbi1cdHNiaV9lY2FsbChLVk1fUklTQ1ZfU0VMRlRFU1RTX1NCSV9FWFQsXG4tXHRcdCAgS1ZNX1JJU0NWX1NFTEZURVNUU19TQklfVU5FWFAsXG4tXHRcdCAgMCwgMCwgMCwgMCwgMCwgMCk7XG4tfVxuLVxuIHZvaWQgdmNwdV9hcmNoX3NldF9lbnRyeV9wb2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHZvaWQgKmd1ZXN0X2NvZGUpXG4ge1xuIFx0dmNwdV9zZXRfcmVnKHZjcHUsIFJJU0NWX0NPUkVfUkVHKHJlZ3MucGMpLCAodW5zaWduZWQgbG9uZylndWVzdF9jb2RlKTtcbkBAIC0zNDgsOCArMzQ2LDI2IEBAIHN0cnVjdCBrdm1fdmNwdSAqdm1fYXJjaF92Y3B1X2FkZChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIHZjcHVfaWQpXG4gXHQvKiBTZXR1cCBzc2NyYXRjaCBmb3IgZ3Vlc3RfZ2V0X3ZjcHVpZCgpICovXG4gXHR2Y3B1X3NldF9yZWcodmNwdSwgUklTQ1ZfR0VORVJBTF9DU1JfUkVHKHNzY3JhdGNoKSwgdmNwdV9pZCk7XG4gXG4tXHQvKiBTZXR1cCBkZWZhdWx0IGV4Y2VwdGlvbiB2ZWN0b3Igb2YgZ3Vlc3QgKi9cbi1cdHZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9HRU5FUkFMX0NTUl9SRUcoc3R2ZWMpLCAodW5zaWduZWQgbG9uZylndWVzdF91bmV4cF90cmFwKTtcbitcdC8qXG4rXHQgKiBBZHZlcnRpc2UgViB0byBLVk0gc28gLU8yIGF1dG8tdmVjdG9yaXphdGlvbiBpbiBndWVzdCBjb2RlIGlzIHZhbGlkO1xuK1x0ICogaWdub3JlIGVycm9ycyBzaW5jZSB0aGUgdGVzdHMgd29yayB3aXRob3V0IFYgdG9vLiBVc2UgdGhlIGZ1bGxcbitcdCAqIGV4Y2VwdGlvbiB2ZWN0b3IgdGFibGUgKHdoaWNoIGxhemlseSBlbmFibGVzIFYgaW4gcm91dGVfZXhjZXB0aW9uKCkpXG4rXHQgKiBhcyB0aGUgZGVmYXVsdCBoYW5kbGVyOyB2bV9pbml0X3ZlY3Rvcl90YWJsZXMoKSBpcyBpZGVtcG90ZW50LlxuK1x0ICovXG4rXHRfX3ZjcHVfc2V0X3JlZyh2Y3B1LCBSSVNDVl9JU0FfRVhUX1JFRyhLVk1fUklTQ1ZfSVNBX0VYVF9WKSwgMSk7XG4rXHR2bV9pbml0X3ZlY3Rvcl90YWJsZXModm0pO1xuK1x0dmNwdV9pbml0X3ZlY3Rvcl90YWJsZXModmNwdSk7XG4rXG4rXHQvKlxuK1x0ICogUmVjb3JkIFYgYXZhaWxhYmlsaXR5IGZvciByb3V0ZV9leGNlcHRpb24oKSwgd2hpY2ggcnVucyBpbiBndWVzdFxuK1x0ICogY29udGV4dC4gViBpcyBlbmFibGVkIHVuaWZvcm1seSBmb3IgZXZlcnkgdkNQVSwgc28gdGhpcyBpcyBhXG4rXHQgKiBWTS13aWRlIHByb3BlcnR5LlxuK1x0ICovXG4rXHR7XG4rXHRcdHN0cnVjdCBoYW5kbGVycyAqaCA9IGFkZHJfZ3ZhMmh2YSh2bSwgdm0tXHUwMDNlaGFuZGxlcnMpO1xuK1xuK1x0XHRoLVx1MDAzZXZfYXZhaWxhYmxlID0gX192Y3B1X2hhc19pc2FfZXh0KHZjcHUsIEtWTV9SSVNDVl9JU0FfRVhUX1YpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHZjcHU7XG4gfVxuQEAgLTQwOCwxOSArNDI0LDQzIEBAIHZvaWQgYXNzZXJ0X29uX3VuaGFuZGxlZF9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHVjYWxsIHVjO1xuIFxuIFx0aWYgKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykgPT0gVUNBTExfVU5IQU5ETEVEKSB7XG4rXHRcdHZjcHVfZHVtcChzdGRlcnIsIHZjcHUsIDIpO1xuIFx0XHRURVNUX0ZBSUwoXCJVbmV4cGVjdGVkIGV4Y2VwdGlvbiAodmVjdG9yOjB4JWx4LCBlYzoweCVseClcIixcbiBcdFx0XHR1Yy5hcmdzWzBdLCB1Yy5hcmdzWzFdKTtcbiBcdH1cbiB9XG4gXG4tc3RydWN0IGhhbmRsZXJzIHtcbi1cdGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGV4Y2VwdGlvbl9oYW5kbGVyc1tOUl9WRUNUT1JTXVtOUl9FWENFUFRJT05TXTtcbi19O1xuK3N0YXRpYyBib29sIGluc25faXNfdmVjdG9yKHUzMiBpbnNuKVxuK3tcbitcdHUzMiBvcGNvZGUgPSBpbnNuIFx1MDAyNiBSVl9JTlNOX09QQ09ERV9NQVNLO1xuK1x0dTMyIHdpZHRoLCBjc3I7XG4rXG4rXHQvKiBBbGwgVi1yZWxhdGVkIGluc3RydWN0aW9ucyBhcmUgNC1ieXRlLCBpLmUuIG5vdCBjb21wcmVzc2VkLiAqL1xuK1x0aWYgKChpbnNuIFx1MDAyNiAweDMpICE9IDB4MylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChvcGNvZGUpIHtcbitcdGNhc2UgUlZWX09QQ09ERV9WRUNUT1I6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZMOlxuK1x0Y2FzZSBSVlZfT1BDT0RFX1ZTOlxuK1x0XHR3aWR0aCA9IFJWVl9FWFRSQUNUX1ZMX1ZTX1dJRFRIKGluc24pO1xuK1x0XHRyZXR1cm4gd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzggfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzE2IHx8XG4rXHRcdCAgICAgICB3aWR0aCA9PSBSVlZfVkxfVlNfV0lEVEhfMzIgfHwgd2lkdGggPT0gUlZWX1ZMX1ZTX1dJRFRIXzY0O1xuK1x0Y2FzZSBSVkdfT1BDT0RFX1NZU1RFTTpcbitcdFx0Y3NyID0gUlZHX0VYVFJBQ1RfU1lTVEVNX0NTUihpbnNuKTtcbitcdFx0cmV0dXJuIChjc3IgXHUwMDNlPSBDU1JfVlNUQVJUIFx1MDAyNlx1MDAyNiBjc3IgXHUwMDNjPSBDU1JfVkNTUikgfHxcbitcdFx0ICAgICAgIChjc3IgXHUwMDNlPSBDU1JfVkwgXHUwMDI2XHUwMDI2IGNzciBcdTAwM2M9IENTUl9WTEVOQik7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuIFxuIHZvaWQgcm91dGVfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbiBcdHN0cnVjdCBoYW5kbGVycyAqaGFuZGxlcnMgPSAoc3RydWN0IGhhbmRsZXJzICopZXhjZXB0aW9uX2hhbmRsZXJzO1xuLVx0aW50IHZlY3RvciA9IDAsIGVjO1xuK1x0aW50IHZlY3RvciA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGVjO1xuIFxuIFx0ZWMgPSByZWdzLVx1MDAzZWNhdXNlIFx1MDAyNiB+Q0FVU0VfSVJRX0ZMQUc7XG4gXHRpZiAoZWMgXHUwMDNlPSBOUl9FWENFUFRJT05TKVxuQEAgLTQzMiw2ICs0NzIsMzYgQEAgdm9pZCByb3V0ZV9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4gXHRcdGVjID0gMDtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBMYXppbHkgZW5hYmxlIFYgb24gdGhlIGZpcnN0IHZlY3RvciBpbnN0cnVjdGlvbjogaWYgdGhlIGZhdWx0aW5nXG4rXHQgKiBpbnN0cnVjdGlvbiBkZWNvZGVzIGFzIHZlY3RvciB3aGlsZSBWUyBpcyBvZmYsIHNldCBWUyB0byBJbml0aWFsXG4rXHQgKiBhbmQgcmUtZXhlY3V0ZSBpdCwgbGlrZSB0aGUga2VybmVsJ3MgcmlzY3Zfdl9maXJzdF91c2VfaGFuZGxlcigpLlxuK1x0ICogR2VudWluZWx5IGlsbGVnYWwgaW5zdHJ1Y3Rpb25zIGNvbnRpbnVlIHRvIHRoZSB1bmV4cGVjdGVkLWV4Y2VwdGlvblxuK1x0ICogcGF0aC5cbitcdCAqL1xuK1x0aWYgKCEocmVncy1cdTAwM2VjYXVzZSBcdTAwMjYgQ0FVU0VfSVJRX0ZMQUcpIFx1MDAyNlx1MDAyNiBlYyA9PSBFWENfSU5TVF9JTExFR0FMIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGhhbmRsZXJzIFx1MDAyNlx1MDAyNiBoYW5kbGVycy1cdTAwM2V2X2F2YWlsYWJsZSBcdTAwMjZcdTAwMjYgIShyZWdzLVx1MDAzZXN0YXR1cyBcdTAwMjYgU1JfVlMpKSB7XG4rXHRcdHUzMiBpbnNuID0gKHUzMilyZWdzLVx1MDAzZWJhZGFkZHI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIHN0dmFsIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhvbGQgdGhlIGZhdWx0aW5nIGluc3RydWN0aW9uLlxuK1x0XHQgKiBWZWN0b3IgaW5zdHJ1Y3Rpb25zIGFyZSBhbHdheXMgMzItYml0LCBzbyBjaGVjayB0aGUgZmlyc3RcbitcdFx0ICogMTYtYml0IGhhbGZ3b3JkIGFuZCwgZm9yIGEgMzItYml0IGluc3RydWN0aW9uLCBhc3NlbWJsZSBpdFxuK1x0XHQgKiBmcm9tIHR3byBoYWxmd29yZHMgdG8gYXZvaWQgYW4gdW5hbGlnbmVkIDMyLWJpdCBhY2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluc24pIHtcbitcdFx0XHR1MTYgaGFsZiA9ICoodTE2ICopcmVncy1cdTAwM2VlcGM7XG4rXG4rXHRcdFx0aWYgKChoYWxmIFx1MDAyNiAweDMpID09IDB4MylcbitcdFx0XHRcdGluc24gPSAodTMyKWhhbGYgfCAoKHUzMikqKHUxNiAqKShyZWdzLVx1MDAzZWVwYyArIDIpIFx1MDAzY1x1MDAzYyAxNik7XG4rXHRcdH1cbitcbitcdFx0aWYgKGluc25faXNfdmVjdG9yKGluc24pKSB7XG4rXHRcdFx0cmVncy1cdTAwM2VzdGF0dXMgfD0gU1JfVlNfSU5JVElBTDtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChoYW5kbGVycyBcdTAwMjZcdTAwMjYgaGFuZGxlcnMtXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKVxuIFx0XHRyZXR1cm4gaGFuZGxlcnMtXHUwMDNlZXhjZXB0aW9uX2hhbmRsZXJzW3ZlY3Rvcl1bZWNdKHJlZ3MpO1xuIFxuQEAgLTQ0OCw2ICs1MTgsOSBAQCB2b2lkIHZjcHVfaW5pdF92ZWN0b3JfdGFibGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcbiB2b2lkIHZtX2luaXRfdmVjdG9yX3RhYmxlcyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4rXHRpZiAodm0tXHUwMDNlaGFuZGxlcnMpXG4rXHRcdHJldHVybjtcbitcbiBcdHZtLVx1MDAzZWhhbmRsZXJzID0gX192bV9hbGxvYyh2bSwgc2l6ZW9mKHN0cnVjdCBoYW5kbGVycyksIHZtLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHRcdCAgTUVNX1JFR0lPTl9EQVRBKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjM2OjUwLjIyMDg1NzYyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0OTgwOTg4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS1ZNIFNlbGZ0ZXN0IFBhdGNoIEFuYWx5c2lzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNgLiBJdCdzIHR3ZWFraW5nIHRoZSBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYsIHNwZWNpZmljYWxseSBhZGRpbmcgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IGVuYWJsaW5nIG9mIHRoZSBWIGV4dGVuc2lvbiB3aXRoaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiU2VsZi10ZXN0cyBvbmx5LCByaWdodD9cIiBCdXQgSSBuZWVkIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeS4gUmlnaHQsIGl0J3MgZXhwbGljaXRseSBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qYCBzdWJ0cmVlLiBPa2F5LCAqdGhhdCogY29uZmlybXMgaXQuIE5vIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvcmUga2VybmVsIGl0c2VsZi4gTm8gZHJpdmVycywgbm8gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgYmV5b25kIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4gTm90aGluZyB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuIEknbSBnb2luZyB0byBxdWlja2x5IGRpZmYgdGhlIGZpbGVzIHRvIGRvdWJsZS1jaGVjay4gWXVwLCBqdXN0IHRob3NlIHR3byBmaWxlcy4gQWxsIGdvb2QuXG5cblNvLCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgc2VsZnRlc3RzLCBhZGRpbmcgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXppbHkgZW5hYmxpbmcgdGhlIFYgZXh0ZW5zaW9uIGluIHRoZSBndWVzdCBleGNlcHRpb24gaGFuZGxlciwgYW5kIGhhcyBhYnNvbHV0ZWx5IHplcm8gaW1wYWN0IG9uIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnkgb3RoZXIgY3JpdGljYWwga2VybmVsIGNvbXBvbmVudHMsIHRoZXJlJ3Mgbm8gbmVlZCB0byBmdXp6IHRoaXMuIFRoaXMgaXMgYSBwdXJlbHkgdGVzdGluZy1mb2N1c2VkIGNoYW5nZS4gSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlbiBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDQsIk91dHB1dFRva2VucyI6ODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjozNjo1Ni43MTg5NjA0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBLVk0gc2VsZnRlc3RzIGZvciBSSVNDLVYgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8qKSB0byBhZGQgdmVjdG9yIGluc3RydWN0aW9uIGRlY29kaW5nIGFuZCBsYXp5IFYgZXh0ZW5zaW9uIGVuYWJsZW1lbnQgaW4gdGhlIGd1ZXN0IGV4Y2VwdGlvbiBoYW5kbGVyLiBJdCBkb2VzIG5vdCBtb2RpZnkgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MzY6NTYuNzE4OTk1OTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgnw4s[1] Phase: Running StartedAt: 2026-08-13 12:37:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgnw4s[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 12:37:13 +0000 UTC FinishedAt: 2026-08-13 12:37:19 +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,}