Name: series-workflow8t747 Phase: Failed StartedAt: 2026-08-03 17:04:57 +0000 UTC FinishedAt: 2026-08-03 17:11:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8t747[0] Phase: Succeeded StartedAt: 2026-08-03 17:04:57 +0000 UTC FinishedAt: 2026-08-03 17:11:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8t747[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 17:04:57 +0000 UTC FinishedAt: 2026-08-03 17:11:19 +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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjOGQ2NmU4YzFjNzRkM2QwODY0MGViMGE4ZmQ3N2VkNmI3Mjg4ODVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowNjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UuLjZlMmM3NWIxNjIwOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XG4gXG4gaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG5AQCAtMzAsNiAmIzQzOzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZyZWUodm9pZCAqbWVtKTtcbiB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbiBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gaW50IGtob19hZGRfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCB2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSk7XG5AQCAtNjUsNiAmIzQzOzY4LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWIuLmRkNDFkMzI0YzIxM2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtMzU3LDYgJiM0MzszNTcsMjQgQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbiYjNDM7LyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cbiYjNDM7c3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xuJiM0MztcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuJiM0MztcdC8qIENsZWFyIGhlYWQgcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4mIzQzO1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHQvKiBGb3IgaGlnaC1vcmRlciBibG9ja3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuJiM0MztcdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApO1xuJiM0MztcdFx0LyogQ2xlYXIgZWFjaCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbiYjNDM7XHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4gc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuQEAgLTM2OSwyNSAmIzQzOzM4NywxNSBAQCBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcbiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbi1cdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbi1cbi1cdC8qIEZvciBoaWdoZXIgb3JkZXIgZm9saW9zLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApO1xuJiM0MztcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKFBIWVNfUEZOKHBoeXMpKTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4gXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XG4gXG4gXHRpZiAoIXBhZ2UpXG5AQCAtNDAxLDE3ICYjNDM7NDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuIFx0ICovXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIGluZm8ub3JkZXIpO1xuIFxuIFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cbiBcdHBhZ2UtXHUwMDNlcHJpdmF0ZSA9IDA7XG4mIzQzO1x0aWYgKG9yZGVyKVxuJiM0MztcdFx0Km9yZGVyID0gaW5mby5vcmRlcjtcbiBcbi1cdGlmIChpc19mb2xpbylcbi1cdFx0a2hvX2luaXRfZm9saW8ocGFnZSwgaW5mby5vcmRlcik7XG4tXHRlbHNlXG4tXHRcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbiYjNDM7XHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4tXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbiBcbkBAIC00MjMsMTIgJiM0Mzs0MjgsNDEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4gICovXG4gc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuIHtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShwaHlzLCB0cnVlKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0a2hvX2luaXRfZm9saW8ocGFnZSwgb3JkZXIpO1xuIFxuLVx0cmV0dXJuIHBhZ2UgPyBwYWdlX2ZvbGlvKHBhZ2UpIDogTlVMTDtcbiYjNDM7XHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICoga2hvX3Jlc3RvcmVfcGFnZSAtIHJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG4mIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIGhlYWQgcGFnZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsIFx1MDAyNm9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xuJiM0MztcbiAvKipcbiAgKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG4gICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuXG5AQCAtNDQ4LDEwICYjNDM7NDgyLDEzIEBAIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPVxuIFx0XHRcdG1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFx1MDAyNmluZm9fb3JkZXIpO1xuIFxuIFx0XHRpZiAoIXBhZ2UpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBpbmZvX29yZGVyKTtcbiBcdFx0cGZuICYjNDM7PSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdH1cbiBcbkBAIC04ODEsNiAmIzQzOzkxOCw1MSBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbiYjNDM7ICogYnVmZmVyKSBhcyBhIHNpbmdsZSB1bml0LiBJdCBtdXN0IGJlIHJlc3RvcmVkIHVzaW5nIGtob19yZXN0b3JlX3BhZ2UoKSB0b1xuJiM0MzsgKiBlbnN1cmUgdGhlIHRhaWwgcGFnZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB3aXRoIGEgemVybyByZWZjb3VudC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgYSBkcml2ZXIgbmVlZHMgdG8gc3BsaXQgYSBibG9jayB0aGF0IGhhcyBiZWVuIHByZXNlcnZlZCB3aXRoIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLFxuJiM0MzsgKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbiYjNDM7ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga2hvX3VucHJlc2VydmVfcGFnZSAtIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnN0cnVjdHMgS0hPIHRvIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCBieVxuJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlKTtcbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG5AQCAtOTE4LDcgJiM0MzsxMDAwLDggQEAgc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMuXG4gICpcbiAgKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG4tICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwLlxuJiM0MzsgKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDBcbiYjNDM7ICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQVBJcyAoYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWApIGZvciBLZXhlYyBIYW5kb3ZlciAoS0hPKSB3aGljaCBhcmUgY3VycmVudGx5IHVudXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHRyZWUuIEl0IGFsc28gcmVmYWN0b3JzIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2AgdG8gdXNlIGEgbmV3IGludGVybmFsIGhlbHBlciBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIG1vZGlmaWVzIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIHRvIGNsZWFyIHBhZ2UgdGFncyBmb3IgdGFpbCBwYWdlcy4gSG93ZXZlciwgYWxsIG9mIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIG9ubHkgcmVhY2hhYmxlIGR1cmluZyB0aGUgS0hPIHJlc3RvcmUgcGhhc2UsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBrZXJuZWwgdG8gYmUgYm9vdGVkIHdpdGggS0hPIGRhdGEgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwuIFNpbmNlIHN5emthbGxlciBib290cyBmcm9tIGEgZnJlc2ggVk0gaW1hZ2Ugd2l0aG91dCBLSE8gZGF0YSwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA2OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDg5NjhjNTZkMmQ3M2UuLjZlMmM3NWIxNjIwOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgKQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7CiAKIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKJiM0Mzt2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pOwpAQCAtMzAsNiAmIzQzOzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTsKIHZvaWQga2hvX3VucHJlc2VydmVfZnJlZSh2b2lkICptZW0pOwogdm9pZCBraG9fcmVzdG9yZV9mcmVlKHZvaWQgKm1lbSk7CiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpOwomIzQzO3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpOwogc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7CiBpbnQga2hvX2FkZF9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJsb2IsIHNpemVfdCBzaXplKTsKQEAgLTY1LDYgJiM0Mzs2OCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAogc3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsCiAJCQkJICAgICAgIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggNDgzNGE4MDk5ODVhYi4uZGQ0MWQzMjRjMjEzZCAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0zNTcsNiAmIzQzOzM1NywyNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTsKIAomIzQzOy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovCiYjNDM7c3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDFVTCAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CiYjNDM7CS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwomIzQzOwkvKiBDbGVhciBoZWFkIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqLwomIzQzOwljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7CiYjNDM7CiYjNDM7CS8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCiYjNDM7CWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsJCS8qIENsZWFyIGVhY2ggcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovCiYjNDM7CQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgMC1vcmRlciBwYWdlcy4gKi8KIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewpAQCAtMzY5LDI1ICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogCiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSAmbHQ7Jmx0OyBvcmRlcik7Ci0KLQkvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqLwotCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwotCS8qIENsZWFyIGhlYWQgcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovCi0JY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpOwotCi0JLyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqLwotCWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykKLQkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsJa2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHBhZ2UsIG9yZGVyKTsKIAogCWlmIChvcmRlciAmZ3Q7IDApCiAJCXByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UoUEhZU19QRk4ocGh5cykpOwotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJdW5pb24ga2hvX3BhZ2VfaW5mbyBpbmZvOwogCiAJaWYgKCFwYWdlKQpAQCAtNDAxLDE3ICYjNDM7NDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQogCSAqLwogCWlmIChXQVJOX09OX09OQ0UoaW5mby5tYWdpYyAhPSBLSE9fUEFHRV9NQUdJQykpCiAJCXJldHVybiBOVUxMOwotCW5yX3BhZ2VzID0gKDEgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKIAkvKiBDbGVhciBwcml2YXRlIHRvIG1ha2Ugc3VyZSBsYXRlciByZXN0b3JlcyBvbiB0aGlzIHBhZ2UgZXJyb3Igb3V0LiAqLwogCXBhZ2UtJmd0O3ByaXZhdGUgPSAwOwomIzQzOwlpZiAob3JkZXIpCiYjNDM7CQkqb3JkZXIgPSBpbmZvLm9yZGVyOwogCi0JaWYgKGlzX2ZvbGlvKQotCQlraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTsKLQllbHNlCi0JCWtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTsKJiM0MzsJYWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCAxVUwgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKLQlhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTsKIAlyZXR1cm4gcGFnZTsKIH0KIApAQCAtNDIzLDEyICYjNDM7NDI4LDQxIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQogICovCiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKHBoeXMsIHRydWUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXI7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsICZhbXA7b3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJa2hvX2luaXRfZm9saW8ocGFnZSwgb3JkZXIpOwogCi0JcmV0dXJuIHBhZ2UgPyBwYWdlX2ZvbGlvKHBhZ2UpIDogTlVMTDsKJiM0MzsJcmV0dXJuIHBhZ2VfZm9saW8ocGFnZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7CiAKJiM0MzsvKioKJiM0MzsgKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay4KJiM0MzsgKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS4KJiM0MzsgKgomIzQzOyAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGgKJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgaGVhZCBwYWdlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCAmYW1wO29yZGVyKTsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTsKJiM0MzsKIC8qKgogICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLgogICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuCkBAIC00NDgsMTAgJiM0Mzs0ODIsMTMgQEAgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAJd2hpbGUgKHBmbiAmbHQ7IGVuZF9wZm4pIHsKIAkJY29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0KIAkJCW1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksICZhbXA7aW5mb19vcmRlcik7CiAKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgaW5mb19vcmRlcik7CiAJCXBmbiAmIzQzOz0gMSAmbHQ7Jmx0OyBvcmRlcjsKIAl9CiAKQEAgLTg4MSw2ICYjNDM7OTE4LDUxIEBAIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTsKIAomIzQzOy8qKgomIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suCiYjNDM7ICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suCiYjNDM7ICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIEluc3RydWN0cyBLSE8gdG8gcHJlc2VydmUgYSBoaWdoLW9yZGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiAobGlrZSBhIERNQQomIzQzOyAqIGJ1ZmZlcikgYXMgYSBzaW5nbGUgdW5pdC4gSXQgbXVzdCBiZSByZXN0b3JlZCB1c2luZyBraG9fcmVzdG9yZV9wYWdlKCkgdG8KJiM0MzsgKiBlbnN1cmUgdGhlIHRhaWwgcGFnZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB3aXRoIGEgemVybyByZWZjb3VudC4KJiM0MzsgKgomIzQzOyAqIElmIGEgZHJpdmVyIG5lZWRzIHRvIHNwbGl0IGEgYmxvY2sgdGhhdCBoYXMgYmVlbiBwcmVzZXJ2ZWQgd2l0aCB0aGlzCiYjNDM7ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLAomIzQzOyAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZwomIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gJmFtcDtraG9fb3V0LnJhZGl4X3RyZWU7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBraG9fdW5wcmVzZXJ2ZV9wYWdlIC0gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay4KJiM0MzsgKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay4KJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLgomIzQzOyAqCiYjNDM7ICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnkKJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSA9ICZhbXA7a2hvX291dC5yYWRpeF90cmVlOwomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwomIzQzOwomIzQzOwlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpOwomIzQzOwogc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKQEAgLTkxOCw3ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAogICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMuCiAgKgogICogUHJlc2VydmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcy4gTXVzdCBiZSByZXN0b3JlZCB1c2luZwotICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwLgomIzQzOyAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMAomIzQzOyAqIHdpdGggZWFjaCBwYWdlIGhhdmluZyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxIChzcGxpdCkuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLCBhbGwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gTmF0dXJhbGx5LCBga2V4ZWNfaGFuZG92ZXIuaGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhlc2UgYWRkaXRpb25zLiBUaGUgY29yZSB0aGVtZSBoZXJlIGlzICYjMzQ7a2V4ZWMgaGFuZG92ZXImIzM0OyBvciBLSE8sIGFuZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSYjMzk7bSBndWVzc2luZyB0aGlzIHBhdGNoIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aG9zZSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2tzIGR1cmluZyB0aGUgaGFuZG92ZXIgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gZW5hYmxlZCBpbiBvdXIgY3VycmVudCBjb25maWd1cmF0aW9uPyYjMzQ7IEdvdHRhIGJlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5ICp1c2luZyogdGhpcyBiZWZvcmUgSSBnbyB0b28gZGVlcC4gSSYjMzk7bGwgZ2V0IGBncmVwcGVyYCBmaXJlZCB1cCBhbmQgc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXRoZXIgdGhpcyBLSE8gZmVhdHVyZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tFWEVDX0hBTkRPVkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdD0xND1QcmVyZXF1aXNpdGVzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE2LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjE3OktITyBpcyBhdmFpbGFibGUgd2hlbiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggYGBDT05GSUdfS0VYRUNfSEFORE9WRVJgYFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE4LXNldCB0byB5LiBFdmVyeSBLSE8gcHJvZHVjZXIgbWF5IGhhdmUgaXRzIG93biBjb25maWcgb3B0aW9uIHRoYXQgeW91XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0PTg3PVRoZXNlIGRlYnVnZnMgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6ODg6YGBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU2BgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QtODktXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzY4PXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzc0LVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzc1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzYtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9Mjc0PXN0YXRpYyB2b2lkIHNldHVwX2tobyhjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4MC1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzoyODE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0yODItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9MzAxPXNldHVwX2Jvb3RfcGFyYW1ldGVycyhzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTM5MC1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzozOTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkyLVx0XHQvKiBTZXR1cCBzcGFjZSB0byBzdG9yZSBwcmVzZXJ2YXRpb24gbWV0YWRhdGEgKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9NDc1PXN0YXRpYyB2b2lkICpiekltYWdlNjRfbG9hZChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgY2hhciAqa2VybmVsLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy01ODEtXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM6NTgyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy01ODMtXHRcdGtidWYuYnVmc3ogJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgJiM0Mztcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00NTY9c3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2MS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjM6XHRcdHByX3dhcm4oXCYjMzQ7UGFzc2VkIEtITyBkYXRhLCBidXQgQ09ORklHX0tFWEVDX0hBTkRPVkVSIG5vdCBzZXQuIElnbm9yaW5nLlxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00NjQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTkyOD1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19raG8odm9pZClcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTkzMi1cbmRyaXZlcnMvb2YvZmR0LmM6OTMzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikgfHwgKGxvbmcpbm9kZSBcdTAwM2MgMClcbmRyaXZlcnMvb2YvZmR0LmMtOTM0LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9vZi9rZXhlYy5jPTI1OD1zdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZSlcbi0tXG5kcml2ZXJzL29mL2tleGVjLmMtMjYwLVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL29mL2tleGVjLmM6MjYxOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yNjItXHRwaHlzX2FkZHJfdCBmZHRfbWVtID0gMDtcbi0tXG5kcml2ZXJzL29mL2tleGVjLmMtMjkwLVxuZHJpdmVycy9vZi9rZXhlYy5jOjI5MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG5kcml2ZXJzL29mL2tleGVjLmMtMjkyLVx0cmV0dXJuIHJldDtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTc9c3RydWN0IHBhZ2U7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTgtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTk6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTIwLWJvb2wga2hvX2lzX2VuYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI4LX1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjk6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEzMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9Mzc9dHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTM5LVxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oOjQwOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC00MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9NDg9aW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC01MC1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaDo1MTojZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTUyLVxuLS1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaD02Mj1zdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNjctXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg6Njg6I2VuZGlmIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC02OS1cbi0tXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaD00Mz1zdHJ1Y3Qga2V4ZWNfYnVmO1xua2VybmVsL2tleGVjX2ludGVybmFsLmgtNDQtXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDo0NTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC00Ni1pbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuLS1cbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxua2VybmVsL2tleGVjX2ludGVybmFsLmg6NTc6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xua2VybmVsL2tleGVjX2ludGVybmFsLmgtNTgtI2VuZGlmIC8qIExJTlVYX0tFWEVDX0lOVEVSTkFMX0ggKi9cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUilcdFx0JiM0Mzs9IGtleGVjX2hhbmRvdmVyLm9cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcdCYjNDM7PSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGUylcdCYjNDM7PSBrZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLm9cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTEzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NTY9c3RhdGljX2Fzc2VydChzaXplb2YodW5pb24ga2hvX3BhZ2VfaW5mbykgPT0gc2l6ZW9mKCgoc3RydWN0IHBhZ2UgKikwKS1cdTAwM2Vwcml2YXRlKSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTU3LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo1ODpzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz03MDg9c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5Ny0gKiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvQG5hbWVgYCB3aGVuIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Nzk4OiAqIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5OS0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtOC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6OTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaD0yMz1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjI1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC0yNi1pbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZyxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDEtXHRcdFx0XHRcdCAgIHZvaWQgKmJsb2IpIHsgfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo0MjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlMgKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDMtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjQ0OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDUtYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQ3PXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNTAtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo1MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTUyLVxuLS1cbm1tL21lbWJsb2NrLmMtMjEtXG5tbS9tZW1ibG9jay5jOjIyOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbm1tL21lbWJsb2NrLmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvbGliZmR0LmhcdTAwM2Vcbi0tXG5tbS9tZW1ibG9jay5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvbWVtYmxvY2suaFx1MDAzZVxubW0vbWVtYmxvY2suYzoyNjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG5tbS9tZW1ibG9jay5jLTI3LVxuLS1cbm1tL21lbWJsb2NrLmM9MjUxNT1ib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc19raG9fc2NyYXRjaF9tZW1vcnkocGh5c19hZGRyX3QgYWRkcilcbi0tXG5tbS9tZW1ibG9jay5jLTI1MjUtXG5tbS9tZW1ibG9jay5jOjI1MjY6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxubW0vbWVtYmxvY2suYy0yNTI3LVxuLS1cbm1tL21lbWJsb2NrLmM9MjcwOD1zdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMjcxMi19XG5tbS9tZW1ibG9jay5jOjI3MTM6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xubW0vbWVtYmxvY2suYy0yNzE0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g9NjA9Q09ORklHX0JMS19ERVZfSU5JVFJEPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjE6Q09ORklHX0tFWEVDX0hBTkRPVkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjI6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjM6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaC02NC1DT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUj15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc9Mj1DT05GSUdfS0VYRUNfRklMRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzozOkNPTkZJR19LRVhFQ19IQU5ET1ZFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo0OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo1OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnOjY6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnLTctQ09ORklHX0xJVkVVUERBVEU9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRocmVlIG5ldyBmdW5jdGlvbnM6IGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhleSYjMzk7cmUgYmVpbmcgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlc2UgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgR1BMLWxpY2Vuc2VkIGtlcm5lbCBtb2R1bGVzLiBBbmQgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgZmVhdHVyZSwgd2hpY2ggaXMgb25seSBlbmFibGVkIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHNldC4gUmlnaHQsIEtITyBpcyBhbGwgYWJvdXQgcHJlc2VydmluZyBtZW1vcnkgYWNyb3NzIGEgYGtleGVjYCBjYWxsLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIGhpZ2gtb3JkZXIgcGFnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIHRoZXNlIGFyZSBtb3JlIGxpa2VseSB0byBnZXQgZnJhZ21lbnRlZCBhbmQgbG9zdCBkdXJpbmcgYSBoYW5kb3Zlci4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhlcmUgYW55IHdheSBmb3IgdGhpcyB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgdGhhdCBvcGVucyBhIGh1Z2UgY2FuIG9mIHdvcm1zIGluIHRlcm1zIG9mIHNlY3VyaXR5LiBLSE8gaXMgYSBrZXJuZWwtc2lkZSBmZWF0dXJlLCB1c2VkIGJ5IGtleGVjLCBhIG1lY2hhbmlzbSB0byBzd2l0Y2ggdG8gYSBuZXcga2VybmVsLiBTbyB0aGUgaW50ZW5kZWQgY29uc3VtZXJzIGFyZSBkZWZpbml0ZWx5IGRyaXZlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gaGVyZTogdGhlc2UgZnVuY3Rpb25zLCBhcyBBUElzLCBhcmUgZm9yIGRyaXZlcnMgdG8gcHJlc2VydmUgdGhlaXIgb3duIGhpZ2gtb3JkZXIgcGFnZXMgZHVyaW5nIGEgYGtleGVjYC4KCk5vdywgdGhlIHJlYWwgdmFsdWUgb2YgdGhlIHBhdGNoIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiAqd2hvKiBpcyB1c2luZyBpdC4gQXJlIHRoZXJlIGFueSBkcml2ZXJzIGFjdHVhbGx5IGxldmVyYWdpbmcgdGhlc2UgQVBJcz8gVGhhdOKAmXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgcHVyZWx5IHRoZW9yZXRpY2FsIG9yIGlmIHRoaXMgaGFzIGFueSBtZWFzdXJhYmxlIGVmZmVjdCBvbiBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcHJlc2VydmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MjQ9dm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNTppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI3OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjMtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjUte1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NzE6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NDE9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ3LSAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDQ4OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDcxLSAqIFJlc3RvcmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcyB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NzI6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMS0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTIyOiAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzMi0gKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzQtICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTM3OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05Mzgte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTQ3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU0LSAqIEluc3RydWN0cyBLSE8gdG8gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIGJ5XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjUtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk2NjpzdGF0aWMgdW5zaWduZWQgaW50IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05ODM9c3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXHR3aGlsZSAocGZuIFx1MDAzYyBlbmRfcGZuKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTktICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDA4OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDkte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyMi1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAyMzpcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyNC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDg6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkgY2FsbC4gVW5wcmVzZXJ2aW5nIGFyYml0cmFyeSBzdWItcmFuZ2VzIG9mIGxhcmdlclxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwOTI9c3RhdGljIHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqbmV3X3ZtYWxsb2NfY2h1bmsoc3RydWN0IGtob192bWFsbG9jX2NodW5rICpjdXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTAwLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTAxOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTAyLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTExNDI9aW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXHUwMDNlcGFnZXNbaV0sIG5yX2NvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjktXHRcdGlmIChlcnIpXG4tLVxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjUzNy1cbm1tL21lbWJsb2NrLmM6MjUzODpcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbm1tL21lbWJsb2NrLmMtMjUzOS1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1NTc9c3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9raG9fZmR0KHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTY5LVx0ZmR0ID0gcGFnZV90b192aXJ0KGZkdF9wYWdlKTtcbm1tL21lbWJsb2NrLmM6MjU3MDpcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XG5tbS9tZW1ibG9jay5jLTI1NzEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDYzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKQWxyaWdodCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgcG90ZW50aWFsIG5ldyBwcmltaXRpdmVzIGZvciBwYWdlIG1hbmFnZW1lbnQsIHBlcmhhcHMgc29tZSBmb3JtIG9mIGNhY2hpbmcgb3IgZGVsYXllZCBmcmVlaW5nPyBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBydW5uaW5nIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogYGtob19wcmVzZXJ2ZV9wYWdlYCBpc24mIzM5O3QgKmFjdHVhbGx5KiBiZWluZyB1c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgc291cmNlLCBhdCBsZWFzdCBub3QgeWV0LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYGtob19wcmVzZXJ2ZV9wYWdlYCBvciBga2hvX3Jlc3RvcmVfcGFnZWAgYXJlbiYjMzk7dCBiZWluZyBjYWxsZWQgYnkgc29tZXRoaW5nIGVsc2UuIEJhY2sgdG8gdGhlIGBncmVwYCwgSSYjMzk7bGwgY2hlY2sgZm9yIGFueSBpbW1lZGlhdGUgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc3RvcmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzQ9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNTpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo5OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0zODg9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTM5NS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Mzk2OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTM5Ny17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00Mjk9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDMxLVx0dW5zaWduZWQgaW50IG9yZGVyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MzI6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcdTAwMjZvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQzMy1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDMtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0NDogKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ1LSAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUxLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NTI6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUzLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU0LVx0dW5zaWduZWQgaW50IG9yZGVyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NTU6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcdTAwMjZvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ1Ni1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2My19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NDpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY1LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NzogKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg1LVx0XHR1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDg2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBcdTAwMjZpbmZvX29yZGVyKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg3LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyNi0gKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTI3OiAqIGJ1ZmZlcikgYXMgYSBzaW5nbGUgdW5pdC4gSXQgbXVzdCBiZSByZXN0b3JlZCB1c2luZyBraG9fcmVzdG9yZV9wYWdlKCkgdG9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTI4LSAqIGVuc3VyZSB0aGUgdGFpbCBwYWdlcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkIHdpdGggYSB6ZXJvIHJlZmNvdW50LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDQtICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XHRcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjItXHRcdFx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI3MTpcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjcyLVx0XHRpZiAoIXBhZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnVzZWQgS2VybmVsIEZ1bmN0aW9ucyBJbnZlc3RpZ2F0aW9uKioKCkhtbSwgYGtob19wcmVzZXJ2ZV9wYWdlYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUeXBpY2FsbHksIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBCdXQgaWYgdGhleSYjMzk7cmUgKmV4cG9ydGVkKiBhbmQgKnVudXNlZCogd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIHRyZWUgaXRzZWxmLCB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlLiBJdCBzdWdnZXN0cyBkZWFkIGNvZGUsIGEgcG9zc2libGUgb3ZlcnNpZ2h0IGR1cmluZyBkZXZlbG9wbWVudCwgb3IgbWF5YmUgZXZlbiByZW1uYW50cyBvZiBhIHJlZmFjdG9yaW5nIHRoYXQgd2FzbiYjMzk7dCBmdWxseSBjbGVhbmVkIHVwLgoKQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBjbGFpbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGx1cmtpbmcgc29tZXdoZXJlIHVuZXhwZWN0ZWQsIHBlcmhhcHMgaW4gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIGEgbGVzcy1mcmVxdWVudGx5IGF1ZGl0ZWQgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2wgdG8gcGVyZm9ybSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0Li4uIG5vIHBvaW50IGluIGFzc3VtaW5nIHNvbWV0aGluZyBJIGhhdmVuJiMzOTt0IGNvbmZpcm1lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3ByZXNlcnZlX3BhZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjU6aW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Njk9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjcxOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDQxPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0ODogKiBraG9fcHJlc2VydmVfcGFnZSgpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDktICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzYtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM4LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTYtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODE2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUHJlc2VydmF0aW9uL1Jlc3RvcmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggZm9yIGBraG9fcHJlc2VydmVfcGFnZWAgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gSHVoLCB0aGF0JiMzOTtzIG9kZCwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMsIG5laXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zIHNlZW1zIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIEkgd291bGQgaGF2ZSBhc3N1bWVkIHdlJiMzOTtkIGZpbmQgYXQgbGVhc3QgKnNvbWUqIGluc3RhbmNlcywgZXZlbiBpbiBvYnNjdXJlIGNvcm5lciBjYXNlcy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRvdWJsZSBjaGVjayBteSB0b29saW5nLCBtYXliZSB0aGUgY2FsbCBncmFwaCBnZW5lcmF0aW9uIGlzIG1pc3Npbmcgc29tZXRoaW5nLCBvciB0aGVyZSYjMzk7cyBzb21lIGluZGlyZWN0IGNhbGwgbWVjaGFuaXNtIEkmIzM5O20gbm90IGFjY291bnRpbmcgZm9yLiAKCkJ1dCB3YWl0IGEgbWludXRlLCBJJiMzOTttIG1pc3Npbmcgb25lLCB3aGF0IGFib3V0IGBraG9fdW5wcmVzZXJ2ZV9wYWdlYD8gVGhhdCBvbmUgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXJzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24gYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWUgZGVzaWduIHVzaW5nIHRoYXQgaW4gcGxhY2Ugb2YgdGhlIG90aGVycy4gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob191bnByZXNlcnZlX3BhZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI1PWludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNjp2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjctaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc1LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjc2OnN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc3LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzMC0gKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MzE6ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzItICogcGVyZm9ybSB0aGUgc3BsaXQsIGFuZCB0aGVuIHJlLXByZXNlcnZlIHRoZSBpbmRpdmlkdWFsIHBhZ2VzIHVzaW5nXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NDc9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTc6dm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBUEkgSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXcgZnVuY3Rpb25zIOKAkyB0aGV5JiMzOTt2ZSBiZWVuIGludHJvZHVjZWQgYXMgQVBJcywgd2hpY2ggaXMgZmluZSwgdGhhdCYjMzk7cyBob3cgaXQgc3RhcnRzLCBidXQgdGhleSBoYXZlbiYjMzk7dCBhY3R1YWxseSBiZWVuIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIGNvcmUgbG9naWMgeWV0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgYXJlIHRoZXNlIGJlaW5nIHVzZWQ/IFdoZXJlJiMzOTtzIHRoZSBydWJiZXIgbWVldGluZyB0aGUgcm9hZD8mIzM0OyBXZSBoYXZlIHRvIHRlc3QgdGhpcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55IHRlc3RpbmcgZm9yIHRoZXNlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIHRlc3RzIGFyZS4gTGV0JiMzOTtzIGV4cGxvcmUgdGhlIHRlc3RpbmcgZGlyZWN0b3J5LCBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vYCBkaXJlY3Rvcnkgb3IgcGVyaGFwcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9gLiBMZXQmIzM5O3Mgc2VlIGlmIGVpdGhlciBvZiB0aGVzZSBsb2NhdGlvbnMgaGFzIGFueSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcHJlc2VydmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVudXNlZCBDb2RlIGFuZCBQb3RlbnRpYWwgS0hPIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoZXNlIGZ1bmN0aW9ucyBhcmUgY29tcGxldGVseSB1bnRvdWNoZWQsIHVudXNlZCYjMzQ7LiBJZiB0aGV5IGFyZW4mIzM5O3QgYmVpbmcgdXNlZCwgdGhlbiBvYnZpb3VzbHksIHRoZXkgYXJlbiYjMzk7dCBnb2luZyB0byBiZSBoaXQgYnkgYW55IGZ1enppbmcsIHRoYXQmIzM5O3MganVzdCBhIGdpdmVuLiBCdXQgaG9sZCBvbiBhIHNlY29uZOKApiBjb3VsZCB0aGVyZSBiZSBzb21lIG90aGVyIEtlcm5lbCBIYW5kb3ZlciAoS0hPKSBtZWNoYW5pc20gdGhhdCAqY291bGQqIHJlYWNoIHRoZW0/IExldCYjMzk7cyBzZWUuLi4gQWgsIGBraG9fcHJlc2VydmVfcGFnZWAgaXMgYW4gYEVYUE9SVF9TWU1CT0xfR1BMYCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGRyaXZlcnMgdG8gY2FsbC4gSWYgbm8gZHJpdmVyIGFjdHVhbGx5IHV0aWxpemVzIGl0LCB0aGVuIGl04oCZcyBqdXN0IGRlYWQgY29kZSwgYSBuby1vcC4KCk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIHBhdGNoIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIGhhcHBlbmluZy4gT2theSwgdGhlIGZpbGUgY2hhbmdlcyBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWAgYW5kLCBjcml0aWNhbGx5LCBtb2RpZnlpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYF9fa2hvX3Jlc3RvcmVfcGFnZWAuIEJ1dCB3YWl0LCBhcmUgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgY2FsbCBzaXRlczsgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0IGhlcmUuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXN0b3JlX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zMz12b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNDpzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LXN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05Mj1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTkzLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTk1LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDIzLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MjQ6ICoga2hvX3Jlc3RvcmVfZm9saW8gLSByZWNyZWF0ZXMgdGhlIGZvbGlvIGZyb20gdGhlIHByZXNlcnZlZCBtZW1vcnkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQyNS0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZm9saW8uXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjgtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQyOTpzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQzMC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDAtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDE6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDItXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMzg4PXZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzk0LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMzk1Olx0Zm9saW8gPSBraG9fcmVzdG9yZV9mb2xpbyhfX3BhKG1lbSkpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzk2LVx0aWYgKCFXQVJOX09OKCFmb2xpbykpXG4tLVxubGliL3Rlc3Rfa2hvLmM9MjM1PXN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZV9kYXRhKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMjY3LVxubGliL3Rlc3Rfa2hvLmM6MjY4Olx0XHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xubGliL3Rlc3Rfa2hvLmMtMjY5LVx0XHRpZiAoIWZvbGlvKVxuLS1cbm1tL21lbWZkX2x1by5jPTM2Mj1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZGlzY2FyZF9mb2xpb3MoY29uc3Qgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmMtMzc1LVx0XHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVx1MDAzZXBmbik7XG5tbS9tZW1mZF9sdW8uYzozNzY6XHRcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XG5tbS9tZW1mZF9sdW8uYy0zNzctXHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9tZW1mZF9sdW8uYz00MTc9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTQzNy1cdFx0cGh5cyA9IFBGTl9QSFlTKHBmb2xpby1cdTAwM2VwZm4pO1xubW0vbWVtZmRfbHVvLmM6NDM4Olx0XHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xubW0vbWVtZmRfbHVvLmMtNDM5LVx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vbWVtZmRfbHVvLmMtNTA3LVx0XHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVx1MDAzZXBmbik7XG5tbS9tZW1mZF9sdW8uYzo1MDg6XHRcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XG5tbS9tZW1mZF9sdW8uYy01MDktXHRcdGlmIChmb2xpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGBraG9fcmVzdG9yZV9mb2xpb2AgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHVzZWQgaW4gYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoYXMgY2hhbmdlZCBvciBpZiBpdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBga2hvX3Jlc3RvcmVfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIHNlcnZlZCBhcyB0aGUgd29ya2hvcnNlIGJlaGluZCByZXN0b3JpbmcgcGFnZXMsIGhhcyBub3cgYmVlbiBzcGxpdCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfZm9saW9gLiBUaGUgYGtob19yZXN0b3JlX3BhZ2VgIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIG5vdyBjb250YWlucyBtdWNoIGNsZWFuZXIgbG9naWMuCgpUaGUgY3J1Y2lhbCBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB0aGUgdXNlIG9mIGBvcmRlcmAgd2hpY2ggbm93IHNlZW1zIHRvIGJlIHBhc3NlZCBieSByZWZlcmVuY2UuIEkgc2VlIHRoYXQgdGhlIGBpc19mb2xpb2AgZmxhZyBoYXMgYmVlbiByZW1vdmVkLiBJIGFtIGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGF0IGltcGFjdHMgdGhlIG9yaWdpbmFsIGJlaGF2aW91ci4KCkkgbm90aWNlIHRoZSBvcmlnaW5hbCBsb2dpYyBpbnNpZGUgdGhlIGBpZiAoaXNfZm9saW8pYCBibG9jayBpcyBub3cgaW4gYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQsIHRoZXJlJiMzOTtzIGEgbmV3IGBvcmRlcmAgdmFyaWFibGUsIGFuZCBpdHMgdmFsdWUgaXMgYXNzaWduZWQgdG8gdGhlIGAqb3JkZXJgLiBUaGUgbmV3IGBfX2tob19yZXN0b3JlX3BhZ2VgIG5vdyByZWNlaXZlcyBhbiBgb3JkZXJgIHBvaW50ZXIgYW5kIGBraG9faW5pdF9mb2xpb2AgdXNlcyB0aGUgcmVzdG9yZWQgYG9yZGVyYC4KClRoZSBjb3JlIGxvZ2ljIHJlbWFpbnMgdGhlIHNhbWU6IHJldHJpZXZlIGEgYHN0cnVjdCBwYWdlYCBnaXZlbiBhIHBoeXNpY2FsIGFkZHJlc3MsIHZhbGlkYXRlIGEgbWFnaWMgbnVtYmVyLCBjbGVhciB0aGUgYHByaXZhdGVgIGZpZWxkLCBhbmQgdGhlbiBpbml0aWFsaXplIHRoZSBmb2xpby4gSXQgbG9va3MgbGlrZSB0aGUgaGFuZGxpbmcgb2YgdGhlIG9yZGVyIGhhcyBiZWVuIG1hZGUgbW9yZSBleHBsaWNpdCwgYW5kIGl0JiMzOTtzIGNsZWFuZXIgaW4gdGhlIG5ldyByZWZhY3RvcmluZy4KVGhlIHJlbW92YWwgb2YgdGhlIGBpc19mb2xpb2AgZmxhZyBpcyBpbnRlcmVzdGluZzsgdGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIG5vdyAqYWx3YXlzKiBhc3N1bWVzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIGZvbGlvLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBzdGlsbCBpbiB1c2UsIG9yIGlmIHRoaXMgcGF0Y2ggc3Vic3VtZXMgYWxsIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXN0b3JlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zNT1zdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo5OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NzogKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDQtICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XHRcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjItXHRcdFx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI3MTpcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjcyLVx0XHRpZiAoIXBhZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIFJlc3RvcmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBga2hvX3Jlc3RvcmVfcGFnZXNgIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBlbXBsb3llZCB3aXRoaW4gdGhlIGBraG9fcmVzdG9yZV92bWFsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgYGtob19yZXN0b3JlX3ZtYWxsb2NgIGl0c2VsZiBhY3R1YWxseSB1dGlsaXplZCBhbnl3aGVyZT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZ1cnRoZXIuIElmIGBraG9fcmVzdG9yZV92bWFsbG9jYCBpcyB1bnVzZWQsIHRoZW4gYGtob19yZXN0b3JlX3BhZ2VzYCBtaWdodCBiZSBkZWFkIGNvZGUgYXMgd2VsbCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IG9ubHkgdXNlZCBpbiBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBleHBsaWNpdGx5IGV2YWx1YXRlZC4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHJlc3RvcmF0aW9uIHBhdGggcmVtYWlucyByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGNvbm5lY3Rpb25zIGFuZCBzZWUgd2hlcmUgZXZlcnl0aGluZyBsZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc3RvcmVfdm1hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzY9c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM3OnZvaWQgKmtob19yZXN0b3JlX3ZtYWxsb2MoY29uc3Qgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LWludCBraG9fYWRkX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYmxvYiwgc2l6ZV90IHNpemUpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDQtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDYte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMTg6ICoga2hvX3Jlc3RvcmVfdm1hbGxvYyAtIHJlY3JlYXRlcyBhbmQgcG9wdWxhdGVzIGFuIGFyZWEgaW4gdm1hbGxvYyBhZGRyZXNzXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTktICogc3BhY2UgZnJvbSB0aGUgcHJlc2VydmVkIG1lbW9yeS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMjYtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMjc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTIyOC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzEyLX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTMxMzpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV92bWFsbG9jKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTMxNC1cbi0tXG5saWIvdGVzdF9raG8uYz0yMzU9c3RhdGljIGludCBraG9fdGVzdF9yZXN0b3JlX2RhdGEoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZSlcbi0tXG5saWIvdGVzdF9raG8uYy0yNTctXG5saWIvdGVzdF9raG8uYzoyNTg6XHRmb2xpb3NfaW5mbyA9IGtob19yZXN0b3JlX3ZtYWxsb2MoZm9saW9zX2luZm9fcGh5cyk7XG5saWIvdGVzdF9raG8uYy0yNTktXHRpZiAoIWZvbGlvc19pbmZvKVxuLS1cbm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy00MDQtXHRpZiAoc2VyLVx1MDAzZW5yX2ZvbGlvcykge1xubW0vbWVtZmRfbHVvLmM6NDA1Olx0XHRmb2xpb3Nfc2VyID0ga2hvX3Jlc3RvcmVfdm1hbGxvYyhcdTAwMjZzZXItXHUwMDNlZm9saW9zKTtcbm1tL21lbWZkX2x1by5jLTQwNi1cdFx0aWYgKCFmb2xpb3Nfc2VyKVxuLS1cbm1tL21lbWZkX2x1by5jPTUxOD1zdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNTU1LVx0aWYgKHNlci1cdTAwM2Vucl9mb2xpb3MpIHtcbm1tL21lbWZkX2x1by5jOjU1NjpcdFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXHUwMDI2c2VyLVx1MDAzZWZvbGlvcyk7XG5tbS9tZW1mZF9sdW8uYy01NTctXHRcdGlmICghZm9saW9zX3Nlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzOAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gUGFnZSBSZXN0b3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBga2hvX3Jlc3RvcmVfcGFnZXNgIGlzIHVzZWQgYnkgYGtob19yZXN0b3JlX3ZtYWxsb2NgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGBraG9fcmVzdG9yZV9wYWdlYCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgZXhwb3NpbmcgYGtob19yZXN0b3JlX3BhZ2VgIGFzIGEgbmV3IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdXNlZCBieSBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIG5vdyB0b28uIFNpbmNlIGBraG9fcmVzdG9yZV9wYWdlc2AgaXMgYWN0dWFsbHkgKnVzZWQqLCB0aGUgbG9naWMgaW4gYF9fa2hvX3Jlc3RvcmVfcGFnZWAgYW5kIGBraG9faW5pdF9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy4gYGtob19pbml0X3BhZ2VzYCwgYGtob19pbml0X2ZvbGlvYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBUaGUgY29kZSBmb3IgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgY2F1Z2h0IG15IGV5ZToKCmBgYGMKJiM0MzsvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqLwomIzQzO3N0YXRpYyB2b2lkIGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwomIzQzOwkvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqLwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKJiM0MzsJLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KJiM0MzsJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpOwomIzQzOwomIzQzOwkvKiBGb3IgaGlnaC1vcmRlciBibG9ja3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqLwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7CiYjNDM7CQkvKiBDbGVhciBlYWNoIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqLwomIzQzOwkJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSk7CiYjNDM7CX0KJiM0Mzt9CmBgYAoKVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCBpcyBjYWxsZWQgYnkgYGtob19pbml0X2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBga2hvX2luaXRfZm9saW9gIGlzIGNhbGxlZCBieSBga2hvX3Jlc3RvcmVfZm9saW9gLCBhbmQgYGtob19yZXN0b3JlX2ZvbGlvYCBpcyB1c2VkIGJ5IGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYHRlc3Rfa2hvYC4gIFNvIHRoZSBuZXcgY29kZSBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEl04oCZcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgb2xkIGBraG9faW5pdF9mb2xpb2AsIGJ1dCB3aXRoIGEgYGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpYCBhZGRlZCBmb3IgdGhlIHRhaWwgcGFnZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgb2xkIGBraG9faW5pdF9mb2xpb2AgY29kZToKCmBgYGMKLXN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxICZsdDsmbHQ7IG9yZGVyKTsKLQotCS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCi0Jc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Ci0JLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KLQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7Ci0KLQkvKiBGb3IgaGlnaGVyIG9yZGVyIGZvbGlvcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCi0JZm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApOwomIzQzOwlraG9faW5pdF9oaWdoX29yZGVyX3BhZ2UocGFnZSwgb3JkZXIpOwogCiAJaWYgKG9yZGVyICZndDsgMCkKIAkJcHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTsKIH0KYGBgCgpSaWdodCwgaXQganVzdCBtb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2gtb3JkZXIgcGFnZSB0byBhbm90aGVyIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKWAgZm9yIHRhaWwgcGFnZXMgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuIFdlIG5vdyBoYXZlIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gQnV0IHRob3NlIGFyZSAqdW51c2VkKiBhdCB0aGUgbW9tZW50LiAgVGhlIHJlbGV2YW50IGNoYW5nZXMgYXJlIHRoZSByZWZhY3RvcmluZyB1c2luZyBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIHRoZSBhZGRpdGlvbiBvZiBgY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSlgIGluIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLgoKT2theSwgdGhlIGNydWNpYWwgcGFydDogYGNsZWFyX3BhZ2VfdGFnX3JlZmAgaXMgbm93IGJlaW5nIGNhbGxlZCBvbiB0YWlsIHBhZ2VzLiAqVGhhdCYjMzk7cyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZml4IGFuIGFjY291bnRpbmcgbWlzbWF0Y2ggYnkgY2xlYXJpbmcgcGFnZSB0YWdzIGZvciB0aGUgdGFpbCBwYWdlcywgd2hpY2ggaXMgZ29vZC4gQnV0IGlzIGl0IHdvcnRoIHNwZW5kaW5nIHRpbWUgZnV6emluZyBmb3IgaXQ/Cgpga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHRoZSBtYWluCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdF9raG8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MTQzNDM9RjpcdGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyKlxuTUFJTlRBSU5FUlM6MTQzNDQ6RjpcdGxpYi90ZXN0X2toby5jXG5NQUlOVEFJTkVSUy0xNDM0NS1GOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL1xuLS1cbmxpYi9NYWtlZmlsZT0xMDY9b2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgJiM0Mzs9IHRlc3Rfb2JqcG9vbC5vXG5saWIvTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSKSAmIzQzOz0gdGVzdF9raG8ub1xubGliL01ha2VmaWxlLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGZvciBTeXprYWxsZXItVHJpZ2dlcmFibGUgSW50ZXJmYWNlcyBpbiBgbGliL3Rlc3Rfa2hvLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgYGxpYi90ZXN0X2toby5jYC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtb2R1bGUsIG9yIGFueSBwYXJ0IG9mIGl0LCBleHBvc2VzIGEgZGVidWdmcyBvciBzeXNmcyBpbnRlcmZhY2UuIFRoZXNlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBzeXprYWxsZXIsIGFzIHRoZXkgb2Z0ZW4gcHJvdmlkZSBtZWNoYW5pc21zIHRvIGludGVyYWN0IHdpdGgga2VybmVsIGludGVybmFscyBpbiB3YXlzIHRoYXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBmdXp6aW5nLiBBIGRlYnVnZnMgb3Igc3lzZnMgZW50cnkgY291bGQgYmUgZGlyZWN0bHkgbWFuaXB1bGF0ZWQgdG8gZmVlZCB1bnVzdWFsIGRhdGEgb3IgdHJpZ2dlciBzcGVjaWZpYyBjb2RlIHBhdGhzLiBJZiBJIGNhbiBpZGVudGlmeSBzdWNoIGFuIGludGVyZmFjZSB3aXRoaW4gdGhpcyBmaWxlLCBJIGNhbiBzaWduaWZpY2FudGx5IG5hcnJvdyB0aGUgc2NvcGUgb2YgbXkgZnV6emluZyBlZmZvcnRzIGFuZCBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGJ1Z3MuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBsb3ctaGFuZ2luZyBmcnVpdCBmb3Igc3l6a2FsbGVyIGV4cGxvaXRhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMzM5LX1cbmxpYi90ZXN0X2toby5jOjM0MDptb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcbmxpYi90ZXN0X2toby5jLTM0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGtob190ZXN0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGhlIHRhc2sgYmVmb3JlIG1lIGlzIHRvIHVuZGVyc3RhbmQgYGtob190ZXN0X2luaXRgLiAgTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gbG9jYXRlIHRoZSBzb3VyY2UgY29kZS4gSXQmIzM5O3MgdGVsbGluZyBtZSB0byBsb29rIGluIGBsaWIvdGVzdF9raG8uY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIFRoaXMgZmlsZSBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGZvciwgb3IgcmVsYXRlZCB0bywgdGhpcyBga2hvYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBga2hvX3Rlc3RfaW5pdGAgZnVuY3Rpb24gKmRvZXMqLiBJcyBpdCBzZXR0aW5nIHVwIHRlc3QgZW52aXJvbm1lbnRzPyBJbml0aWFsaXppbmcgc2hhcmVkIHJlc291cmNlcz8gUGVyaGFwcyByZWdpc3RlcmluZyB0ZXN0IGNhc2VzIG9yIGZpeHR1cmVzPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYGluaXRgIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBjcml0aWNhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIG9wZXJhdGlvbnMsIGdsb2JhbCB2YXJpYWJsZSBhc3NpZ25tZW50cywgb3IgYW55IG90aGVyIG9wZXJhdGlvbnMgdGhhdCBwcmltZSB0aGUgc3lzdGVtIGZvciB0ZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJldHVybiB2YWx1ZSwgdG9vOyBpcyBpdCBhIHN1Y2Nlc3MgaW5kaWNhdG9yLCBvciBkb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gc29tZSB0ZXN0aW5nIGNvbnRleHQ/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuIDMxNTpcdHtcbiAzMTY6XHRcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuIDMxNzpcdFx0aW50IGVycjtcbiAzMTg6XHRcbiAzMTk6XHRcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiAzMjA6XHRcdFx0cmV0dXJuIDA7XG4gMzIxOlx0XG4gMzIyOlx0XHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcbiAzMjM6XHRcdGlmICghZXJyKSB7XG4gMzI0Olx0XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xuIDMyNTpcdFx0XHRpZiAoZXJyKVxuIDMyNjpcdFx0XHRcdHByX2VycihcJiMzNDtLSE8gcmVzdG9yZSBmYWlsZWRcXG5cJiMzNDspO1xuIDMyNzpcdFx0XHRlbHNlXG4gMzI4Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXG5cJiMzNDspO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKSB7XG4gMzM0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXG5cJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTtcbiAzMzU6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG4gMzM5Olx0fVxuIDM0MDpcdG1vZHVsZV9pbml0KGtob190ZXN0X2luaXQpO1xuIDM0MTpcdFxuIDM0MjpcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcbiAzNDM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0hPIFN1YnN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGB0ZXN0X2tob2AgYmVoYXZpb3IuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgdGVzdF9raG9gLCBpcyBlc3NlbnRpYWxseSBhbiBhdXRvbWF0aWMgdGVzdCB0aGF0IGtpY2tzIG9mZiB1cG9uIG1vZHVsZSBsb2FkLiBJZiBpdCYjMzk7cyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwsIGl0IHJ1bnMgcmlnaHQgYXQgYm9vdC4gVGhlIGNvcmUgbG9naWMgaGVyZSBpcyBpbnRlcmVzdGluZy4gV2hlbiBLSE8gaXMgYWN0aXZlLCBpdCBhdHRlbXB0cyB0byBmZXRjaCBhIHN1YnRyZWUuIElmIHRoYXQgZmFpbHMgd2l0aCBhbiAtRU5PRU5ULCB0aGF0JiMzOTtzIGEga2V5IGluZGljYXRvcuKAlGl0IG1lYW5zIHRoZSBzdWJ0cmVlIGlzbiYjMzk7dCB0aGVyZSwgc28gaXQgY2FsbHMgYGtob190ZXN0X3NhdmUoKWAuIFRoaXMgaW1wbGllcyBhIHNpbmdsZSBpbml0aWFsIHJ1biwgcHJvYmFibHkgZHVyaW5nIHN5c3RlbSBzdGFydHVwLgoKVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gZWFzaWx5IHRyaWdnZXIgdGhpcyByZXBlYXRlZGx5IHVubGVzcyBpdCBoYXMgc29tZSBtZWNoYW5pc20gZm9yIG1vZHVsZSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZy4gV2l0aG91dCB0aGF0IGNhcGFiaWxpdHksIGl0JiMzOTtzIGVzc2VudGlhbGx5IGEgb25lLXNob3QgcHJvY2Vzcy4KCk5vdywgdGhhdCBgbWVtZmRfbHVvYCBtZW50aW9uIGNhdWdodCBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRpbWUgdG8gc2hpZnQgZ2VhcnMgYW5kIGRlbHZlIGludG8gYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYz0zODc9c3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNDE2LVxubW0vbWVtZmRfbHVvLmM6NDE3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTQxOC1cdFx0XHRcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy01NjEtXG5tbS9tZW1mZF9sdW8uYzo1NjI6XHRcdGVyciA9IG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3MoZmlsZSwgZm9saW9zX3Nlciwgc2VyLVx1MDAzZW5yX2ZvbGlvcyk7XG5tbS9tZW1mZF9sdW8uYy01NjMtXHRcdHZmcmVlKGZvbGlvc19zZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI3OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVW5wYWNraW5nIGBtZW1mZF9sdW9fcmV0cmlldmVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyB0ZXJtLCBgbWVtZmRfbHVvX3JldHJpZXZlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgJiMzNDtIbW0sIG5ldmVyIGNvbWUgYWNyb3NzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSBiZWZvcmUuJiMzNDsgR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBpbW1lZGlhdGVseSBzdGFydCBicmVha2luZyBpdCBkb3duLiBgbWVtZmRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggYG1lbWZkX2NyZWF0ZWAsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhIExpbnV4LXNwZWNpZmljIGZlYXR1cmUgZm9yIGNyZWF0aW5nIGFub255bW91cywgbWVtb3J5LWJhY2tlZCBmaWxlcy4gVGhhdCBwYXJ0JiMzOTtzIGZhbWlsaWFyIHRlcnJpdG9yeSDigJMgbGlnaHR3ZWlnaHQsIGVwaGVtZXJhbCBzdG9yYWdlIGluIG1lbW9yeSwgdXNlZnVsIGZvciBzZWN1cml0eSwgSVBDLCBhbmQgYXZvaWRpbmcgZGlzayBJL08uIEJ1dCB0aGUgYGx1b19yZXRyaWV2ZWAgYml04oCmIHRoYXTigJlzIHdoYXQmIzM5O3MgaW50cmlndWluZy4gSSBoYXZlIHRvIGd1ZXNzIGl0JiMzOTtzIHNwZWNpZmljIHRvIGFuIGV4dGVuc2lvbiBvciBlbmhhbmNlbWVudC4gSXMgdGhpcyBmcm9tIGEgY3VzdG9tIGxpYnJhcnk/IE1heWJlIGEgc3BlY2lmaWMgcHJvamVjdCYjMzk7cyBpbXBsZW1lbnRhdGlvbj8KCk15IG1pbmQgaXMgcmFjaW5nOiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQuIElzIHRoaXMgcmVsYXRlZCB0byBkYXRhIHJldHJpZXZhbD8gR2l2ZW4gdGhlIG5hbWUsIGl0ICpzdWdnZXN0cyogaXQsIGJ1dCB3aXRob3V0IG1vcmUgY29udGV4dCBpdCYjMzk7cyBwcmVtYXR1cmUgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQ291bGQgaXQgYmUgYWJvdXQgcmV0cmlldmluZyBkYXRhIGZyb20gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYG1lbWZkYD8gTWF5YmUgYSBjb250cm9sIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGtub3cgaG93IGl0JiMzOTtzIHVzZWQuIElzIGl0IGEgZnVuY3Rpb24gZm9yIGFjY2Vzc2luZyB0aGUgZGF0YSwgcGVyaGFwcyBhIGZvcm0gb2YgZGF0YSBzZXJpYWxpemF0aW9uIGZvciB0aGlzIHR5cGUgb2YgZmlsZT8gRG9lcyBpdCB3b3JrIG9ubHkgaW4gdGhpcyBvbmUgc3lzdGVtLCBvciBpcyBpdCBjb21tb24gaW4gb3RoZXJzPwoKTXkgaW1tZWRpYXRlIHN0ZXBzIHdvdWxkIGJlIHRvIHNlYXJjaCBmb3IgdGhpcyBmdW5jdGlvbiBuYW1lIHdpdGhpbiBjb2RlYmFzZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBvciB0byBzdGFydCBnb29nbGluZyBmb3IgZG9jdW1lbnRhdGlvbiBhcm91bmQgbWVtZmQgZXh0ZW5zaW9ucy4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdXNhZ2UgZXhhbXBsZXMsIGFuZCBhbnkgZXhwbGFuYXRpb25zIG9mIGl0cyBwdXJwb3NlLiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSB3aGF0IHRoaXMgZXh0ZW5zaW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gbWVtZmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1b19yZXRyaWV2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYz0zODc9c3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNDE2LVxubW0vbWVtZmRfbHVvLmM6NDE3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTQxOC1cdFx0XHRcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmMtNTE3LVxubW0vbWVtZmRfbHVvLmM6NTE4OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbm1tL21lbWZkX2x1by5jLTUxOS17XG4tLVxubW0vbWVtZmRfbHVvLmMtNTYxLVxubW0vbWVtZmRfbHVvLmM6NTYyOlx0XHRlcnIgPSBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKGZpbGUsIGZvbGlvc19zZXIsIHNlci1cdTAwM2Vucl9mb2xpb3MpO1xubW0vbWVtZmRfbHVvLmMtNTYzLVx0XHR2ZnJlZShmb2xpb3Nfc2VyKTtcbi0tXG5tbS9tZW1mZF9sdW8uYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIG1lbWZkX2x1b19maWxlX29wcyA9IHtcbi0tXG5tbS9tZW1mZF9sdW8uYy01OTUtXHQuZmluaXNoID0gbWVtZmRfbHVvX2ZpbmlzaCxcbm1tL21lbWZkX2x1by5jOjU5NjpcdC5yZXRyaWV2ZSA9IG1lbWZkX2x1b19yZXRyaWV2ZSxcbm1tL21lbWZkX2x1by5jLTU5Ny1cdC5wcmVzZXJ2ZSA9IG1lbWZkX2x1b19wcmVzZXJ2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIExpdmUgVXBkYXRlIEZpbGUgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gYG1lbWZkX2x1b19maWxlX29wc2Ag4oCTIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjb25uZWN0ZWQgdG8gYGxpdmV1cGRhdGVfZmlsZV9vcHNgLiBJIGtub3cgdGhvc2UgYXJlIGxvdy1sZXZlbCBmaWxlIG9wZXJhdGlvbiBzdHJ1Y3R1cmVzLCB1c3VhbGx5IHByb3ZpZGluZyBjdXN0b20gaW1wbGVtZW50YXRpb25zIGZvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsaXZlIHVwZGF0ZXMsIHdoaWNoIGF1dG9tYXRpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBDT05GSUdfTElWRVVQREFURWAuIFRoZSBrZXkgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoYXQgYENPTkZJR19MSVZFVVBEQVRFYCBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlPyBUaGF04oCZcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5LCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGllLiBJZiB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIGxpdmUgdXBkYXRlcywgd2UmIzM5O3ZlIGdvdCBhIHdob2xlIG5ldyBsZXZlbCBvZiBjb25jZXJucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgcGF0aHMgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiB0aGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIHRvIHVzZXIgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpdmV1cGRhdGVfZmlsZV9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9NDY9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01NC0vKipcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjU1OiAqIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIC0gQ2FsbGJhY2tzIGZvciBsaXZlLXVwZGF0YWJsZSBmaWxlcy5cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTU2LSAqIEBjYW5fcHJlc2VydmU6IFJlcXVpcmVkLiBMaWdodHdlaWdodCBjaGVjayB0byBzZWUgaWYgdGhpcyBoYW5kbGVyIGlzXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNzMtICovXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo3NDpzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC03NS1cdGJvb2wgKCpjYW5fcHJlc2VydmUpKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD0xMDE9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjEwMjpcdGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzICpvcHM7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDMtXHRjb25zdCBjaGFyIGNvbXBhdGlibGVbTElWRVVQREFURV9ITkRMX0NPTVBBVF9MRU5HVEhdO1xuLS1cbm1tL21lbWZkX2x1by5jPTU4OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1mZF9sdW9fZ2V0X2lkKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL21lbWZkX2x1by5jLTU5Mi1cbm1tL21lbWZkX2x1by5jOjU5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xubW0vbWVtZmRfbHVvLmMtNTk0LVx0LmZyZWV6ZSA9IG1lbWZkX2x1b19mcmVlemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGxpdmV1cGRhdGVfZmlsZV9vcHNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbGl2ZXVwZGF0ZV9maWxlX29wc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc291bmRzIGxpa2UgaXQmIzM5O3MgcHJldHR5IGNyaXRpY2FsIGZvciB0aGUgbGl2ZSB1cGRhdGUgcHJvY2VzcyDigJMgZGVhbGluZyB3aXRoIGZpbGUgb3BlcmF0aW9ucyBkdXJpbmcgYW4gdXBkYXRlLCBJJiMzOTtkIGltYWdpbmUuIFRoZXJlZm9yZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGltcGFjdC4gS25vd2luZyB3aGVyZSBpdOKAmXMgY2FsbGVkIHdpbGwgcHJvdmlkZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGUgZmxvdy4gVGhpcyB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggaXRzIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpdmV1cGRhdGVfZmlsZV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTE5LVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjA6c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjEtc3RydWN0IGxpdmV1cGRhdGVfZmxiO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo0NzpcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcjtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ4LVx0aW50IHJldHJpZXZlX3N0YXR1cztcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD03ND1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo3NTpcdGJvb2wgKCpjYW5fcHJlc2VydmUpKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTc2LVx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTg4LS8qKlxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6ODk6ICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIC0gUmVwcmVzZW50cyBhIGhhbmRsZXIgZm9yIGEgbGl2ZS11cGRhdGFibGUgZmlsZSB0eXBlLlxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtOTAtICogQG9wczogICAgICAgICAgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb25zXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTAwLSAqL1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MTAxOnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDItXHRjb25zdCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAqb3BzO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTIzMj1pbnQgbGl2ZXVwZGF0ZV9yZWJvb3Qodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yMzMtXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzQ6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM1OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjIzNzppbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzOC1cdFx0XHQgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM5OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjQwLVx0XHRcdCAgICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYik7XG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjU0PXN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVib290KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjU4LVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjU5OnN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjAte1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2My1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI2NDpzdGF0aWMgaW5saW5lIHZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjY1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjctXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNjg6c3RhdGljIGlubGluZSBpbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2OS1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNzMtXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNzQ6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI3NS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIwLSAqIEtlcm5lbCBtb2R1bGVzIHJlc3BvbnNpYmxlIGZvciBhIHNwZWNpZmljIGZpbGUgdHlwZSAoZS5nLiwgbWVtZmQsIHZmaW8pXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjIxOiAqIHJlZ2lzdGVyIGEgXHUwMDI2c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyLiBUaGlzIGhhbmRsZXIgcHJvdmlkZXMgYSBzZXQgb2Zcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMjItICogY2FsbGJhY2tzIHRoYXQgTFVPIGludm9rZXMgYXQgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgdXBkYXRlIHByb2Nlc3MsIG1vc3Rcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTEyMi0gKiBzdHJ1Y3QgbHVvX2ZpbGUgLSBSZXByZXNlbnRzIGEgc2luZ2xlIHByZXNlcnZlZCBmaWxlIGluc3RhbmNlLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxMjM6ICogQGZoOiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIFx1MDAyNnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB0aGF0IG1hbmFnZXNcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTI0LSAqICAgICAgICAgICAgICAgICB0aGlzIHR5cGUgb2YgZmlsZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNjI6XHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNjMtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE3MS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGx1b19nZXRfaWQoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTczLVx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0yMzA9aW50IGx1b19wcmVzZXJ2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sIGludCBmZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIzMi1cdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyBhcmdzID0gezB9O1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoyMzM6XHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMzQtXHRzdHJ1Y3QgbHVvX2ZpbGUgKmx1b19maWxlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9NzE5PXN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIxLXtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzIyOlx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaDtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIzLVx0Ym9vbCBoYW5kbGVyX2ZvdW5kID0gZmFsc2U7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz04NTU9dm9pZCBsdW9fZmlsZV9zZXRfZGVzdHJveShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg2My0gKiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZpbGVfaGFuZGxlciAtIFJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggTFVPLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4NjQ6ICogQGZoOiBQb2ludGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg2NS0gKiBUaGUgY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGEgdW5pcXVlXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzMtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjg3NDppbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9maWxlX2hhbmRsZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODc1LXtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODc2Olx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaF9pdGVyO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzctXHRpbnQgZXJyO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtOTE5LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo5MjA6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTkyMS17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jPTIwNz12b2lkIGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjQ4LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI0OTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjUwLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg0LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI4NTp2b2lkIGx1b19mbGJfZmlsZV91bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg2LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzA1LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjMwNjp2b2lkIGx1b19mbGJfZmlsZV9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMDcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMTUtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzE2OnN0YXRpYyB2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9vbmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMTctXHRcdFx0XHQgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzU4LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjM1OTp2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9hbGwoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zNjAte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zOTMtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6Mzk0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM5NS1cdFx0XHQgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTQ3My0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYzo0NzQ6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtNDc1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05OT12b2lkIGx1b19maWxlX3NldF9kZXN0cm95KHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwMC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTAyOnZvaWQgbHVvX2ZsYl9maWxlX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDoxMDM6dm9pZCBsdW9fZmxiX2ZpbGVfZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTA0OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwNS1pbnQgX19pbml0IGx1b19mbGJfc2V0dXBfb3V0Z29pbmcodTY0ICpmbGJzX3BhKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD0xMDc9dm9pZCBsdW9fZmxiX3NlcmlhbGl6ZSh2b2lkKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMDktI2lmZGVmIENPTkZJR19MSVZFVVBEQVRFX1RFU1Rcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjExMDp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTExMS0jZWxzZVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTEyOnN0YXRpYyBpbmxpbmUgdm9pZCBsaXZldXBkYXRlX3Rlc3RfcmVnaXN0ZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCkgeyB9XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTMtI2VuZGlmXG4tLVxubGliL3Rlc3RzL2xpdmV1cGRhdGUuYz04Nz1zdGF0aWMgdm9pZCBsaXZldXBkYXRlX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE0LVxubGliL3Rlc3RzL2xpdmV1cGRhdGUuYzoxMTU6dm9pZCBsaXZldXBkYXRlX3Rlc3RfcmVnaXN0ZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE2LXtcbi0tXG5tbS9tZW1mZF9sdW8uYz01MTg9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTU3OS1cbm1tL21lbWZkX2x1by5jOjU4MDpzdGF0aWMgYm9vbCBtZW1mZF9sdW9fY2FuX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbm1tL21lbWZkX2x1by5jLTU4MS1cdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL21lbWZkX2x1by5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xuLS1cbm1tL21lbWZkX2x1by5jLTYwMy1cbm1tL21lbWZkX2x1by5jOjYwNDpzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIG1lbWZkX2x1b19oYW5kbGVyID0ge1xubW0vbWVtZmRfbHVvLmMtNjA1LVx0Lm9wcyA9IFx1MDAyNm1lbWZkX2x1b19maWxlX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaXZlIFVwZGF0ZSBGZWF0dXJlJiMzOTtzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgQ09ORklHX0xJVkVVUERBVEVgIGZlYXR1cmUsIHNwZWNpZmljYWxseSB0aGUgbWVtZmQtYmFja2VkIGltcGxlbWVudGF0aW9uLCBgbWVtZmRfbHVvYC4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHByZXNlcnZlIGZpbGVzIGFjcm9zcyBhIGBrZXhlY2AgdHJhbnNpdGlvbi4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIG1lbWZkIGJhY2tlbmQgYW5kIHRoZSBmaWxlIHJlc3RvcmF0aW9uIHByb2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2AuIFRoZXNlIHJvdXRpbmVzIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHVzZWQgd2l0aGluIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYGtob19yZXN0b3JlX3ZtYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmTigKYgdGhlc2UgYGtob19yZXN0b3JlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkICpkdXJpbmcqIHRoZSByZXRyaWV2YWwgcGhhc2UuIFRoaXMgcmV0cmlldmFsIHBoYXNlIGlzIHRyaWdnZXJlZCB3aGVuIGEgZmlsZSBpcyBicm91Z2h0IGJhY2sgaW50byBtZW1vcnkgdmlhIGBtZW1mZF9sdW9fcmV0cmlldmVgLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIGEgdXNlciBzcGFjZSBwcm9jZXNzIGRpcmVjdGx5IGNhbGwgYG1lbWZkX2x1b19yZXRyaWV2ZWA/ICBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjYWxsIHBhdGguIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgY2FsbGVkIHRocm91Z2ggYG1lbWZkX2x1b19maWxlX29wcy5yZXRyaWV2ZWAuICBUaGlzIHRoZW4gcG9pbnRzIHRvIHRoZSBmdW5jdGlvbiAgYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHdpbGwgYmUgdGhlIG9uZSB0aGF0IGxpa2VseSB0cmlnZ2VycyB0aGUgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjYWxsIGNoYWluIHRob3JvdWdobHksIGFzIHRoYXQgaXMgd2hlcmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IG1heSBsaWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgYW5kIGRhdGEgdGhhdCBhcmUgZGVzZXJpYWxpemVkIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTcxOC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXHRcdFx0XHQgICAgc3RydWN0IGx1b19maWxlX3NlciAqc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9Nzg0PWludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxNy1cdHdoaWxlICgoZmlsZV9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4MTg6XHRcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShmaWxlX3NldCwgZmlsZV9zZXIpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTktXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjoKCioqVHJhY2luZyB0aGUgQ2FsbCBTdGFjayBmb3IgYGx1b19maWxlX2Rlc2VyaWFsaXplYCoqCgpPa2F5LCBzbyBgbHVvX2ZpbGVfZGVzZXJpYWxpemVgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIGNhbiYjMzk7dCBqdXN0IG9wZXJhdGUgaW4gYSB2YWN1dW0uIFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBlbnRyeSBwb2ludCwgb3IgaXMgaXQgYnVyaWVkIGRlZXAgd2l0aGluIGEgbmVzdGVkIG1vZHVsZT8KCkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgYGx1b19maWxlX2Rlc2VyaWFsaXplYCBpcyBpbnZva2VkLiBJIGNhbiYjMzk7dCBzdGFydCBvcHRpbWl6aW5nIGl0LCByZWZhY3RvcmluZyBpdCwgb3IgZXZlbiBmdWxseSAqdW5kZXJzdGFuZGluZyogaXRzIHJvbGUgdW50aWwgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJcyB0aGlzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgY3JpdGljYWwgcGF0aCwgb3IgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBhIHZlcnkgc3BlY2lmaWMgdGFzaz8gVGhlIGxvY2F0aW9uIG9mIGl0cyBjYWxscyB3aWxsIGluZm9ybSBhbGwgb2YgdGhhdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBJREUmIzM5O3Mgc2VhcmNoIGZ1bmN0aW9uIGFuZCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbmRpcmVjdCBwYXRocyB0aGF0IG1pZ2h0IGxlYWQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x1b19maWxlX2Rlc2VyaWFsaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTUtICpcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NTY6ICogMy4gRGVzZXJpYWxpemU6IEFmdGVyIGtleGVjLCBsdW9fZmlsZV9kZXNlcmlhbGl6ZSgpIHJ1bnMgd2hlbiBzZXNzaW9uIGdldHNcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTctICogICAgZGVzZXJpYWxpemVkICh3aGljaCBpcyB3aGVuIC9kZXYvbGl2ZXVwZGF0ZSBpcyBmaXJzdCBvcGVuZWQpLiBJdCByZWFkcyB0aGVcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE1Ny0gKiBkdXJpbmcgdGhlIC5mcmVlemUoKSBjYWxsYmFjayBiZWZvcmUgYmVpbmcgc2VyaWFsaXplZCBmb3IgdGhlIG5leHQga2VybmVsLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNTg6ICogQWZ0ZXIgcmVib290LCB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSByZWNyZWF0ZWQgYnkgbHVvX2ZpbGVfZGVzZXJpYWxpemUoKSBhbmRcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTU5LSAqIGFyZSBmaW5hbGx5IGNsZWFuZWQgdXAgYnkgbHVvX2ZpbGVfZmluaXNoKCkuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTcxOC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXHRcdFx0XHQgICAgc3RydWN0IGx1b19maWxlX3NlciAqc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzU5LS8qKlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3NjA6ICogbHVvX2ZpbGVfZGVzZXJpYWxpemUgLSBSZWNvbnN0cnVjdHMgdGhlIGxpc3Qgb2YgcHJlc2VydmVkIGZpbGVzIGluIHRoZSBuZXcga2VybmVsLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03NjEtICogQGZpbGVfc2V0OiAgICAgVGhlIGluY29taW5nIGZpbGVfc2V0IHRvIGZpbGwgd2l0aCBkZXNlcmlhbGl6ZWQgZGF0YS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTc4My0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6Nzg0OmludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzg1LVx0XHRcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODE3LVx0d2hpbGUgKChmaWxlX3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjgxODpcdFx0ZXJyID0gbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKGZpbGVfc2V0LCBmaWxlX3Nlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxOS1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05NT1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjk2OmludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTk3LVx0XHRcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTU1MT1zdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3Mi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2c2Vzc2lvbi1cdTAwM2VtdXRleCkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1NzM6XHRcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplKFx1MDAyNnNlc3Npb24tXHUwMDNlZmlsZV9zZXQsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3NC1cdFx0XHRcdFx0ICAgXHUwMDI2c2VyLVx1MDAzZWZpbGVfc2V0X3Nlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTIzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgSW1wcmVzc2lvbnMgb24gTGl2ZXVwZGF0ZSBhbmQgRGVzZXJpYWxpemF0aW9uKioKClJpZ2h0LCBgbHVvX2ZpbGVfZGVzZXJpYWxpemVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHdoZW4gYC9kZXYvbGl2ZXVwZGF0ZWAgaXMgYWNjZXNzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciBpZiBhIHNlc3Npb24gaXMgYmVpbmcgZGVzZXJpYWxpemVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGxpdmUgdXBkYXRlIHdvdWxkIG5lZWQgdG8gZGVzZXJpYWxpemUgc29tZXRoaW5nLiBOb3csIGhhbmcgb24gYSBzZWNvbmQuLi4gYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZWAgaXMgYWxzbyBjYWxsZWQgZHVyaW5nIGJvb3QsIG9yIHdoZW4gYC9kZXYvbGl2ZXVwZGF0ZWAgaXMgb3BlbmVkLCBpcyBpdCBub3Q/IFRoYXQgZGVzZXJ2ZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgIC0gdGhhdCBzZWVtcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcHJvY2Vzc2VzIGludGVydHdpbmUgZHVyaW5nIGluaXRpYWwgc3RhcnR1cCBhbmQgbGl2ZSB1cGRhdGUgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM9NTM1PWludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUwLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1NTE6c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1Mi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01ODU9aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MTgtXHR3aGlsZSAoKHNlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjYxOTpcdFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MjAtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbiYjMzk7cyBPcmlnaW5zKioKCk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBwaW5wb2ludCBpdHMgaW52b2NhdGlvbi4gV2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IElzIGl0IHdpdGhpbiB0aGUgY29yZSBzZXNzaW9uIG1hbmFnZW1lbnQgbW9kdWxlPyBJcyBpdCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCwgcGVyaGFwcyBhIHVzZXIgbG9naW4sIGEgcmVxdWVzdCBmb3Igc2Vzc2lvbiBkYXRhLCBvciBkdXJpbmcgYXBwbGljYXRpb24gc3RhcnR1cD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hlcmUgdGhlIGNhbGwgb3JpZ2luYXRlcy4gQW0gSSBsb29raW5nIGF0IGNvZGUgd2l0aGluIHRoZSBjb3JlIGZyYW1ld29yaywgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5LCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBhcHBsaWNhdGlvbj8gVGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZSBhYm91dCB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgYW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jPTMzMD1zdGF0aWMgaW50IGx1b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGVwLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zMzktXHQvKiBBbHdheXMgcmV0dXJuIC1FSU8gdG8gdXNlciBpZiBkZXNlcmlhbGl6YXRpb24gZmFpbCAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYzozNDA6XHRpZiAobHVvX3Nlc3Npb25fZGVzZXJpYWxpemUoKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zNDEtXHRcdGF0b21pY19zZXQoXHUwMDI2bGRldi1cdTAwM2Vpbl91c2UsIDApO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oPTg0PWludCBsdW9fc2Vzc2lvbl9zZXJpYWxpemUodm9pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo4NTppbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemUodm9pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04Ni1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTQxLSAqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjQyOiAqIDMuICBEZXNlcmlhbGl6YXRpb24gKGluIG5ldyBrZXJuZWwpOiBBZnRlciBrZXhlYywgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKClgXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTQzLSAqICAgICBydW5zLCByZWFkaW5nIHRoZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNyZWF0aW5nIGEgbGlzdCBvZiBgc3RydWN0XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01MzU9aW50IF9faW5pdCBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyh1NjQgc2Vzc2lvbnNfcGEpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01NTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjU1MTpzdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsdW9fc2Vzc2lvbl9zZXIgKnNlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU4NC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTg1OmludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODYte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjE4LVx0d2hpbGUgKChzZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo2MTk6XHRcdGVyciA9IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzaCwgc2VyKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjIwLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ0MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpdmUgVXBkYXRlIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHBhdGggb2YgYC9kZXYvbGl2ZXVwZGF0ZWAgaGVyZS4gVGhlIGVudHJ5IHBvaW50IEkmIzM5O20gc2VlaW5nIGlzIGBsdW9fb3BlbmAsIGFuZCB0aGF0JiMzOTtzIHRoZSBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBJZiBzeXprYWxsZXIgb3BlbnMgdGhhdCBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIGhpdCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGlzICpzdXBwb3NlZCogdG8gaGFuZGxlIEtITyBkYXRhIHRoYXQgbWlnaHQgYmUgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwg4oCTIHRoaW5rIGBrZXhlY2Agb3IgYSBzaW1pbGFyIHNjZW5hcmlvLiBCdXQsIGR1cmluZyBhIHN0YW5kYXJkIGJvb3QsIHdpdGhvdXQgdGhhdCBLSE8gZGF0YSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyBnb2luZyB0byBlaXRoZXIgcmV0dXJuIHplcm8gb3IganVzdCBxdWlldGx5IGRvIG5vdGhpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIG9mIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgaXRzZWxmIGFuZCBjb25maXJtIHRoaXMgYmVoYXZpb3IuIEdvdHRhIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIGluIHRoZSBhYnNlbmNlIG9mIEtITyBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKVxuIDU4NjpcdHtcbiA1ODc6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXHUwMDI2bHVvX3Nlc3Npb25fZ2xvYmFsLmluY29taW5nO1xuIDU4ODpcdFx0c3RhdGljIGJvb2wgaXNfZGVzZXJpYWxpemVkO1xuIDU4OTpcdFx0c3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyO1xuIDU5MDpcdFx0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4gNTkxOlx0XHRzdGF0aWMgaW50IHNhdmVkX2VycjtcbiA1OTI6XHRcdGludCBlcnI7XG4gNTkzOlx0XG4gNTk0Olx0XHQvKiBJZiBoYXMgYmVlbiBkZXNlcmlhbGl6ZWQsIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZXJyb3IgY29kZSAqL1xuIDU5NTpcdFx0aWYgKGlzX2Rlc2VyaWFsaXplZClcbiA1OTY6XHRcdFx0cmV0dXJuIHNhdmVkX2VycjtcbiA1OTc6XHRcbiA1OTg6XHRcdGlzX2Rlc2VyaWFsaXplZCA9IHRydWU7XG4gNTk5Olx0XHRpZiAoIXNoLVx1MDAzZWFjdGl2ZSlcbiA2MDA6XHRcdFx0cmV0dXJuIDA7XG4gNjAxOlx0XG4gNjAyOlx0XHQvKlxuIDYwMzpcdFx0ICogTm90ZSBvbiBlcnJvciBoYW5kbGluZzpcbiA2MDQ6XHRcdCAqXG4gNjA1Olx0XHQgKiBJZiBkZXNlcmlhbGl6YXRpb24gZmFpbHMgKGUuZy4sIGFsbG9jYXRpb24gZmFpbHVyZSBvciBjb3JydXB0IGRhdGEpLFxuIDYwNjpcdFx0ICogd2UgaW50ZW50aW9uYWxseSBza2lwIGNsZWFudXAgb2Ygc2Vzc2lvbnMgdGhhdCB3ZXJlIGFscmVhZHkgcmVzdG9yZWQuXG4gNjA3Olx0XHQgKlxuIDYwODpcdFx0ICogQSBwYXJ0aWFsIGZhaWx1cmUgbGVhdmVzIHRoZSBwcmVzZXJ2ZWQgc3RhdGUgaW5jb25zaXN0ZW50LlxuIDYwOTpcdFx0ICogSW1wbGVtZW50aW5nIGEgc2FmZSBcJiMzNDt1bmRvXCYjMzQ7IHRvIHVud2luZCBjb21wbGV4IGRlcGVuZGVuY2llcyAoc2Vzc2lvbnMsXG4gNjEwOlx0XHQgKiBmaWxlcywgaGFyZHdhcmUgc3RhdGUpIGlzIGVycm9yLXByb25lIGFuZCBwcm92aWRlcyBsaXR0bGUgdmFsdWUsIGFzXG4gNjExOlx0XHQgKiB0aGUgc3lzdGVtIGlzIGVmZmVjdGl2ZWx5IGluIGEgYnJva2VuIHN0YXRlLlxuIDYxMjpcdFx0ICpcbiA2MTM6XHRcdCAqIFdlIHRyZWF0IHRoZXNlIHJlc291cmNlcyBhcyBsZWFrZWQuIFRoZSBleHBlY3RlZCByZWNvdmVyeSBwYXRoIGlzIGZvclxuIDYxNDpcdFx0ICogdXNlcnNwYWNlIHRvIGRldGVjdCB0aGUgZmFpbHVyZSBhbmQgdHJpZ2dlciBhIHJlYm9vdCwgd2hpY2ggd2lsbFxuIDYxNTpcdFx0ICogcmVsaWFibHkgcmVzZXQgZGV2aWNlcyBhbmQgcmVjbGFpbSBtZW1vcnkuXG4gNjE2Olx0XHQgKi9cbiA2MTc6XHRcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2c2gtXHUwMDNlYmxvY2tfc2V0KTtcbiA2MTg6XHRcdHdoaWxlICgoc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFx1MDAyNml0KSkpIHtcbiA2MTk6XHRcdFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xuIDYyMDpcdFx0XHRpZiAoZXJyKVxuIDYyMTpcdFx0XHRcdGdvdG8gc2F2ZV9lcnI7XG4gNjIyOlx0XHR9XG4gNjIzOlx0XG4gNjI0Olx0XHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXHUwMDI2c2gtXHUwMDNlYmxvY2tfc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCB0YWlsb3JlZCBhcyB0aG91Z2ggSSwgYSBzZWFzb25lZCBleHBlcnQsIGFtIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkNoZWNraW5nIFNlc3Npb24gQWN0aXZpdHkqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgdmVyeSBjb25jaXNlIGNoZWNrOiBgIXNoLSZndDthY3RpdmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgZ3VhcmQgY29uZGl0aW9uLiBJZiB0aGlzIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgZnVuY3Rpb24gaW5zdGFudGx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBObyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2NjdXJzLiBJIGNhbiBpbmZlciB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGlzIGxpa2VseSB0aWVkIHRvIGhhbmRsaW5nIGEgJiMzNDtzZXNzaW9uJiMzNDsgaWRlbnRpZmllZCBieSBgc2hgLiBUaGUgYGFjdGl2ZWAgZmxhZyB3aXRoaW4gdGhhdCBzZXNzaW9uIHN0cnVjdHVyZSwgYHNoYCwgaXMgdGhlIGtleS4KClRoZW4gSSBzZWUgd2hlcmUgdGhlIGBhY3RpdmVgIGZsYWcgZ2V0cyBzZXQuIEl0IGhhcHBlbnMgaW5zaWRlIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AuIFNvLCBzZXR0aW5nIHVwIGFuIGluY29taW5nIHNlc3Npb24gaXMgd2hhdCBtYWtlcyBgc2gtJmd0O2FjdGl2ZWAgdHJ1ZS4gQW55IGNhbGwgdG8gYSBtZXRob2QgaW4gdGhlIHNlc3Npb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBzZXNzaW9uIGxpa2VseSByZXR1cm5zIDAsIGluZGljYXRpbmcgYW4gZXJyb3IuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIGJhaWwgb3V0IGlmIGEgc2Vzc2lvbiBoYXNuJiMzOTt0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgYWN0aXZhdGVkLCBsaWtlbHkgcHJvdGVjdGluZyBhZ2FpbnN0IG51bGwgcG9pbnRlciBleGNlcHRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZnJvbSB1c2luZyBhIHNlc3Npb24gdGhhdCBpc24mIzM5O3QgcmVhZHkuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzNTpcdGludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxuIDUzNjpcdHtcbiA1Mzc6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXHUwMDI2bHVvX3Nlc3Npb25fZ2xvYmFsLmluY29taW5nO1xuIDUzODpcdFx0aW50IGVycjtcbiA1Mzk6XHRcbiA1NDA6XHRcdGlmICghc2Vzc2lvbnNfcGEpXG4gNTQxOlx0XHRcdHJldHVybiAwO1xuIDU0MjpcdFxuIDU0MzpcdFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9yZXN0b3JlKFx1MDAyNnNoLVx1MDAzZWJsb2NrX3NldCwgc2Vzc2lvbnNfcGEpO1xuIDU0NDpcdFx0aWYgKGVycilcbiA1NDU6XHRcdFx0cmV0dXJuIGVycjtcbiA1NDY6XHRcbiA1NDc6XHRcdHNoLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gNTQ4Olx0XHRyZXR1cm4gMDtcbiA1NDk6XHR9XG4gNTUwOlx0XG4gNTUxOlx0c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXG4gNTUyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxuIDU1MzpcdHtcbiA1NTQ6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbiAqc2Vzc2lvbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgT2JqZWN0IEhhbmRvdmVyIChLSE8pIEluaXRpYWxpemF0aW9uIGFuZCBSZXN0b3JlIFBhdGgqKgoKT2theSwgc28gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCBpcyBpbnZva2VkIG9uIGJvb3Qgd2l0aCBgc2Vzc2lvbnNfcGFgLCBhbmQgaWYgbm8gS0hPIGRhdGEgZXhpc3RzLCB3aGljaCBpcyB0aGUgbm9ybSBmb3IgYSBmcmVzaCBTeXprYWxsZXIgYm9vdCwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLiBUaGF0IG1lYW5zIGBzaC0mZ3Q7YWN0aXZlYCBzdGF5cyBmYWxzZS4gQ29uc2VxdWVudGx5LCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGRvZXMgbm90aGluZywgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGUgZW50aXJlIHJlc3RvcmUgbWVjaGFuaXNtIGlzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoZSBwcmVzZXJ2ZSBwYXRoIGF0IGFsbC4KCkxldCYjMzk7cyBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtob19wcmVzZXJ2ZV9wYWdlYC4gTG9va3MgbGlrZSBpdCYjMzk7cyB1bnVzZWQsIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuIEFoLCBpdCYjMzk7cyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBga2hvX2luaXRfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCB0aGVuIGBraG9faW5pdF9mb2xpb2AgaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtob19yZXN0b3JlX2ZvbGlvYC4gTWFrZXMgc2Vuc2UuIE5vdyBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIG9ubHkgdHJpZ2dlcmVkIHRocm91Z2ggYGtob19yZXN0b3JlX2ZyZWVgLCBga2hvX3Rlc3RfcmVzdG9yZV9kYXRhYCwgYW5kIHRoZSBgbWVtZmRfbHVvX2Rpc2NhcmRfZm9saW9zYCBhbmQgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIG9wZXJhdGlvbnMuIEFsbCB0aG9zZSBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwYXRoLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgdGhpczogQ2FuIHRoZSByZXN0b3JlIHBhdGggYmUgZW50ZXJlZCBpZiBLSE8gZGF0YSBpc24mIzM5O3QgcHJlc2VudD8gTm8sIGl0JiMzOTtzIGltcG9zc2libGUuIEJlY2F1c2UgZWl0aGVyIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIGJlIGZhbHNlIG9yIGBzaC0mZ3Q7YWN0aXZlYCB3aWxsIGJlIGZhbHNlLiBTbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGdvIG92ZXIgdGhlIGVkZ2UgY2FzZXMgYW5kIG5vdCBhc3N1bWUgYSBmcmVzaCBib290LgoKV2FpdCwgdGhlIGB0ZXN0X2tob2AgbW9kdWxlISBJIG5lZWQgdG8gcmUtZXhhbWluZSBga2hvX3Rlc3RfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3Rfa2hvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNDpcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcbiAzMTU6XHR7XG4gMzE2Olx0XHRwaHlzX2FkZHJfdCBmZHRfcGh5cztcbiAzMTc6XHRcdGludCBlcnI7XG4gMzE4Olx0XG4gMzE5Olx0XHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4gMzIwOlx0XHRcdHJldHVybiAwO1xuIDMyMTpcdFxuIDMyMjpcdFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcdTAwMjZmZHRfcGh5cywgTlVMTCk7XG4gMzIzOlx0XHRpZiAoIWVycikge1xuIDMyNDpcdFx0XHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcbiAzMjU6XHRcdFx0aWYgKGVycilcbiAzMjY6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7S0hPIHJlc3RvcmUgZmFpbGVkXFxuXCYjMzQ7KTtcbiAzMjc6XHRcdFx0ZWxzZVxuIDMyODpcdFx0XHRcdHByX2luZm8oXCYjMzQ7S0hPIHJlc3RvcmUgc3VjY2VlZGVkXFxuXCYjMzQ7KTtcbiAzMjk6XHRcbiAzMzA6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzE6XHRcdH1cbiAzMzI6XHRcbiAzMzM6XHRcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuIDMzNDpcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxuXCYjMzQ7LCBLSE9fVEVTVF9GRFQsIGVycik7XG4gMzM1Olx0XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0XHR9XG4gMzM3Olx0XG4gMzM4Olx0XHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xuIDMzOTpcdH1cbiAzNDA6XHRtb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgdm9pZCBraG9fdGVzdF9jbGVhbnVwKHZvaWQpXG4gMzQzOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS0hPIEZlYXR1cmUgTG9naWMgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIEtITyBmZWF0dXJlIGlzIGVuYWJsZWQuIFRoZSBjb3JlIG9mIHRoaXMgbG9naWMgaGluZ2VzIG9uIGBraG9faXNfZW5hYmxlZCgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBraG9faXNfZW5hYmxlZCgpYCBhY3RzIGFzIHRoZSBnYXRla2VlcGVyIGhlcmUuJiMzNDsgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCBtZWFuaW5nIEtITyBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiB0aGUgZW50aXJlIHNlY3Rpb24gbGlrZWx5IHplcm9lcyBvdXQgd2hhdGV2ZXIgdmFsdWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoLiBBIHF1aWNrIGNoZWNrIG9mIGBraG9faXNfZW5hYmxlZCgpYCByZXZlYWxzIHRoYXQgaXQgdmVyaWZpZXMgd2hldGhlciB0aGUga2VybmVsIHdhcyBib290ZWQgd2l0aCBLSE8gZGF0YSBpbiBvcmRlciB0byBtYWtlIGl0cyBkZXRlcm1pbmF0aW9uLiBJIHNob3VsZCBqdXN0IGNvbmZpcm0gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgZmFjdG9ycyBtYWtlIEtITyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGluc2lkZSBga2hvX2lzX2VuYWJsZWQoKWAuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX2lzX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTE3PXN0cnVjdCBwYWdlO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xOS0jaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjA6Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMS1ib29sIGlzX2tob19ib290KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD00ND12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDYtI2Vsc2VcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo0NzpzdGF0aWMgaW5saW5lIGJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz01OD1zdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjYwOmJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjEte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NDpFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY1LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTkwLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYzo5MTpcdGlmICgha2hvX2lzX2VuYWJsZWQoKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy05Mi1cdFx0aWYgKGxpdmV1cGRhdGVfZW5hYmxlZCgpKVxuLS1cbmxpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMzE4LVxubGliL3Rlc3Rfa2hvLmM6MzE5Olx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxubGliL3Rlc3Rfa2hvLmMtMzIwLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1ibG9jay5jPTI2MTY9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW1faW5pdCh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjYxOS1cbm1tL21lbWJsb2NrLmM6MjYyMDpcdGlmICgha2hvX2lzX2VuYWJsZWQoKSB8fCAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxubW0vbWVtYmxvY2suYy0yNjIxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBraG9faXNfZW5hYmxlZGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBraG9faXNfZW5hYmxlZGAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbmFiaWxpdHksIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBmcmVxdWVudGx5IGNhbGxlZCBvciBkZWVwbHkgbmVzdGVkIHdpdGhpbiBjcml0aWNhbCBwYXRocy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyDigJMgaXMgaXQgY2hlY2tpbmcgYSBzdGF0aWMgdmFyaWFibGUsIHF1ZXJ5aW5nIGEgZGF0YWJhc2UsIG9yIHBlcmZvcm1pbmcgbW9yZSBjb21wbGV4IGxvZ2ljPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGlmIGl0IG1vZGlmaWVzIGFueSBzaGFyZWQgc3RhdGUuIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBvdXIgZXhpc3RpbmcgY29kZSBiYXNlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHdyaXR0ZW4gYnkgc29tZW9uZSBlbHNlLCBzbyBJIHdhbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGl0cyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiBhbnkgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBmb3IgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBjb250ZXh0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU4Olx0c3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XG4gIDU5Olx0XG4gIDYwOlx0Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBraG9fZW5hYmxlO1xuICA2MzpcdH1cbiAgNjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2VuYWJsZShjaGFyICpwKVxuICA2NzpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleGVjIEhhbmRvdmVyIEVuYWJsZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga2hvX2lzX2VuYWJsZWRgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBzaW1wbHkgcmV0dXJucyB0aGUgdmFsdWUgb2YgYGtob19lbmFibGVgLiBXaGljaCwgYXMgSSBzZWUgaXQsIGRlZmF1bHRzIHRvIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgLiBTbyBlc3NlbnRpYWxseSwgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgIGlzIHNldCB0byB0cnVlLCB0aGVuIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIHJldHVybiB0cnVlLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGB0ZXN0X2toby5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuIDMxNTpcdHtcbiAzMTY6XHRcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuIDMxNzpcdFx0aW50IGVycjtcbiAzMTg6XHRcbiAzMTk6XHRcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiAzMjA6XHRcdFx0cmV0dXJuIDA7XG4gMzIxOlx0XG4gMzIyOlx0XHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcbiAzMjM6XHRcdGlmICghZXJyKSB7XG4gMzI0Olx0XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xuIDMyNTpcdFx0XHRpZiAoZXJyKVxuIDMyNjpcdFx0XHRcdHByX2VycihcJiMzNDtLSE8gcmVzdG9yZSBmYWlsZWRcXG5cJiMzNDspO1xuIDMyNzpcdFx0XHRlbHNlXG4gMzI4Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXG5cJiMzNDspO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKSB7XG4gMzM0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXG5cJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTtcbiAzMzU6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG4gMzM5Olx0fVxuIDM0MDpcdG1vZHVsZV9pbml0KGtob190ZXN0X2luaXQpO1xuIDM0MTpcdFxuIDM0MjpcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcbiAzNDM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gRGF0YSBSZXRyaWV2YWwgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBvcGVyYXRpbmcgdW5kZXIgYSBjb25kaXRpb25hbC4gSWYgYGtob19pc19lbmFibGVkKClgIHJldHVybnMgdHJ1ZSwgdGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoZXJlJiMzOTtzICpubyogS0hPIGRhdGEgYXZhaWxhYmxlPyBBaGEsIHRoZSB0ZXh0IHNheXMgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCB3aWxsIHJldHVybiBgLUVOT0VOVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGEgc3RhbmRhcmQgZXJyb3IgY29kZSB0byBpbmRpY2F0ZSAmIzM0O25vIHN1Y2ggZW50aXR5LiYjMzQ7IE5vdywgYWZ0ZXIgdGhhdCByZXRyaWV2YWwgKG9yIGxhY2sgdGhlcmVvZiksIHRoZSBjb2RlIGp1bXBzIHRvIGBraG9fdGVzdF9zYXZlKClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGtob190ZXN0X3NhdmUoKWAgZnVuY3Rpb24gaXMgZG9pbmcgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGZsb3cuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgcmVhY3RzIHRvIG9yIGluY29ycG9yYXRlcyB0aGUgcmVzdWx0IChvciBsYWNrIHRoZXJlb2YpIGZyb20gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc2Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMjc3Olx0XHR9XG4gMjc4Olx0XG4gMjc5Olx0XHR2ZnJlZShmb2xpb3NfaW5mbyk7XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoY3N1bSAhPSAqb2xkX2NzdW0pXG4gMjgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0dXJuIDA7XG4gMjg1Olx0fVxuIDI4NjpcdFxuIDI4NzpcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZShwaHlzX2FkZHJfdCBmZHRfcGh5cylcbiAyODg6XHR7XG4gMjg5Olx0XHR2b2lkICpmZHQgPSBwaHlzX3RvX3ZpcnQoZmR0X3BoeXMpO1xuIDI5MDpcdFx0Y29uc3QgdW5zaWduZWQgaW50ICptYWdpYztcbiAyOTE6XHRcdGludCBub2RlLCBsZW4sIGVycjtcbiAyOTI6XHRcbiAyOTM6XHRcdG5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoZmR0LCBcJiMzNDsvXCYjMzQ7KTtcbiAyOTQ6XHRcdGlmIChub2RlIFx1MDAzYyAwKVxuIDI5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGlmIChmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgbm9kZSwgS0hPX1RFU1RfQ09NUEFUKSlcbiAyOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjk5Olx0XG4gMzAwOlx0XHRtYWdpYyA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgXCYjMzQ7bWFnaWNcJiMzNDssIFx1MDAyNmxlbik7XG4gMzAxOlx0XHRpZiAoIW1hZ2ljIHx8IGxlbiAhPSBzaXplb2YoKm1hZ2ljKSlcbiAzMDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAoKm1hZ2ljICE9IEtIT19URVNUX01BR0lDKVxuIDMwNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMDY6XHRcbiAzMDc6XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmVfZGF0YShmZHQsIG5vZGUpO1xuIDMwODpcdFx0aWYgKGVycilcbiAzMDk6XHRcdFx0cmV0dXJuIGVycjtcbiAzMTA6XHRcbiAzMTE6XHRcdHJldHVybiAwO1xuIDMxMjpcdH1cbiAzMTM6XHRcbiAzMTQ6XHRzdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4gMzE1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk3MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBXb3JrZmxvdzogYGtob190ZXN0X3NhdmVgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHJlLW9yaWVudCBteXNlbGYuIFRoYXQgYGtob190ZXN0X3NhdmVgIGZpbGUuLi4gaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgbmVlZCB0byByZXZpZXcgaXQuIEl0IHByb2JhYmx5IGNvbnRhaW5zIHRoZSBjcnVjaWFsIHN0YXRlIGluZm9ybWF0aW9uIG9yIGRhdGEgbWFuaXB1bGF0aW9uIHN0ZXBzIHRoYXQgSSB3YXMgd29ya2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSBJIGxlZnQgb2ZmLiBJcyBpdCBhIGNoZWNrcG9pbnQgc2F2ZT8gQSB0ZXN0IGNvbmZpZ3VyYXRpb24/IE9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHNob3VsZCBrbm93LiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIHRoYXQganVtcCBvdXQgYWJvdXQgdGhhdCBwcmV2aW91cyB0ZXN0aW5nIGl0ZXJhdGlvbiwgb3IgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB1cCB0byBzcGVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Rlc3Rfc2F2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYz0xNjI9c3RhdGljIGludCBraG9fdGVzdF9nZW5lcmF0ZV9kYXRhKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMjA0LVxubGliL3Rlc3Rfa2hvLmM6MjA1OnN0YXRpYyBpbnQga2hvX3Rlc3Rfc2F2ZSh2b2lkKVxubGliL3Rlc3Rfa2hvLmMtMjA2LXtcbi0tXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTMzNy1cbmxpYi90ZXN0X2toby5jOjMzODpcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG5saWIvdGVzdF9raG8uYy0zMzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERhdGEgU2V0OiBraG9cX3Rlc3RcX3NhdmUqKgoKQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoaXMgZmlsZSwgYGtob190ZXN0X3NhdmVgLiBJbW1lZGlhdGVseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBhc3N1bXB0aW9ucyBJIGNhbiBtYWtlIGFib3V0IGl0cyBjb250ZW50cyBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uICYjMzQ7a2hvJiMzNDsgbWlnaHQgc3VnZ2VzdCBhIHBhcnRpY3VsYXIgZGF0YSBmb3JtYXQgb3Igc291cmNlIOKAkyBwZXJoYXBzIGEgc3BlY2lmaWMgcmVzZWFyY2ggZ3JvdXAmIzM5O3Mgb3V0cHV0LCBhIHBhcnRpY3VsYXIgZXhwZXJpbWVudCwgb3IgYSBzcGVjaWZpYyB0eXBlIG9mIGRhdGEgZW5jb2RpbmcuICYjMzQ7dGVzdCYjMzQ7IGluZGljYXRlcyBpdCYjMzk7cyBsaWtlbHkgYSB0ZW1wb3Jhcnkgb3IgZGV2ZWxvcG1lbnRhbCBmaWxlLCBtYXliZSBhIHZhbGlkYXRpb24gb3IgcHJlbGltaW5hcnkgb3V0cHV0LiBBbmQgJiMzNDtzYXZlJiMzNDsgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhIHNuYXBzaG90IG9mIHRoZSBkYXRhIGF0IGEgY2VydGFpbiBwb2ludCwgYSBjaGVja3BvaW50IGluIHRoZSB3b3JrZmxvdy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGF0IHRoZXNlIGFyZSBqdXN0IGluaXRpYWwgY2x1ZXMuIEkgaGF2ZSB0byByZXNpc3QgdGhlIHVyZ2UgdG8ganVtcCB0byBjb25jbHVzaW9ucyB1bnRpbCBJJiMzOTt2ZSBhY3R1YWxseSBsb29rZWQgYXQgdGhlIGZpbGUgaXRzZWxmLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBwYXJzZSB0aGlzIGFwcHJvcHJpYXRlbHkuIElzIHRoaXMgYSBjdXN0b20gYmluYXJ5IGZvcm1hdD8gSXMgaXQgdGV4dC1iYXNlZCwgbGlrZSBDU1YsIEpTT04sIG9yIFhNTD8gT3IgaXMgaXQgc29tZXRoaW5nIGEgYml0IG1vcmUgZXNvdGVyaWM/IFRoZSBmaXJzdCBwcmlvcml0eSBpcyB0byBkZXRlcm1pbmUgaG93IHRvIHJlYWQgdGhlIGRhdGEsIHNvIHRoYXQgSSBjYW4gZmlndXJlIG91dCBpdHMgc3RydWN0dXJlIGFuZCB0aGVuIHN0YXJ0IGFuYWx5emluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA1Olx0c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXG4gMjA2Olx0e1xuIDIwNzpcdFx0c3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmtob190ZXN0X3N0YXRlO1xuIDIwODpcdFx0c3RydWN0IGZvbGlvICoqZm9saW9zO1xuIDIwOTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfbnI7XG4gMjEwOlx0XHRpbnQgZXJyO1xuIDIxMTpcdFxuIDIxMjpcdFx0bWF4X21lbSA9IFBBR0VfQUxJR04obWF4X21lbSk7XG4gMjEzOlx0XHRtYXhfbnIgPSBtYXhfbWVtIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDIxNDpcdFxuIDIxNTpcdFx0Zm9saW9zID0ga3ZtYWxsb2Nfb2Jqcygqc3RhdGUtXHUwMDNlZm9saW9zLCBtYXhfbnIpO1xuIDIxNjpcdFx0aWYgKCFmb2xpb3MpXG4gMjE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIxODpcdFx0c3RhdGUtXHUwMDNlZm9saW9zID0gZm9saW9zO1xuIDIxOTpcdFxuIDIyMDpcdFx0ZXJyID0ga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YShzdGF0ZSk7XG4gMjIxOlx0XHRpZiAoZXJyKVxuIDIyMjpcdFx0XHRnb3RvIGVycl9mcmVlX2ZvbGlvcztcbiAyMjM6XHRcbiAyMjQ6XHRcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcbiAyMjU6XHRcdGlmIChlcnIpXG4gMjI2Olx0XHRcdGdvdG8gZXJyX2ZyZWVfZm9saW9zO1xuIDIyNzpcdFxuIDIyODpcdFx0cmV0dXJuIDA7XG4gMjI5Olx0XG4gMjMwOlx0ZXJyX2ZyZWVfZm9saW9zOlxuIDIzMTpcdFx0a3ZmcmVlKGZvbGlvcyk7XG4gMjMyOlx0XHRyZXR1cm4gZXJyO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHByb2Nlc3MsIHRoaW5raW5nIGFzIHRoZSBjb2RlIGl0c2VsZiBtaWdodDoKCioqVGhlIFByZXNlcnZhdGlvbiBEYW5jZTogQSBMb29rIGF0IERhdGEgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gYGtob190ZXN0X3NhdmVgIGlzIGluaXRpYXRpbmcgYSBjcml0aWNhbCBvcGVyYXRpb24uIEl0JiMzOTtzIGVzc2VudGlhbGx5IHNheWluZywgJiMzNDtIZXksIGJlZm9yZSBJIGRvIHNvbWV0aGluZyBwb3RlbnRpYWxseSByaXNreSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBzYWZlIGFuZCBzb3VuZC4mIzM0OyBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgY2FsbGluZyBga2hvX3Rlc3RfcHJlc2VydmVgLiBUaGF0JiMzOTtzIGEgY2xlYXIgc2lnbmFsIHRvIG1lIHRoYXQgYGtob190ZXN0X3NhdmVgJiMzOTtzIGZ1bmN0aW9uYWxpdHksIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBkZXBlbmRzIG9uIGEgcHJlbGltaW5hcnkgZGF0YSBzYWZlZ3VhcmRpbmcgc3RlcC4gVGhpcyBsb29rcyBsaWtlIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIGdvb2Qgb25lISBJdCYjMzk7cyBsaWtlbHkgdGhhdCBga2hvX3Rlc3RfcHJlc2VydmVgIGRvZXMgc29tZSBraW5kIG9mIGJhY2t1cCwgc25hcHNob3R0aW5nLCBzZXJpYWxpemF0aW9uLCBvciB2ZXJzaW9uaW5nLiBJJiMzOTttIGluZmVycmluZywgd2l0aCBteSBleHBlcnQgZXllLCB0aGF0IHRoZSBzeXN0ZW0gaXMgZW5naW5lZXJlZCB0byBwcmlvcml0aXplIGRhdGEgaW50ZWdyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fdGVzdF9wcmVzZXJ2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYz00NT1zdGF0aWMgdm9pZCBraG9fdGVzdF91bnByZXNlcnZlX2RhdGEoc3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSlcbi0tXG5saWIvdGVzdF9raG8uYy01My1cbmxpYi90ZXN0X2toby5jOjU0OnN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxubGliL3Rlc3Rfa2hvLmMtNTUte1xuLS1cbmxpYi90ZXN0X2toby5jPTk3PXN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlcGFyZV9mZHQoc3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSwgc3NpemVfdCBmZHRfc2l6ZSlcbi0tXG5saWIvdGVzdF9raG8uYy0xMjMtXG5saWIvdGVzdF9raG8uYzoxMjQ6c3RhdGljIGludCBraG9fdGVzdF9wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxubGliL3Rlc3Rfa2hvLmMtMTI1LXtcbi0tXG5saWIvdGVzdF9raG8uYy0xMzctXG5saWIvdGVzdF9raG8uYzoxMzg6XHRlcnIgPSBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKHN0YXRlKTtcbmxpYi90ZXN0X2toby5jLTEzOS1cdGlmIChlcnIpXG4tLVxubGliL3Rlc3Rfa2hvLmM9MjA1PXN0YXRpYyBpbnQga2hvX3Rlc3Rfc2F2ZSh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTIyMy1cbmxpYi90ZXN0X2toby5jOjIyNDpcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcbmxpYi90ZXN0X2toby5jLTIyNS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHByb2Nlc3NpbmcgdGhpcyB0YXNrLCBmb2N1c2luZyBvbiB3aGF0IEkmIzM5O2QgYmUgdGhpbmtpbmcgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgVGFzazogYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgKioKCkFscmlnaHQsIHRoZSBmaWxlIG9yIHRlc3Qgc3VpdGUgSSBuZWVkIHRvIGxvb2sgYXQgaXMgbmFtZWQgYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgLiBJbW1lZGlhdGVseSwgYSBmZXcgdGhpbmdzIGp1bXAgb3V0LiBUaGUgbmFtZSBzdWdnZXN0cyBhIHNwZWNpZmljIGZvY3VzIG9uICpkYXRhIHByZXNlcnZhdGlvbiouIFRoaXMgaXMga2V5LiBXZSYjMzk7cmUgbm90IGp1c3QgcnVubmluZyB0ZXN0cywgd2UmIzM5O3JlIG1ha2luZyBzdXJlIGRhdGEgaW50ZWdyaXR5IGlzIG1haW50YWluZWQsIHBvdGVudGlhbGx5IGR1cmluZyBzb21lIGtpbmQgb2Ygb3BlcmF0aW9uIG9yIHByb2Nlc3MuICYjMzQ7S2hvJiMzNDsgaXMgYSBwcmVmaXggSSBoYXZlbiYjMzk7dCBzZWVuIGJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBzaWduaWZpZXM7IGl0IG1pZ2h0IGJlIGEgc3BlY2lmaWMgbGlicmFyeSwgcHJvamVjdCwgb3IgY29udGV4dC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgaXMgdGhhdCB0aGlzIGlzIGEgdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgc29tZSBvcGVyYXRpb24sIG1heWJlIGEgZGF0YSBtaWdyYXRpb24sIGEgc3lzdGVtIHVwZGF0ZSwgb3IgYSBzcGVjaWZpYyBkYXRhIHRyYW5zZm9ybWF0aW9uLCBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGxlYWQgdG8gZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFzc2VydHMgdGhhdCBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMsIGNoZWNrc3VtcywgZGF0YSBzaXplcywgb3Igc3BlY2lmaWMgZGF0YSB2YWx1ZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWN0aW9uIGJlaW5nIHRlc3RlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZWRnZSBjYXNlcywgd2hlcmUgdGhpbmdzIGFyZSBtb3N0IGxpa2VseSB0byBnbyB3cm9uZywgbGlrZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGVycm9yIGhhbmRsaW5nLCBvciB1bnVzdWFsIGRhdGEgaW5wdXRzLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdGVzdCYjMzk7cyBzY29wZSDigJMgZG9lcyBpdCBjb3ZlciB0aGUgZW50aXJlIGRhdGEgc2V0LCBvciBpcyBpdCBzYW1wbGluZyBzcGVjaWZpYyBrZXkgYXJlYXM/IElzIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGNsZWFybHkgZGVmaW5lZD8gVGhpcyBpcyBjcnVjaWFsIGZvciByZXBsaWNhdGlvbiBhbmQgcmVsaWFiaWxpdHkgb2YgcmVzdWx0cy4gSXMgdGhlcmUgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhpcyB0ZXN0PyBUaGF0IHdvdWxkIGJlIGZhbnRhc3RpYyEgVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoZSB0ZXN0IGlzIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcyBkYXRhIHByZXNlcnZhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCBraG9fdm1hbGxvYyBmb2xpb3NfaW5mb19waHlzO1xuICA1NzpcdFx0cGh5c19hZGRyX3QgKmZvbGlvc19pbmZvO1xuICA1ODpcdFx0aW50IGVycjtcbiAgNTk6XHRcbiAgNjA6XHRcdGZvbGlvc19pbmZvID0gdm1hbGxvY19hcnJheShzdGF0ZS1cdTAwM2Vucl9mb2xpb3MsIHNpemVvZigqZm9saW9zX2luZm8pKTtcbiAgNjE6XHRcdGlmICghZm9saW9zX2luZm8pXG4gIDYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA2MzpcdFxuICA2NDpcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX3ZtYWxsb2MoZm9saW9zX2luZm8sIFx1MDAyNmZvbGlvc19pbmZvX3BoeXMpO1xuICA2NTpcdFx0aWYgKGVycilcbiAgNjY6XHRcdFx0Z290byBlcnJfZnJlZV9pbmZvO1xuICA2NzpcdFxuICA2ODpcdFx0c3RhdGUtXHUwMDNlZm9saW9zX2luZm9fcGh5cyA9IGZvbGlvc19pbmZvX3BoeXM7XG4gIDY5Olx0XHRzdGF0ZS1cdTAwM2Vmb2xpb3NfaW5mbyA9IGZvbGlvc19pbmZvO1xuICA3MDpcdFxuICA3MTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZW5yX2ZvbGlvczsgaSYjNDM7JiM0MzspIHtcbiAgNzI6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHN0YXRlLVx1MDAzZWZvbGlvc1tpXTtcbiAgNzM6XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuICA3NDpcdFxuICA3NTpcdFx0XHRmb2xpb3NfaW5mb1tpXSA9IHZpcnRfdG9fcGh5cyhmb2xpb19hZGRyZXNzKGZvbGlvKSkgfCBvcmRlcjtcbiAgNzY6XHRcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX2ZvbGlvKGZvbGlvKTtcbiAgNzc6XHRcdFx0aWYgKGVycilcbiAgNzg6XHRcdFx0XHRnb3RvIGVycl91bnByZXNlcnZlO1xuICA3OTpcdFx0XHRzdGF0ZS1cdTAwM2Vucl9mb2xpb3NfcHJlc2VydmVkJiM0MzsmIzQzOztcbiAgODA6XHRcdH1cbiAgODE6XHRcbiAgODI6XHRcdHJldHVybiAwO1xuICA4MzpcdFxuICA4NDpcdGVycl91bnByZXNlcnZlOlxuICA4NTpcdFx0LypcbiAgODY6XHRcdCAqIGtob190ZXN0X3VucHJlc2VydmVfZGF0YSBmcmVlcyBmb2xpb19pbmZvLCBiYWlsIG91dCBpbW1lZGlhdGVseSB0b1xuICA4NzpcdFx0ICogYXZvaWQgZG91YmxlIGZyZWVcbiAgODg6XHRcdCAqL1xuICA4OTpcdFx0a2hvX3Rlc3RfdW5wcmVzZXJ2ZV9kYXRhKHN0YXRlKTtcbiAgOTA6XHRcdHJldHVybiBlcnI7XG4gIDkxOlx0XG4gIDkyOlx0ZXJyX2ZyZWVfaW5mbzpcbiAgOTM6XHRcdHZmcmVlKGZvbGlvc19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gRGF0YSBQcmVzZXJ2YXRpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAgY2FsbHMgYGtob19wcmVzZXJ2ZV9mb2xpb2AsIGJ1dCBub3QgYGtob19wcmVzZXJ2ZV9wYWdlYC4gIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIHdoeSBga2hvX3ByZXNlcnZlX3BhZ2VgIGV4aXN0cyBhdCBhbGwuIEl0IGFwcGVhcnMgY29tcGxldGVseSB1bnVzZWQsIHVubGVzcy4uLiB3YWl0LCB3aGF0IGFib3V0IGBraG9fcHJlc2VydmVfcGFnZXNgPyBJIHJlbWVtYmVyIGl0IGJlaW5nIHVzZWQgd2l0aGluIGBraG9fcHJlc2VydmVfdm1hbGxvY2AuCgpOb3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGtob19wcmVzZXJ2ZV92bWFsbG9jYCAqaXMqIGNhbGxlZCBieSBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAuIEFuZCBga2hvX3Rlc3Rfc2F2ZSgpYCBpcyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgaWYgS0hPIGlzIG5vdCBlbmFibGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBmb3IgYSBub3JtYWwgYm9vdC4gU28gYGtob19wcmVzZXJ2ZV9wYWdlc2AgaXMgcmVhY2hhYmxlIHZpYSBga2hvX3Rlc3Rfc2F2ZSgpYCBhcyBsb25nIGFzIEtITyBpcyBkaXNhYmxlZC4KCkhvbGQgb24sIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBmYWxzZSwgYGtob190ZXN0X2luaXQoKWAgc2hvdWxkIHJldHVybiAwLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBga2hvX3Rlc3RfaW5pdCgpYC4KCmBgYGMKc3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKQp7CglwaHlzX2FkZHJfdCBmZHRfcGh5czsKCWludCBlcnI7CgoJaWYgKCFraG9faXNfZW5hYmxlZCgpKQoJCXJldHVybiAwOwoKCWVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgJmFtcDtmZHRfcGh5cywgTlVMTCk7CglpZiAoIWVycikgewoJCWVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpOwoJCWlmIChlcnIpCgkJCXByX2VycigmIzM0O0tITyByZXN0b3JlIGZhaWxlZFxuJiMzNDspOwoJCWVsc2UKCQkJcHJfaW5mbygmIzM0O0tITyByZXN0b3JlIHN1Y2NlZWRlZFxuJiMzNDspOwoKCQlyZXR1cm4gZXJyOwoJfQoKCWlmIChlcnIgIT0gLUVOT0VOVCkgewoJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gcmV0cmlldmUgJXMgRkRUOiAlZFxuJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTsKCQlyZXR1cm4gZXJyOwoJfQoKCXJldHVybiBraG9fdGVzdF9zYXZlKCk7Cn0KYGBgCgpPa2F5LCB5ZXMsIEkgd2FzIHJpZ2h0LiBJZiBgIWtob19pc19lbmFibGVkKClgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLiBTbywgbm93IGl0IGlzIGNsZWFyOiBga2hvX3Rlc3Rfc2F2ZSgpYCBpcyAqb25seSogY2FsbGVkIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBUUlVFLCAqYW5kKiBga2hvX3JldHJpZXZlX3N1YnRyZWVgIHJldHVybnMgYC1FTk9FTlRgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25kaXRpb24gaGVyZS4KClNvLCB3aGVuICppcyogYGtob19pc19lbmFibGVkKClgIHRydWU/IEFoLCBpdCYjMzk7cyB0cnVlIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgIGlzIHNldCwgb3IgaWYgdGhlIHVzZXIgc3BlY2lmaWNhbGx5IHBhc3NlcyBga2hvPW9uYCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gR290IGl0LiBTbywgaWYgS0hPIGlzIHN1cHBvc2VkIHRvIGJlIGVuYWJsZWQsIGJ1dCB3ZSBhcmUgZG9pbmcgYSBub3JtYWwgYm9vdCAoaS5lLiwgdGhlcmUgaXMgbm8gS0hPIGRhdGEpLCBga2hvX3JldHJpZXZlX3N1YnRyZWVgICp3aWxsKiByZXR1cm4gYC1FTk9FTlRgLiBBbmQgdGhlbiwgYGtob190ZXN0X3NhdmUoKWAgKndpbGwqIGJlIGNhbGxlZC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcmV0cmlldmVfc3VidHJlZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzk9dm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDA6aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQxLVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMTU9c3RhdGljIGlubGluZSB2b2lkIGtob19yZW1vdmVfc3VidHJlZSh2b2lkICpibG9iKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTYtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTE3OnN0YXRpYyBpbmxpbmUgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExOC1cdFx0XHRcdCAgICAgICBzaXplX3QgKnNpemUpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNDM1PUVYUE9SVF9TWU1CT0xfR1BMKGlzX2tob19ib290KTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0MzctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0Mzg6ICoga2hvX3JldHJpZXZlX3N1YnRyZWUgLSByZXRyaWV2ZSBhIHByZXNlcnZlZCBzdWIgYmxvYiBieSBpdHMgbmFtZS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQzOS0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHN1YiBibG9iIHBhc3NlZCB0byBraG9fYWRkX3N1YnRyZWUoKS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDctICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0NDg6aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDkte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQ4MS19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0ODI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JldHJpZXZlX3N1YnRyZWUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDgzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTUzMD1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2luX2tleGVjX21ldGFkYXRhKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNTM2LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNTM3Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX01FVEFEQVRBX05PREVfTkFNRSwgXHUwMDI2bWV0YWRhdGFfcGh5cyxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTUzOC1cdFx0XHRcdCAgIFx1MDAyNmJsb2Jfc2l6ZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz04ND1zdGF0aWMgaW50IF9faW5pdCBsdW9fZWFybHlfc3RhcnR1cCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTgtXHQvKiBSZXRyaWV2ZSBMVU8gc3RhdGUgZnJvbSBLSE8uICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjk5Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTFVPX0tIT19FTlRSWV9OQU1FLCBcdTAwMjZsdW9fc2VyX3BoeXMsIFx1MDAyNmxlbik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEwMC1cdGlmIChlcnIpIHtcbi0tXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTMyMS1cbmxpYi90ZXN0X2toby5jOjMyMjpcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xubGliL3Rlc3Rfa2hvLmMtMzIzLVx0aWYgKCFlcnIpIHtcbi0tXG5tbS9tZW1ibG9jay5jPTI2MzA9c3RhdGljIHZvaWQgKl9faW5pdCByZXNlcnZlX21lbV9raG9fcmV0cmlldmVfZmR0KHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNjM4LVxubW0vbWVtYmxvY2suYzoyNjM5Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTUVNQkxPQ0tfS0hPX0ZEVCwgXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xubW0vbWVtYmxvY2suYy0yNjQwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY3NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtITyBEYXRhIEZsb3cqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYGtob19pc19lbmFibGVkKClgIGlzIG9uIGFuZCBga2hvX3JldHJpZXZlX3N1YnRyZWVgIGZhaWxzIHdpdGggYW4gYC1FTk9FTlRgIGVycm9yLCB0aGVuIGBraG9fdGVzdF9zYXZlKClgIGdldHMgY2FsbGVkLiBga2hvX3Rlc3Rfc2F2ZSgpYCBzZWVtcyB0byB0cmlnZ2VyIGEgY2FzY2FkZSBvZiBmdW5jdGlvbiBjYWxsczogYGtob190ZXN0X2dlbmVyYXRlX2RhdGEoKWAsIGBraG9fdGVzdF9wcmVzZXJ2ZSgpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YSgpYC4gVGhlbiB0aGlzIGxlYWRzIHRvIGBraG9fcHJlc2VydmVfdm1hbGxvYygpYCBhbmQgYGtob19wcmVzZXJ2ZV9mb2xpbygpYC4gRXZlbnR1YWxseSwgYGtob19wcmVzZXJ2ZV92bWFsbG9jKClgIGNhbGxzIGBraG9fcHJlc2VydmVfcGFnZXMoKWAuIFNvLCB1bmRlciB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiAoYENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVD15YCBhbmQgYENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSPXlgKSwgYGtob19wcmVzZXJ2ZV9wYWdlc2Agc2hvdWxkIGJlIHJlYWNoYWJsZSBkdXJpbmcgYm9vdC4KCkJ1dCB3YWl0IGEgbWludXRlISBJJiMzOTttIHNlZWluZyBga2hvX3ByZXNlcnZlX3BhZ2VgIChzaW5ndWxhcikgYWRkZWQgaW4gdGhlIHBhdGNoLiBBbmQgdGhvc2UgZnVuY3Rpb25zLCBga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFyZSBjb21wbGV0ZWx5IHVudXNlZCBpbiB0aGUgY3VycmVudCB0cmVlISBUaGF0JiMzOTtzIHN0cmFuZ2UuIFRoZSBvbmx5ICp1c2FibGUqIGNoYW5nZXMgaW4gdGhlIHBhdGNoIHNlZW0gdG8gYmUgdGhlIHJlZmFjdG9yaW5nLCB3aGljaCB1dGlsaXplcyBgX19raG9fcmVzdG9yZV9wYWdlYCB3aXRoaW4gYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYC4gUGx1cywgdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKWAgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuCgpIb3dldmVyLCB0aGUgYmlnZ2VyIGlzc3VlIGlzIHRoYXQgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhcmUgKm9ubHkqIGNhbGxlZCBkdXJpbmcgdGhlIHJlc3RvcmUgcGhhc2UuIFRoZSByZXN0b3JlIHBoYXNlIGlzICpvbmx5KiB0cmlnZ2VyZWQgaWYgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCBzdWNjZWVkcy4gIGBraG9fcmV0cmlldmVfc3VidHJlZWAgY2FuIG9ubHkgc3VjY2VlZCBpZiB0aGVyZSYjMzk7cyBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gQW5kIHN5emthbGxlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgZG9lc24mIzM5O3QgYWN0dWFsbHkgcGVyZm9ybSBrZXhlYyB3aXRoIEtITyBkYXRhLiBJdCBzdGFydHMgd2l0aCBhIGZyZXNoIFZNIGltYWdlLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgcmVzdG9yZSBwaGFzZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCEKCkhtbSwgaXMgdGhlcmUgYW55IHdheSB0byBwb3NzaWJseSB0cmlnZ2VyIGBraG9fcmVzdG9yZV9mb2xpb2AgZnJvbSB1c2VyIHNwYWNlIHNvbWVob3c/IE1heWJlIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy00MTYtXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vbWVtZmRfbHVvLmMtNDE4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3Nlcixcbi0tXG5tbS9tZW1mZF9sdW8uYz01MTg9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTU2MS1cbm1tL21lbWZkX2x1by5jOjU2MjpcdFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXHUwMDNlbnJfZm9saW9zKTtcbm1tL21lbWZkX2x1by5jLTU2My1cdFx0dmZyZWUoZm9saW9zX3Nlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODcxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgYnVyaWVkIHByZXR0eSBkZWVwLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9uczogYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAsIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgLCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLCBhbmQgZmluYWxseSwgaW5pdGlhdGVkIGJ5IGEgY2FsbCB0byBgbHVvX29wZW5gIG9uIGAvZGV2L2xpdmV1cGRhdGVgLiAgVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpbW1lZGlhdGVseSByZXR1cm5zIGlmIGEgZmxhZywgYHNoLSZndDthY3RpdmVgLCBpcyBmYWxzZS4KClRoaXMgYHNoLSZndDthY3RpdmVgIGZsYWcgaXMgb25seSBzZXQgaW4gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCwgd2hpY2gsIEkgbm93IHJlY2FsbCwgaXMgY2FsbGVkIGR1cmluZyBib290IHdpdGggYHNlc3Npb25zX3BhYC4gSWYsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhlcmUgaXMgKm5vKiBLSE8gZGF0YSwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLCBhbmQgdGhhdCBjcnVjaWFsIGBzaC0mZ3Q7YWN0aXZlYCBmbGFnIHN0YXlzIGZhbHNlLiBUaGF0IG1lYW5zIHRoZSB3aG9sZSBkZXNlcmlhbGl6YXRpb24gcHJvY2VzcyBpcyBzaG9ydC1jaXJjdWl0ZWQg4oCTIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgZG9lcyBub3RoaW5nLiBDb25zZXF1ZW50bHksIGBtZW1mZF9sdW9fcmV0cmlldmVgIGlzICpuZXZlciogY2FsbGVkLCBhbmQgdGhlcmVmb3JlIGFsbCB0aGUgZnVuY3Rpb25zICpkb3duc3RyZWFtKiBmcm9tIGl0LCBpbmNsdWRpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCwgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCwgYXJlIGFsc28gaW5hY2Nlc3NpYmxlLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGludHJvZHVjZToKMS4gIFVudXNlZCBmdW5jdGlvbnM6IGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4KMi4gIFJlZmFjdG9yaW5nIHRoYXQsIGFnYWluLCBkZXBlbmRzIG9uIHRoYXQgaW5hY2Nlc3NpYmxlIGRlc2VyaWFsaXphdGlvbiBwYXRoLgozLiAgU29tZSBgY2xlYXJfcGFnZV90YWdfcmVmYCBjYWxscyB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbHNvIHVucmVhY2hhYmxlLgoKR2l2ZW4gdGhhdCBhIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudCwgd2hpY2ggZG9lc24mIzM5O3QgYm9vdCB3aXRoIEtITyBkYXRhLCB3aWxsIG5ldmVyIHJlYWNoIGFueSBvZiB0aGVzZSBtb2RpZmllZCBvciBhZGRlZCBmdW5jdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gZnV6emluZyB0aGlzIHBhdGNoIGFzIGl0IHN0YW5kcy4KCkhvbGQgb24sIHRob3VnaC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY2xldmVyIHRyaWNrcy4gIENhbiBpdCB3cml0ZSBzb21ldGhpbmcgdG8gYC9zeXMva2VybmVsL2tleGVjX2hhbmRvdmVyYCBvciBzaW1pbGFyIHRvIGluamVjdCBLSE8gZGF0YSBpbnRvIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG1ha2luZyB0aGlzIGNvZGUgcGF0aCBhY2Nlc3NpYmxlPyAgSSBzaG91bGQgY2hlY2sgdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gdG8gaW5qZWN0IHRoYXQgZGF0YSBkaXJlY3RseS4gSWYgdGhlcmUgaXMsIHRoZW4gd2UgKm1pZ2h0KiBoYXZlIGEgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zZXNzaW9uX3NldHVwX2luY29taW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4ODgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIG9yIHNlc3Npb24tcmVsYXRlZCBjb250ZXh0OgoKKipBbmFseXppbmcgYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBzdGFydGluZy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYC4mIzM0OyBUaGlzIGluZGljYXRlcyBhIHNwZWNpZmljLCBsaWtlbHkgY3J1Y2lhbCwgcGllY2Ugb2YgY29kZSByZWxhdGVkIHRvIGluY29taW5nIHNlc3Npb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkcyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTttIHByb2JhYmx5IGZhY2luZyBhIHByb2JsZW0gd2l0aCBpbmNvbWluZyBzZXNzaW9ucywgYW5kIHRoaXMgaXMgd2hlcmUgSSYjMzk7dmUgZGVjaWRlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgY29ubmVjdGlvbiBwcm9ibGVtLCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCBvciBkYXRhIGhhbmRsaW5nIGlzc3VlLiBLbm93aW5nIHRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCBvZiBhbiBpbmNvbWluZyBjb21tdW5pY2F0aW9uIHNlc3Npb24sIGEgcGl2b3RhbCBwb2ludCB3aGVyZSB0aGluZ3MgY2FuIGdvIHJpZ2h0IG9yLCBtb3JlIG9mdGVuIGluIG15IGxpbmUgb2Ygd29yaywgdGVycmlibHkgd3JvbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSByZWNhbGwgb3IgbG9jYXRlIHRoZSBjb2RlIGZvciB0aGlzIGZ1bmN0aW9uIGFuZCBzdGFydCBtZW50YWxseSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGFueSBsb2dpY2FsIGZsYXdzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBvYnZpb3VzIGVycm9ycyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x1b19zZXNzaW9uX3NldHVwX2luY29taW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM6MTI1Olx0ZXJyID0gbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcobHVvX3Nlci1cdTAwM2VzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg9ODI9dm9pZCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfb3V0Z29pbmcodTY0ICpzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo4MzppbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04NC1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM9NTI5PXZvaWQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX291dGdvaW5nKHU2NCAqc2Vzc2lvbnNfcGEpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01MzQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjUzNTppbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzLi4uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBsdW9fZWFybHlfc3RhcnR1cGAuIFJpZ2h0LCBhbmQgYGx1b19lYXJseV9zdGFydHVwYCBpcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gdGhlIEtITyBkYXRhLCBzcGVjaWZpY2FsbHkgYGx1b19zZXJfcGh5c2AsIHdoaWNoIGl0IGdldHMgdmlhIGBraG9fcmV0cmlldmVfc3VidHJlZWAuIFRoaXMgZGF0YSBpcyBwYXNzZWQgZnJvbSB0aGUgYm9vdGxvYWRlciBvciBwb3RlbnRpYWxseSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gaW5qZWN0IGFueXRoaW5nIGZyb20gdXNlcnNwYWNlIGFmdGVyIGJvb3Qg4oCTIGl0JiMzOTtzIGFsbCBwcmUtYm9vdCBjb25maWd1cmF0aW9uLgoKTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG5lZWRzIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJICptdXN0KiBleGFtaW5lIHRoZSBjb2RlIGl0c2VsZiwgbm90IHJlbHkgb24gd2hhdCBJICp0aGluayogSSBrbm93LiBGaW5lLiBMZXQmIzM5O3MgbG9vayBpbnRvIHRoaXMgYGtob19wcmVzZXJ2ZV9wYWdlYCBmdW5jdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byBjb25zaWRlciBpdCwgc28gSSBjaGVja2VkLiBJbml0aWFsbHksIEkgZm91bmQgaXQmIzM5O3MgKm5vdCogdXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGNoYW5nZXMgYXBwZWFyIGxpbWl0ZWQgdG8gYWRkaW5nIHVudXNlZCBmdW5jdGlvbnMgYW5kIHJlZmFjdG9yaW5nIHVucmVhY2hhYmxlIGNvZGUuIFNvLCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGJlIGZ1enplZC4KCkhvd2V2ZXIsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIGlzbiYjMzk7dCBsdXJraW5nIGluIHNvbWUgbWFjcm8gZGVmaW5pdGlvbiBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBtYWtlIGl0IHJlbGV2YW50LiBUaGlzIGlzIGEgdGhvcm91Z2ggcmV2aWV3LCBhZnRlciBhbGwsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbi4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGhpZGRlbiB1c2FnZSBiZWZvcmUgSSByZWFjaCBhIGZpbmFsIGNvbmNsdXNpb24uIEFmdGVyIG15IGNoZWNrLCBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19wcmVzZXJ2ZV9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yND12b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yNi12b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mjc6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2NDpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02NS17XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03MC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcyLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDctICogUmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ5LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NzEtICogUmVzdG9yZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDczLSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTIxLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTIzLSAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MzM6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM2LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5Mzc6aW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDYtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDgtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTYtICovXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk2NS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk2Ny1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk4Mz1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk4OC1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTg5Olx0XHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5MC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk4OiAqIGtob19wcmVzZXJ2ZV9wYWdlcyAtIHByZXNlcnZlIGNvbnRpZ3VvdXMgcGFnZXMgYWNyb3NzIGtleGVjXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5OS0gKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDctICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDg6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIyLVx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDIzOlx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDI0LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzOC19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMzk6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDctICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIEBwYWdlIGFuZCBAbnJfcGFnZXMgYXMgdGhlIGNvcnJlc3BvbmRpbmdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDktICogcHJlc2VydmVkIGJsb2NrcyBpcyBub3Qgc3VwcG9ydGVkLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExMDAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExMDItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTE0Mj1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExNjg6XHRcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cdTAwM2VwYWdlc1tpXSwgbnJfY29udGlnX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTM3LVxubW0vbWVtYmxvY2suYzoyNTM4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xubW0vbWVtYmxvY2suYy0yNTM5LVx0XHRpZiAoZXJyKVxuLS1cbm1tL21lbWJsb2NrLmM9MjU1Nz1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2tob19mZHQodm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI1NjktXHRmZHQgPSBwYWdlX3RvX3ZpcnQoZmR0X3BhZ2UpO1xubW0vbWVtYmxvY2suYzoyNTcwOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcbm1tL21lbWJsb2NrLmMtMjU3MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjUzCgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVudXNlZCBDb2RlIGFuZCBXb3J0aEZ1enppbmc9RmFsc2UqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IGBraG9fcHJlc2VydmVfcGFnZWAgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQmIzM5O3MgY29tcGxldGVseSB1bnVzZWQuIERpZ2dpbmcgZGVlcGVyLCBpdCYjMzk7cyBjbGVhciB0aGUgb25seSBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBjb25zaXN0IG9mIHVudXNlZCBmdW5jdGlvbnMgYW5kIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgYW55IEtITyBkYXRhIGluIHBsYXkuIENvbnNpZGVyaW5nIHRoZSBlZmZvcnQgdG8gdmFsdWUgcmF0aW8sIGFuZCBrbm93aW5nIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGVzc2VudGlhbGx5IGRvZXMgbm90aGluZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBmdXp6aW5nIGVmZm9ydHMgb24gdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQsIGF0IGxlYXN0IG5vdCBpbiBpdHMgcHJlc2VudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6MzMuNTA3ODI3NzAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTM3ODE3MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozMy41MDc4MzM2MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDMwMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowNjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA4OTY4YzU2ZDJkNzNlLi42ZTJjNzViMTYyMDljIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbkBAIC0yMiw2ICsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XFxuIFxcbiBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuK3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuQEAgLTMwLDYgKzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcXG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9mcmVlKHZvaWQgKm1lbSk7XFxuIHZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pO1xcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xcbitzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcXG4gc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4gaW50IGtob19hZGRfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCB2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSk7XFxuQEAgLTY1LDYgKzY4LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCA0ODM0YTgwOTk4NWFiLi5kZDQxZDMyNGMyMTNkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuQEAgLTM1Nyw2ICszNTcsMjQgQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpO1xcbiBcXG4rLyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXG4rXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuK1xcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4rXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbitcXG4rXFx0LyogRm9yIGhpZ2gtb3JkZXIgYmxvY2tzLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdFxcdC8qIENsZWFyIGVhY2ggcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4rXFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXFxuIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB7XFxuQEAgLTM2OSwyNSArMzg3LDE1IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4tXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4tXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuLVxcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4tXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbi1cXG4tXFx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xcbi1cXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XFxuIFxcbiBcXHRpZiAob3JkZXIgXFx1MDAzZSAwKVxcbiBcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcXG4rc3RhdGljIHN0cnVjdCBwYWdlICpfX2tob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50ICpvcmRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShQSFlTX1BGTihwaHlzKSk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuIFxcdHVuaW9uIGtob19wYWdlX2luZm8gaW5mbztcXG4gXFxuIFxcdGlmICghcGFnZSlcXG5AQCAtNDAxLDE3ICs0MDksMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXFxuIFxcdCAqL1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0bnJfcGFnZXMgPSAoMSBcXHUwMDNjXFx1MDAzYyBpbmZvLm9yZGVyKTtcXG4gXFxuIFxcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXFxuIFxcdHBhZ2UtXFx1MDAzZXByaXZhdGUgPSAwO1xcbitcXHRpZiAob3JkZXIpXFxuK1xcdFxcdCpvcmRlciA9IGluZm8ub3JkZXI7XFxuIFxcbi1cXHRpZiAoaXNfZm9saW8pXFxuLVxcdFxcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcXG4rXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2MgaW5mby5vcmRlcik7XFxuIFxcbi1cXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG4gXFxuQEAgLTQyMywxMiArNDI4LDQxIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbiB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShwaHlzLCB0cnVlKTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob19pbml0X2ZvbGlvKHBhZ2UsIG9yZGVyKTtcXG4gXFxuLVxcdHJldHVybiBwYWdlID8gcGFnZV9mb2xpbyhwYWdlKSA6IE5VTEw7XFxuK1xcdHJldHVybiBwYWdlX2ZvbGlvKHBhZ2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcXG4gXFxuKy8qKlxcbisgKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG4rICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuXFxuKyAqXFxuKyAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG4rICpcXG4rICogUmV0dXJuOiB0aGUgaGVhZCBwYWdlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XFxuK1xcbitcXHRyZXR1cm4gcGFnZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTtcXG4rXFxuIC8qKlxcbiAgKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXFxuICAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxcbkBAIC00NDgsMTAgKzQ4MiwxMyBAQCBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4gXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG4gXFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID1cXG4gXFx0XFx0XFx0bWluKGNvdW50X3RyYWlsaW5nX3plcm9zKHBmbiksIGlsb2cyKGVuZF9wZm4gLSBwZm4pKTtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIGZhbHNlKTtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGluZm9fb3JkZXI7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFxcdTAwMjZpbmZvX29yZGVyKTtcXG4gXFxuIFxcdFxcdGlmICghcGFnZSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2MgaW5mb19vcmRlcik7XFxuIFxcdFxcdHBmbiArPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiBcXHR9XFxuIFxcbkBAIC04ODEsNiArOTE4LDUxIEBAIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuIFxcbisvKipcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG4rICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suXFxuKyAqIEBvcmRlcjogb3JkZXIgb2YgdGhlIGFsbG9jYXRpb24uXFxuKyAqXFxuKyAqIEluc3RydWN0cyBLSE8gdG8gcHJlc2VydmUgYSBoaWdoLW9yZGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiAobGlrZSBhIERNQVxcbisgKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXFxuKyAqIGVuc3VyZSB0aGUgdGFpbCBwYWdlcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkIHdpdGggYSB6ZXJvIHJlZmNvdW50LlxcbisgKlxcbisgKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xcbisgKiBmdW5jdGlvbiwgaXQgbXVzdCBmaXJzdCB1bnByZXNlcnZlIHRoZSBibG9jayB1c2luZyBraG9fdW5wcmVzZXJ2ZV9wYWdlKCksXFxuKyAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbisgKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcbisgKi9cXG4raW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXFx1MDAyNmtob19vdXQucmFkaXhfdHJlZTtcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbitcXG4rLyoqXFxuKyAqIGtob191bnByZXNlcnZlX3BhZ2UgLSB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxcbisgKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4rICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi5cXG4rICpcXG4rICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKSBiZWZvcmUuXFxuKyAqL1xcbit2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUgPSBcXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXG4rXFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbitcXG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4ge1xcbkBAIC05MTgsNyArMTAwMCw4IEBAIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbiAgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcy5cXG4gICpcXG4gICogUHJlc2VydmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcy4gTXVzdCBiZSByZXN0b3JlZCB1c2luZ1xcbi0gKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDAuXFxuKyAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMFxcbisgKiB3aXRoIGVhY2ggcGFnZSBoYXZpbmcgYSByZWZlcmVuY2UgY291bnQgb2YgMSAoc3BsaXQpLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozMy44ODMwNzQ1ODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNzQ3NjI1NDU5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA4OTY4YzU2ZDJkNzNlLi42ZTJjNzViMTYyMDljIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbkBAIC0yMiw2ICsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XG4gXG4gaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbit2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuQEAgLTMwLDYgKzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZyZWUodm9pZCAqbWVtKTtcbiB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpO1xuIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbiBpbnQga2hvX2FkZF9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJsb2IsIHNpemVfdCBzaXplKTtcbkBAIC02NSw2ICs2OCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWIuLmRkNDFkMzI0YzIxM2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtMzU3LDYgKzM1NywyNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpO1xuIFxuKy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcbitcdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbitcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbitcbitcdC8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4rXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4rXHR9XG4rfVxuK1xuIC8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgMC1vcmRlciBwYWdlcy4gKi9cbiBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG5AQCAtMzY5LDI1ICszODcsMTUgQEAgc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbi1cbi1cdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4tXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbi1cdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbi1cdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbi1cbi1cdC8qIEZvciBoaWdoZXIgb3JkZXIgZm9saW9zLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKylcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0a2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdGlmIChvcmRlciBcdTAwM2UgMClcbiBcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4rc3RhdGljIHN0cnVjdCBwYWdlICpfX2tob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50ICpvcmRlcilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShQSFlTX1BGTihwaHlzKSk7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFx0dW5pb24ga2hvX3BhZ2VfaW5mbyBpbmZvO1xuIFxuIFx0aWYgKCFwYWdlKVxuQEAgLTQwMSwxNyArNDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuIFx0ICovXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIGluZm8ub3JkZXIpO1xuIFxuIFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cbiBcdHBhZ2UtXHUwMDNlcHJpdmF0ZSA9IDA7XG4rXHRpZiAob3JkZXIpXG4rXHRcdCpvcmRlciA9IGluZm8ub3JkZXI7XG4gXG4tXHRpZiAoaXNfZm9saW8pXG4tXHRcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xuLVx0ZWxzZVxuLVx0XHRraG9faW5pdF9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XG4rXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4tXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbiBcbkBAIC00MjMsMTIgKzQyOCw0MSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG4ge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKHBoeXMsIHRydWUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob19pbml0X2ZvbGlvKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdHJldHVybiBwYWdlID8gcGFnZV9mb2xpbyhwYWdlKSA6IE5VTEw7XG4rXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuIFxuKy8qKlxuKyAqIGtob19yZXN0b3JlX3BhZ2UgLSByZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxuKyAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuKyAqXG4rICogUmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxuKyAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG4rICpcbisgKiBSZXR1cm46IHRoZSBoZWFkIHBhZ2Ugb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXG4re1xuK1x0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4rXG4gLyoqXG4gICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLlxuICAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuQEAgLTQ0OCwxMCArNDgyLDEzIEBAIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPVxuIFx0XHRcdG1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7XG4rXHRcdHVuc2lnbmVkIGludCBpbmZvX29yZGVyO1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBcdTAwMjZpbmZvX29yZGVyKTtcbiBcbiBcdFx0aWYgKCFwYWdlKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuK1xuK1x0XHRraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgXHUwMDNjXHUwMDNjIGluZm9fb3JkZXIpO1xuIFx0XHRwZm4gKz0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHR9XG4gXG5AQCAtODgxLDYgKzkxOCw1MSBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbisvKipcbisgKiBraG9fcHJlc2VydmVfcGFnZSAtIHByZXNlcnZlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxuKyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuKyAqIEBvcmRlcjogb3JkZXIgb2YgdGhlIGFsbG9jYXRpb24uXG4rICpcbisgKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbisgKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXG4rICogZW5zdXJlIHRoZSB0YWlsIHBhZ2VzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHplcm8gcmVmY291bnQuXG4rICpcbisgKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xuKyAqIGZ1bmN0aW9uLCBpdCBtdXN0IGZpcnN0IHVucHJlc2VydmUgdGhlIGJsb2NrIHVzaW5nIGtob191bnByZXNlcnZlX3BhZ2UoKSxcbisgKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbisgKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbisgKi9cbitpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUgPSBcdTAwMjZraG9fb3V0LnJhZGl4X3RyZWU7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuK1xuK1x0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4rXG4rLyoqXG4rICoga2hvX3VucHJlc2VydmVfcGFnZSAtIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4rICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suXG4rICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi5cbisgKlxuKyAqIEluc3RydWN0cyBLSE8gdG8gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIGJ5XG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKSBiZWZvcmUuXG4rICovXG4rdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbitcbitcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZSk7XG4rXG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG5AQCAtOTE4LDcgKzEwMDAsOCBAQCBzdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcy5cbiAgKlxuICAqIFByZXNlcnZlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMuIE11c3QgYmUgcmVzdG9yZWQgdXNpbmdcbi0gKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDAuXG4rICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG4rICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjMzLjg4MzA3NTkzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2OTY1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLCBhbGwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gTmF0dXJhbGx5LCBga2V4ZWNfaGFuZG92ZXIuaGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhlc2UgYWRkaXRpb25zLiBUaGUgY29yZSB0aGVtZSBoZXJlIGlzIFwia2V4ZWMgaGFuZG92ZXJcIiBvciBLSE8sIGFuZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSdtIGd1ZXNzaW5nIHRoaXMgcGF0Y2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1hbmFnaW5nIHRob3NlIGhpZ2gtb3JkZXIgcGFnZSBibG9ja3MgZHVyaW5nIHRoZSBoYW5kb3ZlciBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZXZlbiBlbmFibGVkIGluIG91ciBjdXJyZW50IGNvbmZpZ3VyYXRpb24/XCIgR290dGEgYmUgc3VyZSB3ZSdyZSBhY3R1YWxseSAqdXNpbmcqIHRoaXMgYmVmb3JlIEkgZ28gdG9vIGRlZXAuIEknbGwgZ2V0IGBncmVwcGVyYCBmaXJlZCB1cCBhbmQgc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXRoZXIgdGhpcyBLSE8gZmVhdHVyZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozOC4xMjQ3NzU4MjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1Nzc3NDE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0PTE0PVByZXJlcXVpc2l0ZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdC0xNi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6MTc6S0hPIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE4LXNldCB0byB5LiBFdmVyeSBLSE8gcHJvZHVjZXIgbWF5IGhhdmUgaXRzIG93biBjb25maWcgb3B0aW9uIHRoYXQgeW91XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q9ODc9VGhlc2UgZGVidWdmcyBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUgd2hlbiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6ODg6YGBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU2BgIGVuYWJsZWQuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTg5LVxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzY4PXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzQtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzc1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9Mjc0PXN0YXRpYyB2b2lkIHNldHVwX2tobyhjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgwLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzoyODE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9MzAxPXNldHVwX2Jvb3RfcGFyYW1ldGVycyhzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkwLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzozOTE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSkge1xcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTItXFx0XFx0LyogU2V0dXAgc3BhY2UgdG8gc3RvcmUgcHJlc2VydmF0aW9uIG1ldGFkYXRhICovXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9NDc1PXN0YXRpYyB2b2lkICpiekltYWdlNjRfbG9hZChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgY2hhciAqa2VybmVsLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4MS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM6NTgyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4My1cXHRcXHRrYnVmLmJ1ZnN6ICs9IHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgK1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NDU2PXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfa2hvKHU2NCBwaHlzX2FkZHIsIHUzMiBkYXRhX2xlbilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2MS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjM6XFx0XFx0cHJfd2FybihcXFwiUGFzc2VkIEtITyBkYXRhLCBidXQgQ09ORklHX0tFWEVDX0hBTkRPVkVSIG5vdCBzZXQuIElnbm9yaW5nLlxcXFxuXFxcIik7XFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDY0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9OTI4PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2tobyh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy05MzItXFxuZHJpdmVycy9vZi9mZHQuYzo5MzM6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikgfHwgKGxvbmcpbm9kZSBcXHUwMDNjIDApXFxuZHJpdmVycy9vZi9mZHQuYy05MzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9vZi9rZXhlYy5jPTI1OD1zdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZSlcXG4tLVxcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yNjAtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9vZi9rZXhlYy5jOjI2MTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuZHJpdmVycy9vZi9rZXhlYy5jLTI2Mi1cXHRwaHlzX2FkZHJfdCBmZHRfbWVtID0gMDtcXG4tLVxcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yOTAtXFxuZHJpdmVycy9vZi9rZXhlYy5jOjI5MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxuZHJpdmVycy9vZi9rZXhlYy5jLTI5Mi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTE3PXN0cnVjdCBwYWdlO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xOC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTk6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMC1ib29sIGtob19pc19lbmFibGVkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjgtfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjk6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9Mzc9dHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtMzktXFxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oOjQwOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9NDg9aW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTUwLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaDo1MTojZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC01Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaD02Mj1zdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC02Ny1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg6Njg6I2VuZGlmIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNjktXFxuLS1cXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaD00Mz1zdHJ1Y3Qga2V4ZWNfYnVmO1xcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTQ0LVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjQ1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC00Ni1pbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9NTY9c3RhdGljIGlubGluZSBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9XFxua2VybmVsL2tleGVjX2ludGVybmFsLmg6NTc6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTU4LSNlbmRpZiAvKiBMSU5VWF9LRVhFQ19JTlRFUk5BTF9IICovXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXFx0XFx0Kz0ga2V4ZWNfaGFuZG92ZXIub1xcbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcXHQrPSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlMpXFx0Kz0ga2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5vXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtMTMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTU2PXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXFx1MDAzZXByaXZhdGUpKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTU3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTg6c3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01OS1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NzA4PXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5Ny0gKiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvQG5hbWVgYCB3aGVuIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjc5ODogKiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNzk5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTgtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo5OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg9MjM9ZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC0yNC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjI1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjYtaW50IGtob19kZWJ1Z2ZzX2luaXQodm9pZCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZyxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTQxLVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJsb2IpIHsgfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6NDI6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC00My1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjQ0OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTQ1LWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQ3PXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC01MC19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo1MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC01Mi1cXG4tLVxcbm1tL21lbWJsb2NrLmMtMjEtXFxubW0vbWVtYmxvY2suYzoyMjojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxubW0vbWVtYmxvY2suYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGliZmR0LmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL21lbWJsb2NrLmhcXHUwMDNlXFxubW0vbWVtYmxvY2suYzoyNjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxubW0vbWVtYmxvY2suYy0yNy1cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjUxNT1ib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc19raG9fc2NyYXRjaF9tZW1vcnkocGh5c19hZGRyX3QgYWRkcilcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjUyNS1cXG5tbS9tZW1ibG9jay5jOjI1MjY6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbm1tL21lbWJsb2NrLmMtMjUyNy1cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjcwOD1zdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy0yNzEyLX1cXG5tbS9tZW1ibG9jay5jOjI3MTM6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbm1tL21lbWJsb2NrLmMtMjcxNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g9NjA9Q09ORklHX0JMS19ERVZfSU5JVFJEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoOjYxOkNPTkZJR19LRVhFQ19IQU5ET1ZFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaDo2MjpDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjM6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2gtNjQtQ09ORklHX1RFU1RfS0VYRUNfSEFORE9WRVI9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc9Mj1DT05GSUdfS0VYRUNfRklMRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc6MzpDT05GSUdfS0VYRUNfSEFORE9WRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnOjQ6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo1OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo2OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWctNy1DT05GSUdfTElWRVVQREFURT15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjM5Ljg4MjU1NTU0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDQzNzAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdGhyZWUgbmV3IGZ1bmN0aW9uczogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBUaGV5J3JlIGJlaW5nIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGFyZSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gQW5kIHRoZXkncmUgcGFydCBvZiB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgZmVhdHVyZSwgd2hpY2ggaXMgb25seSBlbmFibGVkIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHNldC4gUmlnaHQsIEtITyBpcyBhbGwgYWJvdXQgcHJlc2VydmluZyBtZW1vcnkgYWNyb3NzIGEgYGtleGVjYCBjYWxsLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gaGFuZGxpbmcgaGlnaC1vcmRlciBwYWdlcy4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhlc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGdldCBmcmFnbWVudGVkIGFuZCBsb3N0IGR1cmluZyBhIGhhbmRvdmVyLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGVyZSBhbnkgd2F5IGZvciB0aGlzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IElmIHNvLCB0aGF0IG9wZW5zIGEgaHVnZSBjYW4gb2Ygd29ybXMgaW4gdGVybXMgb2Ygc2VjdXJpdHkuIEtITyBpcyBhIGtlcm5lbC1zaWRlIGZlYXR1cmUsIHVzZWQgYnkga2V4ZWMsIGEgbWVjaGFuaXNtIHRvIHN3aXRjaCB0byBhIG5ldyBrZXJuZWwuIFNvIHRoZSBpbnRlbmRlZCBjb25zdW1lcnMgYXJlIGRlZmluaXRlbHkgZHJpdmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbSBoZXJlOiB0aGVzZSBmdW5jdGlvbnMsIGFzIEFQSXMsIGFyZSBmb3IgZHJpdmVycyB0byBwcmVzZXJ2ZSB0aGVpciBvd24gaGlnaC1vcmRlciBwYWdlcyBkdXJpbmcgYSBga2V4ZWNgLlxuXG5Ob3csIHRoZSByZWFsIHZhbHVlIG9mIHRoZSBwYXRjaCBpcyBnb2luZyB0byBkZXBlbmQgb24gKndobyogaXMgdXNpbmcgaXQuIEFyZSB0aGVyZSBhbnkgZHJpdmVycyBhY3R1YWxseSBsZXZlcmFnaW5nIHRoZXNlIEFQSXM/IFRoYXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGlzIGlzIHB1cmVseSB0aGVvcmV0aWNhbCBvciBpZiB0aGlzIGhhcyBhbnkgbWVhc3VyYWJsZSBlZmZlY3Qgb24gcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgb3Igc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6NDUuODg2OTI4MDI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ5NzQ0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NjI9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3MS0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjEtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM0LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0Ni19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk5LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAwODppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjItXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjM6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzOTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0Ny0gKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgQHBhZ2UgYW5kIEBucl9wYWdlcyBhcyB0aGUgY29ycmVzcG9uZGluZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTQyPWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTE2ODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXFx1MDAzZXBhZ2VzW2ldLCBucl9jb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTM3LVxcbm1tL21lbWJsb2NrLmM6MjUzODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xcbm1tL21lbWJsb2NrLmMtMjUzOS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTU3PXN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVfa2hvX2ZkdCh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTY5LVxcdGZkdCA9IHBhZ2VfdG9fdmlydChmZHRfcGFnZSk7XFxubW0vbWVtYmxvY2suYzoyNTcwOlxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XFxubW0vbWVtYmxvY2suYy0yNTcxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjQ3Ljc2MTkyNjM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDUxMDk4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlIGhhdmUgaGVyZS5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuQWxyaWdodCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBwb3RlbnRpYWwgbmV3IHByaW1pdGl2ZXMgZm9yIHBhZ2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21lIGZvcm0gb2YgY2FjaGluZyBvciBkZWxheWVkIGZyZWVpbmc/IEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHJ1bm5pbmcgYSBxdWljayBgZ3JlcGAgY29uZmlybXMgbXkgc3VzcGljaW9uOiBga2hvX3ByZXNlcnZlX3BhZ2VgIGlzbid0ICphY3R1YWxseSogYmVpbmcgdXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZSwgYXQgbGVhc3Qgbm90IHlldC4gVGhhdCdzIGEgcmVkIGZsYWcuIEJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIG9yIGBraG9fcmVzdG9yZV9wYWdlYCBhcmVuJ3QgYmVpbmcgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCYWNrIHRvIHRoZSBgZ3JlcGAsIEknbGwgY2hlY2sgZm9yIGFueSBpbW1lZGlhdGUgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6NTMuNDY3MDM5NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTE1NzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzdG9yZV9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zND1zdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNTpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MzY6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0zNy12b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqa2hvX3Jlc3RvcmVfZm9saW8ocGh5c19hZGRyX3QgcGh5cylcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6OTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cyxcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTAwLVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0zODg9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMzk1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Mzk2OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0zOTcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00Mjk9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MzEtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDMyOlxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsIFxcdTAwMjZvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MzMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0My0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0NDogKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0NS0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUxLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDUyOnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NTMte1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU0LVxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ1NTpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU2LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjMtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDY0OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY2LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDY3OiAqIGtob19yZXN0b3JlX3BhZ2VzIC0gcmVzdG9yZSBsaXN0IG9mIGNvbnRpZ3VvdXMgb3JkZXIgMCBwYWdlcy5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDc1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDc3LXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg1LVxcdFxcdHVuc2lnbmVkIGludCBpbmZvX29yZGVyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDg2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFxcdTAwMjZpbmZvX29yZGVyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ4Ny1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ5NzpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00OTgtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyNi0gKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkyNzogKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjgtICogZW5zdXJlIHRoZSB0YWlsIHBhZ2VzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHplcm8gcmVmY291bnQuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk4Mz1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDAzOiAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwNC0gKiB3aXRoIGVhY2ggcGFnZSBoYXZpbmcgYSByZWZlcmVuY2UgY291bnQgb2YgMSAoc3BsaXQpLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjI3PXZvaWQgKmtob19yZXN0b3JlX3ZtYWxsb2MoY29uc3Qgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMjYxOlxcdFxcdFxcdHBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlcyhwaHlzLCBjb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI2Mi1cXHRcXHRcXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNzAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMjcxOlxcdFxcdHBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlcyh2aXJ0X3RvX3BoeXMoY2h1bmspLCAxKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNzItXFx0XFx0aWYgKCFwYWdlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjo1NS4xMjgyMDQ1OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI3OTY0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnVzZWQgS2VybmVsIEZ1bmN0aW9ucyBJbnZlc3RpZ2F0aW9uKipcblxuSG1tLCBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAgYXJlIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFR5cGljYWxseSwga2VybmVsIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzIG9yIHN1YnN5c3RlbXMuIEJ1dCBpZiB0aGV5J3JlICpleHBvcnRlZCogYW5kICp1bnVzZWQqIHdpdGhpbiB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUgaXRzZWxmLCB0aGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuIEl0IHN1Z2dlc3RzIGRlYWQgY29kZSwgYSBwb3NzaWJsZSBvdmVyc2lnaHQgZHVyaW5nIGRldmVsb3BtZW50LCBvciBtYXliZSBldmVuIHJlbW5hbnRzIG9mIGEgcmVmYWN0b3JpbmcgdGhhdCB3YXNuJ3QgZnVsbHkgY2xlYW5lZCB1cC5cblxuQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBjbGFpbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGx1cmtpbmcgc29tZXdoZXJlIHVuZXhwZWN0ZWQsIHBlcmhhcHMgaW4gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIGEgbGVzcy1mcmVxdWVudGx5IGF1ZGl0ZWQgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbCB0byBwZXJmb3JtIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2ggdGhyb3VnaCB0aGUgc291cmNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QuLi4gbm8gcG9pbnQgaW4gYXNzdW1pbmcgc29tZXRoaW5nIEkgaGF2ZW4ndCBjb25maXJtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6MDAuNzU2MTcxNzA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc1MTg0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19wcmVzZXJ2ZV9wYWdlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjcxOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcyLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDQxPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ3LSAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0ODogKiBraG9fcHJlc2VydmVfcGFnZSgpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1NC0gKiBJbnN0cnVjdHMgS0hPIHRvIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCBieVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzowMi44MzEzNjM4MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NzA2ODg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFByZXNlcnZhdGlvbi9SZXN0b3JhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAuIEh1aCwgdGhhdCdzIG9kZCwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMsIG5laXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zIHNlZW1zIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiBUaGF0J3MgdW5leHBlY3RlZC4gSSB3b3VsZCBoYXZlIGFzc3VtZWQgd2UnZCBmaW5kIGF0IGxlYXN0ICpzb21lKiBpbnN0YW5jZXMsIGV2ZW4gaW4gb2JzY3VyZSBjb3JuZXIgY2FzZXMuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkb3VibGUgY2hlY2sgbXkgdG9vbGluZywgbWF5YmUgdGhlIGNhbGwgZ3JhcGggZ2VuZXJhdGlvbiBpcyBtaXNzaW5nIHNvbWV0aGluZywgb3IgdGhlcmUncyBzb21lIGluZGlyZWN0IGNhbGwgbWVjaGFuaXNtIEknbSBub3QgYWNjb3VudGluZyBmb3IuIFxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSdtIG1pc3Npbmcgb25lLCB3aGF0IGFib3V0IGBraG9fdW5wcmVzZXJ2ZV9wYWdlYD8gVGhhdCBvbmUgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXJzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24gYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlJ3Mgc29tZSBkZXNpZ24gdXNpbmcgdGhhdCBpbiBwbGFjZSBvZiB0aGUgb3RoZXJzLiBUaGF0IHdvdWxkIGJlIGludGVyZXN0aW5nLCBhbmQgd29ydGggaW52ZXN0aWdhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxMy43MDIwNTUxMDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjc1MDE5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3VucHJlc2VydmVfcGFnZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNT1pbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI2OnZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjctaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NzE9c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03NS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NzY6c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc3LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzAtICogSWYgYSBkcml2ZXIgbmVlZHMgdG8gc3BsaXQgYSBibG9jayB0aGF0IGhhcyBiZWVuIHByZXNlcnZlZCB3aXRoIHRoaXNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzMTogKiBmdW5jdGlvbiwgaXQgbXVzdCBmaXJzdCB1bnByZXNlcnZlIHRoZSBibG9jayB1c2luZyBraG9fdW5wcmVzZXJ2ZV9wYWdlKCksXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzItICogcGVyZm9ybSB0aGUgc3BsaXQsIGFuZCB0aGVuIHJlLXByZXNlcnZlIHRoZSBpbmRpdmlkdWFsIHBhZ2VzIHVzaW5nXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1Nzp2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjE1LjcyOTU2MTEwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY0NDUzOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudDogQVBJIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMg4oCTIHRoZXkndmUgYmVlbiBpbnRyb2R1Y2VkIGFzIEFQSXMsIHdoaWNoIGlzIGZpbmUsIHRoYXQncyBob3cgaXQgc3RhcnRzLCBidXQgdGhleSBoYXZlbid0IGFjdHVhbGx5IGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljIHlldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGFyZSB0aGVzZSBiZWluZyB1c2VkPyBXaGVyZSdzIHRoZSBydWJiZXIgbWVldGluZyB0aGUgcm9hZD9cIiBXZSBoYXZlIHRvIHRlc3QgdGhpcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnkgdGVzdGluZyBmb3IgdGhlc2UuIEkgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGVzdHMgYXJlLiBMZXQncyBleHBsb3JlIHRoZSB0ZXN0aW5nIGRpcmVjdG9yeSwgSeKAmWxsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2AgZGlyZWN0b3J5IG9yIHBlcmhhcHMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvYC4gTGV0J3Mgc2VlIGlmIGVpdGhlciBvZiB0aGVzZSBsb2NhdGlvbnMgaGFzIGFueSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxOS42OTQwMTc4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM2MTI5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxOS44MDgzODg4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc5MTcwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVudXNlZCBDb2RlIGFuZCBQb3RlbnRpYWwgS0hPIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGVzZSBmdW5jdGlvbnMgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLCB1bnVzZWRcIi4gSWYgdGhleSBhcmVuJ3QgYmVpbmcgdXNlZCwgdGhlbiBvYnZpb3VzbHksIHRoZXkgYXJlbid0IGdvaW5nIHRvIGJlIGhpdCBieSBhbnkgZnV6emluZywgdGhhdCdzIGp1c3QgYSBnaXZlbi4gQnV0IGhvbGQgb24gYSBzZWNvbmTigKYgY291bGQgdGhlcmUgYmUgc29tZSBvdGhlciBLZXJuZWwgSGFuZG92ZXIgKEtITykgbWVjaGFuaXNtIHRoYXQgKmNvdWxkKiByZWFjaCB0aGVtPyBMZXQncyBzZWUuLi4gQWgsIGBraG9fcHJlc2VydmVfcGFnZWAgaXMgYW4gYEVYUE9SVF9TWU1CT0xfR1BMYCBmdW5jdGlvbiwgc28gaXQncyBpbnRlbmRlZCBmb3IgZHJpdmVycyB0byBjYWxsLiBJZiBubyBkcml2ZXIgYWN0dWFsbHkgdXRpbGl6ZXMgaXQsIHRoZW4gaXTigJlzIGp1c3QgZGVhZCBjb2RlLCBhIG5vLW9wLlxuXG5Ob3csIGxldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhpcyBwYXRjaCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBoYXBwZW5pbmcuIE9rYXksIHRoZSBmaWxlIGNoYW5nZXMgaW5jbHVkZSBtb2RpZmljYXRpb25zIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCBhbmQgYGluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWAgYW5kLCBjcml0aWNhbGx5LCBtb2RpZnlpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYF9fa2hvX3Jlc3RvcmVfcGFnZWAuIEJ1dCB3YWl0LCBhcmUgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgY2FsbCBzaXRlczsgdGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3QgaGVyZS4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6MjUuNTg3NTYxODE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ5OTIzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXN0b3JlX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zMz12b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MzQ6c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzUtc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9OTI9c3RhdGljIGlubGluZSB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtOTMtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05NS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjMtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MjQ6ICoga2hvX3Jlc3RvcmVfZm9saW8gLSByZWNyZWF0ZXMgdGhlIGZvbGlvIGZyb20gdGhlIHByZXNlcnZlZCBtZW1vcnkuXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjUtICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZvbGlvLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjgtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0Mjk6c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDMwLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQwLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0MTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDItXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEzODg9dm9pZCBraG9fcmVzdG9yZV9mcmVlKHZvaWQgKm1lbSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTM5NC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEzOTU6XFx0Zm9saW8gPSBraG9fcmVzdG9yZV9mb2xpbyhfX3BhKG1lbSkpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTM5Ni1cXHRpZiAoIVdBUk5fT04oIWZvbGlvKSlcXG4tLVxcbmxpYi90ZXN0X2toby5jPTIzNT1zdGF0aWMgaW50IGtob190ZXN0X3Jlc3RvcmVfZGF0YShjb25zdCB2b2lkICpmZHQsIGludCBub2RlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMjY3LVxcbmxpYi90ZXN0X2toby5jOjI2ODpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbmxpYi90ZXN0X2toby5jLTI2OS1cXHRcXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vbWVtZmRfbHVvLmM9MzYyPXN0YXRpYyB2b2lkIG1lbWZkX2x1b19kaXNjYXJkX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcixcXG4tLVxcbm1tL21lbWZkX2x1by5jLTM3NS1cXHRcXHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVxcdTAwM2VwZm4pO1xcbm1tL21lbWZkX2x1by5jOjM3NjpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbm1tL21lbWZkX2x1by5jLTM3Ny1cXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz00MTc9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNDM3LVxcdFxcdHBoeXMgPSBQRk5fUEhZUyhwZm9saW8tXFx1MDAzZXBmbik7XFxubW0vbWVtZmRfbHVvLmM6NDM4OlxcdFxcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XFxubW0vbWVtZmRfbHVvLmMtNDM5LVxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL21lbWZkX2x1by5jLTUwNy1cXHRcXHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVxcdTAwM2VwZm4pO1xcbm1tL21lbWZkX2x1by5jOjUwODpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbm1tL21lbWZkX2x1by5jLTUwOS1cXHRcXHRpZiAoZm9saW8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjI3LjIzNzQ4OTkyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjQ3Mzc4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBga2hvX3Jlc3RvcmVfZm9saW9gIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHVzZWQgaW4gYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBmdW5jdGlvbi4gTGV0J3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhhcyBjaGFuZ2VkIG9yIGlmIGl0J3MganVzdCBhIHJlZmFjdG9yaW5nLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBga2hvX3Jlc3RvcmVfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIHNlcnZlZCBhcyB0aGUgd29ya2hvcnNlIGJlaGluZCByZXN0b3JpbmcgcGFnZXMsIGhhcyBub3cgYmVlbiBzcGxpdCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfZm9saW9gLiBUaGUgYGtob19yZXN0b3JlX3BhZ2VgIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIG5vdyBjb250YWlucyBtdWNoIGNsZWFuZXIgbG9naWMuXG5cblRoZSBjcnVjaWFsIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHRoZSB1c2Ugb2YgYG9yZGVyYCB3aGljaCBub3cgc2VlbXMgdG8gYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gSSBzZWUgdGhhdCB0aGUgYGlzX2ZvbGlvYCBmbGFnIGhhcyBiZWVuIHJlbW92ZWQuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3JpZ2luYWwgYmVoYXZpb3VyLlxuXG5JIG5vdGljZSB0aGUgb3JpZ2luYWwgbG9naWMgaW5zaWRlIHRoZSBgaWYgKGlzX2ZvbGlvKWAgYmxvY2sgaXMgbm93IGluIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kLCB0aGVyZSdzIGEgbmV3IGBvcmRlcmAgdmFyaWFibGUsIGFuZCBpdHMgdmFsdWUgaXMgYXNzaWduZWQgdG8gdGhlIGAqb3JkZXJgLiBUaGUgbmV3IGBfX2tob19yZXN0b3JlX3BhZ2VgIG5vdyByZWNlaXZlcyBhbiBgb3JkZXJgIHBvaW50ZXIgYW5kIGBraG9faW5pdF9mb2xpb2AgdXNlcyB0aGUgcmVzdG9yZWQgYG9yZGVyYC5cblxuVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcmV0cmlldmUgYSBgc3RydWN0IHBhZ2VgIGdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcywgdmFsaWRhdGUgYSBtYWdpYyBudW1iZXIsIGNsZWFyIHRoZSBgcHJpdmF0ZWAgZmllbGQsIGFuZCB0aGVuIGluaXRpYWxpemUgdGhlIGZvbGlvLiBJdCBsb29rcyBsaWtlIHRoZSBoYW5kbGluZyBvZiB0aGUgb3JkZXIgaGFzIGJlZW4gbWFkZSBtb3JlIGV4cGxpY2l0LCBhbmQgaXQncyBjbGVhbmVyIGluIHRoZSBuZXcgcmVmYWN0b3JpbmcuXG5UaGUgcmVtb3ZhbCBvZiB0aGUgYGlzX2ZvbGlvYCBmbGFnIGlzIGludGVyZXN0aW5nOyB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGBraG9fcmVzdG9yZV9mb2xpb2Agbm93ICphbHdheXMqIGFzc3VtZXMgaXQncyBkZWFsaW5nIHdpdGggYSBmb2xpby5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBzdGlsbCBpbiB1c2UsIG9yIGlmIHRoaXMgcGF0Y2ggc3Vic3VtZXMgYWxsIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjM1LjQ4NDg3MDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NDY3ODI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzdG9yZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzU9c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtOTgtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0Njc6ICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY4LSAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NzUtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NzY6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00OTYtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ5OC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDAyLSAqIFByZXNlcnZlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMuIE11c3QgYmUgcmVzdG9yZWQgdXNpbmdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA0LSAqIHdpdGggZWFjaCBwYWdlIGhhdmluZyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxIChzcGxpdCkuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI2MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XFx0XFx0XFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjYyLVxcdFxcdFxcdGlmICghcGFnZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNzE6XFx0XFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3Mi1cXHRcXHRpZiAoIXBhZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjM3LjE0OTU1NjI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzA3Njg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBSZXN0b3JhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGBraG9fcmVzdG9yZV9wYWdlc2AgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBlbXBsb3llZCB3aXRoaW4gdGhlIGBraG9fcmVzdG9yZV92bWFsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgYGtob19yZXN0b3JlX3ZtYWxsb2NgIGl0c2VsZiBhY3R1YWxseSB1dGlsaXplZCBhbnl3aGVyZT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZ1cnRoZXIuIElmIGBraG9fcmVzdG9yZV92bWFsbG9jYCBpcyB1bnVzZWQsIHRoZW4gYGtob19yZXN0b3JlX3BhZ2VzYCBtaWdodCBiZSBkZWFkIGNvZGUgYXMgd2VsbCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IG9ubHkgdXNlZCBpbiBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBleHBsaWNpdGx5IGV2YWx1YXRlZC4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGlzIHBhcnRpY3VsYXIgcmVzdG9yYXRpb24gcGF0aCByZW1haW5zIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgc2VlIHdoZXJlIGV2ZXJ5dGhpbmcgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjY2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6NDMuMjIwMzI3Mjg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyMDAzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXN0b3JlX3ZtYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTM2PXN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LWludCBraG9fYWRkX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYmxvYiwgc2l6ZV90IHNpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTA0LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMDU6c3RhdGljIGlubGluZSB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjE1PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3ZtYWxsb2MpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjE3LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTIxODogKiBraG9fcmVzdG9yZV92bWFsbG9jIC0gcmVjcmVhdGVzIGFuZCBwb3B1bGF0ZXMgYW4gYXJlYSBpbiB2bWFsbG9jIGFkZHJlc3NcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTktICogc3BhY2UgZnJvbSB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTIyNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMjc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMjgte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzEyLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEzMTM6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfdm1hbGxvYyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzE0LVxcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MjM1PXN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZV9kYXRhKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0yNTctXFxubGliL3Rlc3Rfa2hvLmM6MjU4OlxcdGZvbGlvc19pbmZvID0ga2hvX3Jlc3RvcmVfdm1hbGxvYyhmb2xpb3NfaW5mb19waHlzKTtcXG5saWIvdGVzdF9raG8uYy0yNTktXFx0aWYgKCFmb2xpb3NfaW5mbylcXG4tLVxcbm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQwNC1cXHRpZiAoc2VyLVxcdTAwM2Vucl9mb2xpb3MpIHtcXG5tbS9tZW1mZF9sdW8uYzo0MDU6XFx0XFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXFx1MDAyNnNlci1cXHUwMDNlZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy00MDYtXFx0XFx0aWYgKCFmb2xpb3Nfc2VyKVxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU1NS1cXHRpZiAoc2VyLVxcdTAwM2Vucl9mb2xpb3MpIHtcXG5tbS9tZW1mZF9sdW8uYzo1NTY6XFx0XFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXFx1MDAyNnNlci1cXHUwMDNlZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy01NTctXFx0XFx0aWYgKCFmb2xpb3Nfc2VyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjQ0Ljg2MjMzOTIxOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk4MDc2NzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBQYWdlIFJlc3RvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBga2hvX3Jlc3RvcmVfcGFnZXNgIGlzIHVzZWQgYnkgYGtob19yZXN0b3JlX3ZtYWxsb2NgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGBraG9fcmVzdG9yZV9wYWdlYCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgZXhwb3NpbmcgYGtob19yZXN0b3JlX3BhZ2VgIGFzIGEgbmV3IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyBpbnRlcmVzdGluZy4gSXQncyB1c2VkIGJ5IGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2Agbm93IHRvby4gU2luY2UgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBhY3R1YWxseSAqdXNlZCosIHRoZSBsb2dpYyBpbiBgX19raG9fcmVzdG9yZV9wYWdlYCBhbmQgYGtob19pbml0X3BhZ2VzYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCBJJ20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy4gYGtob19pbml0X3BhZ2VzYCwgYGtob19pbml0X2ZvbGlvYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBUaGUgY29kZSBmb3IgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgY2F1Z2h0IG15IGV5ZTpcblxuYGBgY1xuKy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcbitcdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbitcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbitcbitcdC8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4rXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4rXHR9XG4rfVxuYGBgXG5cblRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgaXMgY2FsbGVkIGJ5IGBraG9faW5pdF9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gYGtob19pbml0X2ZvbGlvYCBpcyBjYWxsZWQgYnkgYGtob19yZXN0b3JlX2ZvbGlvYCwgYW5kIGBraG9fcmVzdG9yZV9mb2xpb2AgaXMgdXNlZCBieSBgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvc2AgYW5kIGB0ZXN0X2tob2AuICBTbyB0aGUgbmV3IGNvZGUgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBJdOKAmXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhlIG9sZCBga2hvX2luaXRfZm9saW9gLCBidXQgd2l0aCBhIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBhZGRlZCBmb3IgdGhlIHRhaWwgcGFnZXMuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG9sZCBga2hvX2luaXRfZm9saW9gIGNvZGU6XG5cbmBgYGNcbi1zdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJ3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXHRraG9faW5pdF9oaWdoX29yZGVyX3BhZ2UocGFnZSwgb3JkZXIpO1xuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xuIH1cbmBgYFxuXG5SaWdodCwgaXQganVzdCBtb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2gtb3JkZXIgcGFnZSB0byBhbm90aGVyIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBmb3IgdGFpbCBwYWdlcyBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYC4gV2Ugbm93IGhhdmUgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBCdXQgdGhvc2UgYXJlICp1bnVzZWQqIGF0IHRoZSBtb21lbnQuICBUaGUgcmVsZXZhbnQgY2hhbmdlcyBhcmUgdGhlIHJlZmFjdG9yaW5nIHVzaW5nIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYC5cblxuT2theSwgdGhlIGNydWNpYWwgcGFydDogYGNsZWFyX3BhZ2VfdGFnX3JlZmAgaXMgbm93IGJlaW5nIGNhbGxlZCBvbiB0YWlsIHBhZ2VzLiAqVGhhdCdzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIGRlc2lnbmVkIHRvIGZpeCBhbiBhY2NvdW50aW5nIG1pc21hdGNoIGJ5IGNsZWFyaW5nIHBhZ2UgdGFncyBmb3IgdGhlIHRhaWwgcGFnZXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCBpcyBpdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgZm9yIGl0P1xuXG5ga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHRoZSBtYWluXG5cbiIsIklucHV0VG9rZW5zIjoxOTMzOCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MDEuODQzMTA5NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODM5MjE3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9raG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MTQzNDM9RjpcXHRrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlcipcXG5NQUlOVEFJTkVSUzoxNDM0NDpGOlxcdGxpYi90ZXN0X2toby5jXFxuTUFJTlRBSU5FUlMtMTQzNDUtRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vXFxuLS1cXG5saWIvTWFrZWZpbGU9MTA2PW9iai0kKENPTkZJR19URVNUX09CSlBPT0wpICs9IHRlc3Rfb2JqcG9vbC5vXFxubGliL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgKz0gdGVzdF9raG8ub1xcbmxpYi9NYWtlZmlsZS0xMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjAzLjkyNzAzNjA2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEzMDMzNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGZvciBTeXprYWxsZXItVHJpZ2dlcmFibGUgSW50ZXJmYWNlcyBpbiBgbGliL3Rlc3Rfa2hvLmNgKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCBgbGliL3Rlc3Rfa2hvLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIG1vZHVsZSwgb3IgYW55IHBhcnQgb2YgaXQsIGV4cG9zZXMgYSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZS4gVGhlc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIHN5emthbGxlciwgYXMgdGhleSBvZnRlbiBwcm92aWRlIG1lY2hhbmlzbXMgdG8gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGluIHdheXMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlIHRvIGZ1enppbmcuIEEgZGVidWdmcyBvciBzeXNmcyBlbnRyeSBjb3VsZCBiZSBkaXJlY3RseSBtYW5pcHVsYXRlZCB0byBmZWVkIHVudXN1YWwgZGF0YSBvciB0cmlnZ2VyIHNwZWNpZmljIGNvZGUgcGF0aHMuIElmIEkgY2FuIGlkZW50aWZ5IHN1Y2ggYW4gaW50ZXJmYWNlIHdpdGhpbiB0aGlzIGZpbGUsIEkgY2FuIHNpZ25pZmljYW50bHkgbmFycm93IHRoZSBzY29wZSBvZiBteSBmdXp6aW5nIGVmZm9ydHMgYW5kIGluY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncy4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgbG93LWhhbmdpbmcgZnJ1aXQgZm9yIHN5emthbGxlciBleHBsb2l0YXRpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODowOC40NDAwNzE4MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzIwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2toby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0zMzktfVxcbmxpYi90ZXN0X2toby5jOjM0MDptb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcXG5saWIvdGVzdF9raG8uYy0zNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjA4LjQ5MDc5OTkyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzczNjMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGtob190ZXN0X2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIFRoZSB0YXNrIGJlZm9yZSBtZSBpcyB0byB1bmRlcnN0YW5kIGBraG9fdGVzdF9pbml0YC4gIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGxvY2F0ZSB0aGUgc291cmNlIGNvZGUuIEl0J3MgdGVsbGluZyBtZSB0byBsb29rIGluIGBsaWIvdGVzdF9raG8uY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBUaGlzIGZpbGUgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0ZXN0aW5nIGZyYW1ld29yayBmb3IsIG9yIHJlbGF0ZWQgdG8sIHRoaXMgYGtob2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGtob190ZXN0X2luaXRgIGZ1bmN0aW9uICpkb2VzKi4gSXMgaXQgc2V0dGluZyB1cCB0ZXN0IGVudmlyb25tZW50cz8gSW5pdGlhbGl6aW5nIHNoYXJlZCByZXNvdXJjZXM/IFBlcmhhcHMgcmVnaXN0ZXJpbmcgdGVzdCBjYXNlcyBvciBmaXh0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGBpbml0YCBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgY3JpdGljYWwgc2V0dXAgcm91dGluZXMuIEknbGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIG9wZXJhdGlvbnMsIGdsb2JhbCB2YXJpYWJsZSBhc3NpZ25tZW50cywgb3IgYW55IG90aGVyIG9wZXJhdGlvbnMgdGhhdCBwcmltZSB0aGUgc3lzdGVtIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIHZhbHVlLCB0b287IGlzIGl0IGEgc3VjY2VzcyBpbmRpY2F0b3IsIG9yIGRvZXMgaXQgcmV0dXJuIGEgcG9pbnRlciB0byBzb21lIHRlc3RpbmcgY29udGV4dD8gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCwgbGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxMy4yNjQ0MzcwNTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3Rfa2hvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4gMzE1OlxcdHtcXG4gMzE2OlxcdFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbiAzMTc6XFx0XFx0aW50IGVycjtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcXG4gMzIzOlxcdFxcdGlmICghZXJyKSB7XFxuIDMyNDpcXHRcXHRcXHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcXG4gMzI1OlxcdFxcdFxcdGlmIChlcnIpXFxuIDMyNjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIktITyByZXN0b3JlIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMyNzpcXHRcXHRcXHRlbHNlXFxuIDMyODpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4gMzM0OlxcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxcXG5cXFwiLCBLSE9fVEVTVF9GRFQsIGVycik7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0bW9kdWxlX2luaXQoa2hvX3Rlc3RfaW5pdCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcXG4gMzQzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MTMuMjY0NTI3NDAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDk2MTk2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLSE8gU3Vic3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGB0ZXN0X2tob2AgYmVoYXZpb3IuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgdGVzdF9raG9gLCBpcyBlc3NlbnRpYWxseSBhbiBhdXRvbWF0aWMgdGVzdCB0aGF0IGtpY2tzIG9mZiB1cG9uIG1vZHVsZSBsb2FkLiBJZiBpdCdzIGJha2VkIGludG8gdGhlIGtlcm5lbCwgaXQgcnVucyByaWdodCBhdCBib290LiBUaGUgY29yZSBsb2dpYyBoZXJlIGlzIGludGVyZXN0aW5nLiBXaGVuIEtITyBpcyBhY3RpdmUsIGl0IGF0dGVtcHRzIHRvIGZldGNoIGEgc3VidHJlZS4gSWYgdGhhdCBmYWlscyB3aXRoIGFuIC1FTk9FTlQsIHRoYXQncyBhIGtleSBpbmRpY2F0b3LigJRpdCBtZWFucyB0aGUgc3VidHJlZSBpc24ndCB0aGVyZSwgc28gaXQgY2FsbHMgYGtob190ZXN0X3NhdmUoKWAuIFRoaXMgaW1wbGllcyBhIHNpbmdsZSBpbml0aWFsIHJ1biwgcHJvYmFibHkgZHVyaW5nIHN5c3RlbSBzdGFydHVwLlxuXG5UaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IFN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGVhc2lseSB0cmlnZ2VyIHRoaXMgcmVwZWF0ZWRseSB1bmxlc3MgaXQgaGFzIHNvbWUgbWVjaGFuaXNtIGZvciBtb2R1bGUgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcuIFdpdGhvdXQgdGhhdCBjYXBhYmlsaXR5LCBpdCdzIGVzc2VudGlhbGx5IGEgb25lLXNob3QgcHJvY2Vzcy5cblxuTm93LCB0aGF0IGBtZW1mZF9sdW9gIG1lbnRpb24gY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQncyB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxNy4yMTQxNDk3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAzMTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQxNi1cXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL21lbWZkX2x1by5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU2MS1cXG5tbS9tZW1mZF9sdW8uYzo1NjI6XFx0XFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXFx1MDAzZW5yX2ZvbGlvcyk7XFxubW0vbWVtZmRfbHVvLmMtNTYzLVxcdFxcdHZmcmVlKGZvbGlvc19zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxOS4zODYxODYzMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NTQwMTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgYG1lbWZkX2x1b19yZXRyaWV2ZWAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggdGhpcyB0ZXJtLCBgbWVtZmRfbHVvX3JldHJpZXZlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgXCJIbW0sIG5ldmVyIGNvbWUgYWNyb3NzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSBiZWZvcmUuXCIgR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBpbW1lZGlhdGVseSBzdGFydCBicmVha2luZyBpdCBkb3duLiBgbWVtZmRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggYG1lbWZkX2NyZWF0ZWAsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhIExpbnV4LXNwZWNpZmljIGZlYXR1cmUgZm9yIGNyZWF0aW5nIGFub255bW91cywgbWVtb3J5LWJhY2tlZCBmaWxlcy4gVGhhdCBwYXJ0J3MgZmFtaWxpYXIgdGVycml0b3J5IOKAkyBsaWdodHdlaWdodCwgZXBoZW1lcmFsIHN0b3JhZ2UgaW4gbWVtb3J5LCB1c2VmdWwgZm9yIHNlY3VyaXR5LCBJUEMsIGFuZCBhdm9pZGluZyBkaXNrIEkvTy4gQnV0IHRoZSBgbHVvX3JldHJpZXZlYCBiaXTigKYgdGhhdOKAmXMgd2hhdCdzIGludHJpZ3VpbmcuIEkgaGF2ZSB0byBndWVzcyBpdCdzIHNwZWNpZmljIHRvIGFuIGV4dGVuc2lvbiBvciBlbmhhbmNlbWVudC4gSXMgdGhpcyBmcm9tIGEgY3VzdG9tIGxpYnJhcnk/IE1heWJlIGEgc3BlY2lmaWMgcHJvamVjdCdzIGltcGxlbWVudGF0aW9uP1xuXG5NeSBtaW5kIGlzIHJhY2luZzogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJcyB0aGlzIHJlbGF0ZWQgdG8gZGF0YSByZXRyaWV2YWw/IEdpdmVuIHRoZSBuYW1lLCBpdCAqc3VnZ2VzdHMqIGl0LCBidXQgd2l0aG91dCBtb3JlIGNvbnRleHQgaXQncyBwcmVtYXR1cmUgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQ291bGQgaXQgYmUgYWJvdXQgcmV0cmlldmluZyBkYXRhIGZyb20gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYG1lbWZkYD8gTWF5YmUgYSBjb250cm9sIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGtub3cgaG93IGl0J3MgdXNlZC4gSXMgaXQgYSBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBkYXRhLCBwZXJoYXBzIGEgZm9ybSBvZiBkYXRhIHNlcmlhbGl6YXRpb24gZm9yIHRoaXMgdHlwZSBvZiBmaWxlPyBEb2VzIGl0IHdvcmsgb25seSBpbiB0aGlzIG9uZSBzeXN0ZW0sIG9yIGlzIGl0IGNvbW1vbiBpbiBvdGhlcnM/XG5cbk15IGltbWVkaWF0ZSBzdGVwcyB3b3VsZCBiZSB0byBzZWFyY2ggZm9yIHRoaXMgZnVuY3Rpb24gbmFtZSB3aXRoaW4gY29kZWJhc2VzIEknbSBmYW1pbGlhciB3aXRoLCBvciB0byBzdGFydCBnb29nbGluZyBmb3IgZG9jdW1lbnRhdGlvbiBhcm91bmQgbWVtZmQgZXh0ZW5zaW9ucy4gSSdkIGJlIGxvb2tpbmcgZm9yIGEgZnVuY3Rpb24gc2lnbmF0dXJlLCB1c2FnZSBleGFtcGxlcywgYW5kIGFueSBleHBsYW5hdGlvbnMgb2YgaXRzIHB1cnBvc2UuIFRoZSBnb2FsIGlzIHRvIHJhcGlkbHkgZGV0ZXJtaW5lIHdoYXQgdGhpcyBleHRlbnNpb24gZG9lcyBpbiByZWxhdGlvbiB0byBtZW1mZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoyNS4yMzE1OTEyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTQ4NDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtZmRfbHVvLmM9Mzg3PXN0YXRpYyB2b2lkIG1lbWZkX2x1b19maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNDE2LVxcbm1tL21lbWZkX2x1by5jOjQxNzpzdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxubW0vbWVtZmRfbHVvLmMtNDE4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy01MTctXFxubW0vbWVtZmRfbHVvLmM6NTE4OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG5tbS9tZW1mZF9sdW8uYy01MTkte1xcbi0tXFxubW0vbWVtZmRfbHVvLmMtNTYxLVxcbm1tL21lbWZkX2x1by5jOjU2MjpcXHRcXHRlcnIgPSBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKGZpbGUsIGZvbGlvc19zZXIsIHNlci1cXHUwMDNlbnJfZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy01NjMtXFx0XFx0dmZyZWUoZm9saW9zX3Nlcik7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIG1lbWZkX2x1b19maWxlX29wcyA9IHtcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU5NS1cXHQuZmluaXNoID0gbWVtZmRfbHVvX2ZpbmlzaCxcXG5tbS9tZW1mZF9sdW8uYzo1OTY6XFx0LnJldHJpZXZlID0gbWVtZmRfbHVvX3JldHJpZXZlLFxcbm1tL21lbWZkX2x1by5jLTU5Ny1cXHQucHJlc2VydmUgPSBtZW1mZF9sdW9fcHJlc2VydmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjI3LjI3MTA4MjAyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3NjkxMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIExpdmUgVXBkYXRlIEZpbGUgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBgbWVtZmRfbHVvX2ZpbGVfb3BzYCDigJMgdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgY29ubmVjdGVkIHRvIGBsaXZldXBkYXRlX2ZpbGVfb3BzYC4gSSBrbm93IHRob3NlIGFyZSBsb3ctbGV2ZWwgZmlsZSBvcGVyYXRpb24gc3RydWN0dXJlcywgdXN1YWxseSBwcm92aWRpbmcgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBsaXZlIHVwZGF0ZXMsIHdoaWNoIGF1dG9tYXRpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBDT05GSUdfTElWRVVQREFURWAuIFRoZSBrZXkgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoYXQgYENPTkZJR19MSVZFVVBEQVRFYCBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlPyBUaGF04oCZcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5LCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGllLiBJZiB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIGxpdmUgdXBkYXRlcywgd2UndmUgZ290IGEgd2hvbGUgbmV3IGxldmVsIG9mIGNvbmNlcm5zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBwYXRocyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODozMS4xMTg3NzcwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NTM1NTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXZldXBkYXRlX2ZpbGVfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01NC0vKipcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo1NTogKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAtIENhbGxiYWNrcyBmb3IgbGl2ZS11cGRhdGFibGUgZmlsZXMuXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNTYtICogQGNhbl9wcmVzZXJ2ZTogUmVxdWlyZWQuIExpZ2h0d2VpZ2h0IGNoZWNrIHRvIHNlZSBpZiB0aGlzIGhhbmRsZXIgaXNcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTczLSAqL1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjc0OnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC03NS1cXHRib29sICgqY2FuX3ByZXNlcnZlKShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD0xMDE9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoxMDI6XFx0Y29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgKm9wcztcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDMtXFx0Y29uc3QgY2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTU4OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1mZF9sdW9fZ2V0X2lkKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNTkyLVxcbm1tL21lbWZkX2x1by5jOjU5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xcbm1tL21lbWZkX2x1by5jLTU5NC1cXHQuZnJlZXplID0gbWVtZmRfbHVvX2ZyZWV6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzMuMjY0MTM5MDA5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAxOTAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGxpdmV1cGRhdGVfZmlsZV9vcHNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBsaXZldXBkYXRlX2ZpbGVfb3BzYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoYXQgZnVuY3Rpb24gbmFtZSBzb3VuZHMgbGlrZSBpdCdzIHByZXR0eSBjcml0aWNhbCBmb3IgdGhlIGxpdmUgdXBkYXRlIHByb2Nlc3Mg4oCTIGRlYWxpbmcgd2l0aCBmaWxlIG9wZXJhdGlvbnMgZHVyaW5nIGFuIHVwZGF0ZSwgSSdkIGltYWdpbmUuIFRoZXJlZm9yZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGltcGFjdC4gS25vd2luZyB3aGVyZSBpdOKAmXMgY2FsbGVkIHdpbGwgcHJvdmlkZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGUgZmxvdy4gVGhpcyB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggaXRzIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wYWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzcuMzI0MzMyNTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzcxMDM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTktXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjA6c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIxLXN0cnVjdCBsaXZldXBkYXRlX2ZsYjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NDc6XFx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ4LVxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD03ND1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NzU6XFx0Ym9vbCAoKmNhbl9wcmVzZXJ2ZSkoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTc2LVxcdFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtODgtLyoqXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6ODk6ICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIC0gUmVwcmVzZW50cyBhIGhhbmRsZXIgZm9yIGEgbGl2ZS11cGRhdGFibGUgZmlsZSB0eXBlLlxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTkwLSAqIEBvcHM6ICAgICAgICAgICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uc1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTAwLSAqL1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjEwMTpzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIge1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTEwMi1cXHRjb25zdCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAqb3BzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjMyPWludCBsaXZldXBkYXRlX3JlYm9vdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yMzMtXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzU6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzNi1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzc6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgsXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjM4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYik7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM5OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI0MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjU0PXN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVib290KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNTgtXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjU5OnN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjYwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2My1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNjQ6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdW5yZWdpc3Rlcl9maWxlX2hhbmRsZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjY3LVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI2ODpzdGF0aWMgaW5saW5lIGludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2OS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjczLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI3NS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMC0gKiBLZXJuZWwgbW9kdWxlcyByZXNwb25zaWJsZSBmb3IgYSBzcGVjaWZpYyBmaWxlIHR5cGUgKGUuZy4sIG1lbWZkLCB2ZmlvKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MjE6ICogcmVnaXN0ZXIgYSBcXHUwMDI2c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyLiBUaGlzIGhhbmRsZXIgcHJvdmlkZXMgYSBzZXQgb2ZcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIyLSAqIGNhbGxiYWNrcyB0aGF0IExVTyBpbnZva2VzIGF0IGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIHVwZGF0ZSBwcm9jZXNzLCBtb3N0XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTIyLSAqIHN0cnVjdCBsdW9fZmlsZSAtIFJlcHJlc2VudHMgYSBzaW5nbGUgcHJlc2VydmVkIGZpbGUgaW5zdGFuY2UuXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxMjM6ICogQGZoOiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIFxcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgdGhhdCBtYW5hZ2VzXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xMjQtICogICAgICAgICAgICAgICAgIHRoaXMgdHlwZSBvZiBmaWxlLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0xNjE9c3RydWN0IGx1b19maWxlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE2MjpcXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTYzLVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNzEtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHVvX2dldF9pZChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTczLVxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0yMzA9aW50IGx1b19wcmVzZXJ2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sIGludCBmZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMjMyLVxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyBhcmdzID0gezB9O1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MjMzOlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMzQtXFx0c3RydWN0IGx1b19maWxlICpsdW9fZmlsZTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9NzE5PXN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjEte1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzIyOlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjMtXFx0Ym9vbCBoYW5kbGVyX2ZvdW5kID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTg1NT12b2lkIGx1b19maWxlX3NldF9kZXN0cm95KHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NjMtICogbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9maWxlX2hhbmRsZXIgLSBSZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIExVTy5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjg2NDogKiBAZmg6IFBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIFxcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIuXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NjUtICogVGhlIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhIHVuaXF1ZVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzMtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4NzQ6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzUte1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODc2OlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmhfaXRlcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg3Ny1cXHRpbnQgZXJyO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy05MTktICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo5MjA6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy05MjEte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jPTIwNz12b2lkIGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0yNDgtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI0OTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTI1MC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg0LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYzoyODU6dm9pZCBsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0yODYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTMwNS0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzA2OnZvaWQgbHVvX2ZsYl9maWxlX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMDcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTMxNS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzE2OnN0YXRpYyB2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9vbmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzE3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM1OC0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzU5OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zNjAte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM5My0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6Mzk0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zOTUtXFx0XFx0XFx0ICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTQ3My0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6NDc0OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy00NzUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg9OTk9dm9pZCBsdW9fZmlsZV9zZXRfZGVzdHJveShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmgtMTAwLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMjp2b2lkIGx1b19mbGJfZmlsZV91bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMzp2b2lkIGx1b19mbGJfZmlsZV9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTA0OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMDUtaW50IF9faW5pdCBsdW9fZmxiX3NldHVwX291dGdvaW5nKHU2NCAqZmxic19wYSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD0xMDc9dm9pZCBsdW9fZmxiX3NlcmlhbGl6ZSh2b2lkKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwOS0jaWZkZWYgQ09ORklHX0xJVkVVUERBVEVfVEVTVFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjExMDp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTEtI2Vsc2VcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDoxMTI6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKSB7IH1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTMtI2VuZGlmXFxuLS1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jPTg3PXN0YXRpYyB2b2lkIGxpdmV1cGRhdGVfdGVzdF9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jLTExNC1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jOjExNTp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE2LXtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTUxOD1zdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy01NzktXFxubW0vbWVtZmRfbHVvLmM6NTgwOnN0YXRpYyBib29sIG1lbWZkX2x1b19jYW5fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyLFxcbm1tL21lbWZkX2x1by5jLTU4MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbm1tL21lbWZkX2x1by5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xcbi0tXFxubW0vbWVtZmRfbHVvLmMtNjAzLVxcbm1tL21lbWZkX2x1by5jOjYwNDpzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIG1lbWZkX2x1b19oYW5kbGVyID0ge1xcbm1tL21lbWZkX2x1by5jLTYwNS1cXHQub3BzID0gXFx1MDAyNm1lbWZkX2x1b19maWxlX29wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzkuNDYxNDQ5NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcxMDA3NTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpdmUgVXBkYXRlIEZlYXR1cmUncyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfTElWRVVQREFURWAgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBtZW1mZC1iYWNrZWQgaW1wbGVtZW50YXRpb24sIGBtZW1mZF9sdW9gLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJlc2VydmUgZmlsZXMgYWNyb3NzIGEgYGtleGVjYCB0cmFuc2l0aW9uLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgbWVtZmQgYmFja2VuZCBhbmQgdGhlIGZpbGUgcmVzdG9yYXRpb24gcHJvY2Vzcy5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgLiBUaGVzZSByb3V0aW5lcyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IHVzZWQgd2l0aGluIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYGtob19yZXN0b3JlX3ZtYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmTigKYgdGhlc2UgYGtob19yZXN0b3JlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkICpkdXJpbmcqIHRoZSByZXRyaWV2YWwgcGhhc2UuIFRoaXMgcmV0cmlldmFsIHBoYXNlIGlzIHRyaWdnZXJlZCB3aGVuIGEgZmlsZSBpcyBicm91Z2h0IGJhY2sgaW50byBtZW1vcnkgdmlhIGBtZW1mZF9sdW9fcmV0cmlldmVgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gYSB1c2VyIHNwYWNlIHByb2Nlc3MgZGlyZWN0bHkgY2FsbCBgbWVtZmRfbHVvX3JldHJpZXZlYD8gIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNhbGwgcGF0aC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBtZW1mZF9sdW9fcmV0cmlldmVgIGlzIGNhbGxlZCB0aHJvdWdoIGBtZW1mZF9sdW9fZmlsZV9vcHMucmV0cmlldmVgLiAgVGhpcyB0aGVuIHBvaW50cyB0byB0aGUgZnVuY3Rpb24gIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB3aWxsIGJlIHRoZSBvbmUgdGhhdCBsaWtlbHkgdHJpZ2dlcnMgdGhlIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBjaGFpbiB0aG9yb3VnaGx5LCBhcyB0aGF0IGlzIHdoZXJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBtYXkgbGllLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgYW5kIGRhdGEgdGhhdCBhcmUgZGVzZXJpYWxpemVkIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjQ3LjE3MTUyNzk5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MjgzNjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzE4LVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbHVvX2ZpbGVfc2VyICpzZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTc4ND1pbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxNy1cXHR3aGlsZSAoKGZpbGVfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFxcdTAwMjZpdCkpKSB7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4MTg6XFx0XFx0ZXJyID0gbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKGZpbGVfc2V0LCBmaWxlX3Nlcik7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTktXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6NDkuMjY0MzcxMDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxNDg1MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBTdGFjayBmb3IgYGx1b19maWxlX2Rlc2VyaWFsaXplYCoqXG5cbk9rYXksIHNvIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqY2FsbGVkKiBmcm9tLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBjYW4ndCBqdXN0IG9wZXJhdGUgaW4gYSB2YWN1dW0uIFdoZXJlJ3MgaXQgdXNlZD8gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IElzIHRoZXJlIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50LCBvciBpcyBpdCBidXJpZWQgZGVlcCB3aXRoaW4gYSBuZXN0ZWQgbW9kdWxlP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcGxhY2VzIHdoZXJlIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAgaXMgaW52b2tlZC4gSSBjYW4ndCBzdGFydCBvcHRpbWl6aW5nIGl0LCByZWZhY3RvcmluZyBpdCwgb3IgZXZlbiBmdWxseSAqdW5kZXJzdGFuZGluZyogaXRzIHJvbGUgdW50aWwgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJcyB0aGlzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgY3JpdGljYWwgcGF0aCwgb3IgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBhIHZlcnkgc3BlY2lmaWMgdGFzaz8gVGhlIGxvY2F0aW9uIG9mIGl0cyBjYWxscyB3aWxsIGluZm9ybSBhbGwgb2YgdGhhdC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB1c2UgbXkgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIGFuZCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycywgYnV0IGFsc28gY29uc2lkZXJpbmcgdGhlIGluZGlyZWN0IHBhdGhzIHRoYXQgbWlnaHQgbGVhZCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODo1NS45NzkyMjQ5MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTc2MjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fZmlsZV9kZXNlcmlhbGl6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTU1LSAqXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo1NjogKiAzLiBEZXNlcmlhbGl6ZTogQWZ0ZXIga2V4ZWMsIGx1b19maWxlX2Rlc2VyaWFsaXplKCkgcnVucyB3aGVuIHNlc3Npb24gZ2V0c1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTctICogICAgZGVzZXJpYWxpemVkICh3aGljaCBpcyB3aGVuIC9kZXYvbGl2ZXVwZGF0ZSBpcyBmaXJzdCBvcGVuZWQpLiBJdCByZWFkcyB0aGVcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9MTE5PXN0YXRpYyBERUZJTkVfWEFSUkFZKGx1b19wcmVzZXJ2ZWRfZmlsZXMpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNTctICogZHVyaW5nIHRoZSAuZnJlZXplKCkgY2FsbGJhY2sgYmVmb3JlIGJlaW5nIHNlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE1ODogKiBBZnRlciByZWJvb3QsIHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlY3JlYXRlZCBieSBsdW9fZmlsZV9kZXNlcmlhbGl6ZSgpIGFuZFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTU5LSAqIGFyZSBmaW5hbGx5IGNsZWFuZWQgdXAgYnkgbHVvX2ZpbGVfZmluaXNoKCkuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTY4MD1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MTgtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3MTk6c3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsdW9fZmlsZV9zZXIgKnNlcilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzU5LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzYwOiAqIGx1b19maWxlX2Rlc2VyaWFsaXplIC0gUmVjb25zdHJ1Y3RzIHRoZSBsaXN0IG9mIHByZXNlcnZlZCBmaWxlcyBpbiB0aGUgbmV3IGtlcm5lbC5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTc2MS0gKiBAZmlsZV9zZXQ6ICAgICBUaGUgaW5jb21pbmcgZmlsZV9zZXQgdG8gZmlsbCB3aXRoIGRlc2VyaWFsaXplZCBkYXRhLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03ODMtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3ODQ6aW50IGx1b19maWxlX2Rlc2VyaWFsaXplKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzg1LVxcdFxcdFxcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTctXFx0d2hpbGUgKChmaWxlX3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODE4OlxcdFxcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShmaWxlX3NldCwgZmlsZV9zZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODE5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05NT1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo5NjppbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmgtOTctXFx0XFx0XFx0IHN0cnVjdCBsdW9fZmlsZV9zZXRfc2VyICpmaWxlX3NldF9zZXIpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01NTE9c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3Mi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VtdXRleCkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTczOlxcdFxcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplKFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VmaWxlX3NldCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3NC1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2VyLVxcdTAwM2VmaWxlX3NldF9zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODo1OC4wMzA5OTcwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjk0MjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgSW1wcmVzc2lvbnMgb24gTGl2ZXVwZGF0ZSBhbmQgRGVzZXJpYWxpemF0aW9uKipcblxuUmlnaHQsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhhdCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBgL2Rldi9saXZldXBkYXRlYCBpcyBhY2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIG9yIGlmIGEgc2Vzc2lvbiBpcyBiZWluZyBkZXNlcmlhbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbGl2ZSB1cGRhdGUgd291bGQgbmVlZCB0byBkZXNlcmlhbGl6ZSBzb21ldGhpbmcuIE5vdywgaGFuZyBvbiBhIHNlY29uZC4uLiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgYm9vdCwgb3Igd2hlbiBgL2Rldi9saXZldXBkYXRlYCBpcyBvcGVuZWQsIGlzIGl0IG5vdD8gVGhhdCBkZXNlcnZlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lYCAtIHRoYXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHByb2Nlc3NlcyBpbnRlcnR3aW5lIGR1cmluZyBpbml0aWFsIHN0YXJ0dXAgYW5kIGxpdmUgdXBkYXRlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MDIuNTQzOTQyMjk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODU2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTUzNT1pbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUwLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTUxOnN0YXRpYyBpbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTU4NT1pbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemUodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjE4LVxcdHdoaWxlICgoc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFxcdTAwMjZpdCkpKSB7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo2MTk6XFx0XFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjIwLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjA0LjQ1NTgwNDY1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAyNzUwMTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEZ1bmN0aW9uJ3MgT3JpZ2lucyoqXG5cbk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgdHJ5aW5nIHRvIHBpbnBvaW50IGl0cyBpbnZvY2F0aW9uLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbT8gSXMgaXQgd2l0aGluIHRoZSBjb3JlIHNlc3Npb24gbWFuYWdlbWVudCBtb2R1bGU/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBwZXJoYXBzIGEgdXNlciBsb2dpbiwgYSByZXF1ZXN0IGZvciBzZXNzaW9uIGRhdGEsIG9yIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwPyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBvcmlnaW5hdGVzLiBBbSBJIGxvb2tpbmcgYXQgY29kZSB3aXRoaW4gdGhlIGNvcmUgZnJhbWV3b3JrLCBhIHRoaXJkLXBhcnR5IGxpYnJhcnksIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGlzIGFwcGxpY2F0aW9uPyBUaGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBhc3N1bXB0aW9ucyBJIGNhbiBtYWtlIGFib3V0IHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBmaW5kIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTowNy44NTg1NTcxNzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE1MDg4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHVvX3Nlc3Npb25fZGVzZXJpYWxpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz0zMzA9c3RhdGljIGludCBsdW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlcCwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zMzktXFx0LyogQWx3YXlzIHJldHVybiAtRUlPIHRvIHVzZXIgaWYgZGVzZXJpYWxpemF0aW9uIGZhaWwgKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjM0MDpcXHRpZiAobHVvX3Nlc3Npb25fZGVzZXJpYWxpemUoKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtMzQxLVxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmxkZXYtXFx1MDAzZWluX3VzZSwgMCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD04ND1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjg1OmludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04Ni1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNDEtICpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjQyOiAqIDMuICBEZXNlcmlhbGl6YXRpb24gKGluIG5ldyBrZXJuZWwpOiBBZnRlciBrZXhlYywgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKClgXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy00My0gKiAgICAgcnVucywgcmVhZGluZyB0aGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjcmVhdGluZyBhIGxpc3Qgb2YgYHN0cnVjdFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01MzU9aW50IF9faW5pdCBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyh1NjQgc2Vzc2lvbnNfcGEpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjU1MTpzdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODQtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1ODU6aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MTgtXFx0d2hpbGUgKChzZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXFx1MDAyNml0KSkpIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjYxOTpcXHRcXHRlcnIgPSBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc2gsIHNlcik7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MjAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MTAuMDMwMDcwNTUxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTUyMTI1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaXZlIFVwZGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcGF0aCBvZiBgL2Rldi9saXZldXBkYXRlYCBoZXJlLiBUaGUgZW50cnkgcG9pbnQgSSdtIHNlZWluZyBpcyBgbHVvX29wZW5gLCBhbmQgdGhhdCdzIHRoZSBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBJZiBzeXprYWxsZXIgb3BlbnMgdGhhdCBkZXZpY2UsIGl0J3MgZ29pbmcgdG8gaGl0IGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyAqc3VwcG9zZWQqIHRvIGhhbmRsZSBLSE8gZGF0YSB0aGF0IG1pZ2h0IGJlIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsIOKAkyB0aGluayBga2V4ZWNgIG9yIGEgc2ltaWxhciBzY2VuYXJpby4gQnV0LCBkdXJpbmcgYSBzdGFuZGFyZCBib290LCB3aXRob3V0IHRoYXQgS0hPIGRhdGEsIGl0J3MgdmVyeSBsaWtlbHkgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyBnb2luZyB0byBlaXRoZXIgcmV0dXJuIHplcm8gb3IganVzdCBxdWlldGx5IGRvIG5vdGhpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIG9mIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgaXRzZWxmIGFuZCBjb25maXJtIHRoaXMgYmVoYXZpb3IuIEdvdHRhIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIGluIHRoZSBhYnNlbmNlIG9mIEtITyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOToxNC41MjUyODU5NDZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODU6XFx0aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCA9IFxcdTAwMjZsdW9fc2Vzc2lvbl9nbG9iYWwuaW5jb21pbmc7XFxuIDU4ODpcXHRcXHRzdGF0aWMgYm9vbCBpc19kZXNlcmlhbGl6ZWQ7XFxuIDU4OTpcXHRcXHRzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXI7XFxuIDU5MDpcXHRcXHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldF9pdCBpdDtcXG4gNTkxOlxcdFxcdHN0YXRpYyBpbnQgc2F2ZWRfZXJyO1xcbiA1OTI6XFx0XFx0aW50IGVycjtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0LyogSWYgaGFzIGJlZW4gZGVzZXJpYWxpemVkLCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVycm9yIGNvZGUgKi9cXG4gNTk1OlxcdFxcdGlmIChpc19kZXNlcmlhbGl6ZWQpXFxuIDU5NjpcXHRcXHRcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRpc19kZXNlcmlhbGl6ZWQgPSB0cnVlO1xcbiA1OTk6XFx0XFx0aWYgKCFzaC1cXHUwMDNlYWN0aXZlKVxcbiA2MDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYwMTpcXHRcXG4gNjAyOlxcdFxcdC8qXFxuIDYwMzpcXHRcXHQgKiBOb3RlIG9uIGVycm9yIGhhbmRsaW5nOlxcbiA2MDQ6XFx0XFx0ICpcXG4gNjA1OlxcdFxcdCAqIElmIGRlc2VyaWFsaXphdGlvbiBmYWlscyAoZS5nLiwgYWxsb2NhdGlvbiBmYWlsdXJlIG9yIGNvcnJ1cHQgZGF0YSksXFxuIDYwNjpcXHRcXHQgKiB3ZSBpbnRlbnRpb25hbGx5IHNraXAgY2xlYW51cCBvZiBzZXNzaW9ucyB0aGF0IHdlcmUgYWxyZWFkeSByZXN0b3JlZC5cXG4gNjA3OlxcdFxcdCAqXFxuIDYwODpcXHRcXHQgKiBBIHBhcnRpYWwgZmFpbHVyZSBsZWF2ZXMgdGhlIHByZXNlcnZlZCBzdGF0ZSBpbmNvbnNpc3RlbnQuXFxuIDYwOTpcXHRcXHQgKiBJbXBsZW1lbnRpbmcgYSBzYWZlIFxcXCJ1bmRvXFxcIiB0byB1bndpbmQgY29tcGxleCBkZXBlbmRlbmNpZXMgKHNlc3Npb25zLFxcbiA2MTA6XFx0XFx0ICogZmlsZXMsIGhhcmR3YXJlIHN0YXRlKSBpcyBlcnJvci1wcm9uZSBhbmQgcHJvdmlkZXMgbGl0dGxlIHZhbHVlLCBhc1xcbiA2MTE6XFx0XFx0ICogdGhlIHN5c3RlbSBpcyBlZmZlY3RpdmVseSBpbiBhIGJyb2tlbiBzdGF0ZS5cXG4gNjEyOlxcdFxcdCAqXFxuIDYxMzpcXHRcXHQgKiBXZSB0cmVhdCB0aGVzZSByZXNvdXJjZXMgYXMgbGVha2VkLiBUaGUgZXhwZWN0ZWQgcmVjb3ZlcnkgcGF0aCBpcyBmb3JcXG4gNjE0OlxcdFxcdCAqIHVzZXJzcGFjZSB0byBkZXRlY3QgdGhlIGZhaWx1cmUgYW5kIHRyaWdnZXIgYSByZWJvb3QsIHdoaWNoIHdpbGxcXG4gNjE1OlxcdFxcdCAqIHJlbGlhYmx5IHJlc2V0IGRldmljZXMgYW5kIHJlY2xhaW0gbWVtb3J5LlxcbiA2MTY6XFx0XFx0ICovXFxuIDYxNzpcXHRcXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXFx1MDAyNml0LCBcXHUwMDI2c2gtXFx1MDAzZWJsb2NrX3NldCk7XFxuIDYxODpcXHRcXHR3aGlsZSAoKHNlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbiA2MTk6XFx0XFx0XFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xcbiA2MjA6XFx0XFx0XFx0aWYgKGVycilcXG4gNjIxOlxcdFxcdFxcdFxcdGdvdG8gc2F2ZV9lcnI7XFxuIDYyMjpcXHRcXHR9XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdGtob19ibG9ja19zZXRfZGVzdHJveShcXHUwMDI2c2gtXFx1MDAzZWJsb2NrX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjE0LjUyNTM3OTA0NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQxMjgyMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgdGFpbG9yZWQgYXMgdGhvdWdoIEksIGEgc2Vhc29uZWQgZXhwZXJ0LCBhbSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkNoZWNraW5nIFNlc3Npb24gQWN0aXZpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgYSB2ZXJ5IGNvbmNpc2UgY2hlY2s6IGAhc2gtXHUwMDNlYWN0aXZlYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgZ3VhcmQgY29uZGl0aW9uLiBJZiB0aGlzIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgZnVuY3Rpb24gaW5zdGFudGx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBObyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2NjdXJzLiBJIGNhbiBpbmZlciB0aGF0IHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgaXMgbGlrZWx5IHRpZWQgdG8gaGFuZGxpbmcgYSBcInNlc3Npb25cIiBpZGVudGlmaWVkIGJ5IGBzaGAuIFRoZSBgYWN0aXZlYCBmbGFnIHdpdGhpbiB0aGF0IHNlc3Npb24gc3RydWN0dXJlLCBgc2hgLCBpcyB0aGUga2V5LlxuXG5UaGVuIEkgc2VlIHdoZXJlIHRoZSBgYWN0aXZlYCBmbGFnIGdldHMgc2V0LiBJdCBoYXBwZW5zIGluc2lkZSBgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdgLiBTbywgc2V0dGluZyB1cCBhbiBpbmNvbWluZyBzZXNzaW9uIGlzIHdoYXQgbWFrZXMgYHNoLVx1MDAzZWFjdGl2ZWAgdHJ1ZS4gQW55IGNhbGwgdG8gYSBtZXRob2QgaW4gdGhlIHNlc3Npb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBzZXNzaW9uIGxpa2VseSByZXR1cm5zIDAsIGluZGljYXRpbmcgYW4gZXJyb3IuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gYmFpbCBvdXQgaWYgYSBzZXNzaW9uIGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjdGl2YXRlZCwgbGlrZWx5IHByb3RlY3RpbmcgYWdhaW5zdCBudWxsIHBvaW50ZXIgZXhjZXB0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGZyb20gdXNpbmcgYSBzZXNzaW9uIHRoYXQgaXNuJ3QgcmVhZHkuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MTguNjY2NjY2NDQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRpbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcXG4gNTM2OlxcdHtcXG4gNTM3OlxcdFxcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXFx1MDAyNmx1b19zZXNzaW9uX2dsb2JhbC5pbmNvbWluZztcXG4gNTM4OlxcdFxcdGludCBlcnI7XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdGlmICghc2Vzc2lvbnNfcGEpXFxuIDU0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9yZXN0b3JlKFxcdTAwMjZzaC1cXHUwMDNlYmxvY2tfc2V0LCBzZXNzaW9uc19wYSk7XFxuIDU0NDpcXHRcXHRpZiAoZXJyKVxcbiA1NDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0c2gtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuIDU0ODpcXHRcXHRyZXR1cm4gMDtcXG4gNTQ5OlxcdH1cXG4gNTUwOlxcdFxcbiA1NTE6XFx0c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXFxuIDU1MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxcbiA1NTM6XFx0e1xcbiA1NTQ6XFx0XFx0c3RydWN0IGx1b19zZXNzaW9uICpzZXNzaW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOToxOC42NjY3NzM2NzNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4MTc5OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBPYmplY3QgSGFuZG92ZXIgKEtITykgSW5pdGlhbGl6YXRpb24gYW5kIFJlc3RvcmUgUGF0aCoqXG5cbk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AgaXMgaW52b2tlZCBvbiBib290IHdpdGggYHNlc3Npb25zX3BhYCwgYW5kIGlmIG5vIEtITyBkYXRhIGV4aXN0cywgd2hpY2ggaXMgdGhlIG5vcm0gZm9yIGEgZnJlc2ggU3l6a2FsbGVyIGJvb3QsIGBzZXNzaW9uc19wYWAgaXMgemVyby4gVGhhdCBtZWFucyBgc2gtXHUwMDNlYWN0aXZlYCBzdGF5cyBmYWxzZS4gQ29uc2VxdWVudGx5LCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGRvZXMgbm90aGluZywgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGUgZW50aXJlIHJlc3RvcmUgbWVjaGFuaXNtIGlzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoZSBwcmVzZXJ2ZSBwYXRoIGF0IGFsbC5cblxuTGV0J3Mgc2Vl4oCmIEkgc2hvdWxkIGNoZWNrIGBraG9fcHJlc2VydmVfcGFnZWAuIExvb2tzIGxpa2UgaXQncyB1bnVzZWQsIHRoYXQncyBhIGRlYWQgZW5kLiBPa2F5LCBsZXQncyBsb29rIGF0IGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLiBBaCwgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBga2hvX2luaXRfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCB0aGVuIGBraG9faW5pdF9mb2xpb2AgaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtob19yZXN0b3JlX2ZvbGlvYC4gTWFrZXMgc2Vuc2UuIE5vdyBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIG9ubHkgdHJpZ2dlcmVkIHRocm91Z2ggYGtob19yZXN0b3JlX2ZyZWVgLCBga2hvX3Rlc3RfcmVzdG9yZV9kYXRhYCwgYW5kIHRoZSBgbWVtZmRfbHVvX2Rpc2NhcmRfZm9saW9zYCBhbmQgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIG9wZXJhdGlvbnMuIEFsbCB0aG9zZSBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwYXRoLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB0aGlzOiBDYW4gdGhlIHJlc3RvcmUgcGF0aCBiZSBlbnRlcmVkIGlmIEtITyBkYXRhIGlzbid0IHByZXNlbnQ/IE5vLCBpdCdzIGltcG9zc2libGUuIEJlY2F1c2UgZWl0aGVyIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIGJlIGZhbHNlIG9yIGBzaC1cdTAwM2VhY3RpdmVgIHdpbGwgYmUgZmFsc2UuIFNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ28gb3ZlciB0aGUgZWRnZSBjYXNlcyBhbmQgbm90IGFzc3VtZSBhIGZyZXNoIGJvb3QuXG5cbldhaXQsIHRoZSBgdGVzdF9raG9gIG1vZHVsZSEgSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGtob190ZXN0X2luaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjI2LjM0ODU3NTc0M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3Rfa2hvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4gMzE1OlxcdHtcXG4gMzE2OlxcdFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbiAzMTc6XFx0XFx0aW50IGVycjtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcXG4gMzIzOlxcdFxcdGlmICghZXJyKSB7XFxuIDMyNDpcXHRcXHRcXHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcXG4gMzI1OlxcdFxcdFxcdGlmIChlcnIpXFxuIDMyNjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIktITyByZXN0b3JlIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMyNzpcXHRcXHRcXHRlbHNlXFxuIDMyODpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4gMzM0OlxcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxcXG5cXFwiLCBLSE9fVEVTVF9GRFQsIGVycik7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0bW9kdWxlX2luaXQoa2hvX3Rlc3RfaW5pdCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcXG4gMzQzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MjYuMzQ4NjkyMzUzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDg4MTk1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS0hPIEZlYXR1cmUgTG9naWMgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIEtITyBmZWF0dXJlIGlzIGVuYWJsZWQuIFRoZSBjb3JlIG9mIHRoaXMgbG9naWMgaGluZ2VzIG9uIGBraG9faXNfZW5hYmxlZCgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBraG9faXNfZW5hYmxlZCgpYCBhY3RzIGFzIHRoZSBnYXRla2VlcGVyIGhlcmUuXCIgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCBtZWFuaW5nIEtITyBpc24ndCBlbmFibGVkLCB0aGVuIHRoZSBlbnRpcmUgc2VjdGlvbiBsaWtlbHkgemVyb2VzIG91dCB3aGF0ZXZlciB2YWx1ZSBpdCdzIGRlYWxpbmcgd2l0aC4gQSBxdWljayBjaGVjayBvZiBga2hvX2lzX2VuYWJsZWQoKWAgcmV2ZWFscyB0aGF0IGl0IHZlcmlmaWVzIHdoZXRoZXIgdGhlIGtlcm5lbCB3YXMgYm9vdGVkIHdpdGggS0hPIGRhdGEgaW4gb3JkZXIgdG8gbWFrZSBpdHMgZGV0ZXJtaW5hdGlvbi4gSSBzaG91bGQganVzdCBjb25maXJtIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGZhY3RvcnMgbWFrZSBLSE8gZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGluc2lkZSBga2hvX2lzX2VuYWJsZWQoKWAuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjMxLjE1NzUxNzY3OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDM5MjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9faXNfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTc9c3RydWN0IHBhZ2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTktI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyMDpib29sIGtob19pc19lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMS1ib29sIGlzX2tob19ib290KHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTQ0PXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTU4PXN0YXRpYyBib29sIGtob19lbmFibGUgX19yb19hZnRlcl9pbml0ID0gSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2MDpib29sIGtob19pc19lbmFibGVkKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02MS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTYzLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY0OkVYUE9SVF9TWU1CT0xfR1BMKGtob19pc19lbmFibGVkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY1LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz04ND1zdGF0aWMgaW50IF9faW5pdCBsdW9fZWFybHlfc3RhcnR1cCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy05MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjkxOlxcdGlmICgha2hvX2lzX2VuYWJsZWQoKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTItXFx0XFx0aWYgKGxpdmV1cGRhdGVfZW5hYmxlZCgpKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MzE0PXN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2toby5jLTMxOC1cXG5saWIvdGVzdF9raG8uYzozMTk6XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbmxpYi90ZXN0X2toby5jLTMyMC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbWJsb2NrLmM9MjYxNj1zdGF0aWMgaW50IF9faW5pdCByZXNlcnZlX21lbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI2MTktXFxubW0vbWVtYmxvY2suYzoyNjIwOlxcdGlmICgha2hvX2lzX2VuYWJsZWQoKSB8fCAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMjYyMS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MzMuMjIxOTE0NzUzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyODg3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGtob19pc19lbmFibGVkYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBga2hvX2lzX2VuYWJsZWRgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgbWFpbnRhaW5hYmlsaXR5LCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgZnJlcXVlbnRseSBjYWxsZWQgb3IgZGVlcGx5IG5lc3RlZCB3aXRoaW4gY3JpdGljYWwgcGF0aHMuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyDigJMgaXMgaXQgY2hlY2tpbmcgYSBzdGF0aWMgdmFyaWFibGUsIHF1ZXJ5aW5nIGEgZGF0YWJhc2UsIG9yIHBlcmZvcm1pbmcgbW9yZSBjb21wbGV4IGxvZ2ljPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGlmIGl0IG1vZGlmaWVzIGFueSBzaGFyZWQgc3RhdGUuIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBvdXIgZXhpc3RpbmcgY29kZSBiYXNlPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBwcm9iYWJseSB3cml0dGVuIGJ5IHNvbWVvbmUgZWxzZSwgc28gSSB3YW50IHRvIGdldCBhbiBvdmVydmlldyBvZiBpdHMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhlcmUgYSBjaGFuY2Ugb2YgYW55IHJhY2UgY29uZGl0aW9ucz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBmb3IgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBjb250ZXh0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjM2Ljk0NzIwNjc5NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1ODpcXHRzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxcbiAgNjE6XFx0e1xcbiAgNjI6XFx0XFx0cmV0dXJuIGtob19lbmFibGU7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9lbmFibGUoY2hhciAqcClcXG4gIDY3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MzYuOTQ3MzE2NTg1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjc1NjE0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBFbmFibGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBraG9faXNfZW5hYmxlZGAgZnVuY3Rpb24gYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc2ltcGx5IHJldHVybnMgdGhlIHZhbHVlIG9mIGBraG9fZW5hYmxlYC4gV2hpY2gsIGFzIEkgc2VlIGl0LCBkZWZhdWx0cyB0byBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYC4gU28gZXNzZW50aWFsbHksIGlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBga2hvX2lzX2VuYWJsZWQoKWAgd2lsbCByZXR1cm4gdHJ1ZS4gVGhhdCdzIGdvb2QuIE5vdywgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGB0ZXN0X2toby5jYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQyLjA3NDg4MTU5MVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9raG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTQ6XFx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxcbiAzMTU6XFx0e1xcbiAzMTY6XFx0XFx0cGh5c19hZGRyX3QgZmR0X3BoeXM7XFxuIDMxNzpcXHRcXHRpbnQgZXJyO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRpZiAoIWtob19pc19lbmFibGVkKCkpXFxuIDMyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xcbiAzMjM6XFx0XFx0aWYgKCFlcnIpIHtcXG4gMzI0OlxcdFxcdFxcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xcbiAzMjU6XFx0XFx0XFx0aWYgKGVycilcXG4gMzI2OlxcdFxcdFxcdFxcdHByX2VycihcXFwiS0hPIHJlc3RvcmUgZmFpbGVkXFxcXG5cXFwiKTtcXG4gMzI3OlxcdFxcdFxcdGVsc2VcXG4gMzI4OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIktITyByZXN0b3JlIHN1Y2NlZWRlZFxcXFxuXFxcIik7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xcbiAzMzQ6XFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXFxcblxcXCIsIEtIT19URVNUX0ZEVCwgZXJyKTtcXG4gMzM1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XFxuIDMzOTpcXHR9XFxuIDM0MDpcXHRtb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0c3RhdGljIHZvaWQga2hvX3Rlc3RfY2xlYW51cCh2b2lkKVxcbiAzNDM6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0Mi4wNzQ5NjkwNjFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMTIwOTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBEYXRhIFJldHJpZXZhbCBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGNvZGUncyBvcGVyYXRpbmcgdW5kZXIgYSBjb25kaXRpb25hbC4gSWYgYGtob19pc19lbmFibGVkKClgIHJldHVybnMgdHJ1ZSwgdGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhlcmUncyAqbm8qIEtITyBkYXRhIGF2YWlsYWJsZT8gQWhhLCB0aGUgdGV4dCBzYXlzIGBraG9fcmV0cmlldmVfc3VidHJlZWAgd2lsbCByZXR1cm4gYC1FTk9FTlRgLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHN0YW5kYXJkIGVycm9yIGNvZGUgdG8gaW5kaWNhdGUgXCJubyBzdWNoIGVudGl0eS5cIiBOb3csIGFmdGVyIHRoYXQgcmV0cmlldmFsIChvciBsYWNrIHRoZXJlb2YpLCB0aGUgY29kZSBqdW1wcyB0byBga2hvX3Rlc3Rfc2F2ZSgpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBraG9fdGVzdF9zYXZlKClgIGZ1bmN0aW9uIGlzIGRvaW5nIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGZsb3cuIEknbGwgbmVlZCB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCByZWFjdHMgdG8gb3IgaW5jb3Jwb3JhdGVzIHRoZSByZXN1bHQgKG9yIGxhY2sgdGhlcmVvZikgZnJvbSBga2hvX3JldHJpZXZlX3N1YnRyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NDYuNDc2MTgxMzAyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2toby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAyNzc6XFx0XFx0fVxcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHR2ZnJlZShmb2xpb3NfaW5mbyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGlmIChjc3VtICE9ICpvbGRfY3N1bSlcXG4gMjgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjg1OlxcdH1cXG4gMjg2OlxcdFxcbiAyODc6XFx0c3RhdGljIGludCBraG9fdGVzdF9yZXN0b3JlKHBoeXNfYWRkcl90IGZkdF9waHlzKVxcbiAyODg6XFx0e1xcbiAyODk6XFx0XFx0dm9pZCAqZmR0ID0gcGh5c190b192aXJ0KGZkdF9waHlzKTtcXG4gMjkwOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCAqbWFnaWM7XFxuIDI5MTpcXHRcXHRpbnQgbm9kZSwgbGVuLCBlcnI7XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdG5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoZmR0LCBcXFwiL1xcXCIpO1xcbiAyOTQ6XFx0XFx0aWYgKG5vZGUgXFx1MDAzYyAwKVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdGlmIChmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgbm9kZSwgS0hPX1RFU1RfQ09NUEFUKSlcXG4gMjk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRtYWdpYyA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgXFxcIm1hZ2ljXFxcIiwgXFx1MDAyNmxlbik7XFxuIDMwMTpcXHRcXHRpZiAoIW1hZ2ljIHx8IGxlbiAhPSBzaXplb2YoKm1hZ2ljKSlcXG4gMzAyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRpZiAoKm1hZ2ljICE9IEtIT19URVNUX01BR0lDKVxcbiAzMDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdGVyciA9IGtob190ZXN0X3Jlc3RvcmVfZGF0YShmZHQsIG5vZGUpO1xcbiAzMDg6XFx0XFx0aWYgKGVycilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHJldHVybiAwO1xcbiAzMTI6XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRzdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXFxuIDMxNTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQ2LjQ3NjI3ODE4MloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2MTMzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgV29ya2Zsb3c6IGBraG9fdGVzdF9zYXZlYCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHJlLW9yaWVudCBteXNlbGYuIFRoYXQgYGtob190ZXN0X3NhdmVgIGZpbGUuLi4gaXQncyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSBuZWVkIHRvIHJldmlldyBpdC4gSXQgcHJvYmFibHkgY29udGFpbnMgdGhlIGNydWNpYWwgc3RhdGUgaW5mb3JtYXRpb24gb3IgZGF0YSBtYW5pcHVsYXRpb24gc3RlcHMgdGhhdCBJIHdhcyB3b3JraW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIEkgbGVmdCBvZmYuIElzIGl0IGEgY2hlY2twb2ludCBzYXZlPyBBIHRlc3QgY29uZmlndXJhdGlvbj8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIGtub3cuIEnigJlsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBqdW1wIG91dCBhYm91dCB0aGF0IHByZXZpb3VzIHRlc3RpbmcgaXRlcmF0aW9uLCBvciBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFzIGEgd2hvbGUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IHVwIHRvIHNwZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NTAuOTUyNDE1NTM4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5MDgyMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob190ZXN0X3NhdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3Rfa2hvLmM9MTYyPXN0YXRpYyBpbnQga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMjA0LVxcbmxpYi90ZXN0X2toby5jOjIwNTpzdGF0aWMgaW50IGtob190ZXN0X3NhdmUodm9pZClcXG5saWIvdGVzdF9raG8uYy0yMDYte1xcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MzE0PXN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2toby5jLTMzNy1cXG5saWIvdGVzdF9raG8uYzozMzg6XFx0cmV0dXJuIGtob190ZXN0X3NhdmUoKTtcXG5saWIvdGVzdF9raG8uYy0zMzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo1Mi43MzE1MDU0NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU2MDQ4MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIFNldDoga2hvXFxfdGVzdFxcX3NhdmUqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBmaWxlLCBga2hvX3Rlc3Rfc2F2ZWAuIEltbWVkaWF0ZWx5LCBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGFzc3VtcHRpb25zIEkgY2FuIG1ha2UgYWJvdXQgaXRzIGNvbnRlbnRzIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gXCJraG9cIiBtaWdodCBzdWdnZXN0IGEgcGFydGljdWxhciBkYXRhIGZvcm1hdCBvciBzb3VyY2Ug4oCTIHBlcmhhcHMgYSBzcGVjaWZpYyByZXNlYXJjaCBncm91cCdzIG91dHB1dCwgYSBwYXJ0aWN1bGFyIGV4cGVyaW1lbnQsIG9yIGEgc3BlY2lmaWMgdHlwZSBvZiBkYXRhIGVuY29kaW5nLiBcInRlc3RcIiBpbmRpY2F0ZXMgaXQncyBsaWtlbHkgYSB0ZW1wb3Jhcnkgb3IgZGV2ZWxvcG1lbnRhbCBmaWxlLCBtYXliZSBhIHZhbGlkYXRpb24gb3IgcHJlbGltaW5hcnkgb3V0cHV0LiBBbmQgXCJzYXZlXCIgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhIHNuYXBzaG90IG9mIHRoZSBkYXRhIGF0IGEgY2VydGFpbiBwb2ludCwgYSBjaGVja3BvaW50IGluIHRoZSB3b3JrZmxvdy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGF0IHRoZXNlIGFyZSBqdXN0IGluaXRpYWwgY2x1ZXMuIEkgaGF2ZSB0byByZXNpc3QgdGhlIHVyZ2UgdG8ganVtcCB0byBjb25jbHVzaW9ucyB1bnRpbCBJJ3ZlIGFjdHVhbGx5IGxvb2tlZCBhdCB0aGUgZmlsZSBpdHNlbGYuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHBhcnNlIHRoaXMgYXBwcm9wcmlhdGVseS4gSXMgdGhpcyBhIGN1c3RvbSBiaW5hcnkgZm9ybWF0PyBJcyBpdCB0ZXh0LWJhc2VkLCBsaWtlIENTViwgSlNPTiwgb3IgWE1MPyBPciBpcyBpdCBzb21ldGhpbmcgYSBiaXQgbW9yZSBlc290ZXJpYz8gVGhlIGZpcnN0IHByaW9yaXR5IGlzIHRvIGRldGVybWluZSBob3cgdG8gcmVhZCB0aGUgZGF0YSwgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IGl0cyBzdHJ1Y3R1cmUgYW5kIHRoZW4gc3RhcnQgYW5hbHl6aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAwLjM4NzU1Njk5MloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9raG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDU6XFx0c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlID0gXFx1MDAyNmtob190ZXN0X3N0YXRlO1xcbiAyMDg6XFx0XFx0c3RydWN0IGZvbGlvICoqZm9saW9zO1xcbiAyMDk6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfbnI7XFxuIDIxMDpcXHRcXHRpbnQgZXJyO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRtYXhfbWVtID0gUEFHRV9BTElHTihtYXhfbWVtKTtcXG4gMjEzOlxcdFxcdG1heF9uciA9IG1heF9tZW0gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0Zm9saW9zID0ga3ZtYWxsb2Nfb2Jqcygqc3RhdGUtXFx1MDAzZWZvbGlvcywgbWF4X25yKTtcXG4gMjE2OlxcdFxcdGlmICghZm9saW9zKVxcbiAyMTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIxODpcXHRcXHRzdGF0ZS1cXHUwMDNlZm9saW9zID0gZm9saW9zO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRlcnIgPSBraG9fdGVzdF9nZW5lcmF0ZV9kYXRhKHN0YXRlKTtcXG4gMjIxOlxcdFxcdGlmIChlcnIpXFxuIDIyMjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2ZvbGlvcztcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZXJyID0ga2hvX3Rlc3RfcHJlc2VydmUoc3RhdGUpO1xcbiAyMjU6XFx0XFx0aWYgKGVycilcXG4gMjI2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfZm9saW9zO1xcbiAyMjc6XFx0XFxuIDIyODpcXHRcXHRyZXR1cm4gMDtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0ZXJyX2ZyZWVfZm9saW9zOlxcbiAyMzE6XFx0XFx0a3ZmcmVlKGZvbGlvcyk7XFxuIDIzMjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAwLjM4NzY1NTYyMVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDI0Mzk0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBwcm9jZXNzLCB0aGlua2luZyBhcyB0aGUgY29kZSBpdHNlbGYgbWlnaHQ6XG5cbioqVGhlIFByZXNlcnZhdGlvbiBEYW5jZTogQSBMb29rIGF0IERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBga2hvX3Rlc3Rfc2F2ZWAgaXMgaW5pdGlhdGluZyBhIGNyaXRpY2FsIG9wZXJhdGlvbi4gSXQncyBlc3NlbnRpYWxseSBzYXlpbmcsIFwiSGV5LCBiZWZvcmUgSSBkbyBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmlza3ksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgc2FmZSBhbmQgc291bmQuXCIgVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYGtob190ZXN0X3ByZXNlcnZlYC4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIHRvIG1lIHRoYXQgYGtob190ZXN0X3NhdmVgJ3MgZnVuY3Rpb25hbGl0eSwgd2hhdGV2ZXIgaXQgbWlnaHQgYmUsIGRlcGVuZHMgb24gYSBwcmVsaW1pbmFyeSBkYXRhIHNhZmVndWFyZGluZyBzdGVwLiBUaGlzIGxvb2tzIGxpa2UgYSBjb21tb24gcGF0dGVybiwgYW5kIGEgZ29vZCBvbmUhIEl0J3MgbGlrZWx5IHRoYXQgYGtob190ZXN0X3ByZXNlcnZlYCBkb2VzIHNvbWUga2luZCBvZiBiYWNrdXAsIHNuYXBzaG90dGluZywgc2VyaWFsaXphdGlvbiwgb3IgdmVyc2lvbmluZy4gSSdtIGluZmVycmluZywgd2l0aCBteSBleHBlcnQgZXllLCB0aGF0IHRoZSBzeXN0ZW0gaXMgZW5naW5lZXJlZCB0byBwcmlvcml0aXplIGRhdGEgaW50ZWdyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDYuNDEyMDUyNTAzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1ODY5NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob190ZXN0X3ByZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2toby5jPTQ1PXN0YXRpYyB2b2lkIGtob190ZXN0X3VucHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtNTMtXFxubGliL3Rlc3Rfa2hvLmM6NTQ6c3RhdGljIGludCBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXFxubGliL3Rlc3Rfa2hvLmMtNTUte1xcbi0tXFxubGliL3Rlc3Rfa2hvLmM9OTc9c3RhdGljIGludCBraG9fdGVzdF9wcmVwYXJlX2ZkdChzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlLCBzc2l6ZV90IGZkdF9zaXplKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMTIzLVxcbmxpYi90ZXN0X2toby5jOjEyNDpzdGF0aWMgaW50IGtob190ZXN0X3ByZXNlcnZlKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXFxubGliL3Rlc3Rfa2hvLmMtMTI1LXtcXG4tLVxcbmxpYi90ZXN0X2toby5jLTEzNy1cXG5saWIvdGVzdF9raG8uYzoxMzg6XFx0ZXJyID0ga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdGF0ZSk7XFxubGliL3Rlc3Rfa2hvLmMtMTM5LVxcdGlmIChlcnIpXFxuLS1cXG5saWIvdGVzdF9raG8uYz0yMDU9c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0yMjMtXFxubGliL3Rlc3Rfa2hvLmM6MjI0OlxcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcXG5saWIvdGVzdF9raG8uYy0yMjUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDguNDc3OTI5MTA3WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTA4NzU5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBwcm9jZXNzaW5nIHRoaXMgdGFzaywgZm9jdXNpbmcgb24gd2hhdCBJJ2QgYmUgdGhpbmtpbmcgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBUYXNrOiBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAqKlxuXG5BbHJpZ2h0LCB0aGUgZmlsZSBvciB0ZXN0IHN1aXRlIEkgbmVlZCB0byBsb29rIGF0IGlzIG5hbWVkIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhYC4gSW1tZWRpYXRlbHksIGEgZmV3IHRoaW5ncyBqdW1wIG91dC4gVGhlIG5hbWUgc3VnZ2VzdHMgYSBzcGVjaWZpYyBmb2N1cyBvbiAqZGF0YSBwcmVzZXJ2YXRpb24qLiBUaGlzIGlzIGtleS4gV2UncmUgbm90IGp1c3QgcnVubmluZyB0ZXN0cywgd2UncmUgbWFraW5nIHN1cmUgZGF0YSBpbnRlZ3JpdHkgaXMgbWFpbnRhaW5lZCwgcG90ZW50aWFsbHkgZHVyaW5nIHNvbWUga2luZCBvZiBvcGVyYXRpb24gb3IgcHJvY2Vzcy4gXCJLaG9cIiBpcyBhIHByZWZpeCBJIGhhdmVuJ3Qgc2VlbiBiZWZvcmUsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBzaWduaWZpZXM7IGl0IG1pZ2h0IGJlIGEgc3BlY2lmaWMgbGlicmFyeSwgcHJvamVjdCwgb3IgY29udGV4dC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgaXMgdGhhdCB0aGlzIGlzIGEgdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgc29tZSBvcGVyYXRpb24sIG1heWJlIGEgZGF0YSBtaWdyYXRpb24sIGEgc3lzdGVtIHVwZGF0ZSwgb3IgYSBzcGVjaWZpYyBkYXRhIHRyYW5zZm9ybWF0aW9uLCBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgbGVhZCB0byBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhc3NlcnRzIHRoYXQgZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCBjaGVja3N1bXMsIGRhdGEgc2l6ZXMsIG9yIHNwZWNpZmljIGRhdGEgdmFsdWVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGFjdGlvbiBiZWluZyB0ZXN0ZWQuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGVkZ2UgY2FzZXMsIHdoZXJlIHRoaW5ncyBhcmUgbW9zdCBsaWtlbHkgdG8gZ28gd3JvbmcsIGxpa2UgY29uY3VycmVuY3kgaXNzdWVzLCBlcnJvciBoYW5kbGluZywgb3IgdW51c3VhbCBkYXRhIGlucHV0cy4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdGVzdCdzIHNjb3BlIOKAkyBkb2VzIGl0IGNvdmVyIHRoZSBlbnRpcmUgZGF0YSBzZXQsIG9yIGlzIGl0IHNhbXBsaW5nIHNwZWNpZmljIGtleSBhcmVhcz8gSXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgY2xlYXJseSBkZWZpbmVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlcGxpY2F0aW9uIGFuZCByZWxpYWJpbGl0eSBvZiByZXN1bHRzLiBJcyB0aGVyZSBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGlzIHRlc3Q/IFRoYXQgd291bGQgYmUgZmFudGFzdGljISBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhlIHRlc3QgaXMgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGlzIGRhdGEgcHJlc2VydmF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTIuNjI4ODA3NTUzWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2toby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU0OlxcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IGtob192bWFsbG9jIGZvbGlvc19pbmZvX3BoeXM7XFxuICA1NzpcXHRcXHRwaHlzX2FkZHJfdCAqZm9saW9zX2luZm87XFxuICA1ODpcXHRcXHRpbnQgZXJyO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRmb2xpb3NfaW5mbyA9IHZtYWxsb2NfYXJyYXkoc3RhdGUtXFx1MDAzZW5yX2ZvbGlvcywgc2l6ZW9mKCpmb2xpb3NfaW5mbykpO1xcbiAgNjE6XFx0XFx0aWYgKCFmb2xpb3NfaW5mbylcXG4gIDYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfdm1hbGxvYyhmb2xpb3NfaW5mbywgXFx1MDAyNmZvbGlvc19pbmZvX3BoeXMpO1xcbiAgNjU6XFx0XFx0aWYgKGVycilcXG4gIDY2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaW5mbztcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0c3RhdGUtXFx1MDAzZWZvbGlvc19pbmZvX3BoeXMgPSBmb2xpb3NfaW5mb19waHlzO1xcbiAgNjk6XFx0XFx0c3RhdGUtXFx1MDAzZWZvbGlvc19pbmZvID0gZm9saW9zX2luZm87XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc3RhdGUtXFx1MDAzZW5yX2ZvbGlvczsgaSsrKSB7XFxuICA3MjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc3RhdGUtXFx1MDAzZWZvbGlvc1tpXTtcXG4gIDczOlxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0XFx0Zm9saW9zX2luZm9baV0gPSB2aXJ0X3RvX3BoeXMoZm9saW9fYWRkcmVzcyhmb2xpbykpIHwgb3JkZXI7XFxuICA3NjpcXHRcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfZm9saW8oZm9saW8pO1xcbiAgNzc6XFx0XFx0XFx0aWYgKGVycilcXG4gIDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3VucHJlc2VydmU7XFxuICA3OTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbnJfZm9saW9zX3ByZXNlcnZlZCsrO1xcbiAgODA6XFx0XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRyZXR1cm4gMDtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0ZXJyX3VucHJlc2VydmU6XFxuICA4NTpcXHRcXHQvKlxcbiAgODY6XFx0XFx0ICoga2hvX3Rlc3RfdW5wcmVzZXJ2ZV9kYXRhIGZyZWVzIGZvbGlvX2luZm8sIGJhaWwgb3V0IGltbWVkaWF0ZWx5IHRvXFxuICA4NzpcXHRcXHQgKiBhdm9pZCBkb3VibGUgZnJlZVxcbiAgODg6XFx0XFx0ICovXFxuICA4OTpcXHRcXHRraG9fdGVzdF91bnByZXNlcnZlX2RhdGEoc3RhdGUpO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGVycjtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0ZXJyX2ZyZWVfaW5mbzpcXG4gIDkzOlxcdFxcdHZmcmVlKGZvbGlvc19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTIuNjI4ODg5NDAzWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTEwOTA4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS0hPIERhdGEgUHJlc2VydmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhYCBjYWxscyBga2hvX3ByZXNlcnZlX2ZvbGlvYCwgYnV0IG5vdCBga2hvX3ByZXNlcnZlX3BhZ2VgLiAgVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgd2h5IGBraG9fcHJlc2VydmVfcGFnZWAgZXhpc3RzIGF0IGFsbC4gSXQgYXBwZWFycyBjb21wbGV0ZWx5IHVudXNlZCwgdW5sZXNzLi4uIHdhaXQsIHdoYXQgYWJvdXQgYGtob19wcmVzZXJ2ZV9wYWdlc2A/IEkgcmVtZW1iZXIgaXQgYmVpbmcgdXNlZCB3aXRoaW4gYGtob19wcmVzZXJ2ZV92bWFsbG9jYC5cblxuTm93LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGBraG9fcHJlc2VydmVfdm1hbGxvY2AgKmlzKiBjYWxsZWQgYnkgYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgLiBBbmQgYGtob190ZXN0X3NhdmUoKWAgaXMgY2FsbGVkIGF0IG1vZHVsZSBsb2FkIGlmIEtITyBpcyBub3QgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIGEgbm9ybWFsIGJvb3QuIFNvIGBraG9fcHJlc2VydmVfcGFnZXNgIGlzIHJlYWNoYWJsZSB2aWEgYGtob190ZXN0X3NhdmUoKWAgYXMgbG9uZyBhcyBLSE8gaXMgZGlzYWJsZWQuXG5cbkhvbGQgb24sIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBmYWxzZSwgYGtob190ZXN0X2luaXQoKWAgc2hvdWxkIHJldHVybiAwLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBga2hvX3Rlc3RfaW5pdCgpYC5cblxuYGBgY1xuc3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxue1xuXHRwaHlzX2FkZHJfdCBmZHRfcGh5cztcblx0aW50IGVycjtcblxuXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG5cdFx0cmV0dXJuIDA7XG5cblx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcdTAwMjZmZHRfcGh5cywgTlVMTCk7XG5cdGlmICghZXJyKSB7XG5cdFx0ZXJyID0ga2hvX3Rlc3RfcmVzdG9yZShmZHRfcGh5cyk7XG5cdFx0aWYgKGVycilcblx0XHRcdHByX2VycihcIktITyByZXN0b3JlIGZhaWxlZFxcblwiKTtcblx0XHRlbHNlXG5cdFx0XHRwcl9pbmZvKFwiS0hPIHJlc3RvcmUgc3VjY2VlZGVkXFxuXCIpO1xuXG5cdFx0cmV0dXJuIGVycjtcblx0fVxuXG5cdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gcmV0cmlldmUgJXMgRkRUOiAlZFxcblwiLCBLSE9fVEVTVF9GRFQsIGVycik7XG5cdFx0cmV0dXJuIGVycjtcblx0fVxuXG5cdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG59XG5gYGBcblxuT2theSwgeWVzLCBJIHdhcyByaWdodC4gSWYgYCFraG9faXNfZW5hYmxlZCgpYCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4gU28sIG5vdyBpdCBpcyBjbGVhcjogYGtob190ZXN0X3NhdmUoKWAgaXMgKm9ubHkqIGNhbGxlZCBpZiBga2hvX2lzX2VuYWJsZWQoKWAgaXMgVFJVRSwgKmFuZCogYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCByZXR1cm5zIGAtRU5PRU5UYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25kaXRpb24gaGVyZS5cblxuU28sIHdoZW4gKmlzKiBga2hvX2lzX2VuYWJsZWQoKWAgdHJ1ZT8gQWgsIGl0J3MgdHJ1ZSBpZiBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYCBpcyBzZXQsIG9yIGlmIHRoZSB1c2VyIHNwZWNpZmljYWxseSBwYXNzZXMgYGtobz1vbmAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEdvdCBpdC4gU28sIGlmIEtITyBpcyBzdXBwb3NlZCB0byBiZSBlbmFibGVkLCBidXQgd2UgYXJlIGRvaW5nIGEgbm9ybWFsIGJvb3QgKGkuZS4sIHRoZXJlIGlzIG5vIEtITyBkYXRhKSwgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCAqd2lsbCogcmV0dXJuIGAtRU5PRU5UYC4gQW5kIHRoZW4sIGBraG9fdGVzdF9zYXZlKClgICp3aWxsKiBiZSBjYWxsZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjIzLjczOTgwMDQyNFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NDI3Mjk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmV0cmlldmVfc3VidHJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzk9dm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQwOmludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cywgc2l6ZV90ICpzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYikgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExNi1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTE3OnN0YXRpYyBpbmxpbmUgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLFxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTgtXFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCAqc2l6ZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTQzNT1FWFBPUlRfU1lNQk9MX0dQTChpc19raG9fYm9vdCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0MzctLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNDM4OiAqIGtob19yZXRyaWV2ZV9zdWJ0cmVlIC0gcmV0cmlldmUgYSBwcmVzZXJ2ZWQgc3ViIGJsb2IgYnkgaXRzIG5hbWUuXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDM5LSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgc3ViIGJsb2IgcGFzc2VkIHRvIGtob19hZGRfc3VidHJlZSgpLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDQ3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTQ0ODppbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsIHNpemVfdCAqc2l6ZSlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDkte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDgxLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0ODI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JldHJpZXZlX3N1YnRyZWUpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQ4My1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTUzMD1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2luX2tleGVjX21ldGFkYXRhKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE1MzYtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNTM3OlxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19NRVRBREFUQV9OT0RFX05BTUUsIFxcdTAwMjZtZXRhZGF0YV9waHlzLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTUzOC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2YmxvYl9zaXplKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTgtXFx0LyogUmV0cmlldmUgTFVPIHN0YXRlIGZyb20gS0hPLiAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM6OTk6XFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTFVPX0tIT19FTlRSWV9OQU1FLCBcXHUwMDI2bHVvX3Nlcl9waHlzLCBcXHUwMDI2bGVuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEwMC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMzIxLVxcbmxpYi90ZXN0X2toby5jOjMyMjpcXHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFxcdTAwMjZmZHRfcGh5cywgTlVMTCk7XFxubGliL3Rlc3Rfa2hvLmMtMzIzLVxcdGlmICghZXJyKSB7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTI2MzA9c3RhdGljIHZvaWQgKl9faW5pdCByZXNlcnZlX21lbV9raG9fcmV0cmlldmVfZmR0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI2MzgtXFxubW0vbWVtYmxvY2suYzoyNjM5OlxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKE1FTUJMT0NLX0tIT19GRFQsIFxcdTAwMjZmZHRfcGh5cywgTlVMTCk7XFxubW0vbWVtYmxvY2suYy0yNjQwLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MjUuOTM0MDc5ODFaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyNjUxMjcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBga2hvX2lzX2VuYWJsZWQoKWAgaXMgb24gYW5kIGBraG9fcmV0cmlldmVfc3VidHJlZWAgZmFpbHMgd2l0aCBhbiBgLUVOT0VOVGAgZXJyb3IsIHRoZW4gYGtob190ZXN0X3NhdmUoKWAgZ2V0cyBjYWxsZWQuIGBraG9fdGVzdF9zYXZlKClgIHNlZW1zIHRvIHRyaWdnZXIgYSBjYXNjYWRlIG9mIGZ1bmN0aW9uIGNhbGxzOiBga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YSgpYCwgYGtob190ZXN0X3ByZXNlcnZlKClgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKClgLiBUaGVuIHRoaXMgbGVhZHMgdG8gYGtob19wcmVzZXJ2ZV92bWFsbG9jKClgIGFuZCBga2hvX3ByZXNlcnZlX2ZvbGlvKClgLiBFdmVudHVhbGx5LCBga2hvX3ByZXNlcnZlX3ZtYWxsb2MoKWAgY2FsbHMgYGtob19wcmVzZXJ2ZV9wYWdlcygpYC4gU28sIHVuZGVyIHRoZSByaWdodCBjb25maWd1cmF0aW9uIChgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUPXlgIGFuZCBgQ09ORklHX1RFU1RfS0VYRUNfSEFORE9WRVI9eWApLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCBzaG91bGQgYmUgcmVhY2hhYmxlIGR1cmluZyBib290LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSEgSSdtIHNlZWluZyBga2hvX3ByZXNlcnZlX3BhZ2VgIChzaW5ndWxhcikgYWRkZWQgaW4gdGhlIHBhdGNoLiBBbmQgdGhvc2UgZnVuY3Rpb25zLCBga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFyZSBjb21wbGV0ZWx5IHVudXNlZCBpbiB0aGUgY3VycmVudCB0cmVlISBUaGF0J3Mgc3RyYW5nZS4gVGhlIG9ubHkgKnVzYWJsZSogY2hhbmdlcyBpbiB0aGUgcGF0Y2ggc2VlbSB0byBiZSB0aGUgcmVmYWN0b3JpbmcsIHdoaWNoIHV0aWxpemVzIGBfX2tob19yZXN0b3JlX3BhZ2VgIHdpdGhpbiBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgLiBQbHVzLCB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiBgY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKWAgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuXG5cbkhvd2V2ZXIsIHRoZSBiaWdnZXIgaXNzdWUgaXMgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIGFyZSAqb25seSogY2FsbGVkIGR1cmluZyB0aGUgcmVzdG9yZSBwaGFzZS4gVGhlIHJlc3RvcmUgcGhhc2UgaXMgKm9ubHkqIHRyaWdnZXJlZCBpZiBga2hvX3JldHJpZXZlX3N1YnRyZWVgIHN1Y2NlZWRzLiAgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCBjYW4gb25seSBzdWNjZWVkIGlmIHRoZXJlJ3MgS0hPIGRhdGEgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwuIEFuZCBzeXprYWxsZXIsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGRvZXNuJ3QgYWN0dWFsbHkgcGVyZm9ybSBrZXhlYyB3aXRoIEtITyBkYXRhLiBJdCBzdGFydHMgd2l0aCBhIGZyZXNoIFZNIGltYWdlLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgcmVzdG9yZSBwaGFzZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCFcblxuSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHBvc3NpYmx5IHRyaWdnZXIgYGtob19yZXN0b3JlX2ZvbGlvYCBmcm9tIHVzZXIgc3BhY2Ugc29tZWhvdz8gTWF5YmUgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjMzLjY2MDU5NjA4N1oiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MTQyMTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQxNi1cXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL21lbWZkX2x1by5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU2MS1cXG5tbS9tZW1mZF9sdW8uYzo1NjI6XFx0XFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXFx1MDAzZW5yX2ZvbGlvcyk7XFxubW0vbWVtZmRfbHVvLmMtNTYzLVxcdFxcdHZmcmVlKGZvbGlvc19zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDozNi4xNTIwMjU3NzVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1ODExMjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVW5yZWFjaGFibGUgQ29kZSBQYXRoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgYnVyaWVkIHByZXR0eSBkZWVwLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9uczogYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAsIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgLCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLCBhbmQgZmluYWxseSwgaW5pdGlhdGVkIGJ5IGEgY2FsbCB0byBgbHVvX29wZW5gIG9uIGAvZGV2L2xpdmV1cGRhdGVgLiAgVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpbW1lZGlhdGVseSByZXR1cm5zIGlmIGEgZmxhZywgYHNoLVx1MDAzZWFjdGl2ZWAsIGlzIGZhbHNlLlxuXG5UaGlzIGBzaC1cdTAwM2VhY3RpdmVgIGZsYWcgaXMgb25seSBzZXQgaW4gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCwgd2hpY2gsIEkgbm93IHJlY2FsbCwgaXMgY2FsbGVkIGR1cmluZyBib290IHdpdGggYHNlc3Npb25zX3BhYC4gSWYsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhlcmUgaXMgKm5vKiBLSE8gZGF0YSwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLCBhbmQgdGhhdCBjcnVjaWFsIGBzaC1cdTAwM2VhY3RpdmVgIGZsYWcgc3RheXMgZmFsc2UuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGRlc2VyaWFsaXphdGlvbiBwcm9jZXNzIGlzIHNob3J0LWNpcmN1aXRlZCDigJMgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBkb2VzIG5vdGhpbmcuIENvbnNlcXVlbnRseSwgYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgKm5ldmVyKiBjYWxsZWQsIGFuZCB0aGVyZWZvcmUgYWxsIHRoZSBmdW5jdGlvbnMgKmRvd25zdHJlYW0qIGZyb20gaXQsIGluY2x1ZGluZyBga2hvX3Jlc3RvcmVfZm9saW9gLCBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLCBhcmUgYWxzbyBpbmFjY2Vzc2libGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBpbnRyb2R1Y2U6XG4xLiAgVW51c2VkIGZ1bmN0aW9uczogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLlxuMi4gIFJlZmFjdG9yaW5nIHRoYXQsIGFnYWluLCBkZXBlbmRzIG9uIHRoYXQgaW5hY2Nlc3NpYmxlIGRlc2VyaWFsaXphdGlvbiBwYXRoLlxuMy4gIFNvbWUgYGNsZWFyX3BhZ2VfdGFnX3JlZmAgY2FsbHMgd2l0aGluIHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYywgYWxzbyB1bnJlYWNoYWJsZS5cblxuR2l2ZW4gdGhhdCBhIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudCwgd2hpY2ggZG9lc24ndCBib290IHdpdGggS0hPIGRhdGEsIHdpbGwgbmV2ZXIgcmVhY2ggYW55IG9mIHRoZXNlIG1vZGlmaWVkIG9yIGFkZGVkIGZ1bmN0aW9ucywgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGZ1enppbmcgdGhpcyBwYXRjaCBhcyBpdCBzdGFuZHMuXG5cbkhvbGQgb24sIHRob3VnaC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY2xldmVyIHRyaWNrcy4gIENhbiBpdCB3cml0ZSBzb21ldGhpbmcgdG8gYC9zeXMva2VybmVsL2tleGVjX2hhbmRvdmVyYCBvciBzaW1pbGFyIHRvIGluamVjdCBLSE8gZGF0YSBpbnRvIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG1ha2luZyB0aGlzIGNvZGUgcGF0aCBhY2Nlc3NpYmxlPyAgSSBzaG91bGQgY2hlY2sgdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSB0byBpbmplY3QgdGhhdCBkYXRhIGRpcmVjdGx5LiBJZiB0aGVyZSBpcywgdGhlbiB3ZSAqbWlnaHQqIGhhdmUgYSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjQ0LjMxMDE0MTEzNloiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODgzMzg1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjQ2LjI1ODk4NjA2N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcyNDEyODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIG9yIHNlc3Npb24tcmVsYXRlZCBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdgKipcblxuQWxyaWdodCwgdGhhdCdzIHdoZXJlIHdlJ3JlIHN0YXJ0aW5nLiBcIkxldCdzIGNoZWNrIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AuXCIgVGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYywgbGlrZWx5IGNydWNpYWwsIHBpZWNlIG9mIGNvZGUgcmVsYXRlZCB0byBpbmNvbWluZyBzZXNzaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSdtIHByb2JhYmx5IGZhY2luZyBhIHByb2JsZW0gd2l0aCBpbmNvbWluZyBzZXNzaW9ucywgYW5kIHRoaXMgaXMgd2hlcmUgSSd2ZSBkZWNpZGVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYSBjb25uZWN0aW9uIHByb2JsZW0sIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUsIG9yIGRhdGEgaGFuZGxpbmcgaXNzdWUuIEtub3dpbmcgdGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9mIGFuIGluY29taW5nIGNvbW11bmljYXRpb24gc2Vzc2lvbiwgYSBwaXZvdGFsIHBvaW50IHdoZXJlIHRoaW5ncyBjYW4gZ28gcmlnaHQgb3IsIG1vcmUgb2Z0ZW4gaW4gbXkgbGluZSBvZiB3b3JrLCB0ZXJyaWJseSB3cm9uZy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcmVjYWxsIG9yIGxvY2F0ZSB0aGUgY29kZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgc3RhcnQgbWVudGFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgbG9naWNhbCBmbGF3cywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3Igb2J2aW91cyBlcnJvcnMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg4OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjUxLjEzMTQwMzkxOVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjYwMjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jPTg0PXN0YXRpYyBpbnQgX19pbml0IGx1b19lYXJseV9zdGFydHVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjEyNTpcXHRlcnIgPSBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyhsdW9fc2VyLVxcdTAwM2VzZXNzaW9uc19wYSk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0xMjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oPTgyPXZvaWQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX291dGdvaW5nKHU2NCAqc2Vzc2lvbnNfcGEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjgzOmludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04NC1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01Mjk9dm9pZCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfb3V0Z29pbmcodTY0ICpzZXNzaW9uc19wYSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM0LVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTM1OmludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6NTMuMTU0MDEzNjQ1WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzc4NjcyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMuLi4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgbHVvX2Vhcmx5X3N0YXJ0dXBgLiBSaWdodCwgYW5kIGBsdW9fZWFybHlfc3RhcnR1cGAgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1lYW5zIGl0J3MgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gdGhlIEtITyBkYXRhLCBzcGVjaWZpY2FsbHkgYGx1b19zZXJfcGh5c2AsIHdoaWNoIGl0IGdldHMgdmlhIGBraG9fcmV0cmlldmVfc3VidHJlZWAuIFRoaXMgZGF0YSBpcyBwYXNzZWQgZnJvbSB0aGUgYm9vdGxvYWRlciBvciBwb3RlbnRpYWxseSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGVyZSdzIG5vIHdheSB0byBpbmplY3QgYW55dGhpbmcgZnJvbSB1c2Vyc3BhY2UgYWZ0ZXIgYm9vdCDigJMgaXQncyBhbGwgcHJlLWJvb3QgY29uZmlndXJhdGlvbi5cblxuTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG5lZWRzIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJICptdXN0KiBleGFtaW5lIHRoZSBjb2RlIGl0c2VsZiwgbm90IHJlbHkgb24gd2hhdCBJICp0aGluayogSSBrbm93LiBGaW5lLiBMZXQncyBsb29rIGludG8gdGhpcyBga2hvX3ByZXNlcnZlX3BhZ2VgIGZ1bmN0aW9uLiBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIHRvIGNvbnNpZGVyIGl0LCBzbyBJIGNoZWNrZWQuIEluaXRpYWxseSwgSSBmb3VuZCBpdCdzICpub3QqIHVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBjaGFuZ2VzIGFwcGVhciBsaW1pdGVkIHRvIGFkZGluZyB1bnVzZWQgZnVuY3Rpb25zIGFuZCByZWZhY3RvcmluZyB1bnJlYWNoYWJsZSBjb2RlLiBTbywgb24gdGhlIHN1cmZhY2UsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuXG5cbkhvd2V2ZXIsIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBraG9fcHJlc2VydmVfcGFnZWAgaXNuJ3QgbHVya2luZyBpbiBzb21lIG1hY3JvIGRlZmluaXRpb24gb3Igc29tZXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbWFrZSBpdCByZWxldmFudC4gVGhpcyBpcyBhIHRob3JvdWdoIHJldmlldywgYWZ0ZXIgYWxsLCBhbmQgSSBuZWVkIHRvIGJlIGNlcnRhaW4uIEknbGwgbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gaGlkZGVuIHVzYWdlIGJlZm9yZSBJIHJlYWNoIGEgZmluYWwgY29uY2x1c2lvbi4gQWZ0ZXIgbXkgY2hlY2ssIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMTowMC41MzE4ODcyMDRaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjM3NzcwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NjI9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3MS0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjEtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM0LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0Ni19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk5LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAwODppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjItXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjM6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzOTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0Ny0gKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgQHBhZ2UgYW5kIEBucl9wYWdlcyBhcyB0aGUgY29ycmVzcG9uZGluZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTQyPWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTE2ODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXFx1MDAzZXBhZ2VzW2ldLCBucl9jb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTM3LVxcbm1tL21lbWJsb2NrLmM6MjUzODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xcbm1tL21lbWJsb2NrLmMtMjUzOS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTU3PXN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVfa2hvX2ZkdCh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTY5LVxcdGZkdCA9IHBhZ2VfdG9fdmlydChmZHRfcGFnZSk7XFxubW0vbWVtYmxvY2suYzoyNTcwOlxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XFxubW0vbWVtYmxvY2suYy0yNTcxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjExOjAyLjQ1NTY3Mjk5NloiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg5OTA4NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVudXNlZCBDb2RlIGFuZCBXb3J0aEZ1enppbmc9RmFsc2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIGl0J3MgY29tcGxldGVseSB1bnVzZWQuIERpZ2dpbmcgZGVlcGVyLCBpdCdzIGNsZWFyIHRoZSBvbmx5IGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGNvbnNpc3Qgb2YgdW51c2VkIGZ1bmN0aW9ucyBhbmQgY29kZSB0aGF0J3MgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IGFueSBLSE8gZGF0YSBpbiBwbGF5LiBDb25zaWRlcmluZyB0aGUgZWZmb3J0IHRvIHZhbHVlIHJhdGlvLCBhbmQga25vd2luZyB0aGF0IEknbSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGVzc2VudGlhbGx5IGRvZXMgbm90aGluZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhlcmUncyBubyB2YWx1ZSBpbiBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgcGFydGljdWxhciBlbGVtZW50LCBhdCBsZWFzdCBub3QgaW4gaXRzIHByZXNlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjUzLCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjExOjA4LjY0NTU4NDU1OFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8t747[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 17:04:57 +0000 UTC FinishedAt: 2026-08-03 17:11:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjOGQ2NmU4YzFjNzRkM2QwODY0MGViMGE4ZmQ3N2VkNmI3Mjg4ODVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowNjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbmluZGV4IDg5NjhjNTZkMmQ3M2UuLjZlMmM3NWIxNjIwOWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxuQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XG4gXG4gaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4mIzQzO3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG5AQCAtMzAsNiAmIzQzOzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZyZWUodm9pZCAqbWVtKTtcbiB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbiBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4gaW50IGtob19hZGRfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCB2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSk7XG5AQCAtNjUsNiAmIzQzOzY4LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWIuLmRkNDFkMzI0YzIxM2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtMzU3LDYgJiM0MzszNTcsMjQgQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTtcbiBcbiYjNDM7LyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cbiYjNDM7c3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuJiM0MztcbiYjNDM7XHQvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqL1xuJiM0MztcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuJiM0MztcdC8qIENsZWFyIGhlYWQgcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4mIzQzO1x0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuJiM0MztcbiYjNDM7XHQvKiBGb3IgaGlnaC1vcmRlciBibG9ja3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuJiM0MztcdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApO1xuJiM0MztcdFx0LyogQ2xlYXIgZWFjaCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbiYjNDM7XHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXG4gc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4ge1xuQEAgLTM2OSwyNSAmIzQzOzM4NywxNSBAQCBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiBcbiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbi1cdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbi1cbi1cdC8qIEZvciBoaWdoZXIgb3JkZXIgZm9saW9zLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApO1xuJiM0MztcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4gXG4gXHRpZiAob3JkZXIgXHUwMDNlIDApXG4gXHRcdHByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKFBIWVNfUEZOKHBoeXMpKTtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XG4gXHR1bmlvbiBraG9fcGFnZV9pbmZvIGluZm87XG4gXG4gXHRpZiAoIXBhZ2UpXG5AQCAtNDAxLDE3ICYjNDM7NDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuIFx0ICovXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIGluZm8ub3JkZXIpO1xuIFxuIFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cbiBcdHBhZ2UtXHUwMDNlcHJpdmF0ZSA9IDA7XG4mIzQzO1x0aWYgKG9yZGVyKVxuJiM0MztcdFx0Km9yZGVyID0gaW5mby5vcmRlcjtcbiBcbi1cdGlmIChpc19mb2xpbylcbi1cdFx0a2hvX2luaXRfZm9saW8ocGFnZSwgaW5mby5vcmRlcik7XG4tXHRlbHNlXG4tXHRcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbiYjNDM7XHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4tXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbiBcbkBAIC00MjMsMTIgJiM0Mzs0MjgsNDEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4gICovXG4gc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuIHtcbi1cdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShwaHlzLCB0cnVlKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0a2hvX2luaXRfZm9saW8ocGFnZSwgb3JkZXIpO1xuIFxuLVx0cmV0dXJuIHBhZ2UgPyBwYWdlX2ZvbGlvKHBhZ2UpIDogTlVMTDtcbiYjNDM7XHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICoga2hvX3Jlc3RvcmVfcGFnZSAtIHJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG4mIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIGhlYWQgcGFnZSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsIFx1MDAyNm9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xuJiM0MztcbiAvKipcbiAgKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG4gICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuXG5AQCAtNDQ4LDEwICYjNDM7NDgyLDEzIEBAIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPVxuIFx0XHRcdG1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFx1MDAyNmluZm9fb3JkZXIpO1xuIFxuIFx0XHRpZiAoIXBhZ2UpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0a2hvX2luaXRfcGFnZXMocGFnZSwgMVVMIFx1MDAzY1x1MDAzYyBpbmZvX29yZGVyKTtcbiBcdFx0cGZuICYjNDM7PSAxIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiBcdH1cbiBcbkBAIC04ODEsNiAmIzQzOzkxOCw1MSBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbiYjNDM7ICogYnVmZmVyKSBhcyBhIHNpbmdsZSB1bml0LiBJdCBtdXN0IGJlIHJlc3RvcmVkIHVzaW5nIGtob19yZXN0b3JlX3BhZ2UoKSB0b1xuJiM0MzsgKiBlbnN1cmUgdGhlIHRhaWwgcGFnZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB3aXRoIGEgemVybyByZWZjb3VudC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgYSBkcml2ZXIgbmVlZHMgdG8gc3BsaXQgYSBibG9jayB0aGF0IGhhcyBiZWVuIHByZXNlcnZlZCB3aXRoIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLFxuJiM0MzsgKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbiYjNDM7ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGtob19yYWRpeF9hZGRfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICoga2hvX3VucHJlc2VydmVfcGFnZSAtIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4mIzQzOyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnN0cnVjdHMgS0hPIHRvIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCBieVxuJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4mIzQzO1xuJiM0MztcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9wYWdlKTtcbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG5AQCAtOTE4LDcgJiM0MzsxMDAwLDggQEAgc3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMuXG4gICpcbiAgKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG4tICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwLlxuJiM0MzsgKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDBcbiYjNDM7ICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgQVBJcyAoYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWApIGZvciBLZXhlYyBIYW5kb3ZlciAoS0hPKSB3aGljaCBhcmUgY3VycmVudGx5IHVudXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHRyZWUuIEl0IGFsc28gcmVmYWN0b3JzIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2AgdG8gdXNlIGEgbmV3IGludGVybmFsIGhlbHBlciBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIG1vZGlmaWVzIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIHRvIGNsZWFyIHBhZ2UgdGFncyBmb3IgdGFpbCBwYWdlcy4gSG93ZXZlciwgYWxsIG9mIHRoZXNlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIG9ubHkgcmVhY2hhYmxlIGR1cmluZyB0aGUgS0hPIHJlc3RvcmUgcGhhc2UsIHdoaWNoIHN0cmljdGx5IHJlcXVpcmVzIHRoZSBrZXJuZWwgdG8gYmUgYm9vdGVkIHdpdGggS0hPIGRhdGEgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwuIFNpbmNlIHN5emthbGxlciBib290cyBmcm9tIGEgZnJlc2ggVk0gaW1hZ2Ugd2l0aG91dCBLSE8gZGF0YSwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA2OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oCmluZGV4IDg5NjhjNTZkMmQ3M2UuLjZlMmM3NWIxNjIwOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgKQEAgLTIyLDYgJiM0MzsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7CiAKIGludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKJiM0Mzt2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pOwpAQCAtMzAsNiAmIzQzOzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTsKIHZvaWQga2hvX3VucHJlc2VydmVfZnJlZSh2b2lkICptZW0pOwogdm9pZCBraG9fcmVzdG9yZV9mcmVlKHZvaWQgKm1lbSk7CiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpOwomIzQzO3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpOwogc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7CiBpbnQga2hvX2FkZF9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJsb2IsIHNpemVfdCBzaXplKTsKQEAgLTY1LDYgJiM0Mzs2OCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykKIAogc3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsCiAJCQkJICAgICAgIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKaW5kZXggNDgzNGE4MDk5ODVhYi4uZGQ0MWQzMjRjMjEzZCAxMDA2NDQKLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCkBAIC0zNTcsNiAmIzQzOzM1NywyNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmFkaXhfd2Fsa190cmVlKTsKIAomIzQzOy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovCiYjNDM7c3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDFVTCAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CiYjNDM7CS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwomIzQzOwkvKiBDbGVhciBoZWFkIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqLwomIzQzOwljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7CiYjNDM7CiYjNDM7CS8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCiYjNDM7CWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsJCS8qIENsZWFyIGVhY2ggcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovCiYjNDM7CQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgMC1vcmRlciBwYWdlcy4gKi8KIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogewpAQCAtMzY5LDI1ICYjNDM7Mzg3LDE1IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQogCiBzdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSAmbHQ7Jmx0OyBvcmRlcik7Ci0KLQkvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqLwotCXNldF9wYWdlX2NvdW50KHBhZ2UsIDEpOwotCS8qIENsZWFyIGhlYWQgcGFnZSYjMzk7cyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovCi0JY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpOwotCi0JLyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqLwotCWZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykKLQkJc2V0X3BhZ2VfY291bnQocGFnZSAmIzQzOyBpLCAwKTsKJiM0MzsJa2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHBhZ2UsIG9yZGVyKTsKIAogCWlmIChvcmRlciAmZ3Q7IDApCiAJCXByZXBfY29tcG91bmRfcGFnZShwYWdlLCBvcmRlcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQomIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UoUEhZU19QRk4ocGh5cykpOwotCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7CiAJdW5pb24ga2hvX3BhZ2VfaW5mbyBpbmZvOwogCiAJaWYgKCFwYWdlKQpAQCAtNDAxLDE3ICYjNDM7NDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQogCSAqLwogCWlmIChXQVJOX09OX09OQ0UoaW5mby5tYWdpYyAhPSBLSE9fUEFHRV9NQUdJQykpCiAJCXJldHVybiBOVUxMOwotCW5yX3BhZ2VzID0gKDEgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKIAkvKiBDbGVhciBwcml2YXRlIHRvIG1ha2Ugc3VyZSBsYXRlciByZXN0b3JlcyBvbiB0aGlzIHBhZ2UgZXJyb3Igb3V0LiAqLwogCXBhZ2UtJmd0O3ByaXZhdGUgPSAwOwomIzQzOwlpZiAob3JkZXIpCiYjNDM7CQkqb3JkZXIgPSBpbmZvLm9yZGVyOwogCi0JaWYgKGlzX2ZvbGlvKQotCQlraG9faW5pdF9mb2xpbyhwYWdlLCBpbmZvLm9yZGVyKTsKLQllbHNlCi0JCWtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTsKJiM0MzsJYWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCAxVUwgJmx0OyZsdDsgaW5mby5vcmRlcik7CiAKLQlhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTsKIAlyZXR1cm4gcGFnZTsKIH0KIApAQCAtNDIzLDEyICYjNDM7NDI4LDQxIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKQogICovCiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpCiB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKHBoeXMsIHRydWUpOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXI7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsICZhbXA7b3JkZXIpOwomIzQzOwomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJa2hvX2luaXRfZm9saW8ocGFnZSwgb3JkZXIpOwogCi0JcmV0dXJuIHBhZ2UgPyBwYWdlX2ZvbGlvKHBhZ2UpIDogTlVMTDsKJiM0MzsJcmV0dXJuIHBhZ2VfZm9saW8ocGFnZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7CiAKJiM0MzsvKioKJiM0MzsgKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay4KJiM0MzsgKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS4KJiM0MzsgKgomIzQzOyAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGgKJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgaGVhZCBwYWdlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCAmYW1wO29yZGVyKTsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTsKJiM0MzsKIC8qKgogICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLgogICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuCkBAIC00NDgsMTAgJiM0Mzs0ODIsMTMgQEAgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiAJd2hpbGUgKHBmbiAmbHQ7IGVuZF9wZm4pIHsKIAkJY29uc3QgdW5zaWduZWQgaW50IG9yZGVyID0KIAkJCW1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksICZhbXA7aW5mb19vcmRlcik7CiAKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CQlraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgJmx0OyZsdDsgaW5mb19vcmRlcik7CiAJCXBmbiAmIzQzOz0gMSAmbHQ7Jmx0OyBvcmRlcjsKIAl9CiAKQEAgLTg4MSw2ICYjNDM7OTE4LDUxIEBAIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTsKIAomIzQzOy8qKgomIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suCiYjNDM7ICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suCiYjNDM7ICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIEluc3RydWN0cyBLSE8gdG8gcHJlc2VydmUgYSBoaWdoLW9yZGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiAobGlrZSBhIERNQQomIzQzOyAqIGJ1ZmZlcikgYXMgYSBzaW5nbGUgdW5pdC4gSXQgbXVzdCBiZSByZXN0b3JlZCB1c2luZyBraG9fcmVzdG9yZV9wYWdlKCkgdG8KJiM0MzsgKiBlbnN1cmUgdGhlIHRhaWwgcGFnZXMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB3aXRoIGEgemVybyByZWZjb3VudC4KJiM0MzsgKgomIzQzOyAqIElmIGEgZHJpdmVyIG5lZWRzIHRvIHNwbGl0IGEgYmxvY2sgdGhhdCBoYXMgYmVlbiBwcmVzZXJ2ZWQgd2l0aCB0aGlzCiYjNDM7ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLAomIzQzOyAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZwomIzQzOyAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gJmFtcDtraG9fb3V0LnJhZGl4X3RyZWU7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4ocGFnZSk7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBraG9fdW5wcmVzZXJ2ZV9wYWdlIC0gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay4KJiM0MzsgKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay4KJiM0MzsgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBhbGxvY2F0aW9uLgomIzQzOyAqCiYjNDM7ICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnkKJiM0MzsgKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSA9ICZhbXA7a2hvX291dC5yYWRpeF90cmVlOwomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwomIzQzOwomIzQzOwlraG9fcmFkaXhfZGVsX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpOwomIzQzOwogc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKQEAgLTkxOCw3ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLAogICogQG5yX3BhZ2VzOiBudW1iZXIgb2YgcGFnZXMuCiAgKgogICogUHJlc2VydmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcy4gTXVzdCBiZSByZXN0b3JlZCB1c2luZwotICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwLgomIzQzOyAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMAomIzQzOyAqIHdpdGggZWFjaCBwYWdlIGhhdmluZyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxIChzcGxpdCkuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLCBhbGwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gTmF0dXJhbGx5LCBga2V4ZWNfaGFuZG92ZXIuaGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhlc2UgYWRkaXRpb25zLiBUaGUgY29yZSB0aGVtZSBoZXJlIGlzICYjMzQ7a2V4ZWMgaGFuZG92ZXImIzM0OyBvciBLSE8sIGFuZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSYjMzk7bSBndWVzc2luZyB0aGlzIHBhdGNoIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYW5hZ2luZyB0aG9zZSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2tzIGR1cmluZyB0aGUgaGFuZG92ZXIgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gZW5hYmxlZCBpbiBvdXIgY3VycmVudCBjb25maWd1cmF0aW9uPyYjMzQ7IEdvdHRhIGJlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5ICp1c2luZyogdGhpcyBiZWZvcmUgSSBnbyB0b28gZGVlcC4gSSYjMzk7bGwgZ2V0IGBncmVwcGVyYCBmaXJlZCB1cCBhbmQgc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXRoZXIgdGhpcyBLSE8gZmVhdHVyZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0tFWEVDX0hBTkRPVkVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdD0xND1QcmVyZXF1aXNpdGVzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE2LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjE3OktITyBpcyBhdmFpbGFibGUgd2hlbiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggYGBDT05GSUdfS0VYRUNfSEFORE9WRVJgYFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE4LXNldCB0byB5LiBFdmVyeSBLSE8gcHJvZHVjZXIgbWF5IGhhdmUgaXRzIG93biBjb25maWcgb3B0aW9uIHRoYXQgeW91XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0PTg3PVRoZXNlIGRlYnVnZnMgaW50ZXJmYWNlcyBhcmUgYXZhaWxhYmxlIHdoZW4gdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6ODg6YGBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU2BgIGVuYWJsZWQuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QtODktXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzY4PXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzc0LVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzc1Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzYtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9Mjc0PXN0YXRpYyB2b2lkIHNldHVwX2tobyhjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4MC1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzoyODE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0yODItXHRcdHJldHVybjtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9MzAxPXNldHVwX2Jvb3RfcGFyYW1ldGVycyhzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXG4tLVxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTM5MC1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzozOTE6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkyLVx0XHQvKiBTZXR1cCBzcGFjZSB0byBzdG9yZSBwcmVzZXJ2YXRpb24gbWV0YWRhdGEgKi9cbi0tXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9NDc1PXN0YXRpYyB2b2lkICpiekltYWdlNjRfbG9hZChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgY2hhciAqa2VybmVsLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy01ODEtXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM6NTgyOlx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSlcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy01ODMtXHRcdGtidWYuYnVmc3ogJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgJiM0Mztcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz00NTY9c3RhdGljIHZvaWQgX19pbml0IGFkZF9raG8odTY0IHBoeXNfYWRkciwgdTMyIGRhdGFfbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2MS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jOjQ2MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKSB7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjM6XHRcdHByX3dhcm4oXCYjMzQ7UGFzc2VkIEtITyBkYXRhLCBidXQgQ09ORklHX0tFWEVDX0hBTkRPVkVSIG5vdCBzZXQuIElnbm9yaW5nLlxcblwmIzM0Oyk7XG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy00NjQtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTkyOD1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9jaGVja19raG8odm9pZClcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTkzMi1cbmRyaXZlcnMvb2YvZmR0LmM6OTMzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikgfHwgKGxvbmcpbm9kZSBcdTAwM2MgMClcbmRyaXZlcnMvb2YvZmR0LmMtOTM0LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9vZi9rZXhlYy5jPTI1OD1zdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZSlcbi0tXG5kcml2ZXJzL29mL2tleGVjLmMtMjYwLVx0aW50IHJldCA9IDA7XG5kcml2ZXJzL29mL2tleGVjLmM6MjYxOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yNjItXHRwaHlzX2FkZHJfdCBmZHRfbWVtID0gMDtcbi0tXG5kcml2ZXJzL29mL2tleGVjLmMtMjkwLVxuZHJpdmVycy9vZi9rZXhlYy5jOjI5MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG5kcml2ZXJzL29mL2tleGVjLmMtMjkyLVx0cmV0dXJuIHJldDtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTc9c3RydWN0IHBhZ2U7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTgtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTk6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTIwLWJvb2wga2hvX2lzX2VuYWJsZWQodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI4LX1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjk6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEzMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9Mzc9dHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTM5LVxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oOjQwOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC00MS1cbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9NDg9aW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC01MC1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaDo1MTojZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTUyLVxuLS1cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaD02Mj1zdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNjctXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg6Njg6I2VuZGlmIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC02OS1cbi0tXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaD00Mz1zdHJ1Y3Qga2V4ZWNfYnVmO1xua2VybmVsL2tleGVjX2ludGVybmFsLmgtNDQtXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDo0NTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC00Ni1pbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxuLS1cbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oPTU2PXN0YXRpYyBpbmxpbmUgaW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkgeyByZXR1cm4gMDsgfVxua2VybmVsL2tleGVjX2ludGVybmFsLmg6NTc6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xua2VybmVsL2tleGVjX2ludGVybmFsLmgtNTgtI2VuZGlmIC8qIExJTlVYX0tFWEVDX0lOVEVSTkFMX0ggKi9cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XHRcdFx0XHRcdFx0XHRcdFxcXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjEwOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUilcdFx0JiM0Mzs9IGtleGVjX2hhbmRvdmVyLm9cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcdCYjNDM7PSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMjpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGUylcdCYjNDM7PSBrZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLm9cbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlLTEzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NTY9c3RhdGljX2Fzc2VydChzaXplb2YodW5pb24ga2hvX3BhZ2VfaW5mbykgPT0gc2l6ZW9mKCgoc3RydWN0IHBhZ2UgKikwKS1cdTAwM2Vwcml2YXRlKSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTU3LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo1ODpzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz03MDg9c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5Ny0gKiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvQG5hbWVgYCB3aGVuIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Nzk4OiAqIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5OS0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtOC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6OTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaD0yMz1leHRlcm4gdW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjI1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC0yNi1pbnQga2hvX2RlYnVnZnNfaW5pdCh2b2lkKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZyxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDEtXHRcdFx0XHRcdCAgIHZvaWQgKmJsb2IpIHsgfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo0MjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlMgKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDMtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjQ0OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNDUtYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQ3PXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtNTAtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo1MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTUyLVxuLS1cbm1tL21lbWJsb2NrLmMtMjEtXG5tbS9tZW1ibG9jay5jOjIyOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcbm1tL21lbWJsb2NrLmMtMjMtI2luY2x1ZGUgXHUwMDNjbGludXgvbGliZmR0LmhcdTAwM2Vcbi0tXG5tbS9tZW1ibG9jay5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2toby9hYmkvbWVtYmxvY2suaFx1MDAzZVxubW0vbWVtYmxvY2suYzoyNjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXG5tbS9tZW1ibG9jay5jLTI3LVxuLS1cbm1tL21lbWJsb2NrLmM9MjUxNT1ib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc19raG9fc2NyYXRjaF9tZW1vcnkocGh5c19hZGRyX3QgYWRkcilcbi0tXG5tbS9tZW1ibG9jay5jLTI1MjUtXG5tbS9tZW1ibG9jay5jOjI1MjY6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxubW0vbWVtYmxvY2suYy0yNTI3LVxuLS1cbm1tL21lbWJsb2NrLmM9MjcwOD1zdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxuLS1cbm1tL21lbWJsb2NrLmMtMjcxMi19XG5tbS9tZW1ibG9jay5jOjI3MTM6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xubW0vbWVtYmxvY2suYy0yNzE0LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g9NjA9Q09ORklHX0JMS19ERVZfSU5JVFJEPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjE6Q09ORklHX0tFWEVDX0hBTkRPVkVSPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjI6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjM6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlM9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaC02NC1DT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUj15XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc9Mj1DT05GSUdfS0VYRUNfRklMRT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzozOkNPTkZJR19LRVhFQ19IQU5ET1ZFUj15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo0OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo1OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnOjY6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHPXlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnLTctQ09ORklHX0xJVkVVUERBVEU9eVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzODAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRocmVlIG5ldyBmdW5jdGlvbnM6IGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhleSYjMzk7cmUgYmVpbmcgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUExgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlc2UgYXJlIGludGVuZGVkIGZvciB1c2UgYnkgR1BMLWxpY2Vuc2VkIGtlcm5lbCBtb2R1bGVzLiBBbmQgdGhleSYjMzk7cmUgcGFydCBvZiB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgZmVhdHVyZSwgd2hpY2ggaXMgb25seSBlbmFibGVkIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHNldC4gUmlnaHQsIEtITyBpcyBhbGwgYWJvdXQgcHJlc2VydmluZyBtZW1vcnkgYWNyb3NzIGEgYGtleGVjYCBjYWxsLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGhhbmRsaW5nIGhpZ2gtb3JkZXIgcGFnZXMuIFRoYXQgbWFrZXMgc2Vuc2UsIGFzIHRoZXNlIGFyZSBtb3JlIGxpa2VseSB0byBnZXQgZnJhZ21lbnRlZCBhbmQgbG9zdCBkdXJpbmcgYSBoYW5kb3Zlci4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lczogaXMgdGhlcmUgYW55IHdheSBmb3IgdGhpcyB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIHNwYWNlPyBJZiBzbywgdGhhdCBvcGVucyBhIGh1Z2UgY2FuIG9mIHdvcm1zIGluIHRlcm1zIG9mIHNlY3VyaXR5LiBLSE8gaXMgYSBrZXJuZWwtc2lkZSBmZWF0dXJlLCB1c2VkIGJ5IGtleGVjLCBhIG1lY2hhbmlzbSB0byBzd2l0Y2ggdG8gYSBuZXcga2VybmVsLiBTbyB0aGUgaW50ZW5kZWQgY29uc3VtZXJzIGFyZSBkZWZpbml0ZWx5IGRyaXZlcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pc20gaGVyZTogdGhlc2UgZnVuY3Rpb25zLCBhcyBBUElzLCBhcmUgZm9yIGRyaXZlcnMgdG8gcHJlc2VydmUgdGhlaXIgb3duIGhpZ2gtb3JkZXIgcGFnZXMgZHVyaW5nIGEgYGtleGVjYC4KCk5vdywgdGhlIHJlYWwgdmFsdWUgb2YgdGhlIHBhdGNoIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiAqd2hvKiBpcyB1c2luZyBpdC4gQXJlIHRoZXJlIGFueSBkcml2ZXJzIGFjdHVhbGx5IGxldmVyYWdpbmcgdGhlc2UgQVBJcz8gVGhhdOKAmXMgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtsbCB0ZWxsIG1lIGlmIHRoaXMgaXMgcHVyZWx5IHRoZW9yZXRpY2FsIG9yIGlmIHRoaXMgaGFzIGFueSBtZWFzdXJhYmxlIGVmZmVjdCBvbiBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBvciBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcHJlc2VydmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MjQ9dm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNTppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI3OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI4LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02Mj1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjMtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNjUte1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NzE6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NDE9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ3LSAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDQ4OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDcxLSAqIFJlc3RvcmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcyB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NzI6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMS0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTIyOiAqIGtob19wcmVzZXJ2ZV9wYWdlIC0gcHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzMi0gKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzQtICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTM3OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05Mzgte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTQ3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU0LSAqIEluc3RydWN0cyBLSE8gdG8gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIGJ5XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjUtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk2NjpzdGF0aWMgdW5zaWduZWQgaW50IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05ODM9c3RhdGljIHZvaWQgX19raG9fdW5wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXHR3aGlsZSAocGZuIFx1MDAzYyBlbmRfcGZuKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcdFx0b3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTktICogQHBhZ2U6IGZpcnN0IHBhZ2UgaW4gdGhlIGxpc3QuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDA4OmludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDkte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyMi1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAyMzpcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAyNC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDM5OkVYUE9SVF9TWU1CT0xfR1BMKGtob19wcmVzZXJ2ZV9wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDAtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ3LSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBAcGFnZSBhbmQgQG5yX3BhZ2VzIGFzIHRoZSBjb3JyZXNwb25kaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDg6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkgY2FsbC4gVW5wcmVzZXJ2aW5nIGFyYml0cmFyeSBzdWItcmFuZ2VzIG9mIGxhcmdlclxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwOTI9c3RhdGljIHN0cnVjdCBraG9fdm1hbGxvY19jaHVuayAqbmV3X3ZtYWxsb2NfY2h1bmsoc3RydWN0IGtob192bWFsbG9jX2NodW5rICpjdXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTAwLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTAxOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTAyLVx0aWYgKGVycilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTExNDI9aW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXHUwMDNlcGFnZXNbaV0sIG5yX2NvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjktXHRcdGlmIChlcnIpXG4tLVxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjUzNy1cbm1tL21lbWJsb2NrLmM6MjUzODpcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcbm1tL21lbWJsb2NrLmMtMjUzOS1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1NTc9c3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9raG9fZmR0KHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTY5LVx0ZmR0ID0gcGFnZV90b192aXJ0KGZkdF9wYWdlKTtcbm1tL21lbWJsb2NrLmM6MjU3MDpcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XG5tbS9tZW1ibG9jay5jLTI1NzEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDYzCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBoYXZlIGhlcmUuCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKQWxyaWdodCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgcG90ZW50aWFsIG5ldyBwcmltaXRpdmVzIGZvciBwYWdlIG1hbmFnZW1lbnQsIHBlcmhhcHMgc29tZSBmb3JtIG9mIGNhY2hpbmcgb3IgZGVsYXllZCBmcmVlaW5nPyBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBydW5uaW5nIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogYGtob19wcmVzZXJ2ZV9wYWdlYCBpc24mIzM5O3QgKmFjdHVhbGx5KiBiZWluZyB1c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgc291cmNlLCBhdCBsZWFzdCBub3QgeWV0LiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYGtob19wcmVzZXJ2ZV9wYWdlYCBvciBga2hvX3Jlc3RvcmVfcGFnZWAgYXJlbiYjMzk7dCBiZWluZyBjYWxsZWQgYnkgc29tZXRoaW5nIGVsc2UuIEJhY2sgdG8gdGhlIGBncmVwYCwgSSYjMzk7bGwgY2hlY2sgZm9yIGFueSBpbW1lZGlhdGUgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc3RvcmVfcGFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzQ9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNTpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo5OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0zODg9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTM5NS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Mzk2OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTM5Ny17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00Mjk9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDMxLVx0dW5zaWduZWQgaW50IG9yZGVyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MzI6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcdTAwMjZvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQzMy1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDMtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0NDogKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ1LSAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUxLSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NTI6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUzLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU0LVx0dW5zaWduZWQgaW50IG9yZGVyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NTU6XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcdTAwMjZvcmRlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ1Ni1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2My19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NDpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY1LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NzogKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg1LVx0XHR1bnNpZ25lZCBpbnQgaW5mb19vcmRlcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDg2Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBcdTAwMjZpbmZvX29yZGVyKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg3LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyNi0gKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTI3OiAqIGJ1ZmZlcikgYXMgYSBzaW5nbGUgdW5pdC4gSXQgbXVzdCBiZSByZXN0b3JlZCB1c2luZyBraG9fcmVzdG9yZV9wYWdlKCkgdG9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTI4LSAqIGVuc3VyZSB0aGUgdGFpbCBwYWdlcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkIHdpdGggYSB6ZXJvIHJlZmNvdW50LlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDQtICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XHRcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjItXHRcdFx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI3MTpcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjcyLVx0XHRpZiAoIXBhZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipVbnVzZWQgS2VybmVsIEZ1bmN0aW9ucyBJbnZlc3RpZ2F0aW9uKioKCkhtbSwgYGtob19wcmVzZXJ2ZV9wYWdlYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIHJlZCBmbGFnLiBUeXBpY2FsbHksIGtlcm5lbCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBCdXQgaWYgdGhleSYjMzk7cmUgKmV4cG9ydGVkKiBhbmQgKnVudXNlZCogd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIHRyZWUgaXRzZWxmLCB0aGF0JiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlLiBJdCBzdWdnZXN0cyBkZWFkIGNvZGUsIGEgcG9zc2libGUgb3ZlcnNpZ2h0IGR1cmluZyBkZXZlbG9wbWVudCwgb3IgbWF5YmUgZXZlbiByZW1uYW50cyBvZiBhIHJlZmFjdG9yaW5nIHRoYXQgd2FzbiYjMzk7dCBmdWxseSBjbGVhbmVkIHVwLgoKQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBjbGFpbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGx1cmtpbmcgc29tZXdoZXJlIHVuZXhwZWN0ZWQsIHBlcmhhcHMgaW4gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIGEgbGVzcy1mcmVxdWVudGx5IGF1ZGl0ZWQgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2wgdG8gcGVyZm9ybSBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIHRocm91Z2ggdGhlIHNvdXJjZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0Li4uIG5vIHBvaW50IGluIGFzc3VtaW5nIHNvbWV0aGluZyBJIGhhdmVuJiMzOTt0IGNvbmZpcm1lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3ByZXNlcnZlX3BhZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjU6aW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTI2LXZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Njk9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjcxOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDQxPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0ODogKiBraG9fcHJlc2VydmVfcGFnZSgpLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDktICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzYtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM4LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTYtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODE2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUHJlc2VydmF0aW9uL1Jlc3RvcmF0aW9uIGluIHRoZSBLZXJuZWwqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGggZm9yIGBraG9fcHJlc2VydmVfcGFnZWAgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gSHVoLCB0aGF0JiMzOTtzIG9kZCwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMsIG5laXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zIHNlZW1zIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIEkgd291bGQgaGF2ZSBhc3N1bWVkIHdlJiMzOTtkIGZpbmQgYXQgbGVhc3QgKnNvbWUqIGluc3RhbmNlcywgZXZlbiBpbiBvYnNjdXJlIGNvcm5lciBjYXNlcy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGRvdWJsZSBjaGVjayBteSB0b29saW5nLCBtYXliZSB0aGUgY2FsbCBncmFwaCBnZW5lcmF0aW9uIGlzIG1pc3Npbmcgc29tZXRoaW5nLCBvciB0aGVyZSYjMzk7cyBzb21lIGluZGlyZWN0IGNhbGwgbWVjaGFuaXNtIEkmIzM5O20gbm90IGFjY291bnRpbmcgZm9yLiAKCkJ1dCB3YWl0IGEgbWludXRlLCBJJiMzOTttIG1pc3Npbmcgb25lLCB3aGF0IGFib3V0IGBraG9fdW5wcmVzZXJ2ZV9wYWdlYD8gVGhhdCBvbmUgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXJzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24gYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWUgZGVzaWduIHVzaW5nIHRoYXQgaW4gcGxhY2Ugb2YgdGhlIG90aGVycy4gVGhhdCB3b3VsZCBiZSBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGludmVzdGlnYXRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob191bnByZXNlcnZlX3BhZ2VcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI1PWludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNjp2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjctaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTcxPXN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc1LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjc2OnN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc3LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTE5PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzMC0gKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MzE6ICogZnVuY3Rpb24sIGl0IG11c3QgZmlyc3QgdW5wcmVzZXJ2ZSB0aGUgYmxvY2sgdXNpbmcga2hvX3VucHJlc2VydmVfcGFnZSgpLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzItICogcGVyZm9ybSB0aGUgc3BsaXQsIGFuZCB0aGVuIHJlLXByZXNlcnZlIHRoZSBpbmRpdmlkdWFsIHBhZ2VzIHVzaW5nXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NDc9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NTc6dm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50OiBBUEkgSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXcgZnVuY3Rpb25zIOKAkyB0aGV5JiMzOTt2ZSBiZWVuIGludHJvZHVjZWQgYXMgQVBJcywgd2hpY2ggaXMgZmluZSwgdGhhdCYjMzk7cyBob3cgaXQgc3RhcnRzLCBidXQgdGhleSBoYXZlbiYjMzk7dCBhY3R1YWxseSBiZWVuIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIGNvcmUgbG9naWMgeWV0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgYXJlIHRoZXNlIGJlaW5nIHVzZWQ/IFdoZXJlJiMzOTtzIHRoZSBydWJiZXIgbWVldGluZyB0aGUgcm9hZD8mIzM0OyBXZSBoYXZlIHRvIHRlc3QgdGhpcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55IHRlc3RpbmcgZm9yIHRoZXNlLiBJIG5lZWQgdG8gbG9jYXRlIHdoZXJlIHRlc3RzIGFyZS4gTGV0JiMzOTtzIGV4cGxvcmUgdGhlIHRlc3RpbmcgZGlyZWN0b3J5LCBJ4oCZbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vYCBkaXJlY3Rvcnkgb3IgcGVyaGFwcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9gLiBMZXQmIzM5O3Mgc2VlIGlmIGVpdGhlciBvZiB0aGVzZSBsb2NhdGlvbnMgaGFzIGFueSB0ZXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcHJlc2VydmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVudXNlZCBDb2RlIGFuZCBQb3RlbnRpYWwgS0hPIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoZXNlIGZ1bmN0aW9ucyBhcmUgY29tcGxldGVseSB1bnRvdWNoZWQsIHVudXNlZCYjMzQ7LiBJZiB0aGV5IGFyZW4mIzM5O3QgYmVpbmcgdXNlZCwgdGhlbiBvYnZpb3VzbHksIHRoZXkgYXJlbiYjMzk7dCBnb2luZyB0byBiZSBoaXQgYnkgYW55IGZ1enppbmcsIHRoYXQmIzM5O3MganVzdCBhIGdpdmVuLiBCdXQgaG9sZCBvbiBhIHNlY29uZOKApiBjb3VsZCB0aGVyZSBiZSBzb21lIG90aGVyIEtlcm5lbCBIYW5kb3ZlciAoS0hPKSBtZWNoYW5pc20gdGhhdCAqY291bGQqIHJlYWNoIHRoZW0/IExldCYjMzk7cyBzZWUuLi4gQWgsIGBraG9fcHJlc2VydmVfcGFnZWAgaXMgYW4gYEVYUE9SVF9TWU1CT0xfR1BMYCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGRyaXZlcnMgdG8gY2FsbC4gSWYgbm8gZHJpdmVyIGFjdHVhbGx5IHV0aWxpemVzIGl0LCB0aGVuIGl04oCZcyBqdXN0IGRlYWQgY29kZSwgYSBuby1vcC4KCk5vdywgbGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGlzIHBhdGNoIHRvIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIGhhcHBlbmluZy4gT2theSwgdGhlIGZpbGUgY2hhbmdlcyBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgIGFuZCBgaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWAgYW5kLCBjcml0aWNhbGx5LCBtb2RpZnlpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYF9fa2hvX3Jlc3RvcmVfcGFnZWAuIEJ1dCB3YWl0LCBhcmUgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgY2FsbCBzaXRlczsgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wYWN0IGhlcmUuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgaWYgdGhvc2UgZnVuY3Rpb25zIGFyZSBhY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXN0b3JlX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zMz12b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNDpzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LXN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05Mj1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTkzLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTk1LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDIzLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MjQ6ICoga2hvX3Jlc3RvcmVfZm9saW8gLSByZWNyZWF0ZXMgdGhlIGZvbGlvIGZyb20gdGhlIHByZXNlcnZlZCBtZW1vcnkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQyNS0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZm9saW8uXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjgtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQyOTpzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQzMC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDAtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDE6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDItXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMzg4PXZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzk0LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMzk1Olx0Zm9saW8gPSBraG9fcmVzdG9yZV9mb2xpbyhfX3BhKG1lbSkpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzk2LVx0aWYgKCFXQVJOX09OKCFmb2xpbykpXG4tLVxubGliL3Rlc3Rfa2hvLmM9MjM1PXN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZV9kYXRhKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMjY3LVxubGliL3Rlc3Rfa2hvLmM6MjY4Olx0XHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xubGliL3Rlc3Rfa2hvLmMtMjY5LVx0XHRpZiAoIWZvbGlvKVxuLS1cbm1tL21lbWZkX2x1by5jPTM2Mj1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZGlzY2FyZF9mb2xpb3MoY29uc3Qgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmMtMzc1LVx0XHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVx1MDAzZXBmbik7XG5tbS9tZW1mZF9sdW8uYzozNzY6XHRcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XG5tbS9tZW1mZF9sdW8uYy0zNzctXHRcdGlmICghZm9saW8pIHtcbi0tXG5tbS9tZW1mZF9sdW8uYz00MTc9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbm1tL21lbWZkX2x1by5jLTQzNy1cdFx0cGh5cyA9IFBGTl9QSFlTKHBmb2xpby1cdTAwM2VwZm4pO1xubW0vbWVtZmRfbHVvLmM6NDM4Olx0XHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xubW0vbWVtZmRfbHVvLmMtNDM5LVx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vbWVtZmRfbHVvLmMtNTA3LVx0XHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVx1MDAzZXBmbik7XG5tbS9tZW1mZF9sdW8uYzo1MDg6XHRcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XG5tbS9tZW1mZF9sdW8uYy01MDktXHRcdGlmIChmb2xpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIGBraG9fcmVzdG9yZV9mb2xpb2AgUGF0Y2gqKgoKT2theSwgc28gSSBzZWUgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHVzZWQgaW4gYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBmdW5jdGlvbi4gTGV0JiMzOTtzIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoYXMgY2hhbmdlZCBvciBpZiBpdCYjMzk7cyBqdXN0IGEgcmVmYWN0b3JpbmcuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBga2hvX3Jlc3RvcmVfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIHNlcnZlZCBhcyB0aGUgd29ya2hvcnNlIGJlaGluZCByZXN0b3JpbmcgcGFnZXMsIGhhcyBub3cgYmVlbiBzcGxpdCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfZm9saW9gLiBUaGUgYGtob19yZXN0b3JlX3BhZ2VgIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIG5vdyBjb250YWlucyBtdWNoIGNsZWFuZXIgbG9naWMuCgpUaGUgY3J1Y2lhbCBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSB0aGUgdXNlIG9mIGBvcmRlcmAgd2hpY2ggbm93IHNlZW1zIHRvIGJlIHBhc3NlZCBieSByZWZlcmVuY2UuIEkgc2VlIHRoYXQgdGhlIGBpc19mb2xpb2AgZmxhZyBoYXMgYmVlbiByZW1vdmVkLiBJIGFtIGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGF0IGltcGFjdHMgdGhlIG9yaWdpbmFsIGJlaGF2aW91ci4KCkkgbm90aWNlIHRoZSBvcmlnaW5hbCBsb2dpYyBpbnNpZGUgdGhlIGBpZiAoaXNfZm9saW8pYCBibG9jayBpcyBub3cgaW4gYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQsIHRoZXJlJiMzOTtzIGEgbmV3IGBvcmRlcmAgdmFyaWFibGUsIGFuZCBpdHMgdmFsdWUgaXMgYXNzaWduZWQgdG8gdGhlIGAqb3JkZXJgLiBUaGUgbmV3IGBfX2tob19yZXN0b3JlX3BhZ2VgIG5vdyByZWNlaXZlcyBhbiBgb3JkZXJgIHBvaW50ZXIgYW5kIGBraG9faW5pdF9mb2xpb2AgdXNlcyB0aGUgcmVzdG9yZWQgYG9yZGVyYC4KClRoZSBjb3JlIGxvZ2ljIHJlbWFpbnMgdGhlIHNhbWU6IHJldHJpZXZlIGEgYHN0cnVjdCBwYWdlYCBnaXZlbiBhIHBoeXNpY2FsIGFkZHJlc3MsIHZhbGlkYXRlIGEgbWFnaWMgbnVtYmVyLCBjbGVhciB0aGUgYHByaXZhdGVgIGZpZWxkLCBhbmQgdGhlbiBpbml0aWFsaXplIHRoZSBmb2xpby4gSXQgbG9va3MgbGlrZSB0aGUgaGFuZGxpbmcgb2YgdGhlIG9yZGVyIGhhcyBiZWVuIG1hZGUgbW9yZSBleHBsaWNpdCwgYW5kIGl0JiMzOTtzIGNsZWFuZXIgaW4gdGhlIG5ldyByZWZhY3RvcmluZy4KVGhlIHJlbW92YWwgb2YgdGhlIGBpc19mb2xpb2AgZmxhZyBpcyBpbnRlcmVzdGluZzsgdGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIG5vdyAqYWx3YXlzKiBhc3N1bWVzIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhIGZvbGlvLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBzdGlsbCBpbiB1c2UsIG9yIGlmIHRoaXMgcGF0Y2ggc3Vic3VtZXMgYWxsIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXN0b3JlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zNT1zdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo5OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ2NzogKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDQtICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XHRcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjItXHRcdFx0aWYgKCFwYWdlKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI3MTpcdFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjcyLVx0XHRpZiAoIXBhZ2UpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIFJlc3RvcmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCBga2hvX3Jlc3RvcmVfcGFnZXNgIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBlbXBsb3llZCB3aXRoaW4gdGhlIGBraG9fcmVzdG9yZV92bWFsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgYGtob19yZXN0b3JlX3ZtYWxsb2NgIGl0c2VsZiBhY3R1YWxseSB1dGlsaXplZCBhbnl3aGVyZT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZ1cnRoZXIuIElmIGBraG9fcmVzdG9yZV92bWFsbG9jYCBpcyB1bnVzZWQsIHRoZW4gYGtob19yZXN0b3JlX3BhZ2VzYCBtaWdodCBiZSBkZWFkIGNvZGUgYXMgd2VsbCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IG9ubHkgdXNlZCBpbiBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBleHBsaWNpdGx5IGV2YWx1YXRlZC4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHJlc3RvcmF0aW9uIHBhdGggcmVtYWlucyByZWxldmFudC4gSSYjMzk7bGwgbmVlZCB0byBmb2xsb3cgdGhlIGNvbm5lY3Rpb25zIGFuZCBzZWUgd2hlcmUgZXZlcnl0aGluZyBsZWFkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Jlc3RvcmVfdm1hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzY9c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM3OnZvaWQgKmtob19yZXN0b3JlX3ZtYWxsb2MoY29uc3Qgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LWludCBraG9fYWRkX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYmxvYiwgc2l6ZV90IHNpemUpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLFxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDQtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTA1OnN0YXRpYyBpbmxpbmUgdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDYte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV92bWFsbG9jKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMTg6ICoga2hvX3Jlc3RvcmVfdm1hbGxvYyAtIHJlY3JlYXRlcyBhbmQgcG9wdWxhdGVzIGFuIGFyZWEgaW4gdm1hbGxvYyBhZGRyZXNzXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTktICogc3BhY2UgZnJvbSB0aGUgcHJlc2VydmVkIG1lbW9yeS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMjYtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMjc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTIyOC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzEyLX1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTMxMzpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV92bWFsbG9jKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTMxNC1cbi0tXG5saWIvdGVzdF9raG8uYz0yMzU9c3RhdGljIGludCBraG9fdGVzdF9yZXN0b3JlX2RhdGEoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9kZSlcbi0tXG5saWIvdGVzdF9raG8uYy0yNTctXG5saWIvdGVzdF9raG8uYzoyNTg6XHRmb2xpb3NfaW5mbyA9IGtob19yZXN0b3JlX3ZtYWxsb2MoZm9saW9zX2luZm9fcGh5cyk7XG5saWIvdGVzdF9raG8uYy0yNTktXHRpZiAoIWZvbGlvc19pbmZvKVxuLS1cbm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy00MDQtXHRpZiAoc2VyLVx1MDAzZW5yX2ZvbGlvcykge1xubW0vbWVtZmRfbHVvLmM6NDA1Olx0XHRmb2xpb3Nfc2VyID0ga2hvX3Jlc3RvcmVfdm1hbGxvYyhcdTAwMjZzZXItXHUwMDNlZm9saW9zKTtcbm1tL21lbWZkX2x1by5jLTQwNi1cdFx0aWYgKCFmb2xpb3Nfc2VyKVxuLS1cbm1tL21lbWZkX2x1by5jPTUxOD1zdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNTU1LVx0aWYgKHNlci1cdTAwM2Vucl9mb2xpb3MpIHtcbm1tL21lbWZkX2x1by5jOjU1NjpcdFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXHUwMDI2c2VyLVx1MDAzZWZvbGlvcyk7XG5tbS9tZW1mZF9sdW8uYy01NTctXHRcdGlmICghZm9saW9zX3Nlcikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMzOAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gUGFnZSBSZXN0b3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBga2hvX3Jlc3RvcmVfcGFnZXNgIGlzIHVzZWQgYnkgYGtob19yZXN0b3JlX3ZtYWxsb2NgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGBraG9fcmVzdG9yZV9wYWdlYCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgZXhwb3NpbmcgYGtob19yZXN0b3JlX3BhZ2VgIGFzIGEgbmV3IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyBpbnRlcmVzdGluZy4gSXQmIzM5O3MgdXNlZCBieSBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIG5vdyB0b28uIFNpbmNlIGBraG9fcmVzdG9yZV9wYWdlc2AgaXMgYWN0dWFsbHkgKnVzZWQqLCB0aGUgbG9naWMgaW4gYF9fa2hvX3Jlc3RvcmVfcGFnZWAgYW5kIGBraG9faW5pdF9wYWdlc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy4gYGtob19pbml0X3BhZ2VzYCwgYGtob19pbml0X2ZvbGlvYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBUaGUgY29kZSBmb3IgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgY2F1Z2h0IG15IGV5ZToKCmBgYGMKJiM0MzsvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIHBhZ2VzLiAqLwomIzQzO3N0YXRpYyB2b2lkIGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgJmx0OyZsdDsgb3JkZXIpOwomIzQzOwomIzQzOwkvKiBIZWFkIHBhZ2UgZ2V0cyByZWZjb3VudCBvZiAxLiAqLwomIzQzOwlzZXRfcGFnZV9jb3VudChwYWdlLCAxKTsKJiM0MzsJLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KJiM0MzsJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpOwomIzQzOwomIzQzOwkvKiBGb3IgaGlnaC1vcmRlciBibG9ja3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqLwomIzQzOwlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNldF9wYWdlX2NvdW50KHBhZ2UgJiM0MzsgaSwgMCk7CiYjNDM7CQkvKiBDbGVhciBlYWNoIHBhZ2UmIzM5O3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqLwomIzQzOwkJY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSk7CiYjNDM7CX0KJiM0Mzt9CmBgYAoKVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCBpcyBjYWxsZWQgYnkgYGtob19pbml0X2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBga2hvX2luaXRfZm9saW9gIGlzIGNhbGxlZCBieSBga2hvX3Jlc3RvcmVfZm9saW9gLCBhbmQgYGtob19yZXN0b3JlX2ZvbGlvYCBpcyB1c2VkIGJ5IGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYHRlc3Rfa2hvYC4gIFNvIHRoZSBuZXcgY29kZSBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEl04oCZcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgb2xkIGBraG9faW5pdF9mb2xpb2AsIGJ1dCB3aXRoIGEgYGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICYjNDM7IGkpYCBhZGRlZCBmb3IgdGhlIHRhaWwgcGFnZXMuCgpMZXQmIzM5O3MgbG9vayBhdCB0aGUgb2xkIGBraG9faW5pdF9mb2xpb2AgY29kZToKCmBgYGMKLXN0YXRpYyB2b2lkIGtob19pbml0X2ZvbGlvKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxICZsdDsmbHQ7IG9yZGVyKTsKLQotCS8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovCi0Jc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7Ci0JLyogQ2xlYXIgaGVhZCBwYWdlJiMzOTtzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi8KLQljbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7Ci0KLQkvKiBGb3IgaGlnaGVyIG9yZGVyIGZvbGlvcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovCi0JZm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlzZXRfcGFnZV9jb3VudChwYWdlICYjNDM7IGksIDApOwomIzQzOwlraG9faW5pdF9oaWdoX29yZGVyX3BhZ2UocGFnZSwgb3JkZXIpOwogCiAJaWYgKG9yZGVyICZndDsgMCkKIAkJcHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTsKIH0KYGBgCgpSaWdodCwgaXQganVzdCBtb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2gtb3JkZXIgcGFnZSB0byBhbm90aGVyIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKWAgZm9yIHRhaWwgcGFnZXMgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuIFdlIG5vdyBoYXZlIHRoZXNlIG5ldyBmdW5jdGlvbnMsIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gQnV0IHRob3NlIGFyZSAqdW51c2VkKiBhdCB0aGUgbW9tZW50LiAgVGhlIHJlbGV2YW50IGNoYW5nZXMgYXJlIHRoZSByZWZhY3RvcmluZyB1c2luZyBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIHRoZSBhZGRpdGlvbiBvZiBgY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgJiM0MzsgaSlgIGluIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLgoKT2theSwgdGhlIGNydWNpYWwgcGFydDogYGNsZWFyX3BhZ2VfdGFnX3JlZmAgaXMgbm93IGJlaW5nIGNhbGxlZCBvbiB0YWlsIHBhZ2VzLiAqVGhhdCYjMzk7cyogYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgZGVzaWduZWQgdG8gZml4IGFuIGFjY291bnRpbmcgbWlzbWF0Y2ggYnkgY2xlYXJpbmcgcGFnZSB0YWdzIGZvciB0aGUgdGFpbCBwYWdlcywgd2hpY2ggaXMgZ29vZC4gQnV0IGlzIGl0IHdvcnRoIHNwZW5kaW5nIHRpbWUgZnV6emluZyBmb3IgaXQ/Cgpga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHRoZSBtYWluCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGVzdF9raG8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7TUFJTlRBSU5FUlM9MTQzNDM9RjpcdGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyKlxuTUFJTlRBSU5FUlM6MTQzNDQ6RjpcdGxpYi90ZXN0X2toby5jXG5NQUlOVEFJTkVSUy0xNDM0NS1GOlx0dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL1xuLS1cbmxpYi9NYWtlZmlsZT0xMDY9b2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgJiM0Mzs9IHRlc3Rfb2JqcG9vbC5vXG5saWIvTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSKSAmIzQzOz0gdGVzdF9raG8ub1xubGliL01ha2VmaWxlLTEwOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIGZvciBTeXprYWxsZXItVHJpZ2dlcmFibGUgSW50ZXJmYWNlcyBpbiBgbGliL3Rlc3Rfa2hvLmNgKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIHBlZWsgYXQgYGxpYi90ZXN0X2toby5jYC4gTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtb2R1bGUsIG9yIGFueSBwYXJ0IG9mIGl0LCBleHBvc2VzIGEgZGVidWdmcyBvciBzeXNmcyBpbnRlcmZhY2UuIFRoZXNlIGFyZSBwcmltZSB0YXJnZXRzIGZvciBzeXprYWxsZXIsIGFzIHRoZXkgb2Z0ZW4gcHJvdmlkZSBtZWNoYW5pc21zIHRvIGludGVyYWN0IHdpdGgga2VybmVsIGludGVybmFscyBpbiB3YXlzIHRoYXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBmdXp6aW5nLiBBIGRlYnVnZnMgb3Igc3lzZnMgZW50cnkgY291bGQgYmUgZGlyZWN0bHkgbWFuaXB1bGF0ZWQgdG8gZmVlZCB1bnVzdWFsIGRhdGEgb3IgdHJpZ2dlciBzcGVjaWZpYyBjb2RlIHBhdGhzLiBJZiBJIGNhbiBpZGVudGlmeSBzdWNoIGFuIGludGVyZmFjZSB3aXRoaW4gdGhpcyBmaWxlLCBJIGNhbiBzaWduaWZpY2FudGx5IG5hcnJvdyB0aGUgc2NvcGUgb2YgbXkgZnV6emluZyBlZmZvcnRzIGFuZCBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGludGVyZXN0aW5nIGJ1Z3MuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBpZGVudGlmeSBsb3ctaGFuZ2luZyBmcnVpdCBmb3Igc3l6a2FsbGVyIGV4cGxvaXRhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMzM5LX1cbmxpYi90ZXN0X2toby5jOjM0MDptb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcbmxpYi90ZXN0X2toby5jLTM0MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gYGtob190ZXN0X2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gVGhlIHRhc2sgYmVmb3JlIG1lIGlzIHRvIHVuZGVyc3RhbmQgYGtob190ZXN0X2luaXRgLiAgTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gbG9jYXRlIHRoZSBzb3VyY2UgY29kZS4gSXQmIzM5O3MgdGVsbGluZyBtZSB0byBsb29rIGluIGBsaWIvdGVzdF9raG8uY2AsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgc3RhcnQuIFRoaXMgZmlsZSBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGZvciwgb3IgcmVsYXRlZCB0bywgdGhpcyBga2hvYCBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBga2hvX3Rlc3RfaW5pdGAgZnVuY3Rpb24gKmRvZXMqLiBJcyBpdCBzZXR0aW5nIHVwIHRlc3QgZW52aXJvbm1lbnRzPyBJbml0aWFsaXppbmcgc2hhcmVkIHJlc291cmNlcz8gUGVyaGFwcyByZWdpc3RlcmluZyB0ZXN0IGNhc2VzIG9yIGZpeHR1cmVzPyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYGluaXRgIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBjcml0aWNhbCBzZXR1cCByb3V0aW5lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIG9wZXJhdGlvbnMsIGdsb2JhbCB2YXJpYWJsZSBhc3NpZ25tZW50cywgb3IgYW55IG90aGVyIG9wZXJhdGlvbnMgdGhhdCBwcmltZSB0aGUgc3lzdGVtIGZvciB0ZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJldHVybiB2YWx1ZSwgdG9vOyBpcyBpdCBhIHN1Y2Nlc3MgaW5kaWNhdG9yLCBvciBkb2VzIGl0IHJldHVybiBhIHBvaW50ZXIgdG8gc29tZSB0ZXN0aW5nIGNvbnRleHQ/IFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQsIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuIDMxNTpcdHtcbiAzMTY6XHRcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuIDMxNzpcdFx0aW50IGVycjtcbiAzMTg6XHRcbiAzMTk6XHRcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiAzMjA6XHRcdFx0cmV0dXJuIDA7XG4gMzIxOlx0XG4gMzIyOlx0XHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcbiAzMjM6XHRcdGlmICghZXJyKSB7XG4gMzI0Olx0XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xuIDMyNTpcdFx0XHRpZiAoZXJyKVxuIDMyNjpcdFx0XHRcdHByX2VycihcJiMzNDtLSE8gcmVzdG9yZSBmYWlsZWRcXG5cJiMzNDspO1xuIDMyNzpcdFx0XHRlbHNlXG4gMzI4Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXG5cJiMzNDspO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKSB7XG4gMzM0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXG5cJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTtcbiAzMzU6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG4gMzM5Olx0fVxuIDM0MDpcdG1vZHVsZV9pbml0KGtob190ZXN0X2luaXQpO1xuIDM0MTpcdFxuIDM0MjpcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcbiAzNDM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS0hPIFN1YnN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGB0ZXN0X2tob2AgYmVoYXZpb3IuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgdGVzdF9raG9gLCBpcyBlc3NlbnRpYWxseSBhbiBhdXRvbWF0aWMgdGVzdCB0aGF0IGtpY2tzIG9mZiB1cG9uIG1vZHVsZSBsb2FkLiBJZiBpdCYjMzk7cyBiYWtlZCBpbnRvIHRoZSBrZXJuZWwsIGl0IHJ1bnMgcmlnaHQgYXQgYm9vdC4gVGhlIGNvcmUgbG9naWMgaGVyZSBpcyBpbnRlcmVzdGluZy4gV2hlbiBLSE8gaXMgYWN0aXZlLCBpdCBhdHRlbXB0cyB0byBmZXRjaCBhIHN1YnRyZWUuIElmIHRoYXQgZmFpbHMgd2l0aCBhbiAtRU5PRU5ULCB0aGF0JiMzOTtzIGEga2V5IGluZGljYXRvcuKAlGl0IG1lYW5zIHRoZSBzdWJ0cmVlIGlzbiYjMzk7dCB0aGVyZSwgc28gaXQgY2FsbHMgYGtob190ZXN0X3NhdmUoKWAuIFRoaXMgaW1wbGllcyBhIHNpbmdsZSBpbml0aWFsIHJ1biwgcHJvYmFibHkgZHVyaW5nIHN5c3RlbSBzdGFydHVwLgoKVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBTeXprYWxsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gZWFzaWx5IHRyaWdnZXIgdGhpcyByZXBlYXRlZGx5IHVubGVzcyBpdCBoYXMgc29tZSBtZWNoYW5pc20gZm9yIG1vZHVsZSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZy4gV2l0aG91dCB0aGF0IGNhcGFiaWxpdHksIGl0JiMzOTtzIGVzc2VudGlhbGx5IGEgb25lLXNob3QgcHJvY2Vzcy4KCk5vdywgdGhhdCBgbWVtZmRfbHVvYCBtZW50aW9uIGNhdWdodCBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRpbWUgdG8gc2hpZnQgZ2VhcnMgYW5kIGRlbHZlIGludG8gYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYz0zODc9c3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNDE2LVxubW0vbWVtZmRfbHVvLmM6NDE3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTQxOC1cdFx0XHRcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy01NjEtXG5tbS9tZW1mZF9sdW8uYzo1NjI6XHRcdGVyciA9IG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3MoZmlsZSwgZm9saW9zX3Nlciwgc2VyLVx1MDAzZW5yX2ZvbGlvcyk7XG5tbS9tZW1mZF9sdW8uYy01NjMtXHRcdHZmcmVlKGZvbGlvc19zZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI3OQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVW5wYWNraW5nIGBtZW1mZF9sdW9fcmV0cmlldmVgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggdGhpcyB0ZXJtLCBgbWVtZmRfbHVvX3JldHJpZXZlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgJiMzNDtIbW0sIG5ldmVyIGNvbWUgYWNyb3NzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSBiZWZvcmUuJiMzNDsgR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBpbW1lZGlhdGVseSBzdGFydCBicmVha2luZyBpdCBkb3duLiBgbWVtZmRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggYG1lbWZkX2NyZWF0ZWAsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhIExpbnV4LXNwZWNpZmljIGZlYXR1cmUgZm9yIGNyZWF0aW5nIGFub255bW91cywgbWVtb3J5LWJhY2tlZCBmaWxlcy4gVGhhdCBwYXJ0JiMzOTtzIGZhbWlsaWFyIHRlcnJpdG9yeSDigJMgbGlnaHR3ZWlnaHQsIGVwaGVtZXJhbCBzdG9yYWdlIGluIG1lbW9yeSwgdXNlZnVsIGZvciBzZWN1cml0eSwgSVBDLCBhbmQgYXZvaWRpbmcgZGlzayBJL08uIEJ1dCB0aGUgYGx1b19yZXRyaWV2ZWAgYml04oCmIHRoYXTigJlzIHdoYXQmIzM5O3MgaW50cmlndWluZy4gSSBoYXZlIHRvIGd1ZXNzIGl0JiMzOTtzIHNwZWNpZmljIHRvIGFuIGV4dGVuc2lvbiBvciBlbmhhbmNlbWVudC4gSXMgdGhpcyBmcm9tIGEgY3VzdG9tIGxpYnJhcnk/IE1heWJlIGEgc3BlY2lmaWMgcHJvamVjdCYjMzk7cyBpbXBsZW1lbnRhdGlvbj8KCk15IG1pbmQgaXMgcmFjaW5nOiBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNvbnRleHQuIElzIHRoaXMgcmVsYXRlZCB0byBkYXRhIHJldHJpZXZhbD8gR2l2ZW4gdGhlIG5hbWUsIGl0ICpzdWdnZXN0cyogaXQsIGJ1dCB3aXRob3V0IG1vcmUgY29udGV4dCBpdCYjMzk7cyBwcmVtYXR1cmUgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQ291bGQgaXQgYmUgYWJvdXQgcmV0cmlldmluZyBkYXRhIGZyb20gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYG1lbWZkYD8gTWF5YmUgYSBjb250cm9sIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGtub3cgaG93IGl0JiMzOTtzIHVzZWQuIElzIGl0IGEgZnVuY3Rpb24gZm9yIGFjY2Vzc2luZyB0aGUgZGF0YSwgcGVyaGFwcyBhIGZvcm0gb2YgZGF0YSBzZXJpYWxpemF0aW9uIGZvciB0aGlzIHR5cGUgb2YgZmlsZT8gRG9lcyBpdCB3b3JrIG9ubHkgaW4gdGhpcyBvbmUgc3lzdGVtLCBvciBpcyBpdCBjb21tb24gaW4gb3RoZXJzPwoKTXkgaW1tZWRpYXRlIHN0ZXBzIHdvdWxkIGJlIHRvIHNlYXJjaCBmb3IgdGhpcyBmdW5jdGlvbiBuYW1lIHdpdGhpbiBjb2RlYmFzZXMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBvciB0byBzdGFydCBnb29nbGluZyBmb3IgZG9jdW1lbnRhdGlvbiBhcm91bmQgbWVtZmQgZXh0ZW5zaW9ucy4gSSYjMzk7ZCBiZSBsb29raW5nIGZvciBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdXNhZ2UgZXhhbXBsZXMsIGFuZCBhbnkgZXhwbGFuYXRpb25zIG9mIGl0cyBwdXJwb3NlLiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSB3aGF0IHRoaXMgZXh0ZW5zaW9uIGRvZXMgaW4gcmVsYXRpb24gdG8gbWVtZmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWZkX2x1b19yZXRyaWV2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1mZF9sdW8uYz0zODc9c3RhdGljIHZvaWQgbWVtZmRfbHVvX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXG4tLVxubW0vbWVtZmRfbHVvLmMtNDE2LVxubW0vbWVtZmRfbHVvLmM6NDE3OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhzdHJ1Y3QgZmlsZSAqZmlsZSxcbm1tL21lbWZkX2x1by5jLTQxOC1cdFx0XHRcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXG4tLVxubW0vbWVtZmRfbHVvLmMtNTE3LVxubW0vbWVtZmRfbHVvLmM6NTE4OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbm1tL21lbWZkX2x1by5jLTUxOS17XG4tLVxubW0vbWVtZmRfbHVvLmMtNTYxLVxubW0vbWVtZmRfbHVvLmM6NTYyOlx0XHRlcnIgPSBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKGZpbGUsIGZvbGlvc19zZXIsIHNlci1cdTAwM2Vucl9mb2xpb3MpO1xubW0vbWVtZmRfbHVvLmMtNTYzLVx0XHR2ZnJlZShmb2xpb3Nfc2VyKTtcbi0tXG5tbS9tZW1mZF9sdW8uYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIG1lbWZkX2x1b19maWxlX29wcyA9IHtcbi0tXG5tbS9tZW1mZF9sdW8uYy01OTUtXHQuZmluaXNoID0gbWVtZmRfbHVvX2ZpbmlzaCxcbm1tL21lbWZkX2x1by5jOjU5NjpcdC5yZXRyaWV2ZSA9IG1lbWZkX2x1b19yZXRyaWV2ZSxcbm1tL21lbWZkX2x1by5jLTU5Ny1cdC5wcmVzZXJ2ZSA9IG1lbWZkX2x1b19wcmVzZXJ2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIExpdmUgVXBkYXRlIEZpbGUgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gYG1lbWZkX2x1b19maWxlX29wc2Ag4oCTIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjb25uZWN0ZWQgdG8gYGxpdmV1cGRhdGVfZmlsZV9vcHNgLiBJIGtub3cgdGhvc2UgYXJlIGxvdy1sZXZlbCBmaWxlIG9wZXJhdGlvbiBzdHJ1Y3R1cmVzLCB1c3VhbGx5IHByb3ZpZGluZyBjdXN0b20gaW1wbGVtZW50YXRpb25zIGZvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBsaXZlIHVwZGF0ZXMsIHdoaWNoIGF1dG9tYXRpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBDT05GSUdfTElWRVVQREFURWAuIFRoZSBrZXkgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoYXQgYENPTkZJR19MSVZFVVBEQVRFYCBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlPyBUaGF04oCZcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5LCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGllLiBJZiB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIGxpdmUgdXBkYXRlcywgd2UmIzM5O3ZlIGdvdCBhIHdob2xlIG5ldyBsZXZlbCBvZiBjb25jZXJucy4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgcGF0aHMgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiB0aGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIHRvIHVzZXIgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpdmV1cGRhdGVfZmlsZV9vcHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9NDY9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01NC0vKipcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjU1OiAqIHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIC0gQ2FsbGJhY2tzIGZvciBsaXZlLXVwZGF0YWJsZSBmaWxlcy5cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTU2LSAqIEBjYW5fcHJlc2VydmU6IFJlcXVpcmVkLiBMaWdodHdlaWdodCBjaGVjayB0byBzZWUgaWYgdGhpcyBoYW5kbGVyIGlzXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNzMtICovXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo3NDpzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC03NS1cdGJvb2wgKCpjYW5fcHJlc2VydmUpKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD0xMDE9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjEwMjpcdGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzICpvcHM7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDMtXHRjb25zdCBjaGFyIGNvbXBhdGlibGVbTElWRVVQREFURV9ITkRMX0NPTVBBVF9MRU5HVEhdO1xuLS1cbm1tL21lbWZkX2x1by5jPTU4OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1mZF9sdW9fZ2V0X2lkKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL21lbWZkX2x1by5jLTU5Mi1cbm1tL21lbWZkX2x1by5jOjU5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xubW0vbWVtZmRfbHVvLmMtNTk0LVx0LmZyZWV6ZSA9IG1lbWZkX2x1b19mcmVlemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzE3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGxpdmV1cGRhdGVfZmlsZV9vcHNgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbGl2ZXVwZGF0ZV9maWxlX29wc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaGF0IGZ1bmN0aW9uIG5hbWUgc291bmRzIGxpa2UgaXQmIzM5O3MgcHJldHR5IGNyaXRpY2FsIGZvciB0aGUgbGl2ZSB1cGRhdGUgcHJvY2VzcyDigJMgZGVhbGluZyB3aXRoIGZpbGUgb3BlcmF0aW9ucyBkdXJpbmcgYW4gdXBkYXRlLCBJJiMzOTtkIGltYWdpbmUuIFRoZXJlZm9yZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGltcGFjdC4gS25vd2luZyB3aGVyZSBpdOKAmXMgY2FsbGVkIHdpbGwgcHJvdmlkZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGUgZmxvdy4gVGhpcyB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggaXRzIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wYWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpdmV1cGRhdGVfZmlsZV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTE5LVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjA6c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjEtc3RydWN0IGxpdmV1cGRhdGVfZmxiO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo0NzpcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcjtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ4LVx0aW50IHJldHJpZXZlX3N0YXR1cztcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD03ND1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo3NTpcdGJvb2wgKCpjYW5fcHJlc2VydmUpKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTc2LVx0XHRcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUpO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTg4LS8qKlxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6ODk6ICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIC0gUmVwcmVzZW50cyBhIGhhbmRsZXIgZm9yIGEgbGl2ZS11cGRhdGFibGUgZmlsZSB0eXBlLlxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtOTAtICogQG9wczogICAgICAgICAgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb25zXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTAwLSAqL1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MTAxOnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDItXHRjb25zdCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAqb3BzO1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTIzMj1pbnQgbGl2ZXVwZGF0ZV9yZWJvb3Qodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yMzMtXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzQ6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM1OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzNi1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjIzNzppbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzOC1cdFx0XHQgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpO1xuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM5OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjQwLVx0XHRcdCAgICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYik7XG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjU0PXN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVib290KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjU4LVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjU5OnN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjAte1xuLS1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2My1cbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI2NDpzdGF0aWMgaW5saW5lIHZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjY1LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjctXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNjg6c3RhdGljIGlubGluZSBpbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2OS1cdFx0XHRcdFx0ICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNzMtXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNzQ6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdW5yZWdpc3Rlcl9mbGIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI3NS1cdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIwLSAqIEtlcm5lbCBtb2R1bGVzIHJlc3BvbnNpYmxlIGZvciBhIHNwZWNpZmljIGZpbGUgdHlwZSAoZS5nLiwgbWVtZmQsIHZmaW8pXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjIxOiAqIHJlZ2lzdGVyIGEgXHUwMDI2c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyLiBUaGlzIGhhbmRsZXIgcHJvdmlkZXMgYSBzZXQgb2Zcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMjItICogY2FsbGJhY2tzIHRoYXQgTFVPIGludm9rZXMgYXQgZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgdXBkYXRlIHByb2Nlc3MsIG1vc3Rcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTEyMi0gKiBzdHJ1Y3QgbHVvX2ZpbGUgLSBSZXByZXNlbnRzIGEgc2luZ2xlIHByZXNlcnZlZCBmaWxlIGluc3RhbmNlLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxMjM6ICogQGZoOiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIFx1MDAyNnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciB0aGF0IG1hbmFnZXNcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTI0LSAqICAgICAgICAgICAgICAgICB0aGlzIHR5cGUgb2YgZmlsZS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTE2MT1zdHJ1Y3QgbHVvX2ZpbGUge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNjI6XHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNjMtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE3MS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MTcyOnN0YXRpYyB1bnNpZ25lZCBsb25nIGx1b19nZXRfaWQoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTczLVx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0yMzA9aW50IGx1b19wcmVzZXJ2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sIGludCBmZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIzMi1cdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyBhcmdzID0gezB9O1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoyMzM6XHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMzQtXHRzdHJ1Y3QgbHVvX2ZpbGUgKmx1b19maWxlO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9NzE5PXN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIxLXtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzIyOlx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaDtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIzLVx0Ym9vbCBoYW5kbGVyX2ZvdW5kID0gZmFsc2U7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz04NTU9dm9pZCBsdW9fZmlsZV9zZXRfZGVzdHJveShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg2My0gKiBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZpbGVfaGFuZGxlciAtIFJlZ2lzdGVyIGEgZmlsZSBoYW5kbGVyIHdpdGggTFVPLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4NjQ6ICogQGZoOiBQb2ludGVyIHRvIGEgY2FsbGVyLWFsbG9jYXRlZCBcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg2NS0gKiBUaGUgY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZSwgaW5jbHVkaW5nIGEgdW5pcXVlXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzMtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjg3NDppbnQgbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9maWxlX2hhbmRsZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODc1LXtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODc2Olx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaF9pdGVyO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzctXHRpbnQgZXJyO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtOTE5LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo5MjA6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTkyMS17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jPTIwNz12b2lkIGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjQ4LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI0OTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjUwLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg0LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI4NTp2b2lkIGx1b19mbGJfZmlsZV91bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg2LXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzA1LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjMwNjp2b2lkIGx1b19mbGJfZmlsZV9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMDcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMTUtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzE2OnN0YXRpYyB2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9vbmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMTctXHRcdFx0XHQgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzU4LSAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjM1OTp2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9hbGwoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zNjAte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zOTMtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6Mzk0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM5NS1cdFx0XHQgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTQ3My0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYzo0NzQ6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtNDc1LVx0XHRcdCAgICAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05OT12b2lkIGx1b19maWxlX3NldF9kZXN0cm95KHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwMC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTAyOnZvaWQgbHVvX2ZsYl9maWxlX3VucHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDoxMDM6dm9pZCBsdW9fZmxiX2ZpbGVfZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTA0OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwNS1pbnQgX19pbml0IGx1b19mbGJfc2V0dXBfb3V0Z29pbmcodTY0ICpmbGJzX3BhKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD0xMDc9dm9pZCBsdW9fZmxiX3NlcmlhbGl6ZSh2b2lkKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMDktI2lmZGVmIENPTkZJR19MSVZFVVBEQVRFX1RFU1Rcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjExMDp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTExMS0jZWxzZVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTEyOnN0YXRpYyBpbmxpbmUgdm9pZCBsaXZldXBkYXRlX3Rlc3RfcmVnaXN0ZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCkgeyB9XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTMtI2VuZGlmXG4tLVxubGliL3Rlc3RzL2xpdmV1cGRhdGUuYz04Nz1zdGF0aWMgdm9pZCBsaXZldXBkYXRlX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE0LVxubGliL3Rlc3RzL2xpdmV1cGRhdGUuYzoxMTU6dm9pZCBsaXZldXBkYXRlX3Rlc3RfcmVnaXN0ZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE2LXtcbi0tXG5tbS9tZW1mZF9sdW8uYz01MTg9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTU3OS1cbm1tL21lbWZkX2x1by5jOjU4MDpzdGF0aWMgYm9vbCBtZW1mZF9sdW9fY2FuX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqaGFuZGxlcixcbm1tL21lbWZkX2x1by5jLTU4MS1cdFx0XHRcdCAgIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm1tL21lbWZkX2x1by5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xuLS1cbm1tL21lbWZkX2x1by5jLTYwMy1cbm1tL21lbWZkX2x1by5jOjYwNDpzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIG1lbWZkX2x1b19oYW5kbGVyID0ge1xubW0vbWVtZmRfbHVvLmMtNjA1LVx0Lm9wcyA9IFx1MDAyNm1lbWZkX2x1b19maWxlX29wcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMjUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMaXZlIFVwZGF0ZSBGZWF0dXJlJiMzOTtzIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgQ09ORklHX0xJVkVVUERBVEVgIGZlYXR1cmUsIHNwZWNpZmljYWxseSB0aGUgbWVtZmQtYmFja2VkIGltcGxlbWVudGF0aW9uLCBgbWVtZmRfbHVvYC4gVGhlIGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHByZXNlcnZlIGZpbGVzIGFjcm9zcyBhIGBrZXhlY2AgdHJhbnNpdGlvbi4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIG1lbWZkIGJhY2tlbmQgYW5kIHRoZSBmaWxlIHJlc3RvcmF0aW9uIHByb2Nlc3MuCgpJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2AuIFRoZXNlIHJvdXRpbmVzIGFyZSBjcml0aWNhbCBiZWNhdXNlIHRoZXkmIzM5O3JlIGRpcmVjdGx5IHVzZWQgd2l0aGluIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYGtob19yZXN0b3JlX3ZtYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmTigKYgdGhlc2UgYGtob19yZXN0b3JlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkICpkdXJpbmcqIHRoZSByZXRyaWV2YWwgcGhhc2UuIFRoaXMgcmV0cmlldmFsIHBoYXNlIGlzIHRyaWdnZXJlZCB3aGVuIGEgZmlsZSBpcyBicm91Z2h0IGJhY2sgaW50byBtZW1vcnkgdmlhIGBtZW1mZF9sdW9fcmV0cmlldmVgLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIGEgdXNlciBzcGFjZSBwcm9jZXNzIGRpcmVjdGx5IGNhbGwgYG1lbWZkX2x1b19yZXRyaWV2ZWA/ICBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjYWxsIHBhdGguIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgY2FsbGVkIHRocm91Z2ggYG1lbWZkX2x1b19maWxlX29wcy5yZXRyaWV2ZWAuICBUaGlzIHRoZW4gcG9pbnRzIHRvIHRoZSBmdW5jdGlvbiAgYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdoaWNoIHdpbGwgYmUgdGhlIG9uZSB0aGF0IGxpa2VseSB0cmlnZ2VycyB0aGUgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjYWxsIGNoYWluIHRob3JvdWdobHksIGFzIHRoYXQgaXMgd2hlcmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IG1heSBsaWUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgYW5kIGRhdGEgdGhhdCBhcmUgZGVzZXJpYWxpemVkIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTcxOC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXHRcdFx0XHQgICAgc3RydWN0IGx1b19maWxlX3NlciAqc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9Nzg0PWludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxNy1cdHdoaWxlICgoZmlsZV9zZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4MTg6XHRcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShmaWxlX3NldCwgZmlsZV9zZXIpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTktXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBmdW5jdGlvbjoKCioqVHJhY2luZyB0aGUgQ2FsbCBTdGFjayBmb3IgYGx1b19maWxlX2Rlc2VyaWFsaXplYCoqCgpPa2F5LCBzbyBgbHVvX2ZpbGVfZGVzZXJpYWxpemVgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCogZnJvbS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIGNhbiYjMzk7dCBqdXN0IG9wZXJhdGUgaW4gYSB2YWN1dW0uIFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSByZWx5IG9uIGl0PyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBlbnRyeSBwb2ludCwgb3IgaXMgaXQgYnVyaWVkIGRlZXAgd2l0aGluIGEgbmVzdGVkIG1vZHVsZT8KCkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwbGFjZXMgd2hlcmUgYGx1b19maWxlX2Rlc2VyaWFsaXplYCBpcyBpbnZva2VkLiBJIGNhbiYjMzk7dCBzdGFydCBvcHRpbWl6aW5nIGl0LCByZWZhY3RvcmluZyBpdCwgb3IgZXZlbiBmdWxseSAqdW5kZXJzdGFuZGluZyogaXRzIHJvbGUgdW50aWwgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJcyB0aGlzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgY3JpdGljYWwgcGF0aCwgb3IgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBhIHZlcnkgc3BlY2lmaWMgdGFzaz8gVGhlIGxvY2F0aW9uIG9mIGl0cyBjYWxscyB3aWxsIGluZm9ybSBhbGwgb2YgdGhhdC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSBJREUmIzM5O3Mgc2VhcmNoIGZ1bmN0aW9uIGFuZCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW1tZWRpYXRlIGNhbGxlcnMsIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbmRpcmVjdCBwYXRocyB0aGF0IG1pZ2h0IGxlYWQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x1b19maWxlX2Rlc2VyaWFsaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTUtICpcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NTY6ICogMy4gRGVzZXJpYWxpemU6IEFmdGVyIGtleGVjLCBsdW9fZmlsZV9kZXNlcmlhbGl6ZSgpIHJ1bnMgd2hlbiBzZXNzaW9uIGdldHNcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTctICogICAgZGVzZXJpYWxpemVkICh3aGljaCBpcyB3aGVuIC9kZXYvbGl2ZXVwZGF0ZSBpcyBmaXJzdCBvcGVuZWQpLiBJdCByZWFkcyB0aGVcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTE1Ny0gKiBkdXJpbmcgdGhlIC5mcmVlemUoKSBjYWxsYmFjayBiZWZvcmUgYmVpbmcgc2VyaWFsaXplZCBmb3IgdGhlIG5leHQga2VybmVsLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNTg6ICogQWZ0ZXIgcmVib290LCB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSByZWNyZWF0ZWQgYnkgbHVvX2ZpbGVfZGVzZXJpYWxpemUoKSBhbmRcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTU5LSAqIGFyZSBmaW5hbGx5IGNsZWFuZWQgdXAgYnkgbHVvX2ZpbGVfZmluaXNoKCkuXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTcxOC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXHRcdFx0XHQgICAgc3RydWN0IGx1b19maWxlX3NlciAqc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzU5LS8qKlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3NjA6ICogbHVvX2ZpbGVfZGVzZXJpYWxpemUgLSBSZWNvbnN0cnVjdHMgdGhlIGxpc3Qgb2YgcHJlc2VydmVkIGZpbGVzIGluIHRoZSBuZXcga2VybmVsLlxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03NjEtICogQGZpbGVfc2V0OiAgICAgVGhlIGluY29taW5nIGZpbGVfc2V0IHRvIGZpbGwgd2l0aCBkZXNlcmlhbGl6ZWQgZGF0YS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTc4My0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6Nzg0OmludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzg1LVx0XHRcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODE3LVx0d2hpbGUgKChmaWxlX3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjgxODpcdFx0ZXJyID0gbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKGZpbGVfc2V0LCBmaWxlX3Nlcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxOS1cdFx0aWYgKGVycilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05NT1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjk2OmludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTk3LVx0XHRcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTU1MT1zdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3Mi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2c2Vzc2lvbi1cdTAwM2VtdXRleCkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1NzM6XHRcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplKFx1MDAyNnNlc3Npb24tXHUwMDNlZmlsZV9zZXQsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3NC1cdFx0XHRcdFx0ICAgXHUwMDI2c2VyLVx1MDAzZWZpbGVfc2V0X3Nlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTIzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgSW1wcmVzc2lvbnMgb24gTGl2ZXVwZGF0ZSBhbmQgRGVzZXJpYWxpemF0aW9uKioKClJpZ2h0LCBgbHVvX2ZpbGVfZGVzZXJpYWxpemVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHdoZW4gYC9kZXYvbGl2ZXVwZGF0ZWAgaXMgYWNjZXNzZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBvciBpZiBhIHNlc3Npb24gaXMgYmVpbmcgZGVzZXJpYWxpemVkLiBUaGF0IG1ha2VzIHNlbnNlLCBhIGxpdmUgdXBkYXRlIHdvdWxkIG5lZWQgdG8gZGVzZXJpYWxpemUgc29tZXRoaW5nLiBOb3csIGhhbmcgb24gYSBzZWNvbmQuLi4gYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZWAgaXMgYWxzbyBjYWxsZWQgZHVyaW5nIGJvb3QsIG9yIHdoZW4gYC9kZXYvbGl2ZXVwZGF0ZWAgaXMgb3BlbmVkLCBpcyBpdCBub3Q/IFRoYXQgZGVzZXJ2ZXMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgIC0gdGhhdCBzZWVtcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcHJvY2Vzc2VzIGludGVydHdpbmUgZHVyaW5nIGluaXRpYWwgc3RhcnR1cCBhbmQgbGl2ZSB1cGRhdGUgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM9NTM1PWludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUwLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1NTE6c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1Mi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01ODU9aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MTgtXHR3aGlsZSAoKHNlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcdTAwMjZpdCkpKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjYxOTpcdFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MjAtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjM1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgOgoKKipVbmRlcnN0YW5kaW5nIHRoZSBGdW5jdGlvbiYjMzk7cyBPcmlnaW5zKioKCk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byBwaW5wb2ludCBpdHMgaW52b2NhdGlvbi4gV2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGZyb20/IElzIGl0IHdpdGhpbiB0aGUgY29yZSBzZXNzaW9uIG1hbmFnZW1lbnQgbW9kdWxlPyBJcyBpdCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudCwgcGVyaGFwcyBhIHVzZXIgbG9naW4sIGEgcmVxdWVzdCBmb3Igc2Vzc2lvbiBkYXRhLCBvciBkdXJpbmcgYXBwbGljYXRpb24gc3RhcnR1cD8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hlcmUgdGhlIGNhbGwgb3JpZ2luYXRlcy4gQW0gSSBsb29raW5nIGF0IGNvZGUgd2l0aGluIHRoZSBjb3JlIGZyYW1ld29yaywgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5LCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gdGhpcyBhcHBsaWNhdGlvbj8gVGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZSBhYm91dCB0aGUgZGF0YSBiZWluZyBkZXNlcmlhbGl6ZWQgYW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgdGhlIHJlZmVyZW5jZXMgdG8gdGhlIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jPTMzMD1zdGF0aWMgaW50IGx1b19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGVwLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zMzktXHQvKiBBbHdheXMgcmV0dXJuIC1FSU8gdG8gdXNlciBpZiBkZXNlcmlhbGl6YXRpb24gZmFpbCAqL1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYzozNDA6XHRpZiAobHVvX3Nlc3Npb25fZGVzZXJpYWxpemUoKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zNDEtXHRcdGF0b21pY19zZXQoXHUwMDI2bGRldi1cdTAwM2Vpbl91c2UsIDApO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oPTg0PWludCBsdW9fc2Vzc2lvbl9zZXJpYWxpemUodm9pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo4NTppbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemUodm9pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04Ni1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTQxLSAqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjQyOiAqIDMuICBEZXNlcmlhbGl6YXRpb24gKGluIG5ldyBrZXJuZWwpOiBBZnRlciBrZXhlYywgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKClgXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTQzLSAqICAgICBydW5zLCByZWFkaW5nIHRoZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNyZWF0aW5nIGEgbGlzdCBvZiBgc3RydWN0XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01MzU9aW50IF9faW5pdCBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyh1NjQgc2Vzc2lvbnNfcGEpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01NTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjU1MTpzdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUyLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBsdW9fc2Vzc2lvbl9zZXIgKnNlcilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU4NC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTg1OmludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODYte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjE4LVx0d2hpbGUgKChzZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXHUwMDI2aXQpKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo2MTk6XHRcdGVyciA9IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzaCwgc2VyKTtcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjIwLVx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ0MgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpdmUgVXBkYXRlIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHBhdGggb2YgYC9kZXYvbGl2ZXVwZGF0ZWAgaGVyZS4gVGhlIGVudHJ5IHBvaW50IEkmIzM5O20gc2VlaW5nIGlzIGBsdW9fb3BlbmAsIGFuZCB0aGF0JiMzOTtzIHRoZSBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBJZiBzeXprYWxsZXIgb3BlbnMgdGhhdCBkZXZpY2UsIGl0JiMzOTtzIGdvaW5nIHRvIGhpdCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLiBOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGlzICpzdXBwb3NlZCogdG8gaGFuZGxlIEtITyBkYXRhIHRoYXQgbWlnaHQgYmUgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwg4oCTIHRoaW5rIGBrZXhlY2Agb3IgYSBzaW1pbGFyIHNjZW5hcmlvLiBCdXQsIGR1cmluZyBhIHN0YW5kYXJkIGJvb3QsIHdpdGhvdXQgdGhhdCBLSE8gZGF0YSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyBnb2luZyB0byBlaXRoZXIgcmV0dXJuIHplcm8gb3IganVzdCBxdWlldGx5IGRvIG5vdGhpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIG9mIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgaXRzZWxmIGFuZCBjb25maXJtIHRoaXMgYmVoYXZpb3IuIEdvdHRhIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIGluIHRoZSBhYnNlbmNlIG9mIEtITyBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4NTpcdGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKVxuIDU4NjpcdHtcbiA1ODc6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXHUwMDI2bHVvX3Nlc3Npb25fZ2xvYmFsLmluY29taW5nO1xuIDU4ODpcdFx0c3RhdGljIGJvb2wgaXNfZGVzZXJpYWxpemVkO1xuIDU4OTpcdFx0c3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyO1xuIDU5MDpcdFx0c3RydWN0IGtob19ibG9ja19zZXRfaXQgaXQ7XG4gNTkxOlx0XHRzdGF0aWMgaW50IHNhdmVkX2VycjtcbiA1OTI6XHRcdGludCBlcnI7XG4gNTkzOlx0XG4gNTk0Olx0XHQvKiBJZiBoYXMgYmVlbiBkZXNlcmlhbGl6ZWQsIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgZXJyb3IgY29kZSAqL1xuIDU5NTpcdFx0aWYgKGlzX2Rlc2VyaWFsaXplZClcbiA1OTY6XHRcdFx0cmV0dXJuIHNhdmVkX2VycjtcbiA1OTc6XHRcbiA1OTg6XHRcdGlzX2Rlc2VyaWFsaXplZCA9IHRydWU7XG4gNTk5Olx0XHRpZiAoIXNoLVx1MDAzZWFjdGl2ZSlcbiA2MDA6XHRcdFx0cmV0dXJuIDA7XG4gNjAxOlx0XG4gNjAyOlx0XHQvKlxuIDYwMzpcdFx0ICogTm90ZSBvbiBlcnJvciBoYW5kbGluZzpcbiA2MDQ6XHRcdCAqXG4gNjA1Olx0XHQgKiBJZiBkZXNlcmlhbGl6YXRpb24gZmFpbHMgKGUuZy4sIGFsbG9jYXRpb24gZmFpbHVyZSBvciBjb3JydXB0IGRhdGEpLFxuIDYwNjpcdFx0ICogd2UgaW50ZW50aW9uYWxseSBza2lwIGNsZWFudXAgb2Ygc2Vzc2lvbnMgdGhhdCB3ZXJlIGFscmVhZHkgcmVzdG9yZWQuXG4gNjA3Olx0XHQgKlxuIDYwODpcdFx0ICogQSBwYXJ0aWFsIGZhaWx1cmUgbGVhdmVzIHRoZSBwcmVzZXJ2ZWQgc3RhdGUgaW5jb25zaXN0ZW50LlxuIDYwOTpcdFx0ICogSW1wbGVtZW50aW5nIGEgc2FmZSBcJiMzNDt1bmRvXCYjMzQ7IHRvIHVud2luZCBjb21wbGV4IGRlcGVuZGVuY2llcyAoc2Vzc2lvbnMsXG4gNjEwOlx0XHQgKiBmaWxlcywgaGFyZHdhcmUgc3RhdGUpIGlzIGVycm9yLXByb25lIGFuZCBwcm92aWRlcyBsaXR0bGUgdmFsdWUsIGFzXG4gNjExOlx0XHQgKiB0aGUgc3lzdGVtIGlzIGVmZmVjdGl2ZWx5IGluIGEgYnJva2VuIHN0YXRlLlxuIDYxMjpcdFx0ICpcbiA2MTM6XHRcdCAqIFdlIHRyZWF0IHRoZXNlIHJlc291cmNlcyBhcyBsZWFrZWQuIFRoZSBleHBlY3RlZCByZWNvdmVyeSBwYXRoIGlzIGZvclxuIDYxNDpcdFx0ICogdXNlcnNwYWNlIHRvIGRldGVjdCB0aGUgZmFpbHVyZSBhbmQgdHJpZ2dlciBhIHJlYm9vdCwgd2hpY2ggd2lsbFxuIDYxNTpcdFx0ICogcmVsaWFibHkgcmVzZXQgZGV2aWNlcyBhbmQgcmVjbGFpbSBtZW1vcnkuXG4gNjE2Olx0XHQgKi9cbiA2MTc6XHRcdGtob19ibG9ja19zZXRfaXRfaW5pdChcdTAwMjZpdCwgXHUwMDI2c2gtXHUwMDNlYmxvY2tfc2V0KTtcbiA2MTg6XHRcdHdoaWxlICgoc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFx1MDAyNml0KSkpIHtcbiA2MTk6XHRcdFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xuIDYyMDpcdFx0XHRpZiAoZXJyKVxuIDYyMTpcdFx0XHRcdGdvdG8gc2F2ZV9lcnI7XG4gNjIyOlx0XHR9XG4gNjIzOlx0XG4gNjI0Olx0XHRraG9fYmxvY2tfc2V0X2Rlc3Ryb3koXHUwMDI2c2gtXHUwMDNlYmxvY2tfc2V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI0MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCB0YWlsb3JlZCBhcyB0aG91Z2ggSSwgYSBzZWFzb25lZCBleHBlcnQsIGFtIHRoaW5raW5nIGl0IHRocm91Z2g6CgoqKkNoZWNraW5nIFNlc3Npb24gQWN0aXZpdHkqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgdmVyeSBjb25jaXNlIGNoZWNrOiBgIXNoLSZndDthY3RpdmVgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgZ3VhcmQgY29uZGl0aW9uLiBJZiB0aGlzIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgZnVuY3Rpb24gaW5zdGFudGx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBObyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2NjdXJzLiBJIGNhbiBpbmZlciB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIGlzIGxpa2VseSB0aWVkIHRvIGhhbmRsaW5nIGEgJiMzNDtzZXNzaW9uJiMzNDsgaWRlbnRpZmllZCBieSBgc2hgLiBUaGUgYGFjdGl2ZWAgZmxhZyB3aXRoaW4gdGhhdCBzZXNzaW9uIHN0cnVjdHVyZSwgYHNoYCwgaXMgdGhlIGtleS4KClRoZW4gSSBzZWUgd2hlcmUgdGhlIGBhY3RpdmVgIGZsYWcgZ2V0cyBzZXQuIEl0IGhhcHBlbnMgaW5zaWRlIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AuIFNvLCBzZXR0aW5nIHVwIGFuIGluY29taW5nIHNlc3Npb24gaXMgd2hhdCBtYWtlcyBgc2gtJmd0O2FjdGl2ZWAgdHJ1ZS4gQW55IGNhbGwgdG8gYSBtZXRob2QgaW4gdGhlIHNlc3Npb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBzZXNzaW9uIGxpa2VseSByZXR1cm5zIDAsIGluZGljYXRpbmcgYW4gZXJyb3IuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIHF1aWNrIGFuZCBlZmZpY2llbnQgd2F5IHRvIGJhaWwgb3V0IGlmIGEgc2Vzc2lvbiBoYXNuJiMzOTt0IGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgYWN0aXZhdGVkLCBsaWtlbHkgcHJvdGVjdGluZyBhZ2FpbnN0IG51bGwgcG9pbnRlciBleGNlcHRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZnJvbSB1c2luZyBhIHNlc3Npb24gdGhhdCBpc24mIzM5O3QgcmVhZHkuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUzNTpcdGludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxuIDUzNjpcdHtcbiA1Mzc6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXHUwMDI2bHVvX3Nlc3Npb25fZ2xvYmFsLmluY29taW5nO1xuIDUzODpcdFx0aW50IGVycjtcbiA1Mzk6XHRcbiA1NDA6XHRcdGlmICghc2Vzc2lvbnNfcGEpXG4gNTQxOlx0XHRcdHJldHVybiAwO1xuIDU0MjpcdFxuIDU0MzpcdFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9yZXN0b3JlKFx1MDAyNnNoLVx1MDAzZWJsb2NrX3NldCwgc2Vzc2lvbnNfcGEpO1xuIDU0NDpcdFx0aWYgKGVycilcbiA1NDU6XHRcdFx0cmV0dXJuIGVycjtcbiA1NDY6XHRcbiA1NDc6XHRcdHNoLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gNTQ4Olx0XHRyZXR1cm4gMDtcbiA1NDk6XHR9XG4gNTUwOlx0XG4gNTUxOlx0c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXG4gNTUyOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxuIDU1MzpcdHtcbiA1NTQ6XHRcdHN0cnVjdCBsdW9fc2Vzc2lvbiAqc2Vzc2lvbjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgT2JqZWN0IEhhbmRvdmVyIChLSE8pIEluaXRpYWxpemF0aW9uIGFuZCBSZXN0b3JlIFBhdGgqKgoKT2theSwgc28gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCBpcyBpbnZva2VkIG9uIGJvb3Qgd2l0aCBgc2Vzc2lvbnNfcGFgLCBhbmQgaWYgbm8gS0hPIGRhdGEgZXhpc3RzLCB3aGljaCBpcyB0aGUgbm9ybSBmb3IgYSBmcmVzaCBTeXprYWxsZXIgYm9vdCwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLiBUaGF0IG1lYW5zIGBzaC0mZ3Q7YWN0aXZlYCBzdGF5cyBmYWxzZS4gQ29uc2VxdWVudGx5LCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGRvZXMgbm90aGluZywgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGUgZW50aXJlIHJlc3RvcmUgbWVjaGFuaXNtIGlzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoZSBwcmVzZXJ2ZSBwYXRoIGF0IGFsbC4KCkxldCYjMzk7cyBzZWXigKYgSSBzaG91bGQgY2hlY2sgYGtob19wcmVzZXJ2ZV9wYWdlYC4gTG9va3MgbGlrZSBpdCYjMzk7cyB1bnVzZWQsIHRoYXQmIzM5O3MgYSBkZWFkIGVuZC4gT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuIEFoLCBpdCYjMzk7cyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBga2hvX2luaXRfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCB0aGVuIGBraG9faW5pdF9mb2xpb2AgaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtob19yZXN0b3JlX2ZvbGlvYC4gTWFrZXMgc2Vuc2UuIE5vdyBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIG9ubHkgdHJpZ2dlcmVkIHRocm91Z2ggYGtob19yZXN0b3JlX2ZyZWVgLCBga2hvX3Rlc3RfcmVzdG9yZV9kYXRhYCwgYW5kIHRoZSBgbWVtZmRfbHVvX2Rpc2NhcmRfZm9saW9zYCBhbmQgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIG9wZXJhdGlvbnMuIEFsbCB0aG9zZSBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwYXRoLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgdGhpczogQ2FuIHRoZSByZXN0b3JlIHBhdGggYmUgZW50ZXJlZCBpZiBLSE8gZGF0YSBpc24mIzM5O3QgcHJlc2VudD8gTm8sIGl0JiMzOTtzIGltcG9zc2libGUuIEJlY2F1c2UgZWl0aGVyIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIGJlIGZhbHNlIG9yIGBzaC0mZ3Q7YWN0aXZlYCB3aWxsIGJlIGZhbHNlLiBTbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGdvIG92ZXIgdGhlIGVkZ2UgY2FzZXMgYW5kIG5vdCBhc3N1bWUgYSBmcmVzaCBib290LgoKV2FpdCwgdGhlIGB0ZXN0X2tob2AgbW9kdWxlISBJIG5lZWQgdG8gcmUtZXhhbWluZSBga2hvX3Rlc3RfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3Rfa2hvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNDpcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcbiAzMTU6XHR7XG4gMzE2Olx0XHRwaHlzX2FkZHJfdCBmZHRfcGh5cztcbiAzMTc6XHRcdGludCBlcnI7XG4gMzE4Olx0XG4gMzE5Olx0XHRpZiAoIWtob19pc19lbmFibGVkKCkpXG4gMzIwOlx0XHRcdHJldHVybiAwO1xuIDMyMTpcdFxuIDMyMjpcdFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcdTAwMjZmZHRfcGh5cywgTlVMTCk7XG4gMzIzOlx0XHRpZiAoIWVycikge1xuIDMyNDpcdFx0XHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcbiAzMjU6XHRcdFx0aWYgKGVycilcbiAzMjY6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7S0hPIHJlc3RvcmUgZmFpbGVkXFxuXCYjMzQ7KTtcbiAzMjc6XHRcdFx0ZWxzZVxuIDMyODpcdFx0XHRcdHByX2luZm8oXCYjMzQ7S0hPIHJlc3RvcmUgc3VjY2VlZGVkXFxuXCYjMzQ7KTtcbiAzMjk6XHRcbiAzMzA6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzE6XHRcdH1cbiAzMzI6XHRcbiAzMzM6XHRcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuIDMzNDpcdFx0XHRwcl93YXJuKFwmIzM0O2ZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxuXCYjMzQ7LCBLSE9fVEVTVF9GRFQsIGVycik7XG4gMzM1Olx0XHRcdHJldHVybiBlcnI7XG4gMzM2Olx0XHR9XG4gMzM3Olx0XG4gMzM4Olx0XHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xuIDMzOTpcdH1cbiAzNDA6XHRtb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgdm9pZCBraG9fdGVzdF9jbGVhbnVwKHZvaWQpXG4gMzQzOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE1NgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS0hPIEZlYXR1cmUgTG9naWMgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIEtITyBmZWF0dXJlIGlzIGVuYWJsZWQuIFRoZSBjb3JlIG9mIHRoaXMgbG9naWMgaGluZ2VzIG9uIGBraG9faXNfZW5hYmxlZCgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBraG9faXNfZW5hYmxlZCgpYCBhY3RzIGFzIHRoZSBnYXRla2VlcGVyIGhlcmUuJiMzNDsgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCBtZWFuaW5nIEtITyBpc24mIzM5O3QgZW5hYmxlZCwgdGhlbiB0aGUgZW50aXJlIHNlY3Rpb24gbGlrZWx5IHplcm9lcyBvdXQgd2hhdGV2ZXIgdmFsdWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoLiBBIHF1aWNrIGNoZWNrIG9mIGBraG9faXNfZW5hYmxlZCgpYCByZXZlYWxzIHRoYXQgaXQgdmVyaWZpZXMgd2hldGhlciB0aGUga2VybmVsIHdhcyBib290ZWQgd2l0aCBLSE8gZGF0YSBpbiBvcmRlciB0byBtYWtlIGl0cyBkZXRlcm1pbmF0aW9uLiBJIHNob3VsZCBqdXN0IGNvbmZpcm0gaG93IHRoYXQgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgZmFjdG9ycyBtYWtlIEtITyBlbmFibGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGluc2lkZSBga2hvX2lzX2VuYWJsZWQoKWAuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX2lzX2VuYWJsZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTE3PXN0cnVjdCBwYWdlO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xOS0jaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MjA6Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMS1ib29sIGlzX2tob19ib290KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD00ND12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDYtI2Vsc2VcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo0NzpzdGF0aWMgaW5saW5lIGJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz01OD1zdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjYwOmJvb2wga2hvX2lzX2VuYWJsZWQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjEte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjMtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NDpFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY1LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTkwLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYzo5MTpcdGlmICgha2hvX2lzX2VuYWJsZWQoKSkge1xua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy05Mi1cdFx0aWYgKGxpdmV1cGRhdGVfZW5hYmxlZCgpKVxuLS1cbmxpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMzE4LVxubGliL3Rlc3Rfa2hvLmM6MzE5Olx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxubGliL3Rlc3Rfa2hvLmMtMzIwLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1ibG9jay5jPTI2MTY9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZV9tZW1faW5pdCh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjYxOS1cbm1tL21lbWJsb2NrLmM6MjYyMDpcdGlmICgha2hvX2lzX2VuYWJsZWQoKSB8fCAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxubW0vbWVtYmxvY2suYy0yNjIxLVx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBraG9faXNfZW5hYmxlZGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gdGhlIG1lbnRhbCBnZWFycyBhcmUgYWxyZWFkeSB0dXJuaW5nLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBraG9faXNfZW5hYmxlZGAgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBtYWludGFpbmFiaWxpdHksIGVzcGVjaWFsbHkgaWYgdGhpcyBmdW5jdGlvbiBpcyBmcmVxdWVudGx5IGNhbGxlZCBvciBkZWVwbHkgbmVzdGVkIHdpdGhpbiBjcml0aWNhbCBwYXRocy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyDigJMgaXMgaXQgY2hlY2tpbmcgYSBzdGF0aWMgdmFyaWFibGUsIHF1ZXJ5aW5nIGEgZGF0YWJhc2UsIG9yIHBlcmZvcm1pbmcgbW9yZSBjb21wbGV4IGxvZ2ljPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGlmIGl0IG1vZGlmaWVzIGFueSBzaGFyZWQgc3RhdGUuIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBvdXIgZXhpc3RpbmcgY29kZSBiYXNlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5IHdyaXR0ZW4gYnkgc29tZW9uZSBlbHNlLCBzbyBJIHdhbnQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGl0cyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJcyB0aGVyZSBhIGNoYW5jZSBvZiBhbnkgcmFjZSBjb25kaXRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBmb3IgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBjb250ZXh0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDU4Olx0c3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XG4gIDU5Olx0XG4gIDYwOlx0Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxuICA2MTpcdHtcbiAgNjI6XHRcdHJldHVybiBraG9fZW5hYmxlO1xuICA2MzpcdH1cbiAgNjQ6XHRFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XG4gIDY1Olx0XG4gIDY2Olx0c3RhdGljIGludCBfX2luaXQga2hvX3BhcnNlX2VuYWJsZShjaGFyICpwKVxuICA2NzpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtleGVjIEhhbmRvdmVyIEVuYWJsZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga2hvX2lzX2VuYWJsZWRgIGZ1bmN0aW9uIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBzaW1wbHkgcmV0dXJucyB0aGUgdmFsdWUgb2YgYGtob19lbmFibGVgLiBXaGljaCwgYXMgSSBzZWUgaXQsIGRlZmF1bHRzIHRvIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgLiBTbyBlc3NlbnRpYWxseSwgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgIGlzIHNldCB0byB0cnVlLCB0aGVuIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIHJldHVybiB0cnVlLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGB0ZXN0X2toby5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE0Olx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuIDMxNTpcdHtcbiAzMTY6XHRcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xuIDMxNzpcdFx0aW50IGVycjtcbiAzMTg6XHRcbiAzMTk6XHRcdGlmICgha2hvX2lzX2VuYWJsZWQoKSlcbiAzMjA6XHRcdFx0cmV0dXJuIDA7XG4gMzIxOlx0XG4gMzIyOlx0XHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcbiAzMjM6XHRcdGlmICghZXJyKSB7XG4gMzI0Olx0XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xuIDMyNTpcdFx0XHRpZiAoZXJyKVxuIDMyNjpcdFx0XHRcdHByX2VycihcJiMzNDtLSE8gcmVzdG9yZSBmYWlsZWRcXG5cJiMzNDspO1xuIDMyNzpcdFx0XHRlbHNlXG4gMzI4Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXG5cJiMzNDspO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDMzMTpcdFx0fVxuIDMzMjpcdFxuIDMzMzpcdFx0aWYgKGVyciAhPSAtRU5PRU5UKSB7XG4gMzM0Olx0XHRcdHByX3dhcm4oXCYjMzQ7ZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXG5cJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTtcbiAzMzU6XHRcdFx0cmV0dXJuIGVycjtcbiAzMzY6XHRcdH1cbiAzMzc6XHRcbiAzMzg6XHRcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG4gMzM5Olx0fVxuIDM0MDpcdG1vZHVsZV9pbml0KGtob190ZXN0X2luaXQpO1xuIDM0MTpcdFxuIDM0MjpcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcbiAzNDM6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gRGF0YSBSZXRyaWV2YWwgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBvcGVyYXRpbmcgdW5kZXIgYSBjb25kaXRpb25hbC4gSWYgYGtob19pc19lbmFibGVkKClgIHJldHVybnMgdHJ1ZSwgdGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIGlmIHRoZXJlJiMzOTtzICpubyogS0hPIGRhdGEgYXZhaWxhYmxlPyBBaGEsIHRoZSB0ZXh0IHNheXMgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCB3aWxsIHJldHVybiBgLUVOT0VOVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGEgc3RhbmRhcmQgZXJyb3IgY29kZSB0byBpbmRpY2F0ZSAmIzM0O25vIHN1Y2ggZW50aXR5LiYjMzQ7IE5vdywgYWZ0ZXIgdGhhdCByZXRyaWV2YWwgKG9yIGxhY2sgdGhlcmVvZiksIHRoZSBjb2RlIGp1bXBzIHRvIGBraG9fdGVzdF9zYXZlKClgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGtob190ZXN0X3NhdmUoKWAgZnVuY3Rpb24gaXMgZG9pbmcgaW4gdGhpcyBjb250ZXh0LiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGZsb3cuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgcmVhY3RzIHRvIG9yIGluY29ycG9yYXRlcyB0aGUgcmVzdWx0IChvciBsYWNrIHRoZXJlb2YpIGZyb20gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjc2Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMjc3Olx0XHR9XG4gMjc4Olx0XG4gMjc5Olx0XHR2ZnJlZShmb2xpb3NfaW5mbyk7XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoY3N1bSAhPSAqb2xkX2NzdW0pXG4gMjgyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0dXJuIDA7XG4gMjg1Olx0fVxuIDI4NjpcdFxuIDI4NzpcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZShwaHlzX2FkZHJfdCBmZHRfcGh5cylcbiAyODg6XHR7XG4gMjg5Olx0XHR2b2lkICpmZHQgPSBwaHlzX3RvX3ZpcnQoZmR0X3BoeXMpO1xuIDI5MDpcdFx0Y29uc3QgdW5zaWduZWQgaW50ICptYWdpYztcbiAyOTE6XHRcdGludCBub2RlLCBsZW4sIGVycjtcbiAyOTI6XHRcbiAyOTM6XHRcdG5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoZmR0LCBcJiMzNDsvXCYjMzQ7KTtcbiAyOTQ6XHRcdGlmIChub2RlIFx1MDAzYyAwKVxuIDI5NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyOTY6XHRcbiAyOTc6XHRcdGlmIChmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgbm9kZSwgS0hPX1RFU1RfQ09NUEFUKSlcbiAyOTg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjk5Olx0XG4gMzAwOlx0XHRtYWdpYyA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgXCYjMzQ7bWFnaWNcJiMzNDssIFx1MDAyNmxlbik7XG4gMzAxOlx0XHRpZiAoIW1hZ2ljIHx8IGxlbiAhPSBzaXplb2YoKm1hZ2ljKSlcbiAzMDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAoKm1hZ2ljICE9IEtIT19URVNUX01BR0lDKVxuIDMwNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMDY6XHRcbiAzMDc6XHRcdGVyciA9IGtob190ZXN0X3Jlc3RvcmVfZGF0YShmZHQsIG5vZGUpO1xuIDMwODpcdFx0aWYgKGVycilcbiAzMDk6XHRcdFx0cmV0dXJuIGVycjtcbiAzMTA6XHRcbiAzMTE6XHRcdHJldHVybiAwO1xuIDMxMjpcdH1cbiAzMTM6XHRcbiAzMTQ6XHRzdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXG4gMzE1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk3MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBXb3JrZmxvdzogYGtob190ZXN0X3NhdmVgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHJlLW9yaWVudCBteXNlbGYuIFRoYXQgYGtob190ZXN0X3NhdmVgIGZpbGUuLi4gaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgbmVlZCB0byByZXZpZXcgaXQuIEl0IHByb2JhYmx5IGNvbnRhaW5zIHRoZSBjcnVjaWFsIHN0YXRlIGluZm9ybWF0aW9uIG9yIGRhdGEgbWFuaXB1bGF0aW9uIHN0ZXBzIHRoYXQgSSB3YXMgd29ya2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGVyZSBJIGxlZnQgb2ZmLiBJcyBpdCBhIGNoZWNrcG9pbnQgc2F2ZT8gQSB0ZXN0IGNvbmZpZ3VyYXRpb24/IE9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHNob3VsZCBrbm93LiBJ4oCZbGwgYmUgbG9va2luZyBmb3IgYW55IGNsdWVzIHRoYXQganVtcCBvdXQgYWJvdXQgdGhhdCBwcmV2aW91cyB0ZXN0aW5nIGl0ZXJhdGlvbiwgb3IgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgaW4gYW5kIGdldCB1cCB0byBzcGVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2hvX3Rlc3Rfc2F2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYz0xNjI9c3RhdGljIGludCBraG9fdGVzdF9nZW5lcmF0ZV9kYXRhKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXG4tLVxubGliL3Rlc3Rfa2hvLmMtMjA0LVxubGliL3Rlc3Rfa2hvLmM6MjA1OnN0YXRpYyBpbnQga2hvX3Rlc3Rfc2F2ZSh2b2lkKVxubGliL3Rlc3Rfa2hvLmMtMjA2LXtcbi0tXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTMzNy1cbmxpYi90ZXN0X2toby5jOjMzODpcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG5saWIvdGVzdF9raG8uYy0zMzktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERhdGEgU2V0OiBraG9cX3Rlc3RcX3NhdmUqKgoKQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoaXMgZmlsZSwgYGtob190ZXN0X3NhdmVgLiBJbW1lZGlhdGVseSwgSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hhdCBhc3N1bXB0aW9ucyBJIGNhbiBtYWtlIGFib3V0IGl0cyBjb250ZW50cyBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uICYjMzQ7a2hvJiMzNDsgbWlnaHQgc3VnZ2VzdCBhIHBhcnRpY3VsYXIgZGF0YSBmb3JtYXQgb3Igc291cmNlIOKAkyBwZXJoYXBzIGEgc3BlY2lmaWMgcmVzZWFyY2ggZ3JvdXAmIzM5O3Mgb3V0cHV0LCBhIHBhcnRpY3VsYXIgZXhwZXJpbWVudCwgb3IgYSBzcGVjaWZpYyB0eXBlIG9mIGRhdGEgZW5jb2RpbmcuICYjMzQ7dGVzdCYjMzQ7IGluZGljYXRlcyBpdCYjMzk7cyBsaWtlbHkgYSB0ZW1wb3Jhcnkgb3IgZGV2ZWxvcG1lbnRhbCBmaWxlLCBtYXliZSBhIHZhbGlkYXRpb24gb3IgcHJlbGltaW5hcnkgb3V0cHV0LiBBbmQgJiMzNDtzYXZlJiMzNDsgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhIHNuYXBzaG90IG9mIHRoZSBkYXRhIGF0IGEgY2VydGFpbiBwb2ludCwgYSBjaGVja3BvaW50IGluIHRoZSB3b3JrZmxvdy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGF0IHRoZXNlIGFyZSBqdXN0IGluaXRpYWwgY2x1ZXMuIEkgaGF2ZSB0byByZXNpc3QgdGhlIHVyZ2UgdG8ganVtcCB0byBjb25jbHVzaW9ucyB1bnRpbCBJJiMzOTt2ZSBhY3R1YWxseSBsb29rZWQgYXQgdGhlIGZpbGUgaXRzZWxmLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBwYXJzZSB0aGlzIGFwcHJvcHJpYXRlbHkuIElzIHRoaXMgYSBjdXN0b20gYmluYXJ5IGZvcm1hdD8gSXMgaXQgdGV4dC1iYXNlZCwgbGlrZSBDU1YsIEpTT04sIG9yIFhNTD8gT3IgaXMgaXQgc29tZXRoaW5nIGEgYml0IG1vcmUgZXNvdGVyaWM/IFRoZSBmaXJzdCBwcmlvcml0eSBpcyB0byBkZXRlcm1pbmUgaG93IHRvIHJlYWQgdGhlIGRhdGEsIHNvIHRoYXQgSSBjYW4gZmlndXJlIG91dCBpdHMgc3RydWN0dXJlIGFuZCB0aGVuIHN0YXJ0IGFuYWx5emluZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA1Olx0c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXG4gMjA2Olx0e1xuIDIwNzpcdFx0c3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSA9IFx1MDAyNmtob190ZXN0X3N0YXRlO1xuIDIwODpcdFx0c3RydWN0IGZvbGlvICoqZm9saW9zO1xuIDIwOTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfbnI7XG4gMjEwOlx0XHRpbnQgZXJyO1xuIDIxMTpcdFxuIDIxMjpcdFx0bWF4X21lbSA9IFBBR0VfQUxJR04obWF4X21lbSk7XG4gMjEzOlx0XHRtYXhfbnIgPSBtYXhfbWVtIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDIxNDpcdFxuIDIxNTpcdFx0Zm9saW9zID0ga3ZtYWxsb2Nfb2Jqcygqc3RhdGUtXHUwMDNlZm9saW9zLCBtYXhfbnIpO1xuIDIxNjpcdFx0aWYgKCFmb2xpb3MpXG4gMjE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDIxODpcdFx0c3RhdGUtXHUwMDNlZm9saW9zID0gZm9saW9zO1xuIDIxOTpcdFxuIDIyMDpcdFx0ZXJyID0ga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YShzdGF0ZSk7XG4gMjIxOlx0XHRpZiAoZXJyKVxuIDIyMjpcdFx0XHRnb3RvIGVycl9mcmVlX2ZvbGlvcztcbiAyMjM6XHRcbiAyMjQ6XHRcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcbiAyMjU6XHRcdGlmIChlcnIpXG4gMjI2Olx0XHRcdGdvdG8gZXJyX2ZyZWVfZm9saW9zO1xuIDIyNzpcdFxuIDIyODpcdFx0cmV0dXJuIDA7XG4gMjI5Olx0XG4gMjMwOlx0ZXJyX2ZyZWVfZm9saW9zOlxuIDIzMTpcdFx0a3ZmcmVlKGZvbGlvcyk7XG4gMjMyOlx0XHRyZXR1cm4gZXJyO1xuIDIzMzpcdH1cbiAyMzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgwMjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHByb2Nlc3MsIHRoaW5raW5nIGFzIHRoZSBjb2RlIGl0c2VsZiBtaWdodDoKCioqVGhlIFByZXNlcnZhdGlvbiBEYW5jZTogQSBMb29rIGF0IERhdGEgSGFuZGxpbmcqKgoKQWxyaWdodCwgc28gYGtob190ZXN0X3NhdmVgIGlzIGluaXRpYXRpbmcgYSBjcml0aWNhbCBvcGVyYXRpb24uIEl0JiMzOTtzIGVzc2VudGlhbGx5IHNheWluZywgJiMzNDtIZXksIGJlZm9yZSBJIGRvIHNvbWV0aGluZyBwb3RlbnRpYWxseSByaXNreSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBzYWZlIGFuZCBzb3VuZC4mIzM0OyBUaGUgY29kZSBpcyBzcGVjaWZpY2FsbHkgY2FsbGluZyBga2hvX3Rlc3RfcHJlc2VydmVgLiBUaGF0JiMzOTtzIGEgY2xlYXIgc2lnbmFsIHRvIG1lIHRoYXQgYGtob190ZXN0X3NhdmVgJiMzOTtzIGZ1bmN0aW9uYWxpdHksIHdoYXRldmVyIGl0IG1pZ2h0IGJlLCBkZXBlbmRzIG9uIGEgcHJlbGltaW5hcnkgZGF0YSBzYWZlZ3VhcmRpbmcgc3RlcC4gVGhpcyBsb29rcyBsaWtlIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIGdvb2Qgb25lISBJdCYjMzk7cyBsaWtlbHkgdGhhdCBga2hvX3Rlc3RfcHJlc2VydmVgIGRvZXMgc29tZSBraW5kIG9mIGJhY2t1cCwgc25hcHNob3R0aW5nLCBzZXJpYWxpemF0aW9uLCBvciB2ZXJzaW9uaW5nLiBJJiMzOTttIGluZmVycmluZywgd2l0aCBteSBleHBlcnQgZXllLCB0aGF0IHRoZSBzeXN0ZW0gaXMgZW5naW5lZXJlZCB0byBwcmlvcml0aXplIGRhdGEgaW50ZWdyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fdGVzdF9wcmVzZXJ2ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9raG8uYz00NT1zdGF0aWMgdm9pZCBraG9fdGVzdF91bnByZXNlcnZlX2RhdGEoc3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSlcbi0tXG5saWIvdGVzdF9raG8uYy01My1cbmxpYi90ZXN0X2toby5jOjU0OnN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxubGliL3Rlc3Rfa2hvLmMtNTUte1xuLS1cbmxpYi90ZXN0X2toby5jPTk3PXN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlcGFyZV9mZHQoc3RydWN0IGtob190ZXN0X3N0YXRlICpzdGF0ZSwgc3NpemVfdCBmZHRfc2l6ZSlcbi0tXG5saWIvdGVzdF9raG8uYy0xMjMtXG5saWIvdGVzdF9raG8uYzoxMjQ6c3RhdGljIGludCBraG9fdGVzdF9wcmVzZXJ2ZShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxubGliL3Rlc3Rfa2hvLmMtMTI1LXtcbi0tXG5saWIvdGVzdF9raG8uYy0xMzctXG5saWIvdGVzdF9raG8uYzoxMzg6XHRlcnIgPSBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKHN0YXRlKTtcbmxpYi90ZXN0X2toby5jLTEzOS1cdGlmIChlcnIpXG4tLVxubGliL3Rlc3Rfa2hvLmM9MjA1PXN0YXRpYyBpbnQga2hvX3Rlc3Rfc2F2ZSh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTIyMy1cbmxpYi90ZXN0X2toby5jOjIyNDpcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcbmxpYi90ZXN0X2toby5jLTIyNS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHByb2Nlc3NpbmcgdGhpcyB0YXNrLCBmb2N1c2luZyBvbiB3aGF0IEkmIzM5O2QgYmUgdGhpbmtpbmcgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKkFuYWx5emluZyB0aGUgVGFzazogYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgKioKCkFscmlnaHQsIHRoZSBmaWxlIG9yIHRlc3Qgc3VpdGUgSSBuZWVkIHRvIGxvb2sgYXQgaXMgbmFtZWQgYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgLiBJbW1lZGlhdGVseSwgYSBmZXcgdGhpbmdzIGp1bXAgb3V0LiBUaGUgbmFtZSBzdWdnZXN0cyBhIHNwZWNpZmljIGZvY3VzIG9uICpkYXRhIHByZXNlcnZhdGlvbiouIFRoaXMgaXMga2V5LiBXZSYjMzk7cmUgbm90IGp1c3QgcnVubmluZyB0ZXN0cywgd2UmIzM5O3JlIG1ha2luZyBzdXJlIGRhdGEgaW50ZWdyaXR5IGlzIG1haW50YWluZWQsIHBvdGVudGlhbGx5IGR1cmluZyBzb21lIGtpbmQgb2Ygb3BlcmF0aW9uIG9yIHByb2Nlc3MuICYjMzQ7S2hvJiMzNDsgaXMgYSBwcmVmaXggSSBoYXZlbiYjMzk7dCBzZWVuIGJlZm9yZSwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBzaWduaWZpZXM7IGl0IG1pZ2h0IGJlIGEgc3BlY2lmaWMgbGlicmFyeSwgcHJvamVjdCwgb3IgY29udGV4dC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgaXMgdGhhdCB0aGlzIGlzIGEgdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgc29tZSBvcGVyYXRpb24sIG1heWJlIGEgZGF0YSBtaWdyYXRpb24sIGEgc3lzdGVtIHVwZGF0ZSwgb3IgYSBzcGVjaWZpYyBkYXRhIHRyYW5zZm9ybWF0aW9uLCBkb2VzbiYjMzk7dCBpbmFkdmVydGVudGx5IGxlYWQgdG8gZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFzc2VydHMgdGhhdCBmb2N1cyBvbiBkYXRhIHN0cnVjdHVyZXMsIGNoZWNrc3VtcywgZGF0YSBzaXplcywgb3Igc3BlY2lmaWMgZGF0YSB2YWx1ZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWN0aW9uIGJlaW5nIHRlc3RlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZWRnZSBjYXNlcywgd2hlcmUgdGhpbmdzIGFyZSBtb3N0IGxpa2VseSB0byBnbyB3cm9uZywgbGlrZSBjb25jdXJyZW5jeSBpc3N1ZXMsIGVycm9yIGhhbmRsaW5nLCBvciB1bnVzdWFsIGRhdGEgaW5wdXRzLiBJJiMzOTtsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdGVzdCYjMzk7cyBzY29wZSDigJMgZG9lcyBpdCBjb3ZlciB0aGUgZW50aXJlIGRhdGEgc2V0LCBvciBpcyBpdCBzYW1wbGluZyBzcGVjaWZpYyBrZXkgYXJlYXM/IElzIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGNsZWFybHkgZGVmaW5lZD8gVGhpcyBpcyBjcnVjaWFsIGZvciByZXBsaWNhdGlvbiBhbmQgcmVsaWFiaWxpdHkgb2YgcmVzdWx0cy4gSXMgdGhlcmUgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhpcyB0ZXN0PyBUaGF0IHdvdWxkIGJlIGZhbnRhc3RpYyEgVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRoZSB0ZXN0IGlzIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhpcyBkYXRhIHByZXNlcnZhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2toby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1NDpcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxuICA1NTpcdHtcbiAgNTY6XHRcdHN0cnVjdCBraG9fdm1hbGxvYyBmb2xpb3NfaW5mb19waHlzO1xuICA1NzpcdFx0cGh5c19hZGRyX3QgKmZvbGlvc19pbmZvO1xuICA1ODpcdFx0aW50IGVycjtcbiAgNTk6XHRcbiAgNjA6XHRcdGZvbGlvc19pbmZvID0gdm1hbGxvY19hcnJheShzdGF0ZS1cdTAwM2Vucl9mb2xpb3MsIHNpemVvZigqZm9saW9zX2luZm8pKTtcbiAgNjE6XHRcdGlmICghZm9saW9zX2luZm8pXG4gIDYyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA2MzpcdFxuICA2NDpcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX3ZtYWxsb2MoZm9saW9zX2luZm8sIFx1MDAyNmZvbGlvc19pbmZvX3BoeXMpO1xuICA2NTpcdFx0aWYgKGVycilcbiAgNjY6XHRcdFx0Z290byBlcnJfZnJlZV9pbmZvO1xuICA2NzpcdFxuICA2ODpcdFx0c3RhdGUtXHUwMDNlZm9saW9zX2luZm9fcGh5cyA9IGZvbGlvc19pbmZvX3BoeXM7XG4gIDY5Olx0XHRzdGF0ZS1cdTAwM2Vmb2xpb3NfaW5mbyA9IGZvbGlvc19pbmZvO1xuICA3MDpcdFxuICA3MTpcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHN0YXRlLVx1MDAzZW5yX2ZvbGlvczsgaSYjNDM7JiM0MzspIHtcbiAgNzI6XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHN0YXRlLVx1MDAzZWZvbGlvc1tpXTtcbiAgNzM6XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xuICA3NDpcdFxuICA3NTpcdFx0XHRmb2xpb3NfaW5mb1tpXSA9IHZpcnRfdG9fcGh5cyhmb2xpb19hZGRyZXNzKGZvbGlvKSkgfCBvcmRlcjtcbiAgNzY6XHRcdFx0ZXJyID0ga2hvX3ByZXNlcnZlX2ZvbGlvKGZvbGlvKTtcbiAgNzc6XHRcdFx0aWYgKGVycilcbiAgNzg6XHRcdFx0XHRnb3RvIGVycl91bnByZXNlcnZlO1xuICA3OTpcdFx0XHRzdGF0ZS1cdTAwM2Vucl9mb2xpb3NfcHJlc2VydmVkJiM0MzsmIzQzOztcbiAgODA6XHRcdH1cbiAgODE6XHRcbiAgODI6XHRcdHJldHVybiAwO1xuICA4MzpcdFxuICA4NDpcdGVycl91bnByZXNlcnZlOlxuICA4NTpcdFx0LypcbiAgODY6XHRcdCAqIGtob190ZXN0X3VucHJlc2VydmVfZGF0YSBmcmVlcyBmb2xpb19pbmZvLCBiYWlsIG91dCBpbW1lZGlhdGVseSB0b1xuICA4NzpcdFx0ICogYXZvaWQgZG91YmxlIGZyZWVcbiAgODg6XHRcdCAqL1xuICA4OTpcdFx0a2hvX3Rlc3RfdW5wcmVzZXJ2ZV9kYXRhKHN0YXRlKTtcbiAgOTA6XHRcdHJldHVybiBlcnI7XG4gIDkxOlx0XG4gIDkyOlx0ZXJyX2ZyZWVfaW5mbzpcbiAgOTM6XHRcdHZmcmVlKGZvbGlvc19pbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MDgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLSE8gRGF0YSBQcmVzZXJ2YXRpb24gQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAgY2FsbHMgYGtob19wcmVzZXJ2ZV9mb2xpb2AsIGJ1dCBub3QgYGtob19wcmVzZXJ2ZV9wYWdlYC4gIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIHdoeSBga2hvX3ByZXNlcnZlX3BhZ2VgIGV4aXN0cyBhdCBhbGwuIEl0IGFwcGVhcnMgY29tcGxldGVseSB1bnVzZWQsIHVubGVzcy4uLiB3YWl0LCB3aGF0IGFib3V0IGBraG9fcHJlc2VydmVfcGFnZXNgPyBJIHJlbWVtYmVyIGl0IGJlaW5nIHVzZWQgd2l0aGluIGBraG9fcHJlc2VydmVfdm1hbGxvY2AuCgpOb3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYGtob19wcmVzZXJ2ZV92bWFsbG9jYCAqaXMqIGNhbGxlZCBieSBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAuIEFuZCBga2hvX3Rlc3Rfc2F2ZSgpYCBpcyBjYWxsZWQgYXQgbW9kdWxlIGxvYWQgaWYgS0hPIGlzIG5vdCBlbmFibGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBmb3IgYSBub3JtYWwgYm9vdC4gU28gYGtob19wcmVzZXJ2ZV9wYWdlc2AgaXMgcmVhY2hhYmxlIHZpYSBga2hvX3Rlc3Rfc2F2ZSgpYCBhcyBsb25nIGFzIEtITyBpcyBkaXNhYmxlZC4KCkhvbGQgb24sIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBmYWxzZSwgYGtob190ZXN0X2luaXQoKWAgc2hvdWxkIHJldHVybiAwLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBga2hvX3Rlc3RfaW5pdCgpYC4KCmBgYGMKc3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKQp7CglwaHlzX2FkZHJfdCBmZHRfcGh5czsKCWludCBlcnI7CgoJaWYgKCFraG9faXNfZW5hYmxlZCgpKQoJCXJldHVybiAwOwoKCWVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgJmFtcDtmZHRfcGh5cywgTlVMTCk7CglpZiAoIWVycikgewoJCWVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpOwoJCWlmIChlcnIpCgkJCXByX2VycigmIzM0O0tITyByZXN0b3JlIGZhaWxlZFxuJiMzNDspOwoJCWVsc2UKCQkJcHJfaW5mbygmIzM0O0tITyByZXN0b3JlIHN1Y2NlZWRlZFxuJiMzNDspOwoKCQlyZXR1cm4gZXJyOwoJfQoKCWlmIChlcnIgIT0gLUVOT0VOVCkgewoJCXByX3dhcm4oJiMzNDtmYWlsZWQgdG8gcmV0cmlldmUgJXMgRkRUOiAlZFxuJiMzNDssIEtIT19URVNUX0ZEVCwgZXJyKTsKCQlyZXR1cm4gZXJyOwoJfQoKCXJldHVybiBraG9fdGVzdF9zYXZlKCk7Cn0KYGBgCgpPa2F5LCB5ZXMsIEkgd2FzIHJpZ2h0LiBJZiBgIWtob19pc19lbmFibGVkKClgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLiBTbywgbm93IGl0IGlzIGNsZWFyOiBga2hvX3Rlc3Rfc2F2ZSgpYCBpcyAqb25seSogY2FsbGVkIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBUUlVFLCAqYW5kKiBga2hvX3JldHJpZXZlX3N1YnRyZWVgIHJldHVybnMgYC1FTk9FTlRgLiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBjb25kaXRpb24gaGVyZS4KClNvLCB3aGVuICppcyogYGtob19pc19lbmFibGVkKClgIHRydWU/IEFoLCBpdCYjMzk7cyB0cnVlIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRgIGlzIHNldCwgb3IgaWYgdGhlIHVzZXIgc3BlY2lmaWNhbGx5IHBhc3NlcyBga2hvPW9uYCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gR290IGl0LiBTbywgaWYgS0hPIGlzIHN1cHBvc2VkIHRvIGJlIGVuYWJsZWQsIGJ1dCB3ZSBhcmUgZG9pbmcgYSBub3JtYWwgYm9vdCAoaS5lLiwgdGhlcmUgaXMgbm8gS0hPIGRhdGEpLCBga2hvX3JldHJpZXZlX3N1YnRyZWVgICp3aWxsKiByZXR1cm4gYC1FTk9FTlRgLiBBbmQgdGhlbiwgYGtob190ZXN0X3NhdmUoKWAgKndpbGwqIGJlIGNhbGxlZC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtraG9fcmV0cmlldmVfc3VidHJlZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzk9dm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDA6aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQxLVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMTU9c3RhdGljIGlubGluZSB2b2lkIGtob19yZW1vdmVfc3VidHJlZSh2b2lkICpibG9iKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTYtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTE3OnN0YXRpYyBpbmxpbmUgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExOC1cdFx0XHRcdCAgICAgICBzaXplX3QgKnNpemUpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xNDM1PUVYUE9SVF9TWU1CT0xfR1BMKGlzX2tob19ib290KTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0MzctLyoqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0Mzg6ICoga2hvX3JldHJpZXZlX3N1YnRyZWUgLSByZXRyaWV2ZSBhIHByZXNlcnZlZCBzdWIgYmxvYiBieSBpdHMgbmFtZS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQzOS0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHN1YiBibG9iIHBhc3NlZCB0byBraG9fYWRkX3N1YnRyZWUoKS5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDctICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0NDg6aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDkte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQ4MS19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0ODI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JldHJpZXZlX3N1YnRyZWUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDgzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTUzMD1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2luX2tleGVjX21ldGFkYXRhKHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNTM2LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNTM3Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX01FVEFEQVRBX05PREVfTkFNRSwgXHUwMDI2bWV0YWRhdGFfcGh5cyxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTUzOC1cdFx0XHRcdCAgIFx1MDAyNmJsb2Jfc2l6ZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz04ND1zdGF0aWMgaW50IF9faW5pdCBsdW9fZWFybHlfc3RhcnR1cCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTgtXHQvKiBSZXRyaWV2ZSBMVU8gc3RhdGUgZnJvbSBLSE8uICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjk5Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTFVPX0tIT19FTlRSWV9OQU1FLCBcdTAwMjZsdW9fc2VyX3BoeXMsIFx1MDAyNmxlbik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEwMC1cdGlmIChlcnIpIHtcbi0tXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxuLS1cbmxpYi90ZXN0X2toby5jLTMyMS1cbmxpYi90ZXN0X2toby5jOjMyMjpcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xubGliL3Rlc3Rfa2hvLmMtMzIzLVx0aWYgKCFlcnIpIHtcbi0tXG5tbS9tZW1ibG9jay5jPTI2MzA9c3RhdGljIHZvaWQgKl9faW5pdCByZXNlcnZlX21lbV9raG9fcmV0cmlldmVfZmR0KHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNjM4LVxubW0vbWVtYmxvY2suYzoyNjM5Olx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTUVNQkxPQ0tfS0hPX0ZEVCwgXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xubW0vbWVtYmxvY2suYy0yNjQwLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY3NgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtITyBEYXRhIEZsb3cqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgYGtob19pc19lbmFibGVkKClgIGlzIG9uIGFuZCBga2hvX3JldHJpZXZlX3N1YnRyZWVgIGZhaWxzIHdpdGggYW4gYC1FTk9FTlRgIGVycm9yLCB0aGVuIGBraG9fdGVzdF9zYXZlKClgIGdldHMgY2FsbGVkLiBga2hvX3Rlc3Rfc2F2ZSgpYCBzZWVtcyB0byB0cmlnZ2VyIGEgY2FzY2FkZSBvZiBmdW5jdGlvbiBjYWxsczogYGtob190ZXN0X2dlbmVyYXRlX2RhdGEoKWAsIGBraG9fdGVzdF9wcmVzZXJ2ZSgpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YSgpYC4gVGhlbiB0aGlzIGxlYWRzIHRvIGBraG9fcHJlc2VydmVfdm1hbGxvYygpYCBhbmQgYGtob19wcmVzZXJ2ZV9mb2xpbygpYC4gRXZlbnR1YWxseSwgYGtob19wcmVzZXJ2ZV92bWFsbG9jKClgIGNhbGxzIGBraG9fcHJlc2VydmVfcGFnZXMoKWAuIFNvLCB1bmRlciB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiAoYENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVD15YCBhbmQgYENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSPXlgKSwgYGtob19wcmVzZXJ2ZV9wYWdlc2Agc2hvdWxkIGJlIHJlYWNoYWJsZSBkdXJpbmcgYm9vdC4KCkJ1dCB3YWl0IGEgbWludXRlISBJJiMzOTttIHNlZWluZyBga2hvX3ByZXNlcnZlX3BhZ2VgIChzaW5ndWxhcikgYWRkZWQgaW4gdGhlIHBhdGNoLiBBbmQgdGhvc2UgZnVuY3Rpb25zLCBga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFyZSBjb21wbGV0ZWx5IHVudXNlZCBpbiB0aGUgY3VycmVudCB0cmVlISBUaGF0JiMzOTtzIHN0cmFuZ2UuIFRoZSBvbmx5ICp1c2FibGUqIGNoYW5nZXMgaW4gdGhlIHBhdGNoIHNlZW0gdG8gYmUgdGhlIHJlZmFjdG9yaW5nLCB3aGljaCB1dGlsaXplcyBgX19raG9fcmVzdG9yZV9wYWdlYCB3aXRoaW4gYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYC4gUGx1cywgdGhlcmUmIzM5O3MgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSAmIzQzOyBpKWAgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuCgpIb3dldmVyLCB0aGUgYmlnZ2VyIGlzc3VlIGlzIHRoYXQgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhcmUgKm9ubHkqIGNhbGxlZCBkdXJpbmcgdGhlIHJlc3RvcmUgcGhhc2UuIFRoZSByZXN0b3JlIHBoYXNlIGlzICpvbmx5KiB0cmlnZ2VyZWQgaWYgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCBzdWNjZWVkcy4gIGBraG9fcmV0cmlldmVfc3VidHJlZWAgY2FuIG9ubHkgc3VjY2VlZCBpZiB0aGVyZSYjMzk7cyBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gQW5kIHN5emthbGxlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgZG9lc24mIzM5O3QgYWN0dWFsbHkgcGVyZm9ybSBrZXhlYyB3aXRoIEtITyBkYXRhLiBJdCBzdGFydHMgd2l0aCBhIGZyZXNoIFZNIGltYWdlLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgcmVzdG9yZSBwaGFzZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCEKCkhtbSwgaXMgdGhlcmUgYW55IHdheSB0byBwb3NzaWJseSB0cmlnZ2VyIGBraG9fcmVzdG9yZV9mb2xpb2AgZnJvbSB1c2VyIHNwYWNlIHNvbWVob3c/IE1heWJlIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcbi0tXG5tbS9tZW1mZF9sdW8uYy00MTYtXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxubW0vbWVtZmRfbHVvLmMtNDE4LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3Nlcixcbi0tXG5tbS9tZW1mZF9sdW8uYz01MTg9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxuLS1cbm1tL21lbWZkX2x1by5jLTU2MS1cbm1tL21lbWZkX2x1by5jOjU2MjpcdFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXHUwMDNlbnJfZm9saW9zKTtcbm1tL21lbWZkX2x1by5jLTU2My1cdFx0dmZyZWUoZm9saW9zX3Nlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODcxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBVbnJlYWNoYWJsZSBDb2RlIFBhdGgqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgYnVyaWVkIHByZXR0eSBkZWVwLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9uczogYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAsIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgLCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLCBhbmQgZmluYWxseSwgaW5pdGlhdGVkIGJ5IGEgY2FsbCB0byBgbHVvX29wZW5gIG9uIGAvZGV2L2xpdmV1cGRhdGVgLiAgVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpbW1lZGlhdGVseSByZXR1cm5zIGlmIGEgZmxhZywgYHNoLSZndDthY3RpdmVgLCBpcyBmYWxzZS4KClRoaXMgYHNoLSZndDthY3RpdmVgIGZsYWcgaXMgb25seSBzZXQgaW4gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCwgd2hpY2gsIEkgbm93IHJlY2FsbCwgaXMgY2FsbGVkIGR1cmluZyBib290IHdpdGggYHNlc3Npb25zX3BhYC4gSWYsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhlcmUgaXMgKm5vKiBLSE8gZGF0YSwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLCBhbmQgdGhhdCBjcnVjaWFsIGBzaC0mZ3Q7YWN0aXZlYCBmbGFnIHN0YXlzIGZhbHNlLiBUaGF0IG1lYW5zIHRoZSB3aG9sZSBkZXNlcmlhbGl6YXRpb24gcHJvY2VzcyBpcyBzaG9ydC1jaXJjdWl0ZWQg4oCTIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgZG9lcyBub3RoaW5nLiBDb25zZXF1ZW50bHksIGBtZW1mZF9sdW9fcmV0cmlldmVgIGlzICpuZXZlciogY2FsbGVkLCBhbmQgdGhlcmVmb3JlIGFsbCB0aGUgZnVuY3Rpb25zICpkb3duc3RyZWFtKiBmcm9tIGl0LCBpbmNsdWRpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCwgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCwgYXJlIGFsc28gaW5hY2Nlc3NpYmxlLgoKVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGludHJvZHVjZToKMS4gIFVudXNlZCBmdW5jdGlvbnM6IGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4KMi4gIFJlZmFjdG9yaW5nIHRoYXQsIGFnYWluLCBkZXBlbmRzIG9uIHRoYXQgaW5hY2Nlc3NpYmxlIGRlc2VyaWFsaXphdGlvbiBwYXRoLgozLiAgU29tZSBgY2xlYXJfcGFnZV90YWdfcmVmYCBjYWxscyB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIGxvZ2ljLCBhbHNvIHVucmVhY2hhYmxlLgoKR2l2ZW4gdGhhdCBhIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudCwgd2hpY2ggZG9lc24mIzM5O3QgYm9vdCB3aXRoIEtITyBkYXRhLCB3aWxsIG5ldmVyIHJlYWNoIGFueSBvZiB0aGVzZSBtb2RpZmllZCBvciBhZGRlZCBmdW5jdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcG9pbnQgaW4gZnV6emluZyB0aGlzIHBhdGNoIGFzIGl0IHN0YW5kcy4KCkhvbGQgb24sIHRob3VnaC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY2xldmVyIHRyaWNrcy4gIENhbiBpdCB3cml0ZSBzb21ldGhpbmcgdG8gYC9zeXMva2VybmVsL2tleGVjX2hhbmRvdmVyYCBvciBzaW1pbGFyIHRvIGluamVjdCBLSE8gZGF0YSBpbnRvIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG1ha2luZyB0aGlzIGNvZGUgcGF0aCBhY2Nlc3NpYmxlPyAgSSBzaG91bGQgY2hlY2sgdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBtZWNoYW5pc20gdG8gaW5qZWN0IHRoYXQgZGF0YSBkaXJlY3RseS4gSWYgdGhlcmUgaXMsIHRoZW4gd2UgKm1pZ2h0KiBoYXZlIGEgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zZXNzaW9uX3NldHVwX2luY29taW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4ODgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIG9yIHNlc3Npb24tcmVsYXRlZCBjb250ZXh0OgoKKipBbmFseXppbmcgYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBzdGFydGluZy4gJiMzNDtMZXQmIzM5O3MgY2hlY2sgYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYC4mIzM0OyBUaGlzIGluZGljYXRlcyBhIHNwZWNpZmljLCBsaWtlbHkgY3J1Y2lhbCwgcGllY2Ugb2YgY29kZSByZWxhdGVkIHRvIGluY29taW5nIHNlc3Npb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgdG93YXJkcyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaXNzdWVzLiBJJiMzOTttIHByb2JhYmx5IGZhY2luZyBhIHByb2JsZW0gd2l0aCBpbmNvbWluZyBzZXNzaW9ucywgYW5kIHRoaXMgaXMgd2hlcmUgSSYjMzk7dmUgZGVjaWRlZCB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLiBJdCBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGEgY29ubmVjdGlvbiBwcm9ibGVtLCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCBvciBkYXRhIGhhbmRsaW5nIGlzc3VlLiBLbm93aW5nIHRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCBvZiBhbiBpbmNvbWluZyBjb21tdW5pY2F0aW9uIHNlc3Npb24sIGEgcGl2b3RhbCBwb2ludCB3aGVyZSB0aGluZ3MgY2FuIGdvIHJpZ2h0IG9yLCBtb3JlIG9mdGVuIGluIG15IGxpbmUgb2Ygd29yaywgdGVycmlibHkgd3JvbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSByZWNhbGwgb3IgbG9jYXRlIHRoZSBjb2RlIGZvciB0aGlzIGZ1bmN0aW9uIGFuZCBzdGFydCBtZW50YWxseSB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IHBpbnBvaW50IGFueSBsb2dpY2FsIGZsYXdzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBvciBvYnZpb3VzIGVycm9ycyBpbiB0aGUgaW1wbGVtZW50YXRpb24uIFRoaXMgaW5pdGlhbCBjaGVjayBpcyBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2x1b19zZXNzaW9uX3NldHVwX2luY29taW5nJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNC1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM6MTI1Olx0ZXJyID0gbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcobHVvX3Nlci1cdTAwM2VzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNi1cdGlmIChlcnIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg9ODI9dm9pZCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfb3V0Z29pbmcodTY0ICpzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo4MzppbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04NC1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM9NTI5PXZvaWQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX291dGdvaW5nKHU2NCAqc2Vzc2lvbnNfcGEpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01MzQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjUzNTppbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0OTEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzLi4uIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBsdW9fZWFybHlfc3RhcnR1cGAuIFJpZ2h0LCBhbmQgYGx1b19lYXJseV9zdGFydHVwYCBpcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gdGhlIEtITyBkYXRhLCBzcGVjaWZpY2FsbHkgYGx1b19zZXJfcGh5c2AsIHdoaWNoIGl0IGdldHMgdmlhIGBraG9fcmV0cmlldmVfc3VidHJlZWAuIFRoaXMgZGF0YSBpcyBwYXNzZWQgZnJvbSB0aGUgYm9vdGxvYWRlciBvciBwb3RlbnRpYWxseSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGVyZSYjMzk7cyBubyB3YXkgdG8gaW5qZWN0IGFueXRoaW5nIGZyb20gdXNlcnNwYWNlIGFmdGVyIGJvb3Qg4oCTIGl0JiMzOTtzIGFsbCBwcmUtYm9vdCBjb25maWd1cmF0aW9uLgoKTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG5lZWRzIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJICptdXN0KiBleGFtaW5lIHRoZSBjb2RlIGl0c2VsZiwgbm90IHJlbHkgb24gd2hhdCBJICp0aGluayogSSBrbm93LiBGaW5lLiBMZXQmIzM5O3MgbG9vayBpbnRvIHRoaXMgYGtob19wcmVzZXJ2ZV9wYWdlYCBmdW5jdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byBjb25zaWRlciBpdCwgc28gSSBjaGVja2VkLiBJbml0aWFsbHksIEkgZm91bmQgaXQmIzM5O3MgKm5vdCogdXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gVGhlIGNoYW5nZXMgYXBwZWFyIGxpbWl0ZWQgdG8gYWRkaW5nIHVudXNlZCBmdW5jdGlvbnMgYW5kIHJlZmFjdG9yaW5nIHVucmVhY2hhYmxlIGNvZGUuIFNvLCBvbiB0aGUgc3VyZmFjZSwgaXQgbG9va3MgbGlrZSB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGJlIGZ1enplZC4KCkhvd2V2ZXIsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGFuZCBtYWtlIHN1cmUgdGhhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIGlzbiYjMzk7dCBsdXJraW5nIGluIHNvbWUgbWFjcm8gZGVmaW5pdGlvbiBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBtYWtlIGl0IHJlbGV2YW50LiBUaGlzIGlzIGEgdGhvcm91Z2ggcmV2aWV3LCBhZnRlciBhbGwsIGFuZCBJIG5lZWQgdG8gYmUgY2VydGFpbi4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoZXJlJiMzOTtzIG5vIGhpZGRlbiB1c2FnZSBiZWZvcmUgSSByZWFjaCBhIGZpbmFsIGNvbmNsdXNpb24uIEFmdGVyIG15IGNoZWNrLCBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19wcmVzZXJ2ZV9wYWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yND12b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yNi12b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mjc6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo2NDpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02NS17XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03MC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcyLXtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDctICogUmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ5LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NzEtICogUmVzdG9yZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDczLSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTIxLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTIzLSAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MzM6ICoga2hvX3ByZXNlcnZlX3BhZ2VzKCkuXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM2LSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5Mzc6aW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDYtfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NDgtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTYtICovXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk2NS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk2Ny1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk4Mz1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk4OC1cdHdoaWxlIChwZm4gXHUwMDNjIGVuZF9wZm4pIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTg5Olx0XHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5MC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTk4OiAqIGtob19wcmVzZXJ2ZV9wYWdlcyAtIHByZXNlcnZlIGNvbnRpZ3VvdXMgcGFnZXMgYWNyb3NzIGtleGVjXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5OS0gKiBAcGFnZTogZmlyc3QgcGFnZSBpbiB0aGUgbGlzdC5cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMDctICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDg6aW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDIyLVx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDIzOlx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcihwZm4sIGVuZF9wZm4pO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDI0LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAzOC19XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMzk6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDctICogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIEBwYWdlIGFuZCBAbnJfcGFnZXMgYXMgdGhlIGNvcnJlc3BvbmRpbmdcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDktICogcHJlc2VydmVkIGJsb2NrcyBpcyBub3Qgc3VwcG9ydGVkLlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExMDAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModmlydF90b19wYWdlKGNodW5rKSwgMSk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExMDItXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTE0Mj1pbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExNjg6XHRcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyh2bS1cdTAwM2VwYWdlc1tpXSwgbnJfY29udGlnX3BhZ2VzKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cdFx0aWYgKGVycilcbi0tXG5tbS9tZW1ibG9jay5jPTI1Mjg9c3RhdGljIGludCBfX2luaXQgcmVzZXJ2ZWRfbWVtX3ByZXNlcnZlKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTM3LVxubW0vbWVtYmxvY2suYzoyNTM4Olx0XHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xubW0vbWVtYmxvY2suYy0yNTM5LVx0XHRpZiAoZXJyKVxuLS1cbm1tL21lbWJsb2NrLmM9MjU1Nz1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2tob19mZHQodm9pZClcbi0tXG5tbS9tZW1ibG9jay5jLTI1NjktXHRmZHQgPSBwYWdlX3RvX3ZpcnQoZmR0X3BhZ2UpO1xubW0vbWVtYmxvY2suYzoyNTcwOlx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKGZkdF9wYWdlLCAxKTtcbm1tL21lbWJsb2NrLmMtMjU3MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MjUzCgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVudXNlZCBDb2RlIGFuZCBXb3J0aEZ1enppbmc9RmFsc2UqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IGBraG9fcHJlc2VydmVfcGFnZWAgYW5kLCBhcyBJIHN1c3BlY3RlZCwgaXQmIzM5O3MgY29tcGxldGVseSB1bnVzZWQuIERpZ2dpbmcgZGVlcGVyLCBpdCYjMzk7cyBjbGVhciB0aGUgb25seSBjaGFuZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCBjb25zaXN0IG9mIHVudXNlZCBmdW5jdGlvbnMgYW5kIGNvZGUgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIHdpdGhvdXQgYW55IEtITyBkYXRhIGluIHBsYXkuIENvbnNpZGVyaW5nIHRoZSBlZmZvcnQgdG8gdmFsdWUgcmF0aW8sIGFuZCBrbm93aW5nIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGVzc2VudGlhbGx5IGRvZXMgbm90aGluZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciBmdXp6aW5nIGVmZm9ydHMgb24gdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQsIGF0IGxlYXN0IG5vdCBpbiBpdHMgcHJlc2VudCBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6MzMuNTA3ODI3NzAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc1MTM3ODE3MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBBUElzIChga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGBraG9fcmVzdG9yZV9wYWdlYCkgZm9yIEtleGVjIEhhbmRvdmVyIChLSE8pIHdoaWNoIGFyZSBjdXJyZW50bHkgdW51c2VkIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgdHJlZS4gSXQgYWxzbyByZWZhY3RvcnMgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYSBuZXcgaW50ZXJuYWwgaGVscGVyIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgbW9kaWZpZXMgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgdG8gY2xlYXIgcGFnZSB0YWdzIGZvciB0YWlsIHBhZ2VzLiBIb3dldmVyLCBhbGwgb2YgdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgb25seSByZWFjaGFibGUgZHVyaW5nIHRoZSBLSE8gcmVzdG9yZSBwaGFzZSwgd2hpY2ggc3RyaWN0bHkgcmVxdWlyZXMgdGhlIGtlcm5lbCB0byBiZSBib290ZWQgd2l0aCBLSE8gZGF0YSBwYXNzZWQgZnJvbSBhIHByZXZpb3VzIGtlcm5lbC4gU2luY2Ugc3l6a2FsbGVyIGJvb3RzIGZyb20gYSBmcmVzaCBWTSBpbWFnZSB3aXRob3V0IEtITyBkYXRhLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozMy41MDc4MzM2MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NDMwMjY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNzowNjozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcXG5pbmRleCA4OTY4YzU2ZDJkNzNlLi42ZTJjNzViMTYyMDljIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaFxcbkBAIC0yMiw2ICsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XFxuIFxcbiBpbnQga2hvX3ByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuK3ZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuQEAgLTMwLDYgKzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcXG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9mcmVlKHZvaWQgKm1lbSk7XFxuIHZvaWQga2hvX3Jlc3RvcmVfZnJlZSh2b2lkICptZW0pO1xcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xcbitzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcXG4gc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbiB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4gaW50IGtob19hZGRfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCB2b2lkICpibG9iLCBzaXplX3Qgc2l6ZSk7XFxuQEAgLTY1LDYgKzY4LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHsgfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3ZtYWxsb2Modm9pZCAqcHRyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuIHtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG5pbmRleCA0ODM0YTgwOTk4NWFiLi5kZDQxZDMyNGMyMTNkIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuQEAgLTM1Nyw2ICszNTcsMjQgQEAgaW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpO1xcbiBcXG4rLyogRm9yIHBoeXNpY2FsbHkgY29udGlndW91cyBwYWdlcy4gKi9cXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbitcXG4rXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4rXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuK1xcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4rXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbitcXG4rXFx0LyogRm9yIGhpZ2gtb3JkZXIgYmxvY2tzLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cXG4rXFx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdFxcdC8qIENsZWFyIGVhY2ggcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4rXFx0XFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKiBGb3IgcGh5c2ljYWxseSBjb250aWd1b3VzIDAtb3JkZXIgcGFnZXMuICovXFxuIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiB7XFxuQEAgLTM2OSwyNSArMzg3LDE1IEBAIHN0YXRpYyB2b2lkIGtob19pbml0X3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbiBcXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpO1xcbi1cXG4tXFx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cXG4tXFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XFxuLVxcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cXG4tXFx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xcbi1cXG4tXFx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xcbi1cXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbi1cXHRcXHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XFxuK1xcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XFxuIFxcbiBcXHRpZiAob3JkZXIgXFx1MDAzZSAwKVxcbiBcXHRcXHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcXG4rc3RhdGljIHN0cnVjdCBwYWdlICpfX2tob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50ICpvcmRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShQSFlTX1BGTihwaHlzKSk7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuIFxcdHVuaW9uIGtob19wYWdlX2luZm8gaW5mbztcXG4gXFxuIFxcdGlmICghcGFnZSlcXG5AQCAtNDAxLDE3ICs0MDksMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXFxuIFxcdCAqL1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0bnJfcGFnZXMgPSAoMSBcXHUwMDNjXFx1MDAzYyBpbmZvLm9yZGVyKTtcXG4gXFxuIFxcdC8qIENsZWFyIHByaXZhdGUgdG8gbWFrZSBzdXJlIGxhdGVyIHJlc3RvcmVzIG9uIHRoaXMgcGFnZSBlcnJvciBvdXQuICovXFxuIFxcdHBhZ2UtXFx1MDAzZXByaXZhdGUgPSAwO1xcbitcXHRpZiAob3JkZXIpXFxuK1xcdFxcdCpvcmRlciA9IGluZm8ub3JkZXI7XFxuIFxcbi1cXHRpZiAoaXNfZm9saW8pXFxuLVxcdFxcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGtob19pbml0X3BhZ2VzKHBhZ2UsIG5yX3BhZ2VzKTtcXG4rXFx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2MgaW5mby5vcmRlcik7XFxuIFxcbi1cXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcXG4gXFx0cmV0dXJuIHBhZ2U7XFxuIH1cXG4gXFxuQEAgLTQyMywxMiArNDI4LDQxIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxcbiAgKi9cXG4gc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbiB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShwaHlzLCB0cnVlKTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob19pbml0X2ZvbGlvKHBhZ2UsIG9yZGVyKTtcXG4gXFxuLVxcdHJldHVybiBwYWdlID8gcGFnZV9mb2xpbyhwYWdlKSA6IE5VTEw7XFxuK1xcdHJldHVybiBwYWdlX2ZvbGlvKHBhZ2UpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcXG4gXFxuKy8qKlxcbisgKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG4rICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHBhZ2UuXFxuKyAqXFxuKyAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG4rICpcXG4rICogUmV0dXJuOiB0aGUgaGVhZCBwYWdlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XFxuK1xcbitcXHRyZXR1cm4gcGFnZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlKTtcXG4rXFxuIC8qKlxcbiAgKiBraG9fcmVzdG9yZV9wYWdlcyAtIHJlc3RvcmUgbGlzdCBvZiBjb250aWd1b3VzIG9yZGVyIDAgcGFnZXMuXFxuICAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxcbkBAIC00NDgsMTAgKzQ4MiwxMyBAQCBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4gXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG4gXFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IG9yZGVyID1cXG4gXFx0XFx0XFx0bWluKGNvdW50X3RyYWlsaW5nX3plcm9zKHBmbiksIGlsb2cyKGVuZF9wZm4gLSBwZm4pKTtcXG4tXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIGZhbHNlKTtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGluZm9fb3JkZXI7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFxcdTAwMjZpbmZvX29yZGVyKTtcXG4gXFxuIFxcdFxcdGlmICghcGFnZSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRcXHRraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgXFx1MDAzY1xcdTAwM2MgaW5mb19vcmRlcik7XFxuIFxcdFxcdHBmbiArPSAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbiBcXHR9XFxuIFxcbkBAIC04ODEsNiArOTE4LDUxIEBAIHZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuIFxcbisvKipcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG4rICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suXFxuKyAqIEBvcmRlcjogb3JkZXIgb2YgdGhlIGFsbG9jYXRpb24uXFxuKyAqXFxuKyAqIEluc3RydWN0cyBLSE8gdG8gcHJlc2VydmUgYSBoaWdoLW9yZGVyIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiAobGlrZSBhIERNQVxcbisgKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXFxuKyAqIGVuc3VyZSB0aGUgdGFpbCBwYWdlcyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkIHdpdGggYSB6ZXJvIHJlZmNvdW50LlxcbisgKlxcbisgKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xcbisgKiBmdW5jdGlvbiwgaXQgbXVzdCBmaXJzdCB1bnByZXNlcnZlIHRoZSBibG9jayB1c2luZyBraG9fdW5wcmVzZXJ2ZV9wYWdlKCksXFxuKyAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbisgKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcbisgKi9cXG4raW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXFx1MDAyNmtob19vdXQucmFkaXhfdHJlZTtcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4rXFxuK1xcdGlmIChXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiBraG9fcmFkaXhfYWRkX3BhZ2UodHJlZSwgcGZuLCBvcmRlcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbitcXG4rLyoqXFxuKyAqIGtob191bnByZXNlcnZlX3BhZ2UgLSB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxcbisgKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4rICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi5cXG4rICpcXG4rICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKSBiZWZvcmUuXFxuKyAqL1xcbit2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4re1xcbitcXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUgPSBcXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbitcXG4rXFx0a2hvX3JhZGl4X2RlbF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbitcXG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4ge1xcbkBAIC05MTgsNyArMTAwMCw4IEBAIHN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbiAgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcy5cXG4gICpcXG4gICogUHJlc2VydmUgYSBjb250aWd1b3VzIGxpc3Qgb2Ygb3JkZXIgMCBwYWdlcy4gTXVzdCBiZSByZXN0b3JlZCB1c2luZ1xcbi0gKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDAuXFxuKyAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMFxcbisgKiB3aXRoIGVhY2ggcGFnZSBoYXZpbmcgYSByZWZlcmVuY2UgY291bnQgb2YgMSAoc3BsaXQpLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozMy44ODMwNzQ1ODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNzQ3NjI1NDU5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZDY2ZThjMWM3NGQzZDA4NjQwZWIwYThmZDc3ZWQ2YjcyODg4NWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDE3OjA2OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oIGIvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG5pbmRleCA4OTY4YzU2ZDJkNzNlLi42ZTJjNzViMTYyMDljIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmhcbkBAIC0yMiw2ICsyMiw4IEBAIGJvb2wgaXNfa2hvX2Jvb3Qodm9pZCk7XG4gXG4gaW50IGtob19wcmVzZXJ2ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2ludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbit2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0ciwgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pO1xuQEAgLTMwLDYgKzMyLDcgQEAgdm9pZCAqa2hvX2FsbG9jX3ByZXNlcnZlKHNpemVfdCBzaXplKTtcbiB2b2lkIGtob191bnByZXNlcnZlX2ZyZWUodm9pZCAqbWVtKTtcbiB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpO1xuIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcbiBpbnQga2hvX2FkZF9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJsb2IsIHNpemVfdCBzaXplKTtcbkBAIC02NSw2ICs2OCwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcylcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIHsgfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV92bWFsbG9jKHZvaWQgKnB0cixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcbiB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyBiL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcbmluZGV4IDQ4MzRhODA5OTg1YWIuLmRkNDFkMzI0YzIxM2QgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG4rKysgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5AQCAtMzU3LDYgKzM1NywyNCBAQCBpbnQga2hvX3JhZGl4X3dhbGtfdHJlZShzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob19yYWRpeF93YWxrX3RyZWUpO1xuIFxuKy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcbitcdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbitcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbitcbitcdC8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4rXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4rXHR9XG4rfVxuK1xuIC8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgMC1vcmRlciBwYWdlcy4gKi9cbiBzdGF0aWMgdm9pZCBraG9faW5pdF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiB7XG5AQCAtMzY5LDI1ICszODcsMTUgQEAgc3RhdGljIHZvaWQga2hvX2luaXRfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4gXG4gc3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbi1cbi1cdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4tXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbi1cdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbi1cdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbi1cbi1cdC8qIEZvciBoaWdoZXIgb3JkZXIgZm9saW9zLCB0YWlsIHBhZ2VzIGdldCBhIHBhZ2UgY291bnQgb2YgemVyby4gKi9cbi1cdGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKylcbi1cdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0a2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHBhZ2UsIG9yZGVyKTtcbiBcbiBcdGlmIChvcmRlciBcdTAwM2UgMClcbiBcdFx0cHJlcF9jb21wb3VuZF9wYWdlKHBhZ2UsIG9yZGVyKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIGJvb2wgaXNfZm9saW8pXG4rc3RhdGljIHN0cnVjdCBwYWdlICpfX2tob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgaW50ICpvcmRlcilcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19vbmxpbmVfcGFnZShQSFlTX1BGTihwaHlzKSk7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuIFx0dW5pb24ga2hvX3BhZ2VfaW5mbyBpbmZvO1xuIFxuIFx0aWYgKCFwYWdlKVxuQEAgLTQwMSwxNyArNDA5LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCBib29sIGlzX2ZvbGlvKVxuIFx0ICovXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGluZm8ubWFnaWMgIT0gS0hPX1BBR0VfTUFHSUMpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdG5yX3BhZ2VzID0gKDEgXHUwMDNjXHUwMDNjIGluZm8ub3JkZXIpO1xuIFxuIFx0LyogQ2xlYXIgcHJpdmF0ZSB0byBtYWtlIHN1cmUgbGF0ZXIgcmVzdG9yZXMgb24gdGhpcyBwYWdlIGVycm9yIG91dC4gKi9cbiBcdHBhZ2UtXHUwMDNlcHJpdmF0ZSA9IDA7XG4rXHRpZiAob3JkZXIpXG4rXHRcdCpvcmRlciA9IGluZm8ub3JkZXI7XG4gXG4tXHRpZiAoaXNfZm9saW8pXG4tXHRcdGtob19pbml0X2ZvbGlvKHBhZ2UsIGluZm8ub3JkZXIpO1xuLVx0ZWxzZVxuLVx0XHRraG9faW5pdF9wYWdlcyhwYWdlLCBucl9wYWdlcyk7XG4rXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIDFVTCBcdTAwM2NcdTAwM2MgaW5mby5vcmRlcik7XG4gXG4tXHRhZGp1c3RfbWFuYWdlZF9wYWdlX2NvdW50KHBhZ2UsIG5yX3BhZ2VzKTtcbiBcdHJldHVybiBwYWdlO1xuIH1cbiBcbkBAIC00MjMsMTIgKzQyOCw0MSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cywgYm9vbCBpc19mb2xpbylcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXG4ge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlKHBoeXMsIHRydWUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob19pbml0X2ZvbGlvKHBhZ2UsIG9yZGVyKTtcbiBcbi1cdHJldHVybiBwYWdlID8gcGFnZV9mb2xpbyhwYWdlKSA6IE5VTEw7XG4rXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfZm9saW8pO1xuIFxuKy8qKlxuKyAqIGtob19yZXN0b3JlX3BhZ2UgLSByZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxuKyAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuKyAqXG4rICogUmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgd2l0aFxuKyAqIGtob19wcmVzZXJ2ZV9wYWdlKCkuXG4rICpcbisgKiBSZXR1cm46IHRoZSBoZWFkIHBhZ2Ugb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLlxuKyAqL1xuK3N0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXG4re1xuK1x0dW5zaWduZWQgaW50IG9yZGVyO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UgPSBfX2tob19yZXN0b3JlX3BhZ2UocGh5cywgXHUwMDI2b3JkZXIpO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZShwYWdlLCBvcmRlcik7XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XG4rXG4gLyoqXG4gICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLlxuICAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxuQEAgLTQ0OCwxMCArNDgyLDEzIEBAIHN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuIFx0d2hpbGUgKHBmbiBcdTAwM2MgZW5kX3Bmbikge1xuIFx0XHRjb25zdCB1bnNpZ25lZCBpbnQgb3JkZXIgPVxuIFx0XHRcdG1pbihjb3VudF90cmFpbGluZ196ZXJvcyhwZm4pLCBpbG9nMihlbmRfcGZuIC0gcGZuKSk7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0ga2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBmYWxzZSk7XG4rXHRcdHVuc2lnbmVkIGludCBpbmZvX29yZGVyO1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShQRk5fUEhZUyhwZm4pLCBcdTAwMjZpbmZvX29yZGVyKTtcbiBcbiBcdFx0aWYgKCFwYWdlKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuK1xuK1x0XHRraG9faW5pdF9wYWdlcyhwYWdlLCAxVUwgXHUwMDNjXHUwMDNjIGluZm9fb3JkZXIpO1xuIFx0XHRwZm4gKz0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4gXHR9XG4gXG5AQCAtODgxLDYgKzkxOCw1MSBAQCB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX2ZvbGlvKTtcbiBcbisvKipcbisgKiBraG9fcHJlc2VydmVfcGFnZSAtIHByZXNlcnZlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrLlxuKyAqIEBwYWdlOiBoZWFkIHBhZ2Ugb2YgdGhlIGJsb2NrLlxuKyAqIEBvcmRlcjogb3JkZXIgb2YgdGhlIGFsbG9jYXRpb24uXG4rICpcbisgKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcbisgKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXG4rICogZW5zdXJlIHRoZSB0YWlsIHBhZ2VzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHplcm8gcmVmY291bnQuXG4rICpcbisgKiBJZiBhIGRyaXZlciBuZWVkcyB0byBzcGxpdCBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcHJlc2VydmVkIHdpdGggdGhpc1xuKyAqIGZ1bmN0aW9uLCBpdCBtdXN0IGZpcnN0IHVucHJlc2VydmUgdGhlIGJsb2NrIHVzaW5nIGtob191bnByZXNlcnZlX3BhZ2UoKSxcbisgKiBwZXJmb3JtIHRoZSBzcGxpdCwgYW5kIHRoZW4gcmUtcHJlc2VydmUgdGhlIGluZGl2aWR1YWwgcGFnZXMgdXNpbmdcbisgKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbisgKi9cbitpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3Qga2hvX3JhZGl4X3RyZWUgKnRyZWUgPSBcdTAwMjZraG9fb3V0LnJhZGl4X3RyZWU7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xuK1xuK1x0aWYgKFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4ga2hvX3JhZGl4X2FkZF9wYWdlKHRyZWUsIHBmbiwgb3JkZXIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XG4rXG4rLyoqXG4rICoga2hvX3VucHJlc2VydmVfcGFnZSAtIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2suXG4rICogQHBhZ2U6IGhlYWQgcGFnZSBvZiB0aGUgYmxvY2suXG4rICogQG9yZGVyOiBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbi5cbisgKlxuKyAqIEluc3RydWN0cyBLSE8gdG8gdW5wcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIGJ5XG4rICoga2hvX3ByZXNlcnZlX3BhZ2UoKSBiZWZvcmUuXG4rICovXG4rdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0c3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlID0gXHUwMDI2a2hvX291dC5yYWRpeF90cmVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbitcbitcdGtob19yYWRpeF9kZWxfcGFnZSh0cmVlLCBwZm4sIG9yZGVyKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfcGFnZSk7XG4rXG4gc3RhdGljIHVuc2lnbmVkIGludCBfX2tob19wcmVzZXJ2ZV9wYWdlc19vcmRlcih1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG5AQCAtOTE4LDcgKzEwMDAsOCBAQCBzdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcbiAgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcy5cbiAgKlxuICAqIFByZXNlcnZlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMuIE11c3QgYmUgcmVzdG9yZWQgdXNpbmdcbi0gKiBraG9fcmVzdG9yZV9wYWdlcygpIHRvIGVuc3VyZSB0aGUgcGFnZXMgYXJlIHJlc3RvcmVkIHByb3Blcmx5IGFzIG9yZGVyIDAuXG4rICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXG4rICogd2l0aCBlYWNoIHBhZ2UgaGF2aW5nIGEgcmVmZXJlbmNlIGNvdW50IG9mIDEgKHNwbGl0KS5cbiAgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmVcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjMzLjg4MzA3NTkzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2OTY1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBzb21lIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLCBhbGwgcmVzaWRpbmcgd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gTmF0dXJhbGx5LCBga2V4ZWNfaGFuZG92ZXIuaGAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgdGhlc2UgYWRkaXRpb25zLiBUaGUgY29yZSB0aGVtZSBoZXJlIGlzIFwia2V4ZWMgaGFuZG92ZXJcIiBvciBLSE8sIGFuZCBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lcywgSSdtIGd1ZXNzaW5nIHRoaXMgcGF0Y2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIG1hbmFnaW5nIHRob3NlIGhpZ2gtb3JkZXIgcGFnZSBibG9ja3MgZHVyaW5nIHRoZSBoYW5kb3ZlciBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uYWxpdHkgZXZlbiBlbmFibGVkIGluIG91ciBjdXJyZW50IGNvbmZpZ3VyYXRpb24/XCIgR290dGEgYmUgc3VyZSB3ZSdyZSBhY3R1YWxseSAqdXNpbmcqIHRoaXMgYmVmb3JlIEkgZ28gdG9vIGRlZXAuIEknbGwgZ2V0IGBncmVwcGVyYCBmaXJlZCB1cCBhbmQgc2VhcmNoIGZvciBvY2N1cnJlbmNlcyBvZiBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBxdWljayB1bmRlcnN0YW5kaW5nIG9mIHdoZXRoZXIgdGhpcyBLSE8gZmVhdHVyZSBpcyBldmVuIHJlYWNoYWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjozOC4xMjQ3NzU4MjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1Nzc3NDE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfS0VYRUNfSEFORE9WRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0PTE0PVByZXJlcXVpc2l0ZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdC0xNi1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6MTc6S0hPIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBgYENPTkZJR19LRVhFQ19IQU5ET1ZFUmBgXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTE4LXNldCB0byB5LiBFdmVyeSBLSE8gcHJvZHVjZXIgbWF5IGhhdmUgaXRzIG93biBjb25maWcgb3B0aW9uIHRoYXQgeW91XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q9ODc9VGhlc2UgZGVidWdmcyBpbnRlcmZhY2VzIGFyZSBhdmFpbGFibGUgd2hlbiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6ODg6YGBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU2BgIGVuYWJsZWQuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0LTg5LVxcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzY4PXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzQtXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzc1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVIpKVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3Ni1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9Mjc0PXN0YXRpYyB2b2lkIHNldHVwX2tobyhjb25zdCBzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMjgwLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzoyODE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTI4Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9MzAxPXNldHVwX2Jvb3RfcGFyYW1ldGVycyhzdHJ1Y3Qga2ltYWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmMtMzkwLVxcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYzozOTE6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSKSkge1xcbmFyY2gveDg2L2tlcm5lbC9rZXhlYy1iemltYWdlNjQuYy0zOTItXFx0XFx0LyogU2V0dXAgc3BhY2UgdG8gc3RvcmUgcHJlc2VydmF0aW9uIG1ldGFkYXRhICovXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM9NDc1PXN0YXRpYyB2b2lkICpiekltYWdlNjRfbG9hZChzdHJ1Y3Qga2ltYWdlICppbWFnZSwgY2hhciAqa2VybmVsLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4MS1cXG5hcmNoL3g4Ni9rZXJuZWwva2V4ZWMtYnppbWFnZTY0LmM6NTgyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpXFxuYXJjaC94ODYva2VybmVsL2tleGVjLWJ6aW1hZ2U2NC5jLTU4My1cXHRcXHRrYnVmLmJ1ZnN6ICs9IHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgK1xcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM9NDU2PXN0YXRpYyB2b2lkIF9faW5pdCBhZGRfa2hvKHU2NCBwaHlzX2FkZHIsIHUzMiBkYXRhX2xlbilcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTQ2MS1cXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjI6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikpIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo0NjM6XFx0XFx0cHJfd2FybihcXFwiUGFzc2VkIEtITyBkYXRhLCBidXQgQ09ORklHX0tFWEVDX0hBTkRPVkVSIG5vdCBzZXQuIElnbm9yaW5nLlxcXFxuXFxcIik7XFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtNDY0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9OTI4PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9pbml0X2R0X2NoZWNrX2tobyh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy05MzItXFxuZHJpdmVycy9vZi9mZHQuYzo5MzM6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUikgfHwgKGxvbmcpbm9kZSBcXHUwMDNjIDApXFxuZHJpdmVycy9vZi9mZHQuYy05MzQtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9vZi9rZXhlYy5jPTI1OD1zdGF0aWMgaW50IGtob19hZGRfY2hvc2VuKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICpmZHQsIGludCBjaG9zZW5fbm9kZSlcXG4tLVxcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yNjAtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9vZi9rZXhlYy5jOjI2MTojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxuZHJpdmVycy9vZi9rZXhlYy5jLTI2Mi1cXHRwaHlzX2FkZHJfdCBmZHRfbWVtID0gMDtcXG4tLVxcbmRyaXZlcnMvb2Yva2V4ZWMuYy0yOTAtXFxuZHJpdmVycy9vZi9rZXhlYy5jOjI5MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxuZHJpdmVycy9vZi9rZXhlYy5jLTI5Mi1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTE3PXN0cnVjdCBwYWdlO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xOC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTk6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMC1ib29sIGtob19pc19lbmFibGVkKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjgtfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjk6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9Mzc9dHlwZWRlZiBpbnQgKCpraG9fcmFkaXhfdHJlZV93YWxrX2NhbGxiYWNrX3QpKHBoeXNfYWRkcl90IHBoeXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtMzktXFxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oOjQwOiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg9NDg9aW50IGtob19yYWRpeF93YWxrX3RyZWUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxuaW5jbHVkZS9saW51eC9raG9fcmFkaXhfdHJlZS5oLTUwLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaDo1MTojZWxzZSAgLyogI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC01Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaD02Mj1zdGF0aWMgaW5saW5lIGludCBraG9fcmFkaXhfd2Fsa190cmVlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2hvX3JhZGl4X3RyZWUuaC02Ny1cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmg6Njg6I2VuZGlmIC8qICNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVIgKi9cXG5pbmNsdWRlL2xpbnV4L2tob19yYWRpeF90cmVlLmgtNjktXFxuLS1cXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaD00Mz1zdHJ1Y3Qga2V4ZWNfYnVmO1xcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTQ0LVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjQ1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC00Ni1pbnQga2hvX2xvY2F0ZV9tZW1faG9sZShzdHJ1Y3Qga2V4ZWNfYnVmICprYnVmLFxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9NTY9c3RhdGljIGlubGluZSBpbnQga2hvX2ZpbGxfa2ltYWdlKHN0cnVjdCBraW1hZ2UgKmltYWdlKSB7IHJldHVybiAwOyB9XFxua2VybmVsL2tleGVjX2ludGVybmFsLmg6NTc6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTU4LSNlbmRpZiAvKiBMSU5VWF9LRVhFQ19JTlRFUk5BTF9IICovXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZT0zPWx1by15IDo9XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtOS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfS0VYRUNfSEFORE9WRVIpXFx0XFx0Kz0ga2V4ZWNfaGFuZG92ZXIub1xcbmtlcm5lbC9saXZldXBkYXRlL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRylcXHQrPSBrZXhlY19oYW5kb3Zlcl9kZWJ1Zy5vXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGU6MTI6b2JqLSQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlMpXFx0Kz0ga2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5vXFxua2VybmVsL2xpdmV1cGRhdGUvTWFrZWZpbGUtMTMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTU2PXN0YXRpY19hc3NlcnQoc2l6ZW9mKHVuaW9uIGtob19wYWdlX2luZm8pID09IHNpemVvZigoKHN0cnVjdCBwYWdlICopMCktXFx1MDAzZXByaXZhdGUpKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTU3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NTg6c3RhdGljIGJvb2wga2hvX2VuYWJsZSBfX3JvX2FmdGVyX2luaXQgPSBJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9FTkFCTEVfREVGQVVMVCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy01OS1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NzA4PXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc5Ny0gKiBgYC9zeXMva2VybmVsL2RlYnVnL2toby9vdXQvc3ViX2ZkdHMvQG5hbWVgYCB3aGVuIGtlcm5lbCBpcyBjb25maWd1cmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjc5ODogKiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNzk5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTgtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo5OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlYnVnZnMuaFxcdTAwM2VcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg9MjM9ZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC0yNC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjI1OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdGU1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjYtaW50IGtob19kZWJ1Z2ZzX2luaXQodm9pZCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fZGVidWdmc19ibG9iX3JlbW92ZShzdHJ1Y3Qga2hvX2RlYnVnZnMgKmRiZyxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTQxLVxcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmJsb2IpIHsgfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6NDI6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC00My1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjQ0OiNpZmRlZiBDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTQ1LWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTQ3PXN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC01MC19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDo1MTojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaC01Mi1cXG4tLVxcbm1tL21lbWJsb2NrLmMtMjEtXFxubW0vbWVtYmxvY2suYzoyMjojaWZkZWYgQ09ORklHX0tFWEVDX0hBTkRPVkVSXFxubW0vbWVtYmxvY2suYy0yMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGliZmR0LmhcXHUwMDNlXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9raG8vYWJpL21lbWJsb2NrLmhcXHUwMDNlXFxubW0vbWVtYmxvY2suYzoyNjojZW5kaWYgLyogQ09ORklHX0tFWEVDX0hBTkRPVkVSICovXFxubW0vbWVtYmxvY2suYy0yNy1cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjUxNT1ib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19pc19raG9fc2NyYXRjaF9tZW1vcnkocGh5c19hZGRyX3QgYWRkcilcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjUyNS1cXG5tbS9tZW1ibG9jay5jOjI1MjY6I2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbm1tL21lbWJsb2NrLmMtMjUyNy1cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjcwOD1zdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZV9tZW1fa2hvX3Jldml2ZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCBzaXplLFxcbi0tXFxubW0vbWVtYmxvY2suYy0yNzEyLX1cXG5tbS9tZW1ibG9jay5jOjI3MTM6I2VuZGlmIC8qIENPTkZJR19LRVhFQ19IQU5ET1ZFUiAqL1xcbm1tL21lbWJsb2NrLmMtMjcxNC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g9NjA9Q09ORklHX0JMS19ERVZfSU5JVFJEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vdm10ZXN0LnNoOjYxOkNPTkZJR19LRVhFQ19IQU5ET1ZFUj15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL3ZtdGVzdC5zaDo2MjpDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUc9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2g6NjM6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHRlM9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2toby92bXRlc3Quc2gtNjQtQ09ORklHX1RFU1RfS0VYRUNfSEFORE9WRVI9eVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc9Mj1DT05GSUdfS0VYRUNfRklMRT15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWc6MzpDT05GSUdfS0VYRUNfSEFORE9WRVI9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvY29uZmlnOjQ6Q09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo1OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saXZldXBkYXRlL2NvbmZpZzo2OkNPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRz15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGl2ZXVwZGF0ZS9jb25maWctNy1DT05GSUdfTElWRVVQREFURT15XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjM5Ljg4MjU1NTU0MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDQzNzAzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgdGhyZWUgbmV3IGZ1bmN0aW9uczogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBUaGV5J3JlIGJlaW5nIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoZXNlIGFyZSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gQW5kIHRoZXkncmUgcGFydCBvZiB0aGUgS2V4ZWMgSGFuZG92ZXIgKEtITykgZmVhdHVyZSwgd2hpY2ggaXMgb25seSBlbmFibGVkIGlmIGBDT05GSUdfS0VYRUNfSEFORE9WRVJgIGlzIHNldC4gUmlnaHQsIEtITyBpcyBhbGwgYWJvdXQgcHJlc2VydmluZyBtZW1vcnkgYWNyb3NzIGEgYGtleGVjYCBjYWxsLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gaGFuZGxpbmcgaGlnaC1vcmRlciBwYWdlcy4gVGhhdCBtYWtlcyBzZW5zZSwgYXMgdGhlc2UgYXJlIG1vcmUgbGlrZWx5IHRvIGdldCBmcmFnbWVudGVkIGFuZCBsb3N0IGR1cmluZyBhIGhhbmRvdmVyLiBUaGUga2V5IHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGVyZSBhbnkgd2F5IGZvciB0aGlzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgc3BhY2U/IElmIHNvLCB0aGF0IG9wZW5zIGEgaHVnZSBjYW4gb2Ygd29ybXMgaW4gdGVybXMgb2Ygc2VjdXJpdHkuIEtITyBpcyBhIGtlcm5lbC1zaWRlIGZlYXR1cmUsIHVzZWQgYnkga2V4ZWMsIGEgbWVjaGFuaXNtIHRvIHN3aXRjaCB0byBhIG5ldyBrZXJuZWwuIFNvIHRoZSBpbnRlbmRlZCBjb25zdW1lcnMgYXJlIGRlZmluaXRlbHkgZHJpdmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbSBoZXJlOiB0aGVzZSBmdW5jdGlvbnMsIGFzIEFQSXMsIGFyZSBmb3IgZHJpdmVycyB0byBwcmVzZXJ2ZSB0aGVpciBvd24gaGlnaC1vcmRlciBwYWdlcyBkdXJpbmcgYSBga2V4ZWNgLlxuXG5Ob3csIHRoZSByZWFsIHZhbHVlIG9mIHRoZSBwYXRjaCBpcyBnb2luZyB0byBkZXBlbmQgb24gKndobyogaXMgdXNpbmcgaXQuIEFyZSB0aGVyZSBhbnkgZHJpdmVycyBhY3R1YWxseSBsZXZlcmFnaW5nIHRoZXNlIEFQSXM/IFRoYXTigJlzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIHdpdGhpbiB0aGUgY29kZWJhc2UgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoYXQnbGwgdGVsbCBtZSBpZiB0aGlzIGlzIHB1cmVseSB0aGVvcmV0aWNhbCBvciBpZiB0aGlzIGhhcyBhbnkgbWVhc3VyYWJsZSBlZmZlY3Qgb24gcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgb3Igc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6NDUuODg2OTI4MDI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzQ5NzQ0NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NjI9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3MS0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjEtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM0LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0Ni19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk5LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAwODppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjItXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjM6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzOTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0Ny0gKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgQHBhZ2UgYW5kIEBucl9wYWdlcyBhcyB0aGUgY29ycmVzcG9uZGluZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTQyPWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTE2ODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXFx1MDAzZXBhZ2VzW2ldLCBucl9jb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTM3LVxcbm1tL21lbWJsb2NrLmM6MjUzODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xcbm1tL21lbWJsb2NrLmMtMjUzOS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTU3PXN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVfa2hvX2ZkdCh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTY5LVxcdGZkdCA9IHBhZ2VfdG9fdmlydChmZHRfcGFnZSk7XFxubW0vbWVtYmxvY2suYzoyNTcwOlxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XFxubW0vbWVtYmxvY2suYy0yNTcxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA2OjQ3Ljc2MTkyNjM5OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDUxMDk4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlIGhhdmUgaGVyZS5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuQWxyaWdodCwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBwb3RlbnRpYWwgbmV3IHByaW1pdGl2ZXMgZm9yIHBhZ2UgbWFuYWdlbWVudCwgcGVyaGFwcyBzb21lIGZvcm0gb2YgY2FjaGluZyBvciBkZWxheWVkIGZyZWVpbmc/IEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIHJ1bm5pbmcgYSBxdWljayBgZ3JlcGAgY29uZmlybXMgbXkgc3VzcGljaW9uOiBga2hvX3ByZXNlcnZlX3BhZ2VgIGlzbid0ICphY3R1YWxseSogYmVpbmcgdXNlZCBhbnl3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZSwgYXQgbGVhc3Qgbm90IHlldC4gVGhhdCdzIGEgcmVkIGZsYWcuIEJlZm9yZSBJIGRpZyBkZWVwZXIgaW50byB0aGUgaW50cmljYWNpZXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIG9yIGBraG9fcmVzdG9yZV9wYWdlYCBhcmVuJ3QgYmVpbmcgY2FsbGVkIGJ5IHNvbWV0aGluZyBlbHNlLiBCYWNrIHRvIHRoZSBgZ3JlcGAsIEknbGwgY2hlY2sgZm9yIGFueSBpbW1lZGlhdGUgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDY6NTMuNDY3MDM5NDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTE1NzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzdG9yZV9wYWdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zND1zdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNTpzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MzY6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0zNy12b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD05ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqa2hvX3Jlc3RvcmVfZm9saW8ocGh5c19hZGRyX3QgcGh5cylcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05OC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6OTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqa2hvX3Jlc3RvcmVfcGFnZXMocGh5c19hZGRyX3QgcGh5cyxcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTAwLVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5yX3BhZ2VzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0zODg9c3RhdGljIHZvaWQga2hvX2luaXRfZm9saW8oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMzk1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6Mzk2OnN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19raG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGludCAqb3JkZXIpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0zOTcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00Mjk9c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MzEtXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDMyOlxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKHBoeXMsIFxcdTAwMjZvcmRlcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MzMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0My0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0NDogKiBraG9fcmVzdG9yZV9wYWdlIC0gcmVzdG9yZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0NS0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDUxLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDUyOnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlKHBoeXNfYWRkcl90IHBoeXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NTMte1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU0LVxcdHVuc2lnbmVkIGludCBvcmRlcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ1NTpcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IF9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzLCBcXHUwMDI2b3JkZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDU2LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjMtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDY0OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY2LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDY3OiAqIGtob19yZXN0b3JlX3BhZ2VzIC0gcmVzdG9yZSBsaXN0IG9mIGNvbnRpZ3VvdXMgb3JkZXIgMCBwYWdlcy5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ2OC0gKiBAcGh5czogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDc1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDc2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDc3LXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDg1LVxcdFxcdHVuc2lnbmVkIGludCBpbmZvX29yZGVyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDg2OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gX19raG9fcmVzdG9yZV9wYWdlKFBGTl9QSFlTKHBmbiksIFxcdTAwMjZpbmZvX29yZGVyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ4Ny1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDk2LX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ5NzpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00OTgtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyNi0gKiBJbnN0cnVjdHMgS0hPIHRvIHByZXNlcnZlIGEgaGlnaC1vcmRlciBjb250aWd1b3VzIGFsbG9jYXRpb24gKGxpa2UgYSBETUFcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkyNzogKiBidWZmZXIpIGFzIGEgc2luZ2xlIHVuaXQuIEl0IG11c3QgYmUgcmVzdG9yZWQgdXNpbmcga2hvX3Jlc3RvcmVfcGFnZSgpIHRvXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjgtICogZW5zdXJlIHRoZSB0YWlsIHBhZ2VzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHplcm8gcmVmY291bnQuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk4Mz1zdGF0aWMgdm9pZCBfX2tob191bnByZXNlcnZlKHN0cnVjdCBraG9fcmFkaXhfdHJlZSAqdHJlZSxcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwMi0gKiBQcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMgbGlzdCBvZiBvcmRlciAwIHBhZ2VzLiBNdXN0IGJlIHJlc3RvcmVkIHVzaW5nXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDAzOiAqIGtob19yZXN0b3JlX3BhZ2VzKCkgdG8gZW5zdXJlIHRoZSBwYWdlcyBhcmUgcmVzdG9yZWQgcHJvcGVybHkgYXMgb3JkZXIgMFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwNC0gKiB3aXRoIGVhY2ggcGFnZSBoYXZpbmcgYSByZWZlcmVuY2UgY291bnQgb2YgMSAoc3BsaXQpLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjI3PXZvaWQgKmtob19yZXN0b3JlX3ZtYWxsb2MoY29uc3Qgc3RydWN0IGtob192bWFsbG9jICpwcmVzZXJ2YXRpb24pXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNjAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMjYxOlxcdFxcdFxcdHBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlcyhwaHlzLCBjb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI2Mi1cXHRcXHRcXHRpZiAoIXBhZ2UpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNzAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMjcxOlxcdFxcdHBhZ2UgPSBraG9fcmVzdG9yZV9wYWdlcyh2aXJ0X3RvX3BoeXMoY2h1bmspLCAxKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNzItXFx0XFx0aWYgKCFwYWdlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNjo1NS4xMjgyMDQ1OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI3OTY0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnVzZWQgS2VybmVsIEZ1bmN0aW9ucyBJbnZlc3RpZ2F0aW9uKipcblxuSG1tLCBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAgYXJlIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFR5cGljYWxseSwga2VybmVsIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZm9yIHVzZSBieSBvdGhlciBtb2R1bGVzIG9yIHN1YnN5c3RlbXMuIEJ1dCBpZiB0aGV5J3JlICpleHBvcnRlZCogYW5kICp1bnVzZWQqIHdpdGhpbiB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUgaXRzZWxmLCB0aGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUuIEl0IHN1Z2dlc3RzIGRlYWQgY29kZSwgYSBwb3NzaWJsZSBvdmVyc2lnaHQgZHVyaW5nIGRldmVsb3BtZW50LCBvciBtYXliZSBldmVuIHJlbW5hbnRzIG9mIGEgcmVmYWN0b3JpbmcgdGhhdCB3YXNuJ3QgZnVsbHkgY2xlYW5lZCB1cC5cblxuQmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBjbGFpbS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGZvciBhbnkgY2FsbGVycyBvZiB0aG9zZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBlbnRpcmUga2VybmVsIGNvZGViYXNlLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGVyZSBhcmUgbm8gY2FsbHMgdG8gdGhvc2UgZnVuY3Rpb25zIGx1cmtpbmcgc29tZXdoZXJlIHVuZXhwZWN0ZWQsIHBlcmhhcHMgaW4gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIG9yIGEgbGVzcy1mcmVxdWVudGx5IGF1ZGl0ZWQgc2VjdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSBwcmVmZXJyZWQgdG9vbCB0byBwZXJmb3JtIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2ggdGhyb3VnaCB0aGUgc291cmNlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QuLi4gbm8gcG9pbnQgaW4gYXNzdW1pbmcgc29tZXRoaW5nIEkgaGF2ZW4ndCBjb25maXJtZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6MDAuNzU2MTcxNzA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDc1MTg0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19wcmVzZXJ2ZV9wYWdlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTY5PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG5yX3BhZ2VzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNzAtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjcxOnN0YXRpYyBpbmxpbmUgaW50IGtob19wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcyLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDQxPUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX2ZvbGlvKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ3LSAqIFJlc3RvcmUgYSBoaWdoLW9yZGVyIHBhZ2UgYmxvY2sgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0ODogKiBraG9fcHJlc2VydmVfcGFnZSgpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQ5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTkxOT1FWFBPUlRfU1lNQk9MX0dQTChraG9fdW5wcmVzZXJ2ZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1NC0gKiBJbnN0cnVjdHMgS0hPIHRvIHVucHJlc2VydmUgYSBoaWdoLW9yZGVyIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCBieVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTU1OiAqIGtob19wcmVzZXJ2ZV9wYWdlKCkgYmVmb3JlLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTU2LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzowMi44MzEzNjM4MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NzA2ODg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFByZXNlcnZhdGlvbi9SZXN0b3JhdGlvbiBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoIGZvciBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAuIEh1aCwgdGhhdCdzIG9kZCwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMsIG5laXRoZXIgb2YgdGhvc2UgZnVuY3Rpb25zIHNlZW1zIHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCBjb2RlLiBUaGF0J3MgdW5leHBlY3RlZC4gSSB3b3VsZCBoYXZlIGFzc3VtZWQgd2UnZCBmaW5kIGF0IGxlYXN0ICpzb21lKiBpbnN0YW5jZXMsIGV2ZW4gaW4gb2JzY3VyZSBjb3JuZXIgY2FzZXMuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBkb3VibGUgY2hlY2sgbXkgdG9vbGluZywgbWF5YmUgdGhlIGNhbGwgZ3JhcGggZ2VuZXJhdGlvbiBpcyBtaXNzaW5nIHNvbWV0aGluZywgb3IgdGhlcmUncyBzb21lIGluZGlyZWN0IGNhbGwgbWVjaGFuaXNtIEknbSBub3QgYWNjb3VudGluZyBmb3IuIFxuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgSSdtIG1pc3Npbmcgb25lLCB3aGF0IGFib3V0IGBraG9fdW5wcmVzZXJ2ZV9wYWdlYD8gVGhhdCBvbmUgaXMgcmVsYXRlZCB0byB0aGUgb3RoZXJzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24gYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoZXJlJ3Mgc29tZSBkZXNpZ24gdXNpbmcgdGhhdCBpbiBwbGFjZSBvZiB0aGUgb3RoZXJzLiBUaGF0IHdvdWxkIGJlIGludGVyZXN0aW5nLCBhbmQgd29ydGggaW52ZXN0aWdhdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxMy43MDIwNTUxMDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjc1MDE5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3VucHJlc2VydmVfcGFnZVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0yNT1pbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI2OnZvaWQga2hvX3VucHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjctaW50IGtob19wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NzE9c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03NS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NzY6c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTc3LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzAtICogSWYgYSBkcml2ZXIgbmVlZHMgdG8gc3BsaXQgYSBibG9jayB0aGF0IGhhcyBiZWVuIHByZXNlcnZlZCB3aXRoIHRoaXNcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzMTogKiBmdW5jdGlvbiwgaXQgbXVzdCBmaXJzdCB1bnByZXNlcnZlIHRoZSBibG9jayB1c2luZyBraG9fdW5wcmVzZXJ2ZV9wYWdlKCksXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MzItICogcGVyZm9ybSB0aGUgc3BsaXQsIGFuZCB0aGVuIHJlLXByZXNlcnZlIHRoZSBpbmRpdmlkdWFsIHBhZ2VzIHVzaW5nXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTk0Nz1FWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1Nzp2b2lkIGtob191bnByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjE1LjcyOTU2MTEwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY0NDUzOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudDogQVBJIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldyBmdW5jdGlvbnMg4oCTIHRoZXkndmUgYmVlbiBpbnRyb2R1Y2VkIGFzIEFQSXMsIHdoaWNoIGlzIGZpbmUsIHRoYXQncyBob3cgaXQgc3RhcnRzLCBidXQgdGhleSBoYXZlbid0IGFjdHVhbGx5IGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBjb3JlIGxvZ2ljIHlldC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlIGFyZSB0aGVzZSBiZWluZyB1c2VkPyBXaGVyZSdzIHRoZSBydWJiZXIgbWVldGluZyB0aGUgcm9hZD9cIiBXZSBoYXZlIHRvIHRlc3QgdGhpcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnkgdGVzdGluZyBmb3IgdGhlc2UuIEkgbmVlZCB0byBsb2NhdGUgd2hlcmUgdGVzdHMgYXJlLiBMZXQncyBleHBsb3JlIHRoZSB0ZXN0aW5nIGRpcmVjdG9yeSwgSeKAmWxsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva2hvL2AgZGlyZWN0b3J5IG9yIHBlcmhhcHMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpdmV1cGRhdGUvYC4gTGV0J3Mgc2VlIGlmIGVpdGhlciBvZiB0aGVzZSBsb2NhdGlvbnMgaGFzIGFueSB0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxOS42OTQwMTc4MzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDM2MTI5MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowNzoxOS44MDgzODg4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc5MTcwMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVudXNlZCBDb2RlIGFuZCBQb3RlbnRpYWwgS0hPIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGVzZSBmdW5jdGlvbnMgYXJlIGNvbXBsZXRlbHkgdW50b3VjaGVkLCB1bnVzZWRcIi4gSWYgdGhleSBhcmVuJ3QgYmVpbmcgdXNlZCwgdGhlbiBvYnZpb3VzbHksIHRoZXkgYXJlbid0IGdvaW5nIHRvIGJlIGhpdCBieSBhbnkgZnV6emluZywgdGhhdCdzIGp1c3QgYSBnaXZlbi4gQnV0IGhvbGQgb24gYSBzZWNvbmTigKYgY291bGQgdGhlcmUgYmUgc29tZSBvdGhlciBLZXJuZWwgSGFuZG92ZXIgKEtITykgbWVjaGFuaXNtIHRoYXQgKmNvdWxkKiByZWFjaCB0aGVtPyBMZXQncyBzZWUuLi4gQWgsIGBraG9fcHJlc2VydmVfcGFnZWAgaXMgYW4gYEVYUE9SVF9TWU1CT0xfR1BMYCBmdW5jdGlvbiwgc28gaXQncyBpbnRlbmRlZCBmb3IgZHJpdmVycyB0byBjYWxsLiBJZiBubyBkcml2ZXIgYWN0dWFsbHkgdXRpbGl6ZXMgaXQsIHRoZW4gaXTigJlzIGp1c3QgZGVhZCBjb2RlLCBhIG5vLW9wLlxuXG5Ob3csIGxldCBtZSBkaWcgYSBiaXQgZGVlcGVyIGludG8gdGhpcyBwYXRjaCB0byBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyBoYXBwZW5pbmcuIE9rYXksIHRoZSBmaWxlIGNoYW5nZXMgaW5jbHVkZSBtb2RpZmljYXRpb25zIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCBhbmQgYGluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaGAuIEl0IGxvb2tzIGxpa2Ugd2UncmUgaW50cm9kdWNpbmcgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBga2hvX3Jlc3RvcmVfcGFnZWAgYW5kLCBjcml0aWNhbGx5LCBtb2RpZnlpbmcgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCB0byB1c2UgYF9fa2hvX3Jlc3RvcmVfcGFnZWAuIEJ1dCB3YWl0LCBhcmUgYGtob19yZXN0b3JlX2ZvbGlvYCBhbmQgYGtob19yZXN0b3JlX3BhZ2VzYCBhY3R1YWxseSAqdXNlZCogYW55d2hlcmU/IEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgY2FsbCBzaXRlczsgdGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBhY3QgaGVyZS4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6MjUuNTg3NTYxODE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ5OTIzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXN0b3JlX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zMz12b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MzQ6c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzUtc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9OTI9c3RhdGljIGlubGluZSB2b2lkIGtob19yZXN0b3JlX2ZyZWUodm9pZCAqbWVtKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtOTMtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk0OnN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC05NS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTM5Nj1zdGF0aWMgc3RydWN0IHBhZ2UgKl9fa2hvX3Jlc3RvcmVfcGFnZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBpbnQgKm9yZGVyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjMtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0MjQ6ICoga2hvX3Jlc3RvcmVfZm9saW8gLSByZWNyZWF0ZXMgdGhlIGZvbGlvIGZyb20gdGhlIHByZXNlcnZlZCBtZW1vcnkuXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjUtICogQHBoeXM6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZvbGlvLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00MjgtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0Mjk6c3RydWN0IGZvbGlvICpraG9fcmVzdG9yZV9mb2xpbyhwaHlzX2FkZHJfdCBwaHlzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDMwLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDQwLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ0MTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NDItXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEzODg9dm9pZCBraG9fcmVzdG9yZV9mcmVlKHZvaWQgKm1lbSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTM5NC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEzOTU6XFx0Zm9saW8gPSBraG9fcmVzdG9yZV9mb2xpbyhfX3BhKG1lbSkpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTM5Ni1cXHRpZiAoIVdBUk5fT04oIWZvbGlvKSlcXG4tLVxcbmxpYi90ZXN0X2toby5jPTIzNT1zdGF0aWMgaW50IGtob190ZXN0X3Jlc3RvcmVfZGF0YShjb25zdCB2b2lkICpmZHQsIGludCBub2RlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMjY3LVxcbmxpYi90ZXN0X2toby5jOjI2ODpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbmxpYi90ZXN0X2toby5jLTI2OS1cXHRcXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0vbWVtZmRfbHVvLmM9MzYyPXN0YXRpYyB2b2lkIG1lbWZkX2x1b19kaXNjYXJkX2ZvbGlvcyhjb25zdCBzdHJ1Y3QgbWVtZmRfbHVvX2ZvbGlvX3NlciAqZm9saW9zX3NlcixcXG4tLVxcbm1tL21lbWZkX2x1by5jLTM3NS1cXHRcXHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVxcdTAwM2VwZm4pO1xcbm1tL21lbWZkX2x1by5jOjM3NjpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbm1tL21lbWZkX2x1by5jLTM3Ny1cXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz00MTc9c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNDM3LVxcdFxcdHBoeXMgPSBQRk5fUEhZUyhwZm9saW8tXFx1MDAzZXBmbik7XFxubW0vbWVtZmRfbHVvLmM6NDM4OlxcdFxcdGZvbGlvID0ga2hvX3Jlc3RvcmVfZm9saW8ocGh5cyk7XFxubW0vbWVtZmRfbHVvLmMtNDM5LVxcdFxcdGlmICghZm9saW8pIHtcXG4tLVxcbm1tL21lbWZkX2x1by5jLTUwNy1cXHRcXHRwaHlzID0gUEZOX1BIWVMocGZvbGlvLVxcdTAwM2VwZm4pO1xcbm1tL21lbWZkX2x1by5jOjUwODpcXHRcXHRmb2xpbyA9IGtob19yZXN0b3JlX2ZvbGlvKHBoeXMpO1xcbm1tL21lbWZkX2x1by5jLTUwOS1cXHRcXHRpZiAoZm9saW8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjI3LjIzNzQ4OTkyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjQ3Mzc4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBga2hvX3Jlc3RvcmVfZm9saW9gIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHVzZWQgaW4gYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBmdW5jdGlvbi4gTGV0J3MgZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhhcyBjaGFuZ2VkIG9yIGlmIGl0J3MganVzdCBhIHJlZmFjdG9yaW5nLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBga2hvX3Jlc3RvcmVfcGFnZWAgZnVuY3Rpb24sIHdoaWNoIHNlcnZlZCBhcyB0aGUgd29ya2hvcnNlIGJlaGluZCByZXN0b3JpbmcgcGFnZXMsIGhhcyBub3cgYmVlbiBzcGxpdCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgIGFuZCBga2hvX3Jlc3RvcmVfZm9saW9gLiBUaGUgYGtob19yZXN0b3JlX3BhZ2VgIGZ1bmN0aW9uIGlzIHJlbW92ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIG5vdyBjb250YWlucyBtdWNoIGNsZWFuZXIgbG9naWMuXG5cblRoZSBjcnVjaWFsIGNoYW5nZSBzZWVtcyB0byBpbnZvbHZlIHRoZSB1c2Ugb2YgYG9yZGVyYCB3aGljaCBub3cgc2VlbXMgdG8gYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gSSBzZWUgdGhhdCB0aGUgYGlzX2ZvbGlvYCBmbGFnIGhhcyBiZWVuIHJlbW92ZWQuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoYXQgaW1wYWN0cyB0aGUgb3JpZ2luYWwgYmVoYXZpb3VyLlxuXG5JIG5vdGljZSB0aGUgb3JpZ2luYWwgbG9naWMgaW5zaWRlIHRoZSBgaWYgKGlzX2ZvbGlvKWAgYmxvY2sgaXMgbm93IGluIGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kLCB0aGVyZSdzIGEgbmV3IGBvcmRlcmAgdmFyaWFibGUsIGFuZCBpdHMgdmFsdWUgaXMgYXNzaWduZWQgdG8gdGhlIGAqb3JkZXJgLiBUaGUgbmV3IGBfX2tob19yZXN0b3JlX3BhZ2VgIG5vdyByZWNlaXZlcyBhbiBgb3JkZXJgIHBvaW50ZXIgYW5kIGBraG9faW5pdF9mb2xpb2AgdXNlcyB0aGUgcmVzdG9yZWQgYG9yZGVyYC5cblxuVGhlIGNvcmUgbG9naWMgcmVtYWlucyB0aGUgc2FtZTogcmV0cmlldmUgYSBgc3RydWN0IHBhZ2VgIGdpdmVuIGEgcGh5c2ljYWwgYWRkcmVzcywgdmFsaWRhdGUgYSBtYWdpYyBudW1iZXIsIGNsZWFyIHRoZSBgcHJpdmF0ZWAgZmllbGQsIGFuZCB0aGVuIGluaXRpYWxpemUgdGhlIGZvbGlvLiBJdCBsb29rcyBsaWtlIHRoZSBoYW5kbGluZyBvZiB0aGUgb3JkZXIgaGFzIGJlZW4gbWFkZSBtb3JlIGV4cGxpY2l0LCBhbmQgaXQncyBjbGVhbmVyIGluIHRoZSBuZXcgcmVmYWN0b3JpbmcuXG5UaGUgcmVtb3ZhbCBvZiB0aGUgYGlzX2ZvbGlvYCBmbGFnIGlzIGludGVyZXN0aW5nOyB0aGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGBraG9fcmVzdG9yZV9mb2xpb2Agbm93ICphbHdheXMqIGFzc3VtZXMgaXQncyBkZWFsaW5nIHdpdGggYSBmb2xpby5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBzdGlsbCBpbiB1c2UsIG9yIGlmIHRoaXMgcGF0Y2ggc3Vic3VtZXMgYWxsIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjM1LjQ4NDg3MDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NDY3ODI3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzdG9yZV9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzU9c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2UocGh5c19hZGRyX3QgcGh5cyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM2OnN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMzctdm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9OTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmtob19yZXN0b3JlX2ZvbGlvKHBoeXNfYWRkcl90IHBoeXMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtOTgtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjk5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEwMC1cXHRcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NDY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2UpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NjYtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0Njc6ICoga2hvX3Jlc3RvcmVfcGFnZXMgLSByZXN0b3JlIGxpc3Qgb2YgY29udGlndW91cyBvcmRlciAwIHBhZ2VzLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNDY4LSAqIEBwaHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00NzUtICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NzY6c3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00Nzcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy00OTYtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NDk3OkVYUE9SVF9TWU1CT0xfR1BMKGtob19yZXN0b3JlX3BhZ2VzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ5OC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDAyLSAqIFByZXNlcnZlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMuIE11c3QgYmUgcmVzdG9yZWQgdXNpbmdcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMDM6ICoga2hvX3Jlc3RvcmVfcGFnZXMoKSB0byBlbnN1cmUgdGhlIHBhZ2VzIGFyZSByZXN0b3JlZCBwcm9wZXJseSBhcyBvcmRlciAwXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA0LSAqIHdpdGggZWFjaCBwYWdlIGhhdmluZyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxIChzcGxpdCkuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEyMjc9dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI2MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNjE6XFx0XFx0XFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHBoeXMsIGNvbnRpZ19wYWdlcyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjYyLVxcdFxcdFxcdGlmICghcGFnZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNzE6XFx0XFx0cGFnZSA9IGtob19yZXN0b3JlX3BhZ2VzKHZpcnRfdG9fcGh5cyhjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTI3Mi1cXHRcXHRpZiAoIXBhZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjM3LjE0OTU1NjI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzA3Njg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBSZXN0b3JhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSBsb29raW5nIGF0IGBraG9fcmVzdG9yZV9wYWdlc2AgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBlbXBsb3llZCB3aXRoaW4gdGhlIGBraG9fcmVzdG9yZV92bWFsbG9jYCBmdW5jdGlvbi4gVGhlIGtleSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgYGtob19yZXN0b3JlX3ZtYWxsb2NgIGl0c2VsZiBhY3R1YWxseSB1dGlsaXplZCBhbnl3aGVyZT8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZ1cnRoZXIuIElmIGBraG9fcmVzdG9yZV92bWFsbG9jYCBpcyB1bnVzZWQsIHRoZW4gYGtob19yZXN0b3JlX3BhZ2VzYCBtaWdodCBiZSBkZWFkIGNvZGUgYXMgd2VsbCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHBvdGVudGlhbGx5IG9ubHkgdXNlZCBpbiBlZGdlIGNhc2VzIHRoYXQgbmVlZCB0byBiZSBleHBsaWNpdGx5IGV2YWx1YXRlZC4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCB0aGlzIHBhcnRpY3VsYXIgcmVzdG9yYXRpb24gcGF0aCByZW1haW5zIHJlbGV2YW50LiBJJ2xsIG5lZWQgdG8gZm9sbG93IHRoZSBjb25uZWN0aW9ucyBhbmQgc2VlIHdoZXJlIGV2ZXJ5dGhpbmcgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjY2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDc6NDMuMjIwMzI3Mjg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyMDAzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob19yZXN0b3JlX3ZtYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTM2PXN0cnVjdCBwYWdlICpraG9fcmVzdG9yZV9wYWdlcyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LWludCBraG9fYWRkX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYmxvYiwgc2l6ZV90IHNpemUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmtob19yZXN0b3JlX3BhZ2VzKHBoeXNfYWRkcl90IHBoeXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTA0LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMDU6c3RhdGljIGlubGluZSB2b2lkICpraG9fcmVzdG9yZV92bWFsbG9jKGNvbnN0IHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMDYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjE1PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3ZtYWxsb2MpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjE3LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTIxODogKiBraG9fcmVzdG9yZV92bWFsbG9jIC0gcmVjcmVhdGVzIGFuZCBwb3B1bGF0ZXMgYW4gYXJlYSBpbiB2bWFsbG9jIGFkZHJlc3NcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMTktICogc3BhY2UgZnJvbSB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTIyNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyMjc6dm9pZCAqa2hvX3Jlc3RvcmVfdm1hbGxvYyhjb25zdCBzdHJ1Y3Qga2hvX3ZtYWxsb2MgKnByZXNlcnZhdGlvbilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyMjgte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzEyLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEzMTM6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfdm1hbGxvYyk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMzE0LVxcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MjM1PXN0YXRpYyBpbnQga2hvX3Rlc3RfcmVzdG9yZV9kYXRhKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0yNTctXFxubGliL3Rlc3Rfa2hvLmM6MjU4OlxcdGZvbGlvc19pbmZvID0ga2hvX3Jlc3RvcmVfdm1hbGxvYyhmb2xpb3NfaW5mb19waHlzKTtcXG5saWIvdGVzdF9raG8uYy0yNTktXFx0aWYgKCFmb2xpb3NfaW5mbylcXG4tLVxcbm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQwNC1cXHRpZiAoc2VyLVxcdTAwM2Vucl9mb2xpb3MpIHtcXG5tbS9tZW1mZF9sdW8uYzo0MDU6XFx0XFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXFx1MDAyNnNlci1cXHUwMDNlZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy00MDYtXFx0XFx0aWYgKCFmb2xpb3Nfc2VyKVxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU1NS1cXHRpZiAoc2VyLVxcdTAwM2Vucl9mb2xpb3MpIHtcXG5tbS9tZW1mZF9sdW8uYzo1NTY6XFx0XFx0Zm9saW9zX3NlciA9IGtob19yZXN0b3JlX3ZtYWxsb2MoXFx1MDAyNnNlci1cXHUwMDNlZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy01NTctXFx0XFx0aWYgKCFmb2xpb3Nfc2VyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA3OjQ0Ljg2MjMzOTIxOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk4MDc2NzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBQYWdlIFJlc3RvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb25zLiBga2hvX3Jlc3RvcmVfcGFnZXNgIGlzIHVzZWQgYnkgYGtob19yZXN0b3JlX3ZtYWxsb2NgLCB3aGljaCBpcyB0aGVuIHVzZWQgYnkgYm90aCBgbGliL3Rlc3Rfa2hvLmNgIGFuZCBgbW0vbWVtZmRfbHVvLmNgLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGBraG9fcmVzdG9yZV9wYWdlYCBpbnRvIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgZXhwb3NpbmcgYGtob19yZXN0b3JlX3BhZ2VgIGFzIGEgbmV3IGV4cG9ydGVkIGZ1bmN0aW9uLCBpcyBpbnRlcmVzdGluZy4gSXQncyB1c2VkIGJ5IGBraG9fcmVzdG9yZV9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlc2Agbm93IHRvby4gU2luY2UgYGtob19yZXN0b3JlX3BhZ2VzYCBpcyBhY3R1YWxseSAqdXNlZCosIHRoZSBsb2dpYyBpbiBgX19raG9fcmVzdG9yZV9wYWdlYCBhbmQgYGtob19pbml0X3BhZ2VzYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCBJJ20gZm9jdXNpbmcgb24gdGhlIGluaXRpYWxpemF0aW9uIGFuZCByZXN0b3JhdGlvbiBsb2dpYy4gYGtob19pbml0X3BhZ2VzYCwgYGtob19pbml0X2ZvbGlvYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlLiBUaGUgY29kZSBmb3IgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgY2F1Z2h0IG15IGV5ZTpcblxuYGBgY1xuKy8qIEZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcGFnZXMuICovXG4rc3RhdGljIHZvaWQga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcbitcdC8qIEhlYWQgcGFnZSBnZXRzIHJlZmNvdW50IG9mIDEuICovXG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIENsZWFyIGhlYWQgcGFnZSdzIGNvZGV0YWcgdG8gYXZvaWQgYWNjb3VudGluZyBtaXNtYXRjaC4gKi9cbitcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlKTtcbitcbitcdC8qIEZvciBoaWdoLW9yZGVyIGJsb2NrcywgdGFpbCBwYWdlcyBnZXQgYSBwYWdlIGNvdW50IG9mIHplcm8uICovXG4rXHRmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDE7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpKyspIHtcbitcdFx0c2V0X3BhZ2VfY291bnQocGFnZSArIGksIDApO1xuK1x0XHQvKiBDbGVhciBlYWNoIHBhZ2UncyBjb2RldGFnIHRvIGF2b2lkIGFjY291bnRpbmcgbWlzbWF0Y2guICovXG4rXHRcdGNsZWFyX3BhZ2VfdGFnX3JlZihwYWdlICsgaSk7XG4rXHR9XG4rfVxuYGBgXG5cblRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgaXMgY2FsbGVkIGJ5IGBraG9faW5pdF9mb2xpb2AgYW5kIGBraG9fcmVzdG9yZV9wYWdlYC4gYGtob19pbml0X2ZvbGlvYCBpcyBjYWxsZWQgYnkgYGtob19yZXN0b3JlX2ZvbGlvYCwgYW5kIGBraG9fcmVzdG9yZV9mb2xpb2AgaXMgdXNlZCBieSBgbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvc2AgYW5kIGB0ZXN0X2tob2AuICBTbyB0aGUgbmV3IGNvZGUgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLiBJdOKAmXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhlIG9sZCBga2hvX2luaXRfZm9saW9gLCBidXQgd2l0aCBhIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBhZGRlZCBmb3IgdGhlIHRhaWwgcGFnZXMuXG5cbkxldCdzIGxvb2sgYXQgdGhlIG9sZCBga2hvX2luaXRfZm9saW9gIGNvZGU6XG5cbmBgYGNcbi1zdGF0aWMgdm9pZCBraG9faW5pdF9mb2xpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSAoMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuLVxuLVx0LyogSGVhZCBwYWdlIGdldHMgcmVmY291bnQgb2YgMS4gKi9cbi1cdHNldF9wYWdlX2NvdW50KHBhZ2UsIDEpO1xuLVx0LyogQ2xlYXIgaGVhZCBwYWdlJ3MgY29kZXRhZyB0byBhdm9pZCBhY2NvdW50aW5nIG1pc21hdGNoLiAqL1xuLVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xuLVxuLVx0LyogRm9yIGhpZ2hlciBvcmRlciBmb2xpb3MsIHRhaWwgcGFnZXMgZ2V0IGEgcGFnZSBjb3VudCBvZiB6ZXJvLiAqL1xuLVx0Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAxOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKVxuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlICsgaSwgMCk7XG4rXHRraG9faW5pdF9oaWdoX29yZGVyX3BhZ2UocGFnZSwgb3JkZXIpO1xuIFxuIFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuIFx0XHRwcmVwX2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpO1xuIH1cbmBgYFxuXG5SaWdodCwgaXQganVzdCBtb3ZlZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGhpZ2gtb3JkZXIgcGFnZSB0byBhbm90aGVyIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGUgaW5jbHVzaW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBmb3IgdGFpbCBwYWdlcyBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYC4gV2Ugbm93IGhhdmUgdGhlc2UgbmV3IGZ1bmN0aW9ucywgYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLiBCdXQgdGhvc2UgYXJlICp1bnVzZWQqIGF0IHRoZSBtb21lbnQuICBUaGUgcmVsZXZhbnQgY2hhbmdlcyBhcmUgdGhlIHJlZmFjdG9yaW5nIHVzaW5nIGBfX2tob19yZXN0b3JlX3BhZ2VgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSArIGkpYCBpbiBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYC5cblxuT2theSwgdGhlIGNydWNpYWwgcGFydDogYGNsZWFyX3BhZ2VfdGFnX3JlZmAgaXMgbm93IGJlaW5nIGNhbGxlZCBvbiB0YWlsIHBhZ2VzLiAqVGhhdCdzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCdzIGRlc2lnbmVkIHRvIGZpeCBhbiBhY2NvdW50aW5nIG1pc21hdGNoIGJ5IGNsZWFyaW5nIHBhZ2UgdGFncyBmb3IgdGhlIHRhaWwgcGFnZXMsIHdoaWNoIGlzIGdvb2QuIEJ1dCBpcyBpdCB3b3J0aCBzcGVuZGluZyB0aW1lIGZ1enppbmcgZm9yIGl0P1xuXG5ga2hvX3Jlc3RvcmVfZm9saW9gIGlzIHRoZSBtYWluXG5cbiIsIklucHV0VG9rZW5zIjoxOTMzOCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MDEuODQzMTA5NzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODM5MjE3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGVzdF9raG9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiTUFJTlRBSU5FUlM9MTQzNDM9RjpcXHRrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3ZlcipcXG5NQUlOVEFJTkVSUzoxNDM0NDpGOlxcdGxpYi90ZXN0X2toby5jXFxuTUFJTlRBSU5FUlMtMTQzNDUtRjpcXHR0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9raG8vXFxuLS1cXG5saWIvTWFrZWZpbGU9MTA2PW9iai0kKENPTkZJR19URVNUX09CSlBPT0wpICs9IHRlc3Rfb2JqcG9vbC5vXFxubGliL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgKz0gdGVzdF9raG8ub1xcbmxpYi9NYWtlZmlsZS0xMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjAzLjkyNzAzNjA2MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTEzMDMzNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIGZvciBTeXprYWxsZXItVHJpZ2dlcmFibGUgSW50ZXJmYWNlcyBpbiBgbGliL3Rlc3Rfa2hvLmNgKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIGZ1enppbmcgd2l0aCBzeXprYWxsZXIsIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgcGVlayBhdCBgbGliL3Rlc3Rfa2hvLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIG1vZHVsZSwgb3IgYW55IHBhcnQgb2YgaXQsIGV4cG9zZXMgYSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZS4gVGhlc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIHN5emthbGxlciwgYXMgdGhleSBvZnRlbiBwcm92aWRlIG1lY2hhbmlzbXMgdG8gaW50ZXJhY3Qgd2l0aCBrZXJuZWwgaW50ZXJuYWxzIGluIHdheXMgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlIHRvIGZ1enppbmcuIEEgZGVidWdmcyBvciBzeXNmcyBlbnRyeSBjb3VsZCBiZSBkaXJlY3RseSBtYW5pcHVsYXRlZCB0byBmZWVkIHVudXN1YWwgZGF0YSBvciB0cmlnZ2VyIHNwZWNpZmljIGNvZGUgcGF0aHMuIElmIEkgY2FuIGlkZW50aWZ5IHN1Y2ggYW4gaW50ZXJmYWNlIHdpdGhpbiB0aGlzIGZpbGUsIEkgY2FuIHNpZ25pZmljYW50bHkgbmFycm93IHRoZSBzY29wZSBvZiBteSBmdXp6aW5nIGVmZm9ydHMgYW5kIGluY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncy4gRXNzZW50aWFsbHksIEknbSB0cnlpbmcgdG8gaWRlbnRpZnkgbG93LWhhbmdpbmcgZnJ1aXQgZm9yIHN5emthbGxlciBleHBsb2l0YXRpb24gd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoaXMgc3BlY2lmaWMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODowOC40NDAwNzE4MDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzIwMDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2toby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2toby5jPTMxND1zdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0zMzktfVxcbmxpYi90ZXN0X2toby5jOjM0MDptb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcXG5saWIvdGVzdF9raG8uYy0zNDEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjA4LjQ5MDc5OTkyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzczNjMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gYGtob190ZXN0X2luaXRgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIFRoZSB0YXNrIGJlZm9yZSBtZSBpcyB0byB1bmRlcnN0YW5kIGBraG9fdGVzdF9pbml0YC4gIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGxvY2F0ZSB0aGUgc291cmNlIGNvZGUuIEl0J3MgdGVsbGluZyBtZSB0byBsb29rIGluIGBsaWIvdGVzdF9raG8uY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBUaGlzIGZpbGUgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0ZXN0aW5nIGZyYW1ld29yayBmb3IsIG9yIHJlbGF0ZWQgdG8sIHRoaXMgYGtob2AgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGtob190ZXN0X2luaXRgIGZ1bmN0aW9uICpkb2VzKi4gSXMgaXQgc2V0dGluZyB1cCB0ZXN0IGVudmlyb25tZW50cz8gSW5pdGlhbGl6aW5nIHNoYXJlZCByZXNvdXJjZXM/IFBlcmhhcHMgcmVnaXN0ZXJpbmcgdGVzdCBjYXNlcyBvciBmaXh0dXJlcz8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGBpbml0YCBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgY3JpdGljYWwgc2V0dXAgcm91dGluZXMuIEknbGwgYmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb25zLCBmaWxlIG9wZXJhdGlvbnMsIGdsb2JhbCB2YXJpYWJsZSBhc3NpZ25tZW50cywgb3IgYW55IG90aGVyIG9wZXJhdGlvbnMgdGhhdCBwcmltZSB0aGUgc3lzdGVtIGZvciB0ZXN0aW5nLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmV0dXJuIHZhbHVlLCB0b287IGlzIGl0IGEgc3VjY2VzcyBpbmRpY2F0b3IsIG9yIGRvZXMgaXQgcmV0dXJuIGEgcG9pbnRlciB0byBzb21lIHRlc3RpbmcgY29udGV4dD8gVGhpcyBpcyBteSBzdGFydGluZyBwb2ludCwgbGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NjAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxMy4yNjQ0MzcwNTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3Rfa2hvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4gMzE1OlxcdHtcXG4gMzE2OlxcdFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbiAzMTc6XFx0XFx0aW50IGVycjtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcXG4gMzIzOlxcdFxcdGlmICghZXJyKSB7XFxuIDMyNDpcXHRcXHRcXHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcXG4gMzI1OlxcdFxcdFxcdGlmIChlcnIpXFxuIDMyNjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIktITyByZXN0b3JlIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMyNzpcXHRcXHRcXHRlbHNlXFxuIDMyODpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4gMzM0OlxcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxcXG5cXFwiLCBLSE9fVEVTVF9GRFQsIGVycik7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0bW9kdWxlX2luaXQoa2hvX3Rlc3RfaW5pdCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcXG4gMzQzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MTMuMjY0NTI3NDAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDk2MTk2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLSE8gU3Vic3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGB0ZXN0X2tob2AgYmVoYXZpb3IuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uLCBgdGVzdF9raG9gLCBpcyBlc3NlbnRpYWxseSBhbiBhdXRvbWF0aWMgdGVzdCB0aGF0IGtpY2tzIG9mZiB1cG9uIG1vZHVsZSBsb2FkLiBJZiBpdCdzIGJha2VkIGludG8gdGhlIGtlcm5lbCwgaXQgcnVucyByaWdodCBhdCBib290LiBUaGUgY29yZSBsb2dpYyBoZXJlIGlzIGludGVyZXN0aW5nLiBXaGVuIEtITyBpcyBhY3RpdmUsIGl0IGF0dGVtcHRzIHRvIGZldGNoIGEgc3VidHJlZS4gSWYgdGhhdCBmYWlscyB3aXRoIGFuIC1FTk9FTlQsIHRoYXQncyBhIGtleSBpbmRpY2F0b3LigJRpdCBtZWFucyB0aGUgc3VidHJlZSBpc24ndCB0aGVyZSwgc28gaXQgY2FsbHMgYGtob190ZXN0X3NhdmUoKWAuIFRoaXMgaW1wbGllcyBhIHNpbmdsZSBpbml0aWFsIHJ1biwgcHJvYmFibHkgZHVyaW5nIHN5c3RlbSBzdGFydHVwLlxuXG5UaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IFN5emthbGxlciB3b24ndCBiZSBhYmxlIHRvIGVhc2lseSB0cmlnZ2VyIHRoaXMgcmVwZWF0ZWRseSB1bmxlc3MgaXQgaGFzIHNvbWUgbWVjaGFuaXNtIGZvciBtb2R1bGUgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcuIFdpdGhvdXQgdGhhdCBjYXBhYmlsaXR5LCBpdCdzIGVzc2VudGlhbGx5IGEgb25lLXNob3QgcHJvY2Vzcy5cblxuTm93LCB0aGF0IGBtZW1mZF9sdW9gIG1lbnRpb24gY2F1Z2h0IG15IGF0dGVudGlvbi4gSXQncyB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxNy4yMTQxNDk3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MjAzMTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQxNi1cXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL21lbWZkX2x1by5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU2MS1cXG5tbS9tZW1mZF9sdW8uYzo1NjI6XFx0XFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXFx1MDAzZW5yX2ZvbGlvcyk7XFxubW0vbWVtZmRfbHVvLmMtNTYzLVxcdFxcdHZmcmVlKGZvbGlvc19zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoxOS4zODYxODYzMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg0NTQwMTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipVbnBhY2tpbmcgYG1lbWZkX2x1b19yZXRyaWV2ZWAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gcHJlc2VudGVkIHdpdGggdGhpcyB0ZXJtLCBgbWVtZmRfbHVvX3JldHJpZXZlYC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcywgXCJIbW0sIG5ldmVyIGNvbWUgYWNyb3NzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSBiZWZvcmUuXCIgR2l2ZW4gbXkgYmFja2dyb3VuZCwgSSBpbW1lZGlhdGVseSBzdGFydCBicmVha2luZyBpdCBkb3duLiBgbWVtZmRgIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0IGRlYWxzIHdpdGggYG1lbWZkX2NyZWF0ZWAsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyBhIExpbnV4LXNwZWNpZmljIGZlYXR1cmUgZm9yIGNyZWF0aW5nIGFub255bW91cywgbWVtb3J5LWJhY2tlZCBmaWxlcy4gVGhhdCBwYXJ0J3MgZmFtaWxpYXIgdGVycml0b3J5IOKAkyBsaWdodHdlaWdodCwgZXBoZW1lcmFsIHN0b3JhZ2UgaW4gbWVtb3J5LCB1c2VmdWwgZm9yIHNlY3VyaXR5LCBJUEMsIGFuZCBhdm9pZGluZyBkaXNrIEkvTy4gQnV0IHRoZSBgbHVvX3JldHJpZXZlYCBiaXTigKYgdGhhdOKAmXMgd2hhdCdzIGludHJpZ3VpbmcuIEkgaGF2ZSB0byBndWVzcyBpdCdzIHNwZWNpZmljIHRvIGFuIGV4dGVuc2lvbiBvciBlbmhhbmNlbWVudC4gSXMgdGhpcyBmcm9tIGEgY3VzdG9tIGxpYnJhcnk/IE1heWJlIGEgc3BlY2lmaWMgcHJvamVjdCdzIGltcGxlbWVudGF0aW9uP1xuXG5NeSBtaW5kIGlzIHJhY2luZzogSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBJcyB0aGlzIHJlbGF0ZWQgdG8gZGF0YSByZXRyaWV2YWw/IEdpdmVuIHRoZSBuYW1lLCBpdCAqc3VnZ2VzdHMqIGl0LCBidXQgd2l0aG91dCBtb3JlIGNvbnRleHQgaXQncyBwcmVtYXR1cmUgdG8ganVtcCB0byBjb25jbHVzaW9ucy4gQ291bGQgaXQgYmUgYWJvdXQgcmV0cmlldmluZyBkYXRhIGZyb20gYSBwcmV2aW91c2x5IGNyZWF0ZWQgYG1lbWZkYD8gTWF5YmUgYSBjb250cm9sIG1lY2hhbmlzbT8gSSBuZWVkIHRvIGtub3cgaG93IGl0J3MgdXNlZC4gSXMgaXQgYSBmdW5jdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBkYXRhLCBwZXJoYXBzIGEgZm9ybSBvZiBkYXRhIHNlcmlhbGl6YXRpb24gZm9yIHRoaXMgdHlwZSBvZiBmaWxlPyBEb2VzIGl0IHdvcmsgb25seSBpbiB0aGlzIG9uZSBzeXN0ZW0sIG9yIGlzIGl0IGNvbW1vbiBpbiBvdGhlcnM/XG5cbk15IGltbWVkaWF0ZSBzdGVwcyB3b3VsZCBiZSB0byBzZWFyY2ggZm9yIHRoaXMgZnVuY3Rpb24gbmFtZSB3aXRoaW4gY29kZWJhc2VzIEknbSBmYW1pbGlhciB3aXRoLCBvciB0byBzdGFydCBnb29nbGluZyBmb3IgZG9jdW1lbnRhdGlvbiBhcm91bmQgbWVtZmQgZXh0ZW5zaW9ucy4gSSdkIGJlIGxvb2tpbmcgZm9yIGEgZnVuY3Rpb24gc2lnbmF0dXJlLCB1c2FnZSBleGFtcGxlcywgYW5kIGFueSBleHBsYW5hdGlvbnMgb2YgaXRzIHB1cnBvc2UuIFRoZSBnb2FsIGlzIHRvIHJhcGlkbHkgZGV0ZXJtaW5lIHdoYXQgdGhpcyBleHRlbnNpb24gZG9lcyBpbiByZWxhdGlvbiB0byBtZW1mZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODoyNS4yMzE1OTEyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzOTQ4NDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtZmRfbHVvLmM9Mzg3PXN0YXRpYyB2b2lkIG1lbWZkX2x1b19maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcF9hcmdzICphcmdzKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNDE2LVxcbm1tL21lbWZkX2x1by5jOjQxNzpzdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3Moc3RydWN0IGZpbGUgKmZpbGUsXFxubW0vbWVtZmRfbHVvLmMtNDE4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1lbWZkX2x1b19mb2xpb19zZXIgKmZvbGlvc19zZXIsXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy01MTctXFxubW0vbWVtZmRfbHVvLmM6NTE4OnN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG5tbS9tZW1mZF9sdW8uYy01MTkte1xcbi0tXFxubW0vbWVtZmRfbHVvLmMtNTYxLVxcbm1tL21lbWZkX2x1by5jOjU2MjpcXHRcXHRlcnIgPSBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKGZpbGUsIGZvbGlvc19zZXIsIHNlci1cXHUwMDNlbnJfZm9saW9zKTtcXG5tbS9tZW1mZF9sdW8uYy01NjMtXFx0XFx0dmZyZWUoZm9saW9zX3Nlcik7XFxuLS1cXG5tbS9tZW1mZF9sdW8uYz01OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIG1lbWZkX2x1b19maWxlX29wcyA9IHtcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU5NS1cXHQuZmluaXNoID0gbWVtZmRfbHVvX2ZpbmlzaCxcXG5tbS9tZW1mZF9sdW8uYzo1OTY6XFx0LnJldHJpZXZlID0gbWVtZmRfbHVvX3JldHJpZXZlLFxcbm1tL21lbWZkX2x1by5jLTU5Ny1cXHQucHJlc2VydmUgPSBtZW1mZF9sdW9fcHJlc2VydmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjI3LjI3MTA4MjAyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ3NjkxMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgdGhlIExpdmUgVXBkYXRlIEZpbGUgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBgbWVtZmRfbHVvX2ZpbGVfb3BzYCDigJMgdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgY29ubmVjdGVkIHRvIGBsaXZldXBkYXRlX2ZpbGVfb3BzYC4gSSBrbm93IHRob3NlIGFyZSBsb3ctbGV2ZWwgZmlsZSBvcGVyYXRpb24gc3RydWN0dXJlcywgdXN1YWxseSBwcm92aWRpbmcgY3VzdG9tIGltcGxlbWVudGF0aW9ucyBmb3Igc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBsaXZlIHVwZGF0ZXMsIHdoaWNoIGF1dG9tYXRpY2FsbHkgbWVhbnMgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGBDT05GSUdfTElWRVVQREFURWAuIFRoZSBrZXkgcXVlc3Rpb24gcG9wcGluZyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoYXQgYENPTkZJR19MSVZFVVBEQVRFYCBmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlPyBUaGF04oCZcyB3aGVyZSB0aGUgcmVhbCBjb21wbGV4aXR5LCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGllLiBJZiB1c2VyIHNwYWNlIGNhbiB0cmlnZ2VyIGxpdmUgdXBkYXRlcywgd2UndmUgZ290IGEgd2hvbGUgbmV3IGxldmVsIG9mIGNvbmNlcm5zLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHRyYWNlIHRoZSBwYXRocyBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zIGlmIHRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgdG8gdXNlciBzcGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwODQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODozMS4xMTg3NzcwNloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NTM1NTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaXZldXBkYXRlX2ZpbGVfb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC01NC0vKipcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDo1NTogKiBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAtIENhbGxiYWNrcyBmb3IgbGl2ZS11cGRhdGFibGUgZmlsZXMuXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtNTYtICogQGNhbl9wcmVzZXJ2ZTogUmVxdWlyZWQuIExpZ2h0d2VpZ2h0IGNoZWNrIHRvIHNlZSBpZiB0aGlzIGhhbmRsZXIgaXNcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTczLSAqL1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjc0OnN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BzIHtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC03NS1cXHRib29sICgqY2FuX3ByZXNlcnZlKShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmhhbmRsZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD0xMDE9c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIHtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoxMDI6XFx0Y29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgKm9wcztcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0xMDMtXFx0Y29uc3QgY2hhciBjb21wYXRpYmxlW0xJVkVVUERBVEVfSE5ETF9DT01QQVRfTEVOR1RIXTtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTU4OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1mZF9sdW9fZ2V0X2lkKHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubW0vbWVtZmRfbHVvLmMtNTkyLVxcbm1tL21lbWZkX2x1by5jOjU5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xcbm1tL21lbWZkX2x1by5jLTU5NC1cXHQuZnJlZXplID0gbWVtZmRfbHVvX2ZyZWV6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzMuMjY0MTM5MDA5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAxOTAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVXNhZ2Ugb2YgYGxpdmV1cGRhdGVfZmlsZV9vcHNgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBsaXZldXBkYXRlX2ZpbGVfb3BzYCBpcyBhY3R1YWxseSBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoYXQgZnVuY3Rpb24gbmFtZSBzb3VuZHMgbGlrZSBpdCdzIHByZXR0eSBjcml0aWNhbCBmb3IgdGhlIGxpdmUgdXBkYXRlIHByb2Nlc3Mg4oCTIGRlYWxpbmcgd2l0aCBmaWxlIG9wZXJhdGlvbnMgZHVyaW5nIGFuIHVwZGF0ZSwgSSdkIGltYWdpbmUuIFRoZXJlZm9yZSwgdGhlIGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgaXRzIGltcGFjdC4gS25vd2luZyB3aGVyZSBpdOKAmXMgY2FsbGVkIHdpbGwgcHJvdmlkZSBhIHByZXR0eSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1cGRhdGUgZmxvdy4gVGhpcyB3aWxsIGhvcGVmdWxseSBhbGxvdyBtZSB0byBzdGFydCB0cmFjaW5nIHRocm91Z2ggaXRzIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW1wYWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzE3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzcuMzI0MzMyNTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzcxMDM2MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTktXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjA6c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIxLXN0cnVjdCBsaXZldXBkYXRlX2ZsYjtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oPTQ2PXN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyB7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NDc6XFx0c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTQ4LVxcdGludCByZXRyaWV2ZV9zdGF0dXM7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaD03ND1zdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyB7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6NzU6XFx0Ym9vbCAoKmNhbl9wcmVzZXJ2ZSkoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTc2LVxcdFxcdFxcdCAgICAgc3RydWN0IGZpbGUgKmZpbGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtODgtLyoqXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6ODk6ICogc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIC0gUmVwcmVzZW50cyBhIGhhbmRsZXIgZm9yIGEgbGl2ZS11cGRhdGFibGUgZmlsZSB0eXBlLlxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTkwLSAqIEBvcHM6ICAgICAgICAgICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uc1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMTAwLSAqL1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjEwMTpzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIge1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTEwMi1cXHRjb25zdCBzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wcyAqb3BzO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjMyPWludCBsaXZldXBkYXRlX3JlYm9vdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yMzMtXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzU6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTIzNi1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyMzc6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmxiKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgsXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjM4LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYik7XFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjM5OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI0MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGxpdmV1cGRhdGVfZmxiICpmbGIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg9MjU0PXN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVib290KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNTgtXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmg6MjU5OnN0YXRpYyBpbmxpbmUgaW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjYwLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2My1cXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaDoyNjQ6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdW5yZWdpc3Rlcl9maWxlX2hhbmRsZXIoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaClcXG5pbmNsdWRlL2xpbnV4L2xpdmV1cGRhdGUuaC0yNjUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjY3LVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI2ODpzdGF0aWMgaW5saW5lIGludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI2OS1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9saXZldXBkYXRlLmgtMjczLVxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oOjI3NDpzdGF0aWMgaW5saW5lIHZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmluY2x1ZGUvbGludXgvbGl2ZXVwZGF0ZS5oLTI3NS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMC0gKiBLZXJuZWwgbW9kdWxlcyByZXNwb25zaWJsZSBmb3IgYSBzcGVjaWZpYyBmaWxlIHR5cGUgKGUuZy4sIG1lbWZkLCB2ZmlvKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MjE6ICogcmVnaXN0ZXIgYSBcXHUwMDI2c3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyLiBUaGlzIGhhbmRsZXIgcHJvdmlkZXMgYSBzZXQgb2ZcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTIyLSAqIGNhbGxiYWNrcyB0aGF0IExVTyBpbnZva2VzIGF0IGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIHVwZGF0ZSBwcm9jZXNzLCBtb3N0XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTExOT1zdGF0aWMgREVGSU5FX1hBUlJBWShsdW9fcHJlc2VydmVkX2ZpbGVzKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTIyLSAqIHN0cnVjdCBsdW9fZmlsZSAtIFJlcHJlc2VudHMgYSBzaW5nbGUgcHJlc2VydmVkIGZpbGUgaW5zdGFuY2UuXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxMjM6ICogQGZoOiAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIFxcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgdGhhdCBtYW5hZ2VzXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xMjQtICogICAgICAgICAgICAgICAgIHRoaXMgdHlwZSBvZiBmaWxlLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0xNjE9c3RydWN0IGx1b19maWxlIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE2MjpcXHRzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTYzLVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNzEtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzoxNzI6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHVvX2dldF9pZChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTczLVxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz0yMzA9aW50IGx1b19wcmVzZXJ2ZV9maWxlKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LCB1NjQgdG9rZW4sIGludCBmZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMjMyLVxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyBhcmdzID0gezB9O1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6MjMzOlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0yMzQtXFx0c3RydWN0IGx1b19maWxlICpsdW9fZmlsZTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9NzE5PXN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjEte1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzIyOlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmg7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjMtXFx0Ym9vbCBoYW5kbGVyX2ZvdW5kID0gZmFsc2U7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTg1NT12b2lkIGx1b19maWxlX3NldF9kZXN0cm95KHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NjMtICogbGl2ZXVwZGF0ZV9yZWdpc3Rlcl9maWxlX2hhbmRsZXIgLSBSZWdpc3RlciBhIGZpbGUgaGFuZGxlciB3aXRoIExVTy5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjg2NDogKiBAZmg6IFBvaW50ZXIgdG8gYSBjYWxsZXItYWxsb2NhdGVkIFxcdTAwMjZzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIuXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NjUtICogVGhlIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUsIGluY2x1ZGluZyBhIHVuaXF1ZVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzMtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4NzQ6aW50IGxpdmV1cGRhdGVfcmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04NzUte1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODc2OlxcdHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmhfaXRlcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTg3Ny1cXHRpbnQgZXJyO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy05MTktICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo5MjA6dm9pZCBsaXZldXBkYXRlX3VucmVnaXN0ZXJfZmlsZV9oYW5kbGVyKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy05MjEte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jPTIwNz12b2lkIGxpdmV1cGRhdGVfZmxiX3B1dF9pbmNvbWluZyhzdHJ1Y3QgbGl2ZXVwZGF0ZV9mbGIgKmZsYilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0yNDgtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jOjI0OTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTI1MC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMjg0LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYzoyODU6dm9pZCBsdW9fZmxiX2ZpbGVfdW5wcmVzZXJ2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0yODYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTMwNS0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzA2OnZvaWQgbHVvX2ZsYl9maWxlX2ZpbmlzaChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zMDcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTMxNS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzE2OnN0YXRpYyB2b2lkIGx1b19mbGJfdW5yZWdpc3Rlcl9vbmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmMtMzE3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM1OC0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6MzU5OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zNjAte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTM5My0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6Mzk0OmludCBsaXZldXBkYXRlX3JlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy0zOTUtXFx0XFx0XFx0ICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZsYi5jLTQ3My0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmxiLmM6NDc0OnZvaWQgbGl2ZXVwZGF0ZV91bnJlZ2lzdGVyX2ZsYihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19mbGIuYy00NzUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXZldXBkYXRlX2ZsYiAqZmxiKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg9OTk9dm9pZCBsdW9fZmlsZV9zZXRfZGVzdHJveShzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldCk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmgtMTAwLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMTppbnQgbHVvX2ZsYl9maWxlX3ByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMjp2b2lkIGx1b19mbGJfZmlsZV91bnByZXNlcnZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfaGFuZGxlciAqZmgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjEwMzp2b2lkIGx1b19mbGJfZmlsZV9maW5pc2goc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpmaCk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmg6MTA0OnZvaWQgbHVvX2ZsYl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMDUtaW50IF9faW5pdCBsdW9fZmxiX3NldHVwX291dGdvaW5nKHU2NCAqZmxic19wYSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD0xMDc9dm9pZCBsdW9fZmxiX3NlcmlhbGl6ZSh2b2lkKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oLTEwOS0jaWZkZWYgQ09ORklHX0xJVkVVUERBVEVfVEVTVFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjExMDp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTEtI2Vsc2VcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDoxMTI6c3RhdGljIGlubGluZSB2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKSB7IH1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC0xMTMtI2VuZGlmXFxuLS1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jPTg3PXN0YXRpYyB2b2lkIGxpdmV1cGRhdGVfdGVzdF9pbml0KHZvaWQpXFxuLS1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jLTExNC1cXG5saWIvdGVzdHMvbGl2ZXVwZGF0ZS5jOjExNTp2b2lkIGxpdmV1cGRhdGVfdGVzdF9yZWdpc3RlcihzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX2hhbmRsZXIgKmZoKVxcbmxpYi90ZXN0cy9saXZldXBkYXRlLmMtMTE2LXtcXG4tLVxcbm1tL21lbWZkX2x1by5jPTUxOD1zdGF0aWMgaW50IG1lbWZkX2x1b19yZXRyaWV2ZShzdHJ1Y3QgbGl2ZXVwZGF0ZV9maWxlX29wX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9tZW1mZF9sdW8uYy01NzktXFxubW0vbWVtZmRfbHVvLmM6NTgwOnN0YXRpYyBib29sIG1lbWZkX2x1b19jYW5fcHJlc2VydmUoc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyICpoYW5kbGVyLFxcbm1tL21lbWZkX2x1by5jLTU4MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbm1tL21lbWZkX2x1by5jPTU5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9vcHMgbWVtZmRfbHVvX2ZpbGVfb3BzID0ge1xcbi0tXFxubW0vbWVtZmRfbHVvLmMtNjAzLVxcbm1tL21lbWZkX2x1by5jOjYwNDpzdGF0aWMgc3RydWN0IGxpdmV1cGRhdGVfZmlsZV9oYW5kbGVyIG1lbWZkX2x1b19oYW5kbGVyID0ge1xcbm1tL21lbWZkX2x1by5jLTYwNS1cXHQub3BzID0gXFx1MDAyNm1lbWZkX2x1b19maWxlX29wcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6MzkuNDYxNDQ5NjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcxMDA3NTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExpdmUgVXBkYXRlIEZlYXR1cmUncyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBDT05GSUdfTElWRVVQREFURWAgZmVhdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBtZW1mZC1iYWNrZWQgaW1wbGVtZW50YXRpb24sIGBtZW1mZF9sdW9gLiBUaGUgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gcHJlc2VydmUgZmlsZXMgYWNyb3NzIGEgYGtleGVjYCB0cmFuc2l0aW9uLiBNeSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgbWVtZmQgYmFja2VuZCBhbmQgdGhlIGZpbGUgcmVzdG9yYXRpb24gcHJvY2Vzcy5cblxuSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgLiBUaGVzZSByb3V0aW5lcyBhcmUgY3JpdGljYWwgYmVjYXVzZSB0aGV5J3JlIGRpcmVjdGx5IHVzZWQgd2l0aGluIGBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zYCBhbmQgYGtob19yZXN0b3JlX3ZtYWxsb2NgLiBIbW0sIGhvbGQgb24gYSBzZWNvbmTigKYgdGhlc2UgYGtob19yZXN0b3JlXypgIGZ1bmN0aW9ucyBhcmUgY2FsbGVkICpkdXJpbmcqIHRoZSByZXRyaWV2YWwgcGhhc2UuIFRoaXMgcmV0cmlldmFsIHBoYXNlIGlzIHRyaWdnZXJlZCB3aGVuIGEgZmlsZSBpcyBicm91Z2h0IGJhY2sgaW50byBtZW1vcnkgdmlhIGBtZW1mZF9sdW9fcmV0cmlldmVgLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gYSB1c2VyIHNwYWNlIHByb2Nlc3MgZGlyZWN0bHkgY2FsbCBgbWVtZmRfbHVvX3JldHJpZXZlYD8gIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNhbGwgcGF0aC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBtZW1mZF9sdW9fcmV0cmlldmVgIGlzIGNhbGxlZCB0aHJvdWdoIGBtZW1mZF9sdW9fZmlsZV9vcHMucmV0cmlldmVgLiAgVGhpcyB0aGVuIHBvaW50cyB0byB0aGUgZnVuY3Rpb24gIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aGljaCB3aWxsIGJlIHRoZSBvbmUgdGhhdCBsaWtlbHkgdHJpZ2dlcnMgdGhlIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgY2FsbCBjaGFpbiB0aG9yb3VnaGx5LCBhcyB0aGF0IGlzIHdoZXJlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBtYXkgbGllLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHBhcmFtZXRlcnMgYW5kIGRhdGEgdGhhdCBhcmUgZGVzZXJpYWxpemVkIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBMZXQncyBkaWcgZGVlcGVyIGludG8gYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTI1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA4OjQ3LjE3MTUyNzk5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MjgzNjkzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYz02ODA9aW50IGx1b19maWxlX2ZpbmlzaChzdHJ1Y3QgbHVvX2ZpbGVfc2V0ICpmaWxlX3NldClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzE4LVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzE5OnN0YXRpYyBpbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzIwLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbHVvX2ZpbGVfc2VyICpzZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTc4ND1pbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTgxNy1cXHR3aGlsZSAoKGZpbGVfc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFxcdTAwMjZpdCkpKSB7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo4MTg6XFx0XFx0ZXJyID0gbHVvX2ZpbGVfZGVzZXJpYWxpemVfb25lKGZpbGVfc2V0LCBmaWxlX3Nlcik7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTktXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDg6NDkuMjY0MzcxMDFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxNDg1MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgZnVuY3Rpb246XG5cbioqVHJhY2luZyB0aGUgQ2FsbCBTdGFjayBmb3IgYGx1b19maWxlX2Rlc2VyaWFsaXplYCoqXG5cbk9rYXksIHNvIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqY2FsbGVkKiBmcm9tLiBUaGF0J3MgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBjYW4ndCBqdXN0IG9wZXJhdGUgaW4gYSB2YWN1dW0uIFdoZXJlJ3MgaXQgdXNlZD8gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IElzIHRoZXJlIGEgY2xlYXJseSBkZWZpbmVkIGVudHJ5IHBvaW50LCBvciBpcyBpdCBidXJpZWQgZGVlcCB3aXRoaW4gYSBuZXN0ZWQgbW9kdWxlP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcGxhY2VzIHdoZXJlIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAgaXMgaW52b2tlZC4gSSBjYW4ndCBzdGFydCBvcHRpbWl6aW5nIGl0LCByZWZhY3RvcmluZyBpdCwgb3IgZXZlbiBmdWxseSAqdW5kZXJzdGFuZGluZyogaXRzIHJvbGUgdW50aWwgSSB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJcyB0aGlzIGEgdG9wLWxldmVsIGZ1bmN0aW9uIGluIGEgY3JpdGljYWwgcGF0aCwgb3IgYSB1dGlsaXR5IGZ1bmN0aW9uIGZvciBhIHZlcnkgc3BlY2lmaWMgdGFzaz8gVGhlIGxvY2F0aW9uIG9mIGl0cyBjYWxscyB3aWxsIGluZm9ybSBhbGwgb2YgdGhhdC4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCB0byB1c2UgbXkgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIGFuZCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGZ1bmN0aW9uYWxpdHkgdG8gdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbW1lZGlhdGUgY2FsbGVycywgYnV0IGFsc28gY29uc2lkZXJpbmcgdGhlIGluZGlyZWN0IHBhdGhzIHRoYXQgbWlnaHQgbGVhZCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODo1NS45NzkyMjQ5MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTc2MjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fZmlsZV9kZXNlcmlhbGl6ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTU1LSAqXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo1NjogKiAzLiBEZXNlcmlhbGl6ZTogQWZ0ZXIga2V4ZWMsIGx1b19maWxlX2Rlc2VyaWFsaXplKCkgcnVucyB3aGVuIHNlc3Npb24gZ2V0c1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNTctICogICAgZGVzZXJpYWxpemVkICh3aGljaCBpcyB3aGVuIC9kZXYvbGl2ZXVwZGF0ZSBpcyBmaXJzdCBvcGVuZWQpLiBJdCByZWFkcyB0aGVcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM9MTE5PXN0YXRpYyBERUZJTkVfWEFSUkFZKGx1b19wcmVzZXJ2ZWRfZmlsZXMpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy0xNTctICogZHVyaW5nIHRoZSAuZnJlZXplKCkgY2FsbGJhY2sgYmVmb3JlIGJlaW5nIHNlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IGtlcm5lbC5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jOjE1ODogKiBBZnRlciByZWJvb3QsIHRoZXNlIHN0cnVjdHVyZXMgYXJlIHJlY3JlYXRlZCBieSBsdW9fZmlsZV9kZXNlcmlhbGl6ZSgpIGFuZFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtMTU5LSAqIGFyZSBmaW5hbGx5IGNsZWFuZWQgdXAgYnkgbHVvX2ZpbGVfZmluaXNoKCkuXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jPTY4MD1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MTgtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3MTk6c3RhdGljIGludCBsdW9fZmlsZV9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03MjAtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBsdW9fZmlsZV9zZXIgKnNlcilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzU5LS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6NzYwOiAqIGx1b19maWxlX2Rlc2VyaWFsaXplIC0gUmVjb25zdHJ1Y3RzIHRoZSBsaXN0IG9mIHByZXNlcnZlZCBmaWxlcyBpbiB0aGUgbmV3IGtlcm5lbC5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fZmlsZS5jLTc2MS0gKiBAZmlsZV9zZXQ6ICAgICBUaGUgaW5jb21pbmcgZmlsZV9zZXQgdG8gZmlsbCB3aXRoIGRlc2VyaWFsaXplZCBkYXRhLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy03ODMtICovXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYzo3ODQ6aW50IGx1b19maWxlX2Rlc2VyaWFsaXplKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0LFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtNzg1LVxcdFxcdFxcdCBzdHJ1Y3QgbHVvX2ZpbGVfc2V0X3NlciAqZmlsZV9zZXRfc2VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ZpbGUuYy04MTctXFx0d2hpbGUgKChmaWxlX3NlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmM6ODE4OlxcdFxcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplX29uZShmaWxlX3NldCwgZmlsZV9zZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19maWxlLmMtODE5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD05NT1pbnQgbHVvX2ZpbGVfZmluaXNoKHN0cnVjdCBsdW9fZmlsZV9zZXQgKmZpbGVfc2V0KTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaDo5NjppbnQgbHVvX2ZpbGVfZGVzZXJpYWxpemUoc3RydWN0IGx1b19maWxlX3NldCAqZmlsZV9zZXQsXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2ludGVybmFsLmgtOTctXFx0XFx0XFx0IHN0cnVjdCBsdW9fZmlsZV9zZXRfc2VyICpmaWxlX3NldF9zZXIpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01NTE9c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3Mi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VtdXRleCkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTczOlxcdFxcdGVyciA9IGx1b19maWxlX2Rlc2VyaWFsaXplKFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VmaWxlX3NldCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU3NC1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2c2VyLVxcdTAwM2VmaWxlX3NldF9zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowODo1OC4wMzA5OTcwMTRaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxMjk0MjI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgSW1wcmVzc2lvbnMgb24gTGl2ZXVwZGF0ZSBhbmQgRGVzZXJpYWxpemF0aW9uKipcblxuUmlnaHQsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhhdCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBgL2Rldi9saXZldXBkYXRlYCBpcyBhY2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWUsIG9yIGlmIGEgc2Vzc2lvbiBpcyBiZWluZyBkZXNlcmlhbGl6ZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgbGl2ZSB1cGRhdGUgd291bGQgbmVlZCB0byBkZXNlcmlhbGl6ZSBzb21ldGhpbmcuIE5vdywgaGFuZyBvbiBhIHNlY29uZC4uLiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lYCBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgYm9vdCwgb3Igd2hlbiBgL2Rldi9saXZldXBkYXRlYCBpcyBvcGVuZWQsIGlzIGl0IG5vdD8gVGhhdCBkZXNlcnZlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lYCAtIHRoYXQgc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHByb2Nlc3NlcyBpbnRlcnR3aW5lIGR1cmluZyBpbml0aWFsIHN0YXJ0dXAgYW5kIGxpdmUgdXBkYXRlIG9wZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MDIuNTQzOTQyMjk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODU2Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTUzNT1pbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUwLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTUxOnN0YXRpYyBpbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoLFxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTUyLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jPTU4NT1pbnQgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemUodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjE4LVxcdHdoaWxlICgoc2VyID0ga2hvX2Jsb2NrX3NldF9pdF9yZWFkX2VudHJ5KFxcdTAwMjZpdCkpKSB7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo2MTk6XFx0XFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNjIwLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjA0LjQ1NTgwNDY1MloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDAyNzUwMTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEZ1bmN0aW9uJ3MgT3JpZ2lucyoqXG5cbk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgdHJ5aW5nIHRvIHBpbnBvaW50IGl0cyBpbnZvY2F0aW9uLiBXaGVyZSAqZXhhY3RseSogaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbT8gSXMgaXQgd2l0aGluIHRoZSBjb3JlIHNlc3Npb24gbWFuYWdlbWVudCBtb2R1bGU/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50LCBwZXJoYXBzIGEgdXNlciBsb2dpbiwgYSByZXF1ZXN0IGZvciBzZXNzaW9uIGRhdGEsIG9yIGR1cmluZyBhcHBsaWNhdGlvbiBzdGFydHVwPyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGVyZSB0aGUgY2FsbCBvcmlnaW5hdGVzLiBBbSBJIGxvb2tpbmcgYXQgY29kZSB3aXRoaW4gdGhlIGNvcmUgZnJhbWV3b3JrLCBhIHRoaXJkLXBhcnR5IGxpYnJhcnksIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byB0aGlzIGFwcGxpY2F0aW9uPyBUaGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBhc3N1bXB0aW9ucyBJIGNhbiBtYWtlIGFib3V0IHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSdtIGdvaW5nIHRvIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlIGFuZCBmaW5kIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTowNy44NTg1NTcxNzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzE1MDg4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHVvX3Nlc3Npb25fZGVzZXJpYWxpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz0zMzA9c3RhdGljIGludCBsdW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlcCwgc3RydWN0IGZpbGUgKmZpbGVwKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0zMzktXFx0LyogQWx3YXlzIHJldHVybiAtRUlPIHRvIHVzZXIgaWYgZGVzZXJpYWxpemF0aW9uIGZhaWwgKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjM0MDpcXHRpZiAobHVvX3Nlc3Npb25fZGVzZXJpYWxpemUoKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtMzQxLVxcdFxcdGF0b21pY19zZXQoXFx1MDAyNmxkZXYtXFx1MDAzZWluX3VzZSwgMCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaD04ND1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjg1OmludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZSh2b2lkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04Ni1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNDEtICpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjQyOiAqIDMuICBEZXNlcmlhbGl6YXRpb24gKGluIG5ldyBrZXJuZWwpOiBBZnRlciBrZXhlYywgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKClgXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy00My0gKiAgICAgcnVucywgcmVhZGluZyB0aGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjcmVhdGluZyBhIGxpc3Qgb2YgYHN0cnVjdFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01MzU9aW50IF9faW5pdCBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyh1NjQgc2Vzc2lvbnNfcGEpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjU1MTpzdGF0aWMgaW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplX29uZShzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jLTU1Mi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODQtXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYzo1ODU6aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy01ODYte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MTgtXFx0d2hpbGUgKChzZXIgPSBraG9fYmxvY2tfc2V0X2l0X3JlYWRfZW50cnkoXFx1MDAyNml0KSkpIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jOjYxOTpcXHRcXHRlcnIgPSBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc2gsIHNlcik7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYy02MjAtXFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MTAuMDMwMDcwNTUxWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0OTUyMTI1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaXZlIFVwZGF0ZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgcGF0aCBvZiBgL2Rldi9saXZldXBkYXRlYCBoZXJlLiBUaGUgZW50cnkgcG9pbnQgSSdtIHNlZWluZyBpcyBgbHVvX29wZW5gLCBhbmQgdGhhdCdzIHRoZSBoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBJZiBzeXprYWxsZXIgb3BlbnMgdGhhdCBkZXZpY2UsIGl0J3MgZ29pbmcgdG8gaGl0IGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyAqc3VwcG9zZWQqIHRvIGhhbmRsZSBLSE8gZGF0YSB0aGF0IG1pZ2h0IGJlIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsIOKAkyB0aGluayBga2V4ZWNgIG9yIGEgc2ltaWxhciBzY2VuYXJpby4gQnV0LCBkdXJpbmcgYSBzdGFuZGFyZCBib290LCB3aXRob3V0IHRoYXQgS0hPIGRhdGEsIGl0J3MgdmVyeSBsaWtlbHkgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpcyBnb2luZyB0byBlaXRoZXIgcmV0dXJuIHplcm8gb3IganVzdCBxdWlldGx5IGRvIG5vdGhpbmcuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdDsgbXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIG9mIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZWAgaXRzZWxmIGFuZCBjb25maXJtIHRoaXMgYmVoYXZpb3IuIEdvdHRhIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBkb2VzIGluIHRoZSBhYnNlbmNlIG9mIEtITyBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ0MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOToxNC41MjUyODU5NDZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODU6XFx0aW50IGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplKHZvaWQpXFxuIDU4NjpcXHR7XFxuIDU4NzpcXHRcXHRzdHJ1Y3QgbHVvX3Nlc3Npb25faGVhZGVyICpzaCA9IFxcdTAwMjZsdW9fc2Vzc2lvbl9nbG9iYWwuaW5jb21pbmc7XFxuIDU4ODpcXHRcXHRzdGF0aWMgYm9vbCBpc19kZXNlcmlhbGl6ZWQ7XFxuIDU4OTpcXHRcXHRzdHJ1Y3QgbHVvX3Nlc3Npb25fc2VyICpzZXI7XFxuIDU5MDpcXHRcXHRzdHJ1Y3Qga2hvX2Jsb2NrX3NldF9pdCBpdDtcXG4gNTkxOlxcdFxcdHN0YXRpYyBpbnQgc2F2ZWRfZXJyO1xcbiA1OTI6XFx0XFx0aW50IGVycjtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0LyogSWYgaGFzIGJlZW4gZGVzZXJpYWxpemVkLCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVycm9yIGNvZGUgKi9cXG4gNTk1OlxcdFxcdGlmIChpc19kZXNlcmlhbGl6ZWQpXFxuIDU5NjpcXHRcXHRcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiA1OTc6XFx0XFxuIDU5ODpcXHRcXHRpc19kZXNlcmlhbGl6ZWQgPSB0cnVlO1xcbiA1OTk6XFx0XFx0aWYgKCFzaC1cXHUwMDNlYWN0aXZlKVxcbiA2MDA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYwMTpcXHRcXG4gNjAyOlxcdFxcdC8qXFxuIDYwMzpcXHRcXHQgKiBOb3RlIG9uIGVycm9yIGhhbmRsaW5nOlxcbiA2MDQ6XFx0XFx0ICpcXG4gNjA1OlxcdFxcdCAqIElmIGRlc2VyaWFsaXphdGlvbiBmYWlscyAoZS5nLiwgYWxsb2NhdGlvbiBmYWlsdXJlIG9yIGNvcnJ1cHQgZGF0YSksXFxuIDYwNjpcXHRcXHQgKiB3ZSBpbnRlbnRpb25hbGx5IHNraXAgY2xlYW51cCBvZiBzZXNzaW9ucyB0aGF0IHdlcmUgYWxyZWFkeSByZXN0b3JlZC5cXG4gNjA3OlxcdFxcdCAqXFxuIDYwODpcXHRcXHQgKiBBIHBhcnRpYWwgZmFpbHVyZSBsZWF2ZXMgdGhlIHByZXNlcnZlZCBzdGF0ZSBpbmNvbnNpc3RlbnQuXFxuIDYwOTpcXHRcXHQgKiBJbXBsZW1lbnRpbmcgYSBzYWZlIFxcXCJ1bmRvXFxcIiB0byB1bndpbmQgY29tcGxleCBkZXBlbmRlbmNpZXMgKHNlc3Npb25zLFxcbiA2MTA6XFx0XFx0ICogZmlsZXMsIGhhcmR3YXJlIHN0YXRlKSBpcyBlcnJvci1wcm9uZSBhbmQgcHJvdmlkZXMgbGl0dGxlIHZhbHVlLCBhc1xcbiA2MTE6XFx0XFx0ICogdGhlIHN5c3RlbSBpcyBlZmZlY3RpdmVseSBpbiBhIGJyb2tlbiBzdGF0ZS5cXG4gNjEyOlxcdFxcdCAqXFxuIDYxMzpcXHRcXHQgKiBXZSB0cmVhdCB0aGVzZSByZXNvdXJjZXMgYXMgbGVha2VkLiBUaGUgZXhwZWN0ZWQgcmVjb3ZlcnkgcGF0aCBpcyBmb3JcXG4gNjE0OlxcdFxcdCAqIHVzZXJzcGFjZSB0byBkZXRlY3QgdGhlIGZhaWx1cmUgYW5kIHRyaWdnZXIgYSByZWJvb3QsIHdoaWNoIHdpbGxcXG4gNjE1OlxcdFxcdCAqIHJlbGlhYmx5IHJlc2V0IGRldmljZXMgYW5kIHJlY2xhaW0gbWVtb3J5LlxcbiA2MTY6XFx0XFx0ICovXFxuIDYxNzpcXHRcXHRraG9fYmxvY2tfc2V0X2l0X2luaXQoXFx1MDAyNml0LCBcXHUwMDI2c2gtXFx1MDAzZWJsb2NrX3NldCk7XFxuIDYxODpcXHRcXHR3aGlsZSAoKHNlciA9IGtob19ibG9ja19zZXRfaXRfcmVhZF9lbnRyeShcXHUwMDI2aXQpKSkge1xcbiA2MTk6XFx0XFx0XFx0ZXJyID0gbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVfb25lKHNoLCBzZXIpO1xcbiA2MjA6XFx0XFx0XFx0aWYgKGVycilcXG4gNjIxOlxcdFxcdFxcdFxcdGdvdG8gc2F2ZV9lcnI7XFxuIDYyMjpcXHRcXHR9XFxuIDYyMzpcXHRcXG4gNjI0OlxcdFxcdGtob19ibG9ja19zZXRfZGVzdHJveShcXHUwMDI2c2gtXFx1MDAzZWJsb2NrX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjE0LjUyNTM3OTA0NloiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQxMjgyMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBsb2dpYywgdGFpbG9yZWQgYXMgdGhvdWdoIEksIGEgc2Vhc29uZWQgZXhwZXJ0LCBhbSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkNoZWNraW5nIFNlc3Npb24gQWN0aXZpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgYSB2ZXJ5IGNvbmNpc2UgY2hlY2s6IGAhc2gtXHUwMDNlYWN0aXZlYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGEgY3JpdGljYWwgZ3VhcmQgY29uZGl0aW9uLiBJZiB0aGlzIGV2YWx1YXRlcyB0byB0cnVlLCB0aGUgZnVuY3Rpb24gaW5zdGFudGx5IHJldHVybnMgYSB6ZXJvIHZhbHVlLiBObyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2NjdXJzLiBJIGNhbiBpbmZlciB0aGF0IHRoZSBmdW5jdGlvbidzIHB1cnBvc2UgaXMgbGlrZWx5IHRpZWQgdG8gaGFuZGxpbmcgYSBcInNlc3Npb25cIiBpZGVudGlmaWVkIGJ5IGBzaGAuIFRoZSBgYWN0aXZlYCBmbGFnIHdpdGhpbiB0aGF0IHNlc3Npb24gc3RydWN0dXJlLCBgc2hgLCBpcyB0aGUga2V5LlxuXG5UaGVuIEkgc2VlIHdoZXJlIHRoZSBgYWN0aXZlYCBmbGFnIGdldHMgc2V0LiBJdCBoYXBwZW5zIGluc2lkZSBgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdgLiBTbywgc2V0dGluZyB1cCBhbiBpbmNvbWluZyBzZXNzaW9uIGlzIHdoYXQgbWFrZXMgYHNoLVx1MDAzZWFjdGl2ZWAgdHJ1ZS4gQW55IGNhbGwgdG8gYSBtZXRob2QgaW4gdGhlIHNlc3Npb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFjdGl2ZSBzZXNzaW9uIGxpa2VseSByZXR1cm5zIDAsIGluZGljYXRpbmcgYW4gZXJyb3IuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgcXVpY2sgYW5kIGVmZmljaWVudCB3YXkgdG8gYmFpbCBvdXQgaWYgYSBzZXNzaW9uIGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIG9yIGFjdGl2YXRlZCwgbGlrZWx5IHByb3RlY3RpbmcgYWdhaW5zdCBudWxsIHBvaW50ZXIgZXhjZXB0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGZyb20gdXNpbmcgYSBzZXNzaW9uIHRoYXQgaXNuJ3QgcmVhZHkuIEdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjQzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MTguNjY2NjY2NDQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fc2Vzc2lvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUzNTpcXHRpbnQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nKHU2NCBzZXNzaW9uc19wYSlcXG4gNTM2OlxcdHtcXG4gNTM3OlxcdFxcdHN0cnVjdCBsdW9fc2Vzc2lvbl9oZWFkZXIgKnNoID0gXFx1MDAyNmx1b19zZXNzaW9uX2dsb2JhbC5pbmNvbWluZztcXG4gNTM4OlxcdFxcdGludCBlcnI7XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdGlmICghc2Vzc2lvbnNfcGEpXFxuIDU0MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0ZXJyID0ga2hvX2Jsb2NrX3NldF9yZXN0b3JlKFxcdTAwMjZzaC1cXHUwMDNlYmxvY2tfc2V0LCBzZXNzaW9uc19wYSk7XFxuIDU0NDpcXHRcXHRpZiAoZXJyKVxcbiA1NDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTQ2OlxcdFxcbiA1NDc6XFx0XFx0c2gtXFx1MDAzZWFjdGl2ZSA9IHRydWU7XFxuIDU0ODpcXHRcXHRyZXR1cm4gMDtcXG4gNTQ5OlxcdH1cXG4gNTUwOlxcdFxcbiA1NTE6XFx0c3RhdGljIGludCBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmUoc3RydWN0IGx1b19zZXNzaW9uX2hlYWRlciAqc2gsXFxuIDU1MjpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGx1b19zZXNzaW9uX3NlciAqc2VyKVxcbiA1NTM6XFx0e1xcbiA1NTQ6XFx0XFx0c3RydWN0IGx1b19zZXNzaW9uICpzZXNzaW9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOToxOC42NjY3NzM2NzNaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4MTc5OTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBPYmplY3QgSGFuZG92ZXIgKEtITykgSW5pdGlhbGl6YXRpb24gYW5kIFJlc3RvcmUgUGF0aCoqXG5cbk9rYXksIHNvIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AgaXMgaW52b2tlZCBvbiBib290IHdpdGggYHNlc3Npb25zX3BhYCwgYW5kIGlmIG5vIEtITyBkYXRhIGV4aXN0cywgd2hpY2ggaXMgdGhlIG5vcm0gZm9yIGEgZnJlc2ggU3l6a2FsbGVyIGJvb3QsIGBzZXNzaW9uc19wYWAgaXMgemVyby4gVGhhdCBtZWFucyBgc2gtXHUwMDNlYWN0aXZlYCBzdGF5cyBmYWxzZS4gQ29uc2VxdWVudGx5LCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgIGRvZXMgbm90aGluZywgcmV0dXJuaW5nIHplcm8sIGFuZCB0aGUgZW50aXJlIHJlc3RvcmUgbWVjaGFuaXNtIGlzIGVmZmVjdGl2ZWx5IGJ5cGFzc2VkLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoZSBwcmVzZXJ2ZSBwYXRoIGF0IGFsbC5cblxuTGV0J3Mgc2Vl4oCmIEkgc2hvdWxkIGNoZWNrIGBraG9fcHJlc2VydmVfcGFnZWAuIExvb2tzIGxpa2UgaXQncyB1bnVzZWQsIHRoYXQncyBhIGRlYWQgZW5kLiBPa2F5LCBsZXQncyBsb29rIGF0IGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLiBBaCwgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBga2hvX2luaXRfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCB0aGVuIGBraG9faW5pdF9mb2xpb2AgaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtob19yZXN0b3JlX2ZvbGlvYC4gTWFrZXMgc2Vuc2UuIE5vdyBga2hvX3Jlc3RvcmVfZm9saW9gIGlzIG9ubHkgdHJpZ2dlcmVkIHRocm91Z2ggYGtob19yZXN0b3JlX2ZyZWVgLCBga2hvX3Rlc3RfcmVzdG9yZV9kYXRhYCwgYW5kIHRoZSBgbWVtZmRfbHVvX2Rpc2NhcmRfZm9saW9zYCBhbmQgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgIG9wZXJhdGlvbnMuIEFsbCB0aG9zZSBhcmUgcGFydCBvZiB0aGUgcmVzdG9yZSBwYXRoLlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB0aGlzOiBDYW4gdGhlIHJlc3RvcmUgcGF0aCBiZSBlbnRlcmVkIGlmIEtITyBkYXRhIGlzbid0IHByZXNlbnQ/IE5vLCBpdCdzIGltcG9zc2libGUuIEJlY2F1c2UgZWl0aGVyIGBraG9faXNfZW5hYmxlZCgpYCB3aWxsIGJlIGZhbHNlIG9yIGBzaC1cdTAwM2VhY3RpdmVgIHdpbGwgYmUgZmFsc2UuIFNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIG5lZWQgdG8gZ28gb3ZlciB0aGUgZWRnZSBjYXNlcyBhbmQgbm90IGFzc3VtZSBhIGZyZXNoIGJvb3QuXG5cbldhaXQsIHRoZSBgdGVzdF9raG9gIG1vZHVsZSEgSSBuZWVkIHRvIHJlLWV4YW1pbmUgYGtob190ZXN0X2luaXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAzNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjI2LjM0ODU3NTc0M1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL3Rlc3Rfa2hvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE0OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4gMzE1OlxcdHtcXG4gMzE2OlxcdFxcdHBoeXNfYWRkcl90IGZkdF9waHlzO1xcbiAzMTc6XFx0XFx0aW50IGVycjtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbiAzMjA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19URVNUX0ZEVCwgXFx1MDAyNmZkdF9waHlzLCBOVUxMKTtcXG4gMzIzOlxcdFxcdGlmICghZXJyKSB7XFxuIDMyNDpcXHRcXHRcXHRlcnIgPSBraG9fdGVzdF9yZXN0b3JlKGZkdF9waHlzKTtcXG4gMzI1OlxcdFxcdFxcdGlmIChlcnIpXFxuIDMyNjpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIktITyByZXN0b3JlIGZhaWxlZFxcXFxuXFxcIik7XFxuIDMyNzpcXHRcXHRcXHRlbHNlXFxuIDMyODpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJLSE8gcmVzdG9yZSBzdWNjZWVkZWRcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFxuIDMzMzpcXHRcXHRpZiAoZXJyICE9IC1FTk9FTlQpIHtcXG4gMzM0OlxcdFxcdFxcdHByX3dhcm4oXFxcImZhaWxlZCB0byByZXRyaWV2ZSAlcyBGRFQ6ICVkXFxcXG5cXFwiLCBLSE9fVEVTVF9GRFQsIGVycik7XFxuIDMzNTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMzY6XFx0XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRcXHRyZXR1cm4ga2hvX3Rlc3Rfc2F2ZSgpO1xcbiAzMzk6XFx0fVxcbiAzNDA6XFx0bW9kdWxlX2luaXQoa2hvX3Rlc3RfaW5pdCk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGtob190ZXN0X2NsZWFudXAodm9pZClcXG4gMzQzOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MjYuMzQ4NjkyMzUzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MDg4MTk1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqS0hPIEZlYXR1cmUgTG9naWMgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIEtITyBmZWF0dXJlIGlzIGVuYWJsZWQuIFRoZSBjb3JlIG9mIHRoaXMgbG9naWMgaGluZ2VzIG9uIGBraG9faXNfZW5hYmxlZCgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBraG9faXNfZW5hYmxlZCgpYCBhY3RzIGFzIHRoZSBnYXRla2VlcGVyIGhlcmUuXCIgSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCBtZWFuaW5nIEtITyBpc24ndCBlbmFibGVkLCB0aGVuIHRoZSBlbnRpcmUgc2VjdGlvbiBsaWtlbHkgemVyb2VzIG91dCB3aGF0ZXZlciB2YWx1ZSBpdCdzIGRlYWxpbmcgd2l0aC4gQSBxdWljayBjaGVjayBvZiBga2hvX2lzX2VuYWJsZWQoKWAgcmV2ZWFscyB0aGF0IGl0IHZlcmlmaWVzIHdoZXRoZXIgdGhlIGtlcm5lbCB3YXMgYm9vdGVkIHdpdGggS0hPIGRhdGEgaW4gb3JkZXIgdG8gbWFrZSBpdHMgZGV0ZXJtaW5hdGlvbi4gSSBzaG91bGQganVzdCBjb25maXJtIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCB3aGF0IGZhY3RvcnMgbWFrZSBLSE8gZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZXhlY3V0aW9uIGluc2lkZSBga2hvX2lzX2VuYWJsZWQoKWAuIE5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxNTYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjMxLjE1NzUxNzY3OVoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2NDM5MjEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9faXNfZW5hYmxlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTc9c3RydWN0IHBhZ2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTktI2lmZGVmIENPTkZJR19LRVhFQ19IQU5ET1ZFUlxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyMDpib29sIGtob19pc19lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0yMS1ib29sIGlzX2tob19ib290KHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTQ0PXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ3OnN0YXRpYyBpbmxpbmUgYm9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTU4PXN0YXRpYyBib29sIGtob19lbmFibGUgX19yb19hZnRlcl9pbml0ID0gSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNTktXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2MDpib29sIGtob19pc19lbmFibGVkKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02MS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTYzLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY0OkVYUE9SVF9TWU1CT0xfR1BMKGtob19pc19lbmFibGVkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY1LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYz04ND1zdGF0aWMgaW50IF9faW5pdCBsdW9fZWFybHlfc3RhcnR1cCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy05MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjkxOlxcdGlmICgha2hvX2lzX2VuYWJsZWQoKSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTItXFx0XFx0aWYgKGxpdmV1cGRhdGVfZW5hYmxlZCgpKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MzE0PXN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2toby5jLTMxOC1cXG5saWIvdGVzdF9raG8uYzozMTk6XFx0aWYgKCFraG9faXNfZW5hYmxlZCgpKVxcbmxpYi90ZXN0X2toby5jLTMyMC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbWJsb2NrLmM9MjYxNj1zdGF0aWMgaW50IF9faW5pdCByZXNlcnZlX21lbV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI2MTktXFxubW0vbWVtYmxvY2suYzoyNjIwOlxcdGlmICgha2hvX2lzX2VuYWJsZWQoKSB8fCAhcmVzZXJ2ZWRfbWVtX2NvdW50KVxcbm1tL21lbWJsb2NrLmMtMjYyMS1cXHRcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MzMuMjIxOTE0NzUzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyODg3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGtob19pc19lbmFibGVkYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBtZW50YWwgZ2VhcnMgYXJlIGFscmVhZHkgdHVybmluZy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBga2hvX2lzX2VuYWJsZWRgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgbWFpbnRhaW5hYmlsaXR5LCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgZnJlcXVlbnRseSBjYWxsZWQgb3IgZGVlcGx5IG5lc3RlZCB3aXRoaW4gY3JpdGljYWwgcGF0aHMuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyDigJMgaXMgaXQgY2hlY2tpbmcgYSBzdGF0aWMgdmFyaWFibGUsIHF1ZXJ5aW5nIGEgZGF0YWJhc2UsIG9yIHBlcmZvcm1pbmcgbW9yZSBjb21wbGV4IGxvZ2ljPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgc2lkZSBlZmZlY3RzLCBlc3BlY2lhbGx5IGlmIGl0IG1vZGlmaWVzIGFueSBzaGFyZWQgc3RhdGUuIEFyZSB0aGVyZSBhbnkga25vd24gaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBpdCBpbiBvdXIgZXhpc3RpbmcgY29kZSBiYXNlPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgaXQncyBwcm9iYWJseSB3cml0dGVuIGJ5IHNvbWVvbmUgZWxzZSwgc28gSSB3YW50IHRvIGdldCBhbiBvdmVydmlldyBvZiBpdHMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXMgdGhlcmUgYSBjaGFuY2Ugb2YgYW55IHJhY2UgY29uZGl0aW9ucz8gSSdsbCBwcm9iYWJseSBzdGFydCBieSBncmVwcGluZyBmb3IgaXRzIHVzYWdlIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBjb250ZXh0LiBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA5MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjM2Ljk0NzIwNjc5NVoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1ODpcXHRzdGF0aWMgYm9vbCBraG9fZW5hYmxlIF9fcm9fYWZ0ZXJfaW5pdCA9IElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0Ym9vbCBraG9faXNfZW5hYmxlZCh2b2lkKVxcbiAgNjE6XFx0e1xcbiAgNjI6XFx0XFx0cmV0dXJuIGtob19lbmFibGU7XFxuICA2MzpcXHR9XFxuICA2NDpcXHRFWFBPUlRfU1lNQk9MX0dQTChraG9faXNfZW5hYmxlZCk7XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyBpbnQgX19pbml0IGtob19wYXJzZV9lbmFibGUoY2hhciAqcClcXG4gIDY3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6MzYuOTQ3MzE2NTg1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjc1NjE0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXhlYyBIYW5kb3ZlciBFbmFibGUgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBraG9faXNfZW5hYmxlZGAgZnVuY3Rpb24gYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgc2ltcGx5IHJldHVybnMgdGhlIHZhbHVlIG9mIGBraG9fZW5hYmxlYC4gV2hpY2gsIGFzIEkgc2VlIGl0LCBkZWZhdWx0cyB0byBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYC4gU28gZXNzZW50aWFsbHksIGlmIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBga2hvX2lzX2VuYWJsZWQoKWAgd2lsbCByZXR1cm4gdHJ1ZS4gVGhhdCdzIGdvb2QuIE5vdywgdG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIGB0ZXN0X2toby5jYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1MTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQyLjA3NDg4MTU5MVoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9raG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTQsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTQ6XFx0c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxcbiAzMTU6XFx0e1xcbiAzMTY6XFx0XFx0cGh5c19hZGRyX3QgZmR0X3BoeXM7XFxuIDMxNzpcXHRcXHRpbnQgZXJyO1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRpZiAoIWtob19pc19lbmFibGVkKCkpXFxuIDMyMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcXHUwMDI2ZmR0X3BoeXMsIE5VTEwpO1xcbiAzMjM6XFx0XFx0aWYgKCFlcnIpIHtcXG4gMzI0OlxcdFxcdFxcdGVyciA9IGtob190ZXN0X3Jlc3RvcmUoZmR0X3BoeXMpO1xcbiAzMjU6XFx0XFx0XFx0aWYgKGVycilcXG4gMzI2OlxcdFxcdFxcdFxcdHByX2VycihcXFwiS0hPIHJlc3RvcmUgZmFpbGVkXFxcXG5cXFwiKTtcXG4gMzI3OlxcdFxcdFxcdGVsc2VcXG4gMzI4OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIktITyByZXN0b3JlIHN1Y2NlZWRlZFxcXFxuXFxcIik7XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMzMTpcXHRcXHR9XFxuIDMzMjpcXHRcXG4gMzMzOlxcdFxcdGlmIChlcnIgIT0gLUVOT0VOVCkge1xcbiAzMzQ6XFx0XFx0XFx0cHJfd2FybihcXFwiZmFpbGVkIHRvIHJldHJpZXZlICVzIEZEVDogJWRcXFxcblxcXCIsIEtIT19URVNUX0ZEVCwgZXJyKTtcXG4gMzM1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMzNjpcXHRcXHR9XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XFxuIDMzOTpcXHR9XFxuIDM0MDpcXHRtb2R1bGVfaW5pdChraG9fdGVzdF9pbml0KTtcXG4gMzQxOlxcdFxcbiAzNDI6XFx0c3RhdGljIHZvaWQga2hvX3Rlc3RfY2xlYW51cCh2b2lkKVxcbiAzNDM6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo0Mi4wNzQ5NjkwNjFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMTIwOTg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBEYXRhIFJldHJpZXZhbCBQcm9jZXNzKipcblxuT2theSwgc28gdGhlIGNvZGUncyBvcGVyYXRpbmcgdW5kZXIgYSBjb25kaXRpb25hbC4gSWYgYGtob19pc19lbmFibGVkKClgIHJldHVybnMgdHJ1ZSwgdGhhdCB0cmlnZ2VycyBhIGNhbGwgdG8gYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgaWYgdGhlcmUncyAqbm8qIEtITyBkYXRhIGF2YWlsYWJsZT8gQWhhLCB0aGUgdGV4dCBzYXlzIGBraG9fcmV0cmlldmVfc3VidHJlZWAgd2lsbCByZXR1cm4gYC1FTk9FTlRgLiBUaGF0IG1ha2VzIHNlbnNlOyBhIHN0YW5kYXJkIGVycm9yIGNvZGUgdG8gaW5kaWNhdGUgXCJubyBzdWNoIGVudGl0eS5cIiBOb3csIGFmdGVyIHRoYXQgcmV0cmlldmFsIChvciBsYWNrIHRoZXJlb2YpLCB0aGUgY29kZSBqdW1wcyB0byBga2hvX3Rlc3Rfc2F2ZSgpYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBraG9fdGVzdF9zYXZlKClgIGZ1bmN0aW9uIGlzIGRvaW5nIGluIHRoaXMgY29udGV4dC4gSXQncyB0aGUgY3JpdGljYWwgbmV4dCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGZsb3cuIEknbGwgbmVlZCB0byBkaWcgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCByZWFjdHMgdG8gb3IgaW5jb3Jwb3JhdGVzIHRoZSByZXN1bHQgKG9yIGxhY2sgdGhlcmVvZikgZnJvbSBga2hvX3JldHJpZXZlX3N1YnRyZWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NDYuNDc2MTgxMzAyWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2toby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3NjpcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiAyNzc6XFx0XFx0fVxcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHR2ZnJlZShmb2xpb3NfaW5mbyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGlmIChjc3VtICE9ICpvbGRfY3N1bSlcXG4gMjgyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXR1cm4gMDtcXG4gMjg1OlxcdH1cXG4gMjg2OlxcdFxcbiAyODc6XFx0c3RhdGljIGludCBraG9fdGVzdF9yZXN0b3JlKHBoeXNfYWRkcl90IGZkdF9waHlzKVxcbiAyODg6XFx0e1xcbiAyODk6XFx0XFx0dm9pZCAqZmR0ID0gcGh5c190b192aXJ0KGZkdF9waHlzKTtcXG4gMjkwOlxcdFxcdGNvbnN0IHVuc2lnbmVkIGludCAqbWFnaWM7XFxuIDI5MTpcXHRcXHRpbnQgbm9kZSwgbGVuLCBlcnI7XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdG5vZGUgPSBmZHRfcGF0aF9vZmZzZXQoZmR0LCBcXFwiL1xcXCIpO1xcbiAyOTQ6XFx0XFx0aWYgKG5vZGUgXFx1MDAzYyAwKVxcbiAyOTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI5NjpcXHRcXG4gMjk3OlxcdFxcdGlmIChmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGZkdCwgbm9kZSwgS0hPX1RFU1RfQ09NUEFUKSlcXG4gMjk4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRtYWdpYyA9IGZkdF9nZXRwcm9wKGZkdCwgbm9kZSwgXFxcIm1hZ2ljXFxcIiwgXFx1MDAyNmxlbik7XFxuIDMwMTpcXHRcXHRpZiAoIW1hZ2ljIHx8IGxlbiAhPSBzaXplb2YoKm1hZ2ljKSlcXG4gMzAyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRpZiAoKm1hZ2ljICE9IEtIT19URVNUX01BR0lDKVxcbiAzMDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdGVyciA9IGtob190ZXN0X3Jlc3RvcmVfZGF0YShmZHQsIG5vZGUpO1xcbiAzMDg6XFx0XFx0aWYgKGVycilcXG4gMzA5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHJldHVybiAwO1xcbiAzMTI6XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRzdGF0aWMgaW50IF9faW5pdCBraG9fdGVzdF9pbml0KHZvaWQpXFxuIDMxNTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjA5OjQ2LjQ3NjI3ODE4MloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc2MTMzMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgV29ya2Zsb3c6IGBraG9fdGVzdF9zYXZlYCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBteSBoZWFkIGJhY2sgaW4gdGhlIGdhbWUgYW5kIHJlLW9yaWVudCBteXNlbGYuIFRoYXQgYGtob190ZXN0X3NhdmVgIGZpbGUuLi4gaXQncyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSBuZWVkIHRvIHJldmlldyBpdC4gSXQgcHJvYmFibHkgY29udGFpbnMgdGhlIGNydWNpYWwgc3RhdGUgaW5mb3JtYXRpb24gb3IgZGF0YSBtYW5pcHVsYXRpb24gc3RlcHMgdGhhdCBJIHdhcyB3b3JraW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoZXJlIEkgbGVmdCBvZmYuIElzIGl0IGEgY2hlY2twb2ludCBzYXZlPyBBIHRlc3QgY29uZmlndXJhdGlvbj8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgc2hvdWxkIGtub3cuIEnigJlsbCBiZSBsb29raW5nIGZvciBhbnkgY2x1ZXMgdGhhdCBqdW1wIG91dCBhYm91dCB0aGF0IHByZXZpb3VzIHRlc3RpbmcgaXRlcmF0aW9uLCBvciBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFzIGEgd2hvbGUuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IHVwIHRvIHNwZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MDk6NTAuOTUyNDE1NTM4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5MDgyMjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob190ZXN0X3NhdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3Rfa2hvLmM9MTYyPXN0YXRpYyBpbnQga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMjA0LVxcbmxpYi90ZXN0X2toby5jOjIwNTpzdGF0aWMgaW50IGtob190ZXN0X3NhdmUodm9pZClcXG5saWIvdGVzdF9raG8uYy0yMDYte1xcbi0tXFxubGliL3Rlc3Rfa2hvLmM9MzE0PXN0YXRpYyBpbnQgX19pbml0IGtob190ZXN0X2luaXQodm9pZClcXG4tLVxcbmxpYi90ZXN0X2toby5jLTMzNy1cXG5saWIvdGVzdF9raG8uYzozMzg6XFx0cmV0dXJuIGtob190ZXN0X3NhdmUoKTtcXG5saWIvdGVzdF9raG8uYy0zMzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzowOTo1Mi43MzE1MDU0NFoiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjU2MDQ4MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBEYXRhIFNldDoga2hvXFxfdGVzdFxcX3NhdmUqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhpcyBmaWxlLCBga2hvX3Rlc3Rfc2F2ZWAuIEltbWVkaWF0ZWx5LCBJ4oCZbSB0aGlua2luZyBhYm91dCB3aGF0IGFzc3VtcHRpb25zIEkgY2FuIG1ha2UgYWJvdXQgaXRzIGNvbnRlbnRzIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gXCJraG9cIiBtaWdodCBzdWdnZXN0IGEgcGFydGljdWxhciBkYXRhIGZvcm1hdCBvciBzb3VyY2Ug4oCTIHBlcmhhcHMgYSBzcGVjaWZpYyByZXNlYXJjaCBncm91cCdzIG91dHB1dCwgYSBwYXJ0aWN1bGFyIGV4cGVyaW1lbnQsIG9yIGEgc3BlY2lmaWMgdHlwZSBvZiBkYXRhIGVuY29kaW5nLiBcInRlc3RcIiBpbmRpY2F0ZXMgaXQncyBsaWtlbHkgYSB0ZW1wb3Jhcnkgb3IgZGV2ZWxvcG1lbnRhbCBmaWxlLCBtYXliZSBhIHZhbGlkYXRpb24gb3IgcHJlbGltaW5hcnkgb3V0cHV0LiBBbmQgXCJzYXZlXCIgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhIHNuYXBzaG90IG9mIHRoZSBkYXRhIGF0IGEgY2VydGFpbiBwb2ludCwgYSBjaGVja3BvaW50IGluIHRoZSB3b3JrZmxvdy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgb2YgY291cnNlLCB0aGF0IHRoZXNlIGFyZSBqdXN0IGluaXRpYWwgY2x1ZXMuIEkgaGF2ZSB0byByZXNpc3QgdGhlIHVyZ2UgdG8ganVtcCB0byBjb25jbHVzaW9ucyB1bnRpbCBJJ3ZlIGFjdHVhbGx5IGxvb2tlZCBhdCB0aGUgZmlsZSBpdHNlbGYuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHBhcnNlIHRoaXMgYXBwcm9wcmlhdGVseS4gSXMgdGhpcyBhIGN1c3RvbSBiaW5hcnkgZm9ybWF0PyBJcyBpdCB0ZXh0LWJhc2VkLCBsaWtlIENTViwgSlNPTiwgb3IgWE1MPyBPciBpcyBpdCBzb21ldGhpbmcgYSBiaXQgbW9yZSBlc290ZXJpYz8gVGhlIGZpcnN0IHByaW9yaXR5IGlzIHRvIGRldGVybWluZSBob3cgdG8gcmVhZCB0aGUgZGF0YSwgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IGl0cyBzdHJ1Y3R1cmUgYW5kIHRoZW4gc3RhcnQgYW5hbHl6aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAwLjM4NzU1Njk5MloiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9raG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDU6XFx0c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlID0gXFx1MDAyNmtob190ZXN0X3N0YXRlO1xcbiAyMDg6XFx0XFx0c3RydWN0IGZvbGlvICoqZm9saW9zO1xcbiAyMDk6XFx0XFx0dW5zaWduZWQgbG9uZyBtYXhfbnI7XFxuIDIxMDpcXHRcXHRpbnQgZXJyO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRtYXhfbWVtID0gUEFHRV9BTElHTihtYXhfbWVtKTtcXG4gMjEzOlxcdFxcdG1heF9uciA9IG1heF9tZW0gXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0Zm9saW9zID0ga3ZtYWxsb2Nfb2Jqcygqc3RhdGUtXFx1MDAzZWZvbGlvcywgbWF4X25yKTtcXG4gMjE2OlxcdFxcdGlmICghZm9saW9zKVxcbiAyMTc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDIxODpcXHRcXHRzdGF0ZS1cXHUwMDNlZm9saW9zID0gZm9saW9zO1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRlcnIgPSBraG9fdGVzdF9nZW5lcmF0ZV9kYXRhKHN0YXRlKTtcXG4gMjIxOlxcdFxcdGlmIChlcnIpXFxuIDIyMjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2ZvbGlvcztcXG4gMjIzOlxcdFxcbiAyMjQ6XFx0XFx0ZXJyID0ga2hvX3Rlc3RfcHJlc2VydmUoc3RhdGUpO1xcbiAyMjU6XFx0XFx0aWYgKGVycilcXG4gMjI2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfZm9saW9zO1xcbiAyMjc6XFx0XFxuIDIyODpcXHRcXHRyZXR1cm4gMDtcXG4gMjI5OlxcdFxcbiAyMzA6XFx0ZXJyX2ZyZWVfZm9saW9zOlxcbiAyMzE6XFx0XFx0a3ZmcmVlKGZvbGlvcyk7XFxuIDIzMjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjAwLjM4NzY1NTYyMVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDI0Mzk0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBwcm9jZXNzLCB0aGlua2luZyBhcyB0aGUgY29kZSBpdHNlbGYgbWlnaHQ6XG5cbioqVGhlIFByZXNlcnZhdGlvbiBEYW5jZTogQSBMb29rIGF0IERhdGEgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBzbyBga2hvX3Rlc3Rfc2F2ZWAgaXMgaW5pdGlhdGluZyBhIGNyaXRpY2FsIG9wZXJhdGlvbi4gSXQncyBlc3NlbnRpYWxseSBzYXlpbmcsIFwiSGV5LCBiZWZvcmUgSSBkbyBzb21ldGhpbmcgcG90ZW50aWFsbHkgcmlza3ksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgc2FmZSBhbmQgc291bmQuXCIgVGhlIGNvZGUgaXMgc3BlY2lmaWNhbGx5IGNhbGxpbmcgYGtob190ZXN0X3ByZXNlcnZlYC4gVGhhdCdzIGEgY2xlYXIgc2lnbmFsIHRvIG1lIHRoYXQgYGtob190ZXN0X3NhdmVgJ3MgZnVuY3Rpb25hbGl0eSwgd2hhdGV2ZXIgaXQgbWlnaHQgYmUsIGRlcGVuZHMgb24gYSBwcmVsaW1pbmFyeSBkYXRhIHNhZmVndWFyZGluZyBzdGVwLiBUaGlzIGxvb2tzIGxpa2UgYSBjb21tb24gcGF0dGVybiwgYW5kIGEgZ29vZCBvbmUhIEl0J3MgbGlrZWx5IHRoYXQgYGtob190ZXN0X3ByZXNlcnZlYCBkb2VzIHNvbWUga2luZCBvZiBiYWNrdXAsIHNuYXBzaG90dGluZywgc2VyaWFsaXphdGlvbiwgb3IgdmVyc2lvbmluZy4gSSdtIGluZmVycmluZywgd2l0aCBteSBleHBlcnQgZXllLCB0aGF0IHRoZSBzeXN0ZW0gaXMgZW5naW5lZXJlZCB0byBwcmlvcml0aXplIGRhdGEgaW50ZWdyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDYuNDEyMDUyNTAzWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY1ODY5NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtob190ZXN0X3ByZXNlcnZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2toby5jPTQ1PXN0YXRpYyB2b2lkIGtob190ZXN0X3VucHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtNTMtXFxubGliL3Rlc3Rfa2hvLmM6NTQ6c3RhdGljIGludCBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXFxubGliL3Rlc3Rfa2hvLmMtNTUte1xcbi0tXFxubGliL3Rlc3Rfa2hvLmM9OTc9c3RhdGljIGludCBraG9fdGVzdF9wcmVwYXJlX2ZkdChzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlLCBzc2l6ZV90IGZkdF9zaXplKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMTIzLVxcbmxpYi90ZXN0X2toby5jOjEyNDpzdGF0aWMgaW50IGtob190ZXN0X3ByZXNlcnZlKHN0cnVjdCBraG9fdGVzdF9zdGF0ZSAqc3RhdGUpXFxubGliL3Rlc3Rfa2hvLmMtMTI1LXtcXG4tLVxcbmxpYi90ZXN0X2toby5jLTEzNy1cXG5saWIvdGVzdF9raG8uYzoxMzg6XFx0ZXJyID0ga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdGF0ZSk7XFxubGliL3Rlc3Rfa2hvLmMtMTM5LVxcdGlmIChlcnIpXFxuLS1cXG5saWIvdGVzdF9raG8uYz0yMDU9c3RhdGljIGludCBraG9fdGVzdF9zYXZlKHZvaWQpXFxuLS1cXG5saWIvdGVzdF9raG8uYy0yMjMtXFxubGliL3Rlc3Rfa2hvLmM6MjI0OlxcdGVyciA9IGtob190ZXN0X3ByZXNlcnZlKHN0YXRlKTtcXG5saWIvdGVzdF9raG8uYy0yMjUtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MDguNDc3OTI5MTA3WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTA4NzU5OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBwcm9jZXNzaW5nIHRoaXMgdGFzaywgZm9jdXNpbmcgb24gd2hhdCBJJ2QgYmUgdGhpbmtpbmcgYXMgYSBzZWFzb25lZCBleHBlcnQ6XG5cbioqQW5hbHl6aW5nIHRoZSBUYXNrOiBga2hvX3Rlc3RfcHJlc2VydmVfZGF0YWAqKlxuXG5BbHJpZ2h0LCB0aGUgZmlsZSBvciB0ZXN0IHN1aXRlIEkgbmVlZCB0byBsb29rIGF0IGlzIG5hbWVkIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhYC4gSW1tZWRpYXRlbHksIGEgZmV3IHRoaW5ncyBqdW1wIG91dC4gVGhlIG5hbWUgc3VnZ2VzdHMgYSBzcGVjaWZpYyBmb2N1cyBvbiAqZGF0YSBwcmVzZXJ2YXRpb24qLiBUaGlzIGlzIGtleS4gV2UncmUgbm90IGp1c3QgcnVubmluZyB0ZXN0cywgd2UncmUgbWFraW5nIHN1cmUgZGF0YSBpbnRlZ3JpdHkgaXMgbWFpbnRhaW5lZCwgcG90ZW50aWFsbHkgZHVyaW5nIHNvbWUga2luZCBvZiBvcGVyYXRpb24gb3IgcHJvY2Vzcy4gXCJLaG9cIiBpcyBhIHByZWZpeCBJIGhhdmVuJ3Qgc2VlbiBiZWZvcmUsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBzaWduaWZpZXM7IGl0IG1pZ2h0IGJlIGEgc3BlY2lmaWMgbGlicmFyeSwgcHJvamVjdCwgb3IgY29udGV4dC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgaXMgdGhhdCB0aGlzIGlzIGEgdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgc29tZSBvcGVyYXRpb24sIG1heWJlIGEgZGF0YSBtaWdyYXRpb24sIGEgc3lzdGVtIHVwZGF0ZSwgb3IgYSBzcGVjaWZpYyBkYXRhIHRyYW5zZm9ybWF0aW9uLCBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgbGVhZCB0byBkYXRhIGxvc3Mgb3IgY29ycnVwdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBhc3NlcnRzIHRoYXQgZm9jdXMgb24gZGF0YSBzdHJ1Y3R1cmVzLCBjaGVja3N1bXMsIGRhdGEgc2l6ZXMsIG9yIHNwZWNpZmljIGRhdGEgdmFsdWVzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGFjdGlvbiBiZWluZyB0ZXN0ZWQuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGVkZ2UgY2FzZXMsIHdoZXJlIHRoaW5ncyBhcmUgbW9zdCBsaWtlbHkgdG8gZ28gd3JvbmcsIGxpa2UgY29uY3VycmVuY3kgaXNzdWVzLCBlcnJvciBoYW5kbGluZywgb3IgdW51c3VhbCBkYXRhIGlucHV0cy4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgdGVzdCdzIHNjb3BlIOKAkyBkb2VzIGl0IGNvdmVyIHRoZSBlbnRpcmUgZGF0YSBzZXQsIG9yIGlzIGl0IHNhbXBsaW5nIHNwZWNpZmljIGtleSBhcmVhcz8gSXMgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgY2xlYXJseSBkZWZpbmVkPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlcGxpY2F0aW9uIGFuZCByZWxpYWJpbGl0eSBvZiByZXN1bHRzLiBJcyB0aGVyZSBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGlzIHRlc3Q/IFRoYXQgd291bGQgYmUgZmFudGFzdGljISBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhlIHRlc3QgaXMgc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGlzIGRhdGEgcHJlc2VydmF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NTg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTIuNjI4ODA3NTUzWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2toby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDU0OlxcdHN0YXRpYyBpbnQga2hvX3Rlc3RfcHJlc2VydmVfZGF0YShzdHJ1Y3Qga2hvX3Rlc3Rfc3RhdGUgKnN0YXRlKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IGtob192bWFsbG9jIGZvbGlvc19pbmZvX3BoeXM7XFxuICA1NzpcXHRcXHRwaHlzX2FkZHJfdCAqZm9saW9zX2luZm87XFxuICA1ODpcXHRcXHRpbnQgZXJyO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRmb2xpb3NfaW5mbyA9IHZtYWxsb2NfYXJyYXkoc3RhdGUtXFx1MDAzZW5yX2ZvbGlvcywgc2l6ZW9mKCpmb2xpb3NfaW5mbykpO1xcbiAgNjE6XFx0XFx0aWYgKCFmb2xpb3NfaW5mbylcXG4gIDYyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfdm1hbGxvYyhmb2xpb3NfaW5mbywgXFx1MDAyNmZvbGlvc19pbmZvX3BoeXMpO1xcbiAgNjU6XFx0XFx0aWYgKGVycilcXG4gIDY2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaW5mbztcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0c3RhdGUtXFx1MDAzZWZvbGlvc19pbmZvX3BoeXMgPSBmb2xpb3NfaW5mb19waHlzO1xcbiAgNjk6XFx0XFx0c3RhdGUtXFx1MDAzZWZvbGlvc19pbmZvID0gZm9saW9zX2luZm87XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc3RhdGUtXFx1MDAzZW5yX2ZvbGlvczsgaSsrKSB7XFxuICA3MjpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc3RhdGUtXFx1MDAzZWZvbGlvc1tpXTtcXG4gIDczOlxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0XFx0Zm9saW9zX2luZm9baV0gPSB2aXJ0X3RvX3BoeXMoZm9saW9fYWRkcmVzcyhmb2xpbykpIHwgb3JkZXI7XFxuICA3NjpcXHRcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfZm9saW8oZm9saW8pO1xcbiAgNzc6XFx0XFx0XFx0aWYgKGVycilcXG4gIDc4OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3VucHJlc2VydmU7XFxuICA3OTpcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbnJfZm9saW9zX3ByZXNlcnZlZCsrO1xcbiAgODA6XFx0XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRcXHRyZXR1cm4gMDtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0ZXJyX3VucHJlc2VydmU6XFxuICA4NTpcXHRcXHQvKlxcbiAgODY6XFx0XFx0ICoga2hvX3Rlc3RfdW5wcmVzZXJ2ZV9kYXRhIGZyZWVzIGZvbGlvX2luZm8sIGJhaWwgb3V0IGltbWVkaWF0ZWx5IHRvXFxuICA4NzpcXHRcXHQgKiBhdm9pZCBkb3VibGUgZnJlZVxcbiAgODg6XFx0XFx0ICovXFxuICA4OTpcXHRcXHRraG9fdGVzdF91bnByZXNlcnZlX2RhdGEoc3RhdGUpO1xcbiAgOTA6XFx0XFx0cmV0dXJuIGVycjtcXG4gIDkxOlxcdFxcbiAgOTI6XFx0ZXJyX2ZyZWVfaW5mbzpcXG4gIDkzOlxcdFxcdHZmcmVlKGZvbGlvc19pbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MTIuNjI4ODg5NDAzWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTEwOTA4MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS0hPIERhdGEgUHJlc2VydmF0aW9uIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhYCBjYWxscyBga2hvX3ByZXNlcnZlX2ZvbGlvYCwgYnV0IG5vdCBga2hvX3ByZXNlcnZlX3BhZ2VgLiAgVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB3b25kZXIgd2h5IGBraG9fcHJlc2VydmVfcGFnZWAgZXhpc3RzIGF0IGFsbC4gSXQgYXBwZWFycyBjb21wbGV0ZWx5IHVudXNlZCwgdW5sZXNzLi4uIHdhaXQsIHdoYXQgYWJvdXQgYGtob19wcmVzZXJ2ZV9wYWdlc2A/IEkgcmVtZW1iZXIgaXQgYmVpbmcgdXNlZCB3aXRoaW4gYGtob19wcmVzZXJ2ZV92bWFsbG9jYC5cblxuTm93LCBpZiBJIHJlY2FsbCBjb3JyZWN0bHksIGBraG9fcHJlc2VydmVfdm1hbGxvY2AgKmlzKiBjYWxsZWQgYnkgYGtob190ZXN0X3ByZXNlcnZlX2RhdGFgLiBBbmQgYGtob190ZXN0X3NhdmUoKWAgaXMgY2FsbGVkIGF0IG1vZHVsZSBsb2FkIGlmIEtITyBpcyBub3QgZW5hYmxlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgZm9yIGEgbm9ybWFsIGJvb3QuIFNvIGBraG9fcHJlc2VydmVfcGFnZXNgIGlzIHJlYWNoYWJsZSB2aWEgYGtob190ZXN0X3NhdmUoKWAgYXMgbG9uZyBhcyBLSE8gaXMgZGlzYWJsZWQuXG5cbkhvbGQgb24sIGlmIGBraG9faXNfZW5hYmxlZCgpYCBpcyBmYWxzZSwgYGtob190ZXN0X2luaXQoKWAgc2hvdWxkIHJldHVybiAwLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGZvciBga2hvX3Rlc3RfaW5pdCgpYC5cblxuYGBgY1xuc3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxue1xuXHRwaHlzX2FkZHJfdCBmZHRfcGh5cztcblx0aW50IGVycjtcblxuXHRpZiAoIWtob19pc19lbmFibGVkKCkpXG5cdFx0cmV0dXJuIDA7XG5cblx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoS0hPX1RFU1RfRkRULCBcdTAwMjZmZHRfcGh5cywgTlVMTCk7XG5cdGlmICghZXJyKSB7XG5cdFx0ZXJyID0ga2hvX3Rlc3RfcmVzdG9yZShmZHRfcGh5cyk7XG5cdFx0aWYgKGVycilcblx0XHRcdHByX2VycihcIktITyByZXN0b3JlIGZhaWxlZFxcblwiKTtcblx0XHRlbHNlXG5cdFx0XHRwcl9pbmZvKFwiS0hPIHJlc3RvcmUgc3VjY2VlZGVkXFxuXCIpO1xuXG5cdFx0cmV0dXJuIGVycjtcblx0fVxuXG5cdGlmIChlcnIgIT0gLUVOT0VOVCkge1xuXHRcdHByX3dhcm4oXCJmYWlsZWQgdG8gcmV0cmlldmUgJXMgRkRUOiAlZFxcblwiLCBLSE9fVEVTVF9GRFQsIGVycik7XG5cdFx0cmV0dXJuIGVycjtcblx0fVxuXG5cdHJldHVybiBraG9fdGVzdF9zYXZlKCk7XG59XG5gYGBcblxuT2theSwgeWVzLCBJIHdhcyByaWdodC4gSWYgYCFraG9faXNfZW5hYmxlZCgpYCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4gU28sIG5vdyBpdCBpcyBjbGVhcjogYGtob190ZXN0X3NhdmUoKWAgaXMgKm9ubHkqIGNhbGxlZCBpZiBga2hvX2lzX2VuYWJsZWQoKWAgaXMgVFJVRSwgKmFuZCogYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCByZXR1cm5zIGAtRU5PRU5UYC4gVGhhdCdzIHRoZSBjcml0aWNhbCBjb25kaXRpb24gaGVyZS5cblxuU28sIHdoZW4gKmlzKiBga2hvX2lzX2VuYWJsZWQoKWAgdHJ1ZT8gQWgsIGl0J3MgdHJ1ZSBpZiBgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUYCBpcyBzZXQsIG9yIGlmIHRoZSB1c2VyIHNwZWNpZmljYWxseSBwYXNzZXMgYGtobz1vbmAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEdvdCBpdC4gU28sIGlmIEtITyBpcyBzdXBwb3NlZCB0byBiZSBlbmFibGVkLCBidXQgd2UgYXJlIGRvaW5nIGEgbm9ybWFsIGJvb3QgKGkuZS4sIHRoZXJlIGlzIG5vIEtITyBkYXRhKSwgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCAqd2lsbCogcmV0dXJuIGAtRU5PRU5UYC4gQW5kIHRoZW4sIGBraG9fdGVzdF9zYXZlKClgICp3aWxsKiBiZSBjYWxsZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjIzLjczOTgwMDQyNFoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NDI3Mjk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmV0cmlldmVfc3VidHJlZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9Mzk9dm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYik7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQwOmludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cywgc2l6ZV90ICpzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcmVtb3ZlX3N1YnRyZWUodm9pZCAqYmxvYikgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTExNi1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTE3OnN0YXRpYyBpbmxpbmUgaW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLFxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMTgtXFx0XFx0XFx0XFx0ICAgICAgIHNpemVfdCAqc2l6ZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTQzNT1FWFBPUlRfU1lNQk9MX0dQTChpc19raG9fYm9vdCk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0MzctLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNDM4OiAqIGtob19yZXRyaWV2ZV9zdWJ0cmVlIC0gcmV0cmlldmUgYSBwcmVzZXJ2ZWQgc3ViIGJsb2IgYnkgaXRzIG5hbWUuXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDM5LSAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgc3ViIGJsb2IgcGFzc2VkIHRvIGtob19hZGRfc3VidHJlZSgpLlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDQ3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTQ0ODppbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsIHNpemVfdCAqc2l6ZSlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE0NDkte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xNDgxLX1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE0ODI6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3JldHJpZXZlX3N1YnRyZWUpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTQ4My1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTUzMD1zdGF0aWMgdm9pZCBfX2luaXQga2hvX2luX2tleGVjX21ldGFkYXRhKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE1MzYtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxNTM3OlxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKEtIT19NRVRBREFUQV9OT0RFX05BTUUsIFxcdTAwMjZtZXRhZGF0YV9waHlzLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTUzOC1cXHRcXHRcXHRcXHQgICBcXHUwMDI2YmxvYl9zaXplKTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM9ODQ9c3RhdGljIGludCBfX2luaXQgbHVvX2Vhcmx5X3N0YXJ0dXAodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmMtOTgtXFx0LyogUmV0cmlldmUgTFVPIHN0YXRlIGZyb20gS0hPLiAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19jb3JlLmM6OTk6XFx0ZXJyID0ga2hvX3JldHJpZXZlX3N1YnRyZWUoTFVPX0tIT19FTlRSWV9OQU1FLCBcXHUwMDI2bHVvX3Nlcl9waHlzLCBcXHUwMDI2bGVuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEwMC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5saWIvdGVzdF9raG8uYz0zMTQ9c3RhdGljIGludCBfX2luaXQga2hvX3Rlc3RfaW5pdCh2b2lkKVxcbi0tXFxubGliL3Rlc3Rfa2hvLmMtMzIxLVxcbmxpYi90ZXN0X2toby5jOjMyMjpcXHRlcnIgPSBraG9fcmV0cmlldmVfc3VidHJlZShLSE9fVEVTVF9GRFQsIFxcdTAwMjZmZHRfcGh5cywgTlVMTCk7XFxubGliL3Rlc3Rfa2hvLmMtMzIzLVxcdGlmICghZXJyKSB7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTI2MzA9c3RhdGljIHZvaWQgKl9faW5pdCByZXNlcnZlX21lbV9raG9fcmV0cmlldmVfZmR0KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI2MzgtXFxubW0vbWVtYmxvY2suYzoyNjM5OlxcdGVyciA9IGtob19yZXRyaWV2ZV9zdWJ0cmVlKE1FTUJMT0NLX0tIT19GRFQsIFxcdTAwMjZmZHRfcGh5cywgTlVMTCk7XFxubW0vbWVtYmxvY2suYy0yNjQwLVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6MjUuOTM0MDc5ODFaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyNjUxMjcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtITyBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBga2hvX2lzX2VuYWJsZWQoKWAgaXMgb24gYW5kIGBraG9fcmV0cmlldmVfc3VidHJlZWAgZmFpbHMgd2l0aCBhbiBgLUVOT0VOVGAgZXJyb3IsIHRoZW4gYGtob190ZXN0X3NhdmUoKWAgZ2V0cyBjYWxsZWQuIGBraG9fdGVzdF9zYXZlKClgIHNlZW1zIHRvIHRyaWdnZXIgYSBjYXNjYWRlIG9mIGZ1bmN0aW9uIGNhbGxzOiBga2hvX3Rlc3RfZ2VuZXJhdGVfZGF0YSgpYCwgYGtob190ZXN0X3ByZXNlcnZlKClgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBraG9fdGVzdF9wcmVzZXJ2ZV9kYXRhKClgLiBUaGVuIHRoaXMgbGVhZHMgdG8gYGtob19wcmVzZXJ2ZV92bWFsbG9jKClgIGFuZCBga2hvX3ByZXNlcnZlX2ZvbGlvKClgLiBFdmVudHVhbGx5LCBga2hvX3ByZXNlcnZlX3ZtYWxsb2MoKWAgY2FsbHMgYGtob19wcmVzZXJ2ZV9wYWdlcygpYC4gU28sIHVuZGVyIHRoZSByaWdodCBjb25maWd1cmF0aW9uIChgQ09ORklHX0tFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUPXlgIGFuZCBgQ09ORklHX1RFU1RfS0VYRUNfSEFORE9WRVI9eWApLCBga2hvX3ByZXNlcnZlX3BhZ2VzYCBzaG91bGQgYmUgcmVhY2hhYmxlIGR1cmluZyBib290LlxuXG5CdXQgd2FpdCBhIG1pbnV0ZSEgSSdtIHNlZWluZyBga2hvX3ByZXNlcnZlX3BhZ2VgIChzaW5ndWxhcikgYWRkZWQgaW4gdGhlIHBhdGNoLiBBbmQgdGhvc2UgZnVuY3Rpb25zLCBga2hvX3ByZXNlcnZlX3BhZ2VgLCBga2hvX3VucHJlc2VydmVfcGFnZWAsIGFuZCBga2hvX3Jlc3RvcmVfcGFnZWAsIGFyZSBjb21wbGV0ZWx5IHVudXNlZCBpbiB0aGUgY3VycmVudCB0cmVlISBUaGF0J3Mgc3RyYW5nZS4gVGhlIG9ubHkgKnVzYWJsZSogY2hhbmdlcyBpbiB0aGUgcGF0Y2ggc2VlbSB0byBiZSB0aGUgcmVmYWN0b3JpbmcsIHdoaWNoIHV0aWxpemVzIGBfX2tob19yZXN0b3JlX3BhZ2VgIHdpdGhpbiBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgLiBQbHVzLCB0aGVyZSdzIHRoZSBhZGRpdGlvbiBvZiBgY2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UgKyBpKWAgaW4gYGtob19pbml0X2hpZ2hfb3JkZXJfcGFnZWAuXG5cbkhvd2V2ZXIsIHRoZSBiaWdnZXIgaXNzdWUgaXMgdGhhdCBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIGFyZSAqb25seSogY2FsbGVkIGR1cmluZyB0aGUgcmVzdG9yZSBwaGFzZS4gVGhlIHJlc3RvcmUgcGhhc2UgaXMgKm9ubHkqIHRyaWdnZXJlZCBpZiBga2hvX3JldHJpZXZlX3N1YnRyZWVgIHN1Y2NlZWRzLiAgYGtob19yZXRyaWV2ZV9zdWJ0cmVlYCBjYW4gb25seSBzdWNjZWVkIGlmIHRoZXJlJ3MgS0hPIGRhdGEgcGFzc2VkIGZyb20gYSBwcmV2aW91cyBrZXJuZWwuIEFuZCBzeXprYWxsZXIsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGRvZXNuJ3QgYWN0dWFsbHkgcGVyZm9ybSBrZXhlYyB3aXRoIEtITyBkYXRhLiBJdCBzdGFydHMgd2l0aCBhIGZyZXNoIFZNIGltYWdlLiBUaGF0IG1lYW5zIHRoZSBlbnRpcmUgcmVzdG9yZSBwaGFzZSBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCFcblxuSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHBvc3NpYmx5IHRyaWdnZXIgYGtob19yZXN0b3JlX2ZvbGlvYCBmcm9tIHVzZXIgc3BhY2Ugc29tZWhvdz8gTWF5YmUgYG1lbWZkX2x1b19yZXRyaWV2ZV9mb2xpb3NgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjc2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjMzLjY2MDU5NjA4N1oiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MTQyMTg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWZkX2x1by5jPTM4Nz1zdGF0aWMgdm9pZCBtZW1mZF9sdW9fZmluaXNoKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTQxNi1cXG5tbS9tZW1mZF9sdW8uYzo0MTc6c3RhdGljIGludCBtZW1mZF9sdW9fcmV0cmlldmVfZm9saW9zKHN0cnVjdCBmaWxlICpmaWxlLFxcbm1tL21lbWZkX2x1by5jLTQxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1mZF9sdW9fZm9saW9fc2VyICpmb2xpb3Nfc2VyLFxcbi0tXFxubW0vbWVtZmRfbHVvLmM9NTE4PXN0YXRpYyBpbnQgbWVtZmRfbHVvX3JldHJpZXZlKHN0cnVjdCBsaXZldXBkYXRlX2ZpbGVfb3BfYXJncyAqYXJncylcXG4tLVxcbm1tL21lbWZkX2x1by5jLTU2MS1cXG5tbS9tZW1mZF9sdW8uYzo1NjI6XFx0XFx0ZXJyID0gbWVtZmRfbHVvX3JldHJpZXZlX2ZvbGlvcyhmaWxlLCBmb2xpb3Nfc2VyLCBzZXItXFx1MDAzZW5yX2ZvbGlvcyk7XFxubW0vbWVtZmRfbHVvLmMtNTYzLVxcdFxcdHZmcmVlKGZvbGlvc19zZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMDozNi4xNTIwMjU3NzVaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1ODExMjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgVW5yZWFjaGFibGUgQ29kZSBQYXRoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgYnVyaWVkIHByZXR0eSBkZWVwLCBjYWxsZWQgdGhyb3VnaCBhIGNoYWluIG9mIGZ1bmN0aW9uczogYGx1b19maWxlX2Rlc2VyaWFsaXplX29uZWAsIGBsdW9fZmlsZV9kZXNlcmlhbGl6ZWAsIGBsdW9fc2Vzc2lvbl9kZXNlcmlhbGl6ZV9vbmVgLCBgbHVvX3Nlc3Npb25fZGVzZXJpYWxpemVgLCBhbmQgZmluYWxseSwgaW5pdGlhdGVkIGJ5IGEgY2FsbCB0byBgbHVvX29wZW5gIG9uIGAvZGV2L2xpdmV1cGRhdGVgLiAgVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBpbW1lZGlhdGVseSByZXR1cm5zIGlmIGEgZmxhZywgYHNoLVx1MDAzZWFjdGl2ZWAsIGlzIGZhbHNlLlxuXG5UaGlzIGBzaC1cdTAwM2VhY3RpdmVgIGZsYWcgaXMgb25seSBzZXQgaW4gYGx1b19zZXNzaW9uX3NldHVwX2luY29taW5nYCwgd2hpY2gsIEkgbm93IHJlY2FsbCwgaXMgY2FsbGVkIGR1cmluZyBib290IHdpdGggYHNlc3Npb25zX3BhYC4gSWYsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZSwgdGhlcmUgaXMgKm5vKiBLSE8gZGF0YSwgYHNlc3Npb25zX3BhYCBpcyB6ZXJvLCBhbmQgdGhhdCBjcnVjaWFsIGBzaC1cdTAwM2VhY3RpdmVgIGZsYWcgc3RheXMgZmFsc2UuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGRlc2VyaWFsaXphdGlvbiBwcm9jZXNzIGlzIHNob3J0LWNpcmN1aXRlZCDigJMgYGx1b19zZXNzaW9uX2Rlc2VyaWFsaXplYCBkb2VzIG5vdGhpbmcuIENvbnNlcXVlbnRseSwgYG1lbWZkX2x1b19yZXRyaWV2ZWAgaXMgKm5ldmVyKiBjYWxsZWQsIGFuZCB0aGVyZWZvcmUgYWxsIHRoZSBmdW5jdGlvbnMgKmRvd25zdHJlYW0qIGZyb20gaXQsIGluY2x1ZGluZyBga2hvX3Jlc3RvcmVfZm9saW9gLCBgX19raG9fcmVzdG9yZV9wYWdlYCwgYW5kIGBraG9faW5pdF9oaWdoX29yZGVyX3BhZ2VgLCBhcmUgYWxzbyBpbmFjY2Vzc2libGUuXG5cblRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBpbnRyb2R1Y2U6XG4xLiAgVW51c2VkIGZ1bmN0aW9uczogYGtob19wcmVzZXJ2ZV9wYWdlYCwgYGtob191bnByZXNlcnZlX3BhZ2VgLCBhbmQgYGtob19yZXN0b3JlX3BhZ2VgLlxuMi4gIFJlZmFjdG9yaW5nIHRoYXQsIGFnYWluLCBkZXBlbmRzIG9uIHRoYXQgaW5hY2Nlc3NpYmxlIGRlc2VyaWFsaXphdGlvbiBwYXRoLlxuMy4gIFNvbWUgYGNsZWFyX3BhZ2VfdGFnX3JlZmAgY2FsbHMgd2l0aGluIHRoZSBpbml0aWFsaXphdGlvbiBsb2dpYywgYWxzbyB1bnJlYWNoYWJsZS5cblxuR2l2ZW4gdGhhdCBhIHN0YW5kYXJkIHN5emthbGxlciBlbnZpcm9ubWVudCwgd2hpY2ggZG9lc24ndCBib290IHdpdGggS0hPIGRhdGEsIHdpbGwgbmV2ZXIgcmVhY2ggYW55IG9mIHRoZXNlIG1vZGlmaWVkIG9yIGFkZGVkIGZ1bmN0aW9ucywgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGZ1enppbmcgdGhpcyBwYXRjaCBhcyBpdCBzdGFuZHMuXG5cbkhvbGQgb24sIHRob3VnaC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gU3l6a2FsbGVyIGlzIGNhcGFibGUgb2YgY2xldmVyIHRyaWNrcy4gIENhbiBpdCB3cml0ZSBzb21ldGhpbmcgdG8gYC9zeXMva2VybmVsL2tleGVjX2hhbmRvdmVyYCBvciBzaW1pbGFyIHRvIGluamVjdCBLSE8gZGF0YSBpbnRvIHRoZSBzeXN0ZW0sIHBvdGVudGlhbGx5IG1ha2luZyB0aGlzIGNvZGUgcGF0aCBhY2Nlc3NpYmxlPyAgSSBzaG91bGQgY2hlY2sgdGhlIGF2YWlsYWJsZSBkZWJ1Z2ZzIG9yIHN5c2ZzIGludGVyZmFjZXMgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IG1lY2hhbmlzbSB0byBpbmplY3QgdGhhdCBkYXRhIGRpcmVjdGx5LiBJZiB0aGVyZSBpcywgdGhlbiB3ZSAqbWlnaHQqIGhhdmUgYSB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyODcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjQ0LjMxMDE0MTEzNloiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODgzMzg1MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjQ2LjI1ODk4NjA2N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcyNDEyODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBjb2RlIGFuZCBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgaW4gYSBuZXR3b3JrIG9yIHNlc3Npb24tcmVsYXRlZCBjb250ZXh0OlxuXG4qKkFuYWx5emluZyBgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmdgKipcblxuQWxyaWdodCwgdGhhdCdzIHdoZXJlIHdlJ3JlIHN0YXJ0aW5nLiBcIkxldCdzIGNoZWNrIGBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ2AuXCIgVGhpcyBpbmRpY2F0ZXMgYSBzcGVjaWZpYywgbGlrZWx5IGNydWNpYWwsIHBpZWNlIG9mIGNvZGUgcmVsYXRlZCB0byBpbmNvbWluZyBzZXNzaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIHRvd2FyZHMgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gSSdtIHByb2JhYmx5IGZhY2luZyBhIHByb2JsZW0gd2l0aCBpbmNvbWluZyBzZXNzaW9ucywgYW5kIHRoaXMgaXMgd2hlcmUgSSd2ZSBkZWNpZGVkIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEl0IGNvdWxkIGJlIGFueXRoaW5nIGZyb20gYSBjb25uZWN0aW9uIHByb2JsZW0sIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUsIG9yIGRhdGEgaGFuZGxpbmcgaXNzdWUuIEtub3dpbmcgdGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIG9mIGFuIGluY29taW5nIGNvbW11bmljYXRpb24gc2Vzc2lvbiwgYSBwaXZvdGFsIHBvaW50IHdoZXJlIHRoaW5ncyBjYW4gZ28gcmlnaHQgb3IsIG1vcmUgb2Z0ZW4gaW4gbXkgbGluZSBvZiB3b3JrLCB0ZXJyaWJseSB3cm9uZy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcmVjYWxsIG9yIGxvY2F0ZSB0aGUgY29kZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgc3RhcnQgbWVudGFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBwaW5wb2ludCBhbnkgbG9naWNhbCBmbGF3cywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3Igb2J2aW91cyBlcnJvcnMgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGluaXRpYWwgY2hlY2sgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzg4OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjEwOjUxLjEzMTQwMzkxOVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMjYwMjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jPTg0PXN0YXRpYyBpbnQgX19pbml0IGx1b19lYXJseV9zdGFydHVwKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jLTEyNC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9fY29yZS5jOjEyNTpcXHRlcnIgPSBsdW9fc2Vzc2lvbl9zZXR1cF9pbmNvbWluZyhsdW9fc2VyLVxcdTAwM2VzZXNzaW9uc19wYSk7XFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX2NvcmUuYy0xMjYtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oPTgyPXZvaWQgX19pbml0IGx1b19zZXNzaW9uX3NldHVwX291dGdvaW5nKHU2NCAqc2Vzc2lvbnNfcGEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2x1b19pbnRlcm5hbC5oOjgzOmludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9sdW9faW50ZXJuYWwuaC04NC1pbnQgbHVvX3Nlc3Npb25fc2VyaWFsaXplKHZvaWQpO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvbHVvX3Nlc3Npb24uYz01Mjk9dm9pZCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfb3V0Z29pbmcodTY0ICpzZXNzaW9uc19wYSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM0LVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmM6NTM1OmludCBfX2luaXQgbHVvX3Nlc3Npb25fc2V0dXBfaW5jb21pbmcodTY0IHNlc3Npb25zX3BhKVxcbmtlcm5lbC9saXZldXBkYXRlL2x1b19zZXNzaW9uLmMtNTM2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTc6MTA6NTMuMTU0MDEzNjQ1WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzc4NjcyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZXJpZXMuLi4gSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgbHVvX2Vhcmx5X3N0YXJ0dXBgLiBSaWdodCwgYW5kIGBsdW9fZWFybHlfc3RhcnR1cGAgaXMgdHJpZ2dlcmVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGF0IG1lYW5zIGl0J3MgaW5oZXJlbnRseSBkZXBlbmRlbnQgb24gdGhlIEtITyBkYXRhLCBzcGVjaWZpY2FsbHkgYGx1b19zZXJfcGh5c2AsIHdoaWNoIGl0IGdldHMgdmlhIGBraG9fcmV0cmlldmVfc3VidHJlZWAuIFRoaXMgZGF0YSBpcyBwYXNzZWQgZnJvbSB0aGUgYm9vdGxvYWRlciBvciBwb3RlbnRpYWxseSB0aGUgcHJldmlvdXMga2VybmVsLiBUaGVyZSdzIG5vIHdheSB0byBpbmplY3QgYW55dGhpbmcgZnJvbSB1c2Vyc3BhY2UgYWZ0ZXIgYm9vdCDigJMgaXQncyBhbGwgcHJlLWJvb3QgY29uZmlndXJhdGlvbi5cblxuTm93LCBteSB0YXNrIGlzIHRvIGRlY2lkZSBpZiB0aGlzIG5lZWRzIGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBJICptdXN0KiBleGFtaW5lIHRoZSBjb2RlIGl0c2VsZiwgbm90IHJlbHkgb24gd2hhdCBJICp0aGluayogSSBrbm93LiBGaW5lLiBMZXQncyBsb29rIGludG8gdGhpcyBga2hvX3ByZXNlcnZlX3BhZ2VgIGZ1bmN0aW9uLiBUaGUgZG9jdW1lbnRhdGlvbiBzYXlzIHRvIGNvbnNpZGVyIGl0LCBzbyBJIGNoZWNrZWQuIEluaXRpYWxseSwgSSBmb3VuZCBpdCdzICpub3QqIHVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBjaGFuZ2VzIGFwcGVhciBsaW1pdGVkIHRvIGFkZGluZyB1bnVzZWQgZnVuY3Rpb25zIGFuZCByZWZhY3RvcmluZyB1bnJlYWNoYWJsZSBjb2RlLiBTbywgb24gdGhlIHN1cmZhY2UsIGl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBiZSBmdXp6ZWQuXG5cbkhvd2V2ZXIsIEknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBraG9fcHJlc2VydmVfcGFnZWAgaXNuJ3QgbHVya2luZyBpbiBzb21lIG1hY3JvIGRlZmluaXRpb24gb3Igc29tZXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbWFrZSBpdCByZWxldmFudC4gVGhpcyBpcyBhIHRob3JvdWdoIHJldmlldywgYWZ0ZXIgYWxsLCBhbmQgSSBuZWVkIHRvIGJlIGNlcnRhaW4uIEknbGwgbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gaGlkZGVuIHVzYWdlIGJlZm9yZSBJIHJlYWNoIGEgZmluYWwgY29uY2x1c2lvbi4gQWZ0ZXIgbXkgY2hlY2ssIEknbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ5MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNzoxMTowMC41MzE4ODcyMDRaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjM3NzcwNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3ByZXNlcnZlX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTI0PXZvaWQga2hvX3VucHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjI1OmludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjYtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoyNzppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMjgtdm9pZCBraG9fdW5wcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9NjI9c3RhdGljIGlubGluZSB2b2lkIGtob191bnByZXNlcnZlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC02My1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NjQ6c3RhdGljIGlubGluZSBpbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTY1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD02OT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3VucHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBucl9wYWdlcykgeyB9XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTcwLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo3MTpzdGF0aWMgaW5saW5lIGludCBraG9fcHJlc2VydmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC03Mi17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTQ0MT1FWFBPUlRfU1lNQk9MX0dQTChraG9fcmVzdG9yZV9mb2xpbyk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0Ny0gKiBSZXN0b3JlIGEgaGlnaC1vcmRlciBwYWdlIGJsb2NrIHRoYXQgd2FzIHByZXNlcnZlZCB3aXRoXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo0NDg6ICoga2hvX3ByZXNlcnZlX3BhZ2UoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ0OS0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz00NjQ9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3Jlc3RvcmVfcGFnZSk7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3MS0gKiBSZXN0b3JlIGEgY29udGlndW91cyBsaXN0IG9mIG9yZGVyIDAgcGFnZXMgdGhhdCB3YXMgcHJlc2VydmVkIHdpdGhcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjQ3MjogKiBraG9fcHJlc2VydmVfcGFnZXMoKS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTQ3My0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05MTk9RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3VucHJlc2VydmVfZm9saW8pO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MjEtLyoqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MjI6ICoga2hvX3ByZXNlcnZlX3BhZ2UgLSBwcmVzZXJ2ZSBhIGhpZ2gtb3JkZXIgcGFnZSBibG9jay5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkyMy0gKiBAcGFnZTogaGVhZCBwYWdlIG9mIHRoZSBibG9jay5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTMyLSAqIHBlcmZvcm0gdGhlIHNwbGl0LCBhbmQgdGhlbiByZS1wcmVzZXJ2ZSB0aGUgaW5kaXZpZHVhbCBwYWdlcyB1c2luZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTMzOiAqIGtob19wcmVzZXJ2ZV9wYWdlcygpLlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTM0LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzNi0gKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkzNzppbnQga2hvX3ByZXNlcnZlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkzOC17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk0Ni19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5NDc6RVhQT1JUX1NZTUJPTF9HUEwoa2hvX3ByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTQ4LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NTQtICogSW5zdHJ1Y3RzIEtITyB0byB1bnByZXNlcnZlIGEgaGlnaC1vcmRlciBibG9jayB0aGF0IHdhcyBwcmVzZXJ2ZWQgYnlcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk1NTogKiBraG9fcHJlc2VydmVfcGFnZSgpIGJlZm9yZS5cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk1Ni0gKi9cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PUVYUE9SVF9TWU1CT0xfR1BMKGtob191bnByZXNlcnZlX3BhZ2UpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTY1LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTY2OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NjctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTgzPXN0YXRpYyB2b2lkIF9fa2hvX3VucHJlc2VydmUoc3RydWN0IGtob19yYWRpeF90cmVlICp0cmVlLFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05ODgtXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk4OTpcXHRcXHRvcmRlciA9IF9fa2hvX3ByZXNlcnZlX3BhZ2VzX29yZGVyKHBmbiwgZW5kX3Bmbik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05OTAtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk5Ny0vKipcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk5ODogKiBraG9fcHJlc2VydmVfcGFnZXMgLSBwcmVzZXJ2ZSBjb250aWd1b3VzIHBhZ2VzIGFjcm9zcyBrZXhlY1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTk5LSAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBsaXN0Llxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDA3LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAwODppbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTAwOS17XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjItXFx0d2hpbGUgKHBmbiBcXHUwMDNjIGVuZF9wZm4pIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwMjM6XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyID0gX19raG9fcHJlc2VydmVfcGFnZXNfb3JkZXIocGZuLCBlbmRfcGZuKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwMzgtfVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTAzOTpFWFBPUlRfU1lNQk9MX0dQTChraG9fcHJlc2VydmVfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0MC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTA0Ny0gKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgQHBhZ2UgYW5kIEBucl9wYWdlcyBhcyB0aGUgY29ycmVzcG9uZGluZ1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTA0ODogKiBraG9fcHJlc2VydmVfcGFnZXMoKSBjYWxsLiBVbnByZXNlcnZpbmcgYXJiaXRyYXJ5IHN1Yi1yYW5nZXMgb2YgbGFyZ2VyXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ5LSAqIHByZXNlcnZlZCBibG9ja3MgaXMgbm90IHN1cHBvcnRlZC5cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTA5Mj1zdGF0aWMgc3RydWN0IGtob192bWFsbG9jX2NodW5rICpuZXdfdm1hbGxvY19jaHVuayhzdHJ1Y3Qga2hvX3ZtYWxsb2NfY2h1bmsgKmN1cilcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjExMDE6XFx0ZXJyID0ga2hvX3ByZXNlcnZlX3BhZ2VzKHZpcnRfdG9fcGFnZShjaHVuayksIDEpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTEwMi1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTQyPWludCBraG9fcHJlc2VydmVfdm1hbGxvYyh2b2lkICpwdHIsIHN0cnVjdCBraG9fdm1hbGxvYyAqcHJlc2VydmF0aW9uKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMTY3LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTE2ODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXModm0tXFx1MDAzZXBhZ2VzW2ldLCBucl9jb250aWdfcGFnZXMpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTI4PXN0YXRpYyBpbnQgX19pbml0IHJlc2VydmVkX21lbV9wcmVzZXJ2ZSh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTM3LVxcbm1tL21lbWJsb2NrLmM6MjUzODpcXHRcXHRlcnIgPSBraG9fcHJlc2VydmVfcGFnZXMocGFnZSwgbnJfcGFnZXMpO1xcbm1tL21lbWJsb2NrLmMtMjUzOS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNTU3PXN0YXRpYyBpbnQgX19pbml0IHByZXBhcmVfa2hvX2ZkdCh2b2lkKVxcbi0tXFxubW0vbWVtYmxvY2suYy0yNTY5LVxcdGZkdCA9IHBhZ2VfdG9fdmlydChmZHRfcGFnZSk7XFxubW0vbWVtYmxvY2suYzoyNTcwOlxcdGVyciA9IGtob19wcmVzZXJ2ZV9wYWdlcyhmZHRfcGFnZSwgMSk7XFxubW0vbWVtYmxvY2suYy0yNTcxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjExOjAyLjQ1NTY3Mjk5NloiLCJTZXEiOjc1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg5OTA4NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVudXNlZCBDb2RlIGFuZCBXb3J0aEZ1enppbmc9RmFsc2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCBga2hvX3ByZXNlcnZlX3BhZ2VgIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIGl0J3MgY29tcGxldGVseSB1bnVzZWQuIERpZ2dpbmcgZGVlcGVyLCBpdCdzIGNsZWFyIHRoZSBvbmx5IGNoYW5nZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGNvbnNpc3Qgb2YgdW51c2VkIGZ1bmN0aW9ucyBhbmQgY29kZSB0aGF0J3MgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSB3aXRob3V0IGFueSBLSE8gZGF0YSBpbiBwbGF5LiBDb25zaWRlcmluZyB0aGUgZWZmb3J0IHRvIHZhbHVlIHJhdGlvLCBhbmQga25vd2luZyB0aGF0IEknbSBkZWFsaW5nIHdpdGggY29kZSB0aGF0IGVzc2VudGlhbGx5IGRvZXMgbm90aGluZyBpbiB0aGUgY3VycmVudCBjb250ZXh0LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhlcmUncyBubyB2YWx1ZSBpbiBmdXJ0aGVyIGludmVzdGlnYXRpb24gb3IgZnV6emluZyBlZmZvcnRzIG9uIHRoaXMgcGFydGljdWxhciBlbGVtZW50LCBhdCBsZWFzdCBub3QgaW4gaXRzIHByZXNlbnQgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjUzLCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE3OjExOjA4LjY0NTU4NDU1OFoiLCJTZXEiOjc2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IEFQSXMgKGBraG9fcHJlc2VydmVfcGFnZWAsIGBraG9fdW5wcmVzZXJ2ZV9wYWdlYCwgYGtob19yZXN0b3JlX3BhZ2VgKSBmb3IgS2V4ZWMgSGFuZG92ZXIgKEtITykgd2hpY2ggYXJlIGN1cnJlbnRseSB1bnVzZWQgYW55d2hlcmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJdCBhbHNvIHJlZmFjdG9ycyBga2hvX3Jlc3RvcmVfZm9saW9gIGFuZCBga2hvX3Jlc3RvcmVfcGFnZXNgIHRvIHVzZSBhIG5ldyBpbnRlcm5hbCBoZWxwZXIgYF9fa2hvX3Jlc3RvcmVfcGFnZWAsIGFuZCBtb2RpZmllcyBga2hvX2luaXRfaGlnaF9vcmRlcl9wYWdlYCB0byBjbGVhciBwYWdlIHRhZ3MgZm9yIHRhaWwgcGFnZXMuIEhvd2V2ZXIsIGFsbCBvZiB0aGVzZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBvbmx5IHJlYWNoYWJsZSBkdXJpbmcgdGhlIEtITyByZXN0b3JlIHBoYXNlLCB3aGljaCBzdHJpY3RseSByZXF1aXJlcyB0aGUga2VybmVsIHRvIGJlIGJvb3RlZCB3aXRoIEtITyBkYXRhIHBhc3NlZCBmcm9tIGEgcHJldmlvdXMga2VybmVsLiBTaW5jZSBzeXprYWxsZXIgYm9vdHMgZnJvbSBhIGZyZXNoIFZNIGltYWdlIHdpdGhvdXQgS0hPIGRhdGEsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8t747[1] Phase: Running StartedAt: 2026-08-03 17:11:19 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8t747[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-03 17:11:19 +0000 UTC FinishedAt: 2026-08-03 17:11:24 +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,}