Name: series-workflow4cmwr Phase: Succeeded StartedAt: 2026-07-14 12:04:34 +0000 UTC FinishedAt: 2026-07-14 16:53:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[0] Phase: Succeeded StartedAt: 2026-07-14 12:04:34 +0000 UTC FinishedAt: 2026-07-14 12:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 12:04:34 +0000 UTC FinishedAt: 2026-07-14 12:35:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "series_id": "c7c7dbd0-d087-4bf1-9730-cbce3a4e7939" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_invalidate_folio", "iomap_zero_range", "iomap_truncate_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3RydW5jYXRlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2I1ODY5MDk0ODRiNjQ3N2E5YTVhNzBmYzRjODdjODZjYTI0NmQyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDEyOjMzOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCBkNTViOTM2ZTY5ODYyOC4uYzEyMjM3ZWQ3Y2RlOWEgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtNjcsMTEgJiM0Mzs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbiYjNDM7XHRpZiAobGVuKSB7XG4mIzQzO1x0XHRmaXJzdF9ibGsgPSBvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiYjNDM7XHRcdGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdFx0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIGlmc19pc19mdWxseV91cHRvZGF0ZShmb2xpbywgaWZzKTtcbiB9XG4gXG5AQCAtMTcxLDE4ICYjNDM7MTczLDI5IEBAIHN0YXRpYyB1bnNpZ25lZCBpb21hcF9maW5kX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCAqcmFuZ2Vfc3RhcnQsXG4gXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2xlYXIgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGFcbiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuJiM0MzsgKiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb25zIGxpa2UgZm9saW9cbiYjNDM7ICogaW52YWxpZGF0aW9uLCB3aGVyZSB3ZSBtdXN0IGVuc3VyZSBhIGJsb2NrIGlzIGZ1bGx5IGNsZWFuIGJlZm9yZSBkaXNjYXJkaW5nXG4mIzQzOyAqIGl0LlxuJiM0MzsgKi9cbiBzdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IHJvdW5kX3VwKG9mZiwgaV9ibG9ja3NpemUoaW5vZGUpKSBcdTAwM2VcdTAwM2VcbiYjNDM7XHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiYjNDM7XHRpZiAoZmlyc3RfYmxrIFx1MDAzZT0gbGFzdF9ibGspXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbi1cdGJpdG1hcF9jbGVhcihpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7XG4mIzQzO1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLFxuJiM0MztcdFx0ICAgICBsYXN0X2JsayAtIGZpcnN0X2Jsayk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4gfVxuIFxuQEAgLTE5NCwxOCAmIzQzOzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIHdpdGhpbiBhXG4mIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgb3V0d2FyZHMgc28gdGhhdCBhbnkgYmxvY2sgcGFydGlhbGx5IHRvdWNoZWRcbiYjNDM7ICogYnkgdGhlIHJhbmdlIGlzIG1hcmtlZCBkaXJ0eS4gIFRoaXMgZW5zdXJlcyBibG9ja3MgY29udGFpbmluZyBldmVuIGFcbiYjNDM7ICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuJiM0MzsgKiBkYXRhIGxvc3Mgd2hlbiBwYXJ0aWFsIGJsb2NrcyBhcmUgd3JpdHRlbi5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbi1cdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuJiM0MztcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sXG4mIzQzO1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG5AQCAtNzU3LDYgJiM0Mzs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG4gXHRcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XG4gXHRcdGlmc19mcmVlKGZvbGlvKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5AQCAtMTUzNiw2ICYjNDM7MTU2Miw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzKVxuIHtcbiBcdHU2NCBieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKTtcbiYjNDM7XHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgJiM0MzsxNTgxLDggQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHQvKiBhIE5VTEwgZm9saW8gbWVhbnMgd2UmIzM5O3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXG4gXHRcdGlmICghZm9saW8pIHtcbiBcdFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2VfZnVsbChpdGVyKTtcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw2ICYjNDM7MTU5Myw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcdFx0XHRcdGJ5dGVzKTtcbiBcbiBcdFx0Zm9saW9femVyb19yYW5nZShmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4mIzQzO1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgJiM0MzsxNjAzLDEwIEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcbiBcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGJ5dGVzKTtcbiBcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiBcdH0gd2hpbGUgKChieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKSkgXHUwMDNlIDApO1xuIFxuLVx0aWYgKGRpZF96ZXJvKVxuJiM0MztcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfdHJ1bmNhdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNTg2OTA5NDg0YjY0NzdhOWE1YTcwZmM0Yzg3Yzg2Y2EyNDZkMjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxMjozMzozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCmluZGV4IGQ1NWI5MzZlNjk4NjI4Li5jMTIyMzdlZDdjZGU5YSAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC02NywxMSAmIzQzOzY3LDEzIEBAIHN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0OwotCXVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSBvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsazsKIAotCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTsKJiM0MzsJaWYgKGxlbikgewomIzQzOwkJZmlyc3RfYmxrID0gb2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiYjNDM7CQlsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrLCBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTsKJiM0MzsJfQogCXJldHVybiBpZnNfaXNfZnVsbHlfdXB0b2RhdGUoZm9saW8sIGlmcyk7CiB9CiAKQEAgLTE3MSwxOCAmIzQzOzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LAogCXJldHVybiByYW5nZV9lbmQgLSAqcmFuZ2Vfc3RhcnQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENsZWFyIHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIHdpdGhpbiBhCiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieQomIzQzOyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpbwomIzQzOyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZwomIzQzOyAqIGl0LgomIzQzOyAqLwogc3RhdGljIHZvaWQgaWZzX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKIAl1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzKTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpICZndDsmZ3Q7CiYjNDM7CQkJCSBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbikgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiYjNDM7CWlmIChmaXJzdF9ibGsgJmd0Oz0gbGFzdF9ibGspCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfY2xlYXIoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTsKJiM0MzsJYml0bWFwX2NsZWFyKGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywKJiM0MzsJCSAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTk0LDE4ICYjNDM7MjA3LDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiAJCWlmc19jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYQomIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgb3V0d2FyZHMgc28gdGhhdCBhbnkgYmxvY2sgcGFydGlhbGx5IHRvdWNoZWQKJiM0MzsgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYQomIzQzOyAqIHNpbmdsZSBkaXJ0eSBieXRlIHdpbGwgYmUgaW5jbHVkZWQgaW4gc3Vic2VxdWVudCB3cml0ZWJhY2ssIHByZXZlbnRpbmcKJiM0MzsgKiBkYXRhIGxvc3Mgd2hlbiBwYXJ0aWFsIGJsb2NrcyBhcmUgd3JpdHRlbi4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0OwogCXVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pOwotCXVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSAob2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHMpOwotCXVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKLQl1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7CiYjNDM7CXVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZpcnN0X2JsayA9IG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwlsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2lmcy0mZ3Q7c3RhdGVfbG9jaywgZmxhZ3MpOwotCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTsKJiM0MzsJYml0bWFwX3NldChpZnMtJmd0O3N0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sCiYjNDM7CQkgICBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTc1Nyw2ICYjNDM7NzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiAJCVdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpOwogCQlmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pOwogCQlpZnNfZnJlZShmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pOwpAQCAtMTUzNiw2ICYjNDM7MTU2Miw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzKQogewogCXU2NCBieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKTsKJiM0MzsJYm9vbCB6ZXJvZWQgPSBmYWxzZTsKIAlpbnQgc3RhdHVzOwogCiAJZG8gewpAQCAtMTU1NCw2ICYjNDM7MTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJLyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJiMzOTtyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqLwogCQlpZiAoIWZvbGlvKSB7CiAJCQlzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2VfZnVsbChpdGVyKTsKJiM0MzsJCQlpZiAoc3RhdHVzKQomIzQzOwkJCQlyZXR1cm4gc3RhdHVzOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTU2NCw2ICYjNDM7MTU5Myw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJCQlieXRlcyk7CiAKIAkJZm9saW9femVyb19yYW5nZShmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQl6ZXJvZWQgPSB0cnVlOwogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKIAogCQlyZXQgPSBpb21hcF93cml0ZV9lbmQoaXRlciwgYnl0ZXMsIGJ5dGVzLCBmb2xpbyk7CkBAIC0xNTczLDEwICYjNDM7MTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAKIAkJc3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGJ5dGVzKTsKIAkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJfSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSAmZ3Q7IDApOwogCi0JaWYgKGRpZF96ZXJvKQomIzQzOwlpZiAoZGlkX3plcm8gJmFtcDsmYW1wOyB6ZXJvZWQpCiAJCSpkaWRfemVybyA9IHRydWU7CiAJcmV0dXJuIHN0YXR1czsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGVzZSBpb21hcCBCdWZmZXJlZCBJTyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGFuZCBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlcyB0byBzZWUgdGhlIGltcGFjdC4gRmlyc3Qgb2ZmLCB3ZSYjMzk7dmUgZ290IGEgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSByYW5nZSBzZXR0aW5nIGFuZCBjbGVhcmluZyBsb2dpYy4gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgIG5vdyBjaGVja3MgZm9yIGBsZW5gIGJlZm9yZSBzZXR0aW5nIHRoZSBiaXRtYXAsIHdoaWNoIHNlZW1zIHNlbnNpYmxlIGZvciBlZmZpY2llbmN5LiBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCBoYXMgc29tZSByb3VuZGluZyBhZGp1c3RtZW50cyBmb3IgdGhlIGJsb2NrIGNhbGN1bGF0aW9ucyBhbmQgaW5jbHVkZXMgYSBjaGVjayB0byBzZWUgaWYgdGhlIHJhbmdlIGlzIHZhbGlkLiBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgYWxzbyBub3cgaW5jbHVkZXMgYSBgbGVuYCBjaGVjay4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIG5vdyBjYWxsaW5nIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgaW4gdGhlIGBlbHNlYCBicmFuY2gsIHdoaWNoIGlzIGludGVyZXN0aW5nIHRvIG5vdGUuIEFuZCBmaW5hbGx5LCBgaW9tYXBfemVyb19pdGVyYCBoYXMgc29tZSBhZGRlZCBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHplcm9pbmcgYWN0dWFsbHkgb2NjdXJzIGJlZm9yZSBzZXR0aW5nIHRoZSBgKmRpZF96ZXJvYCBmbGFnLiBJdCBhbHNvIGhhcyBlYXJseSByZXR1cm5zIG9uIHNvbWUgZXJyb3JzLgoKR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBpb21hcCBidWZmZXJlZCBJTywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkgaGVyZS4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zOiBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiAKCkhvbGQgb24gYSBzZWNvbmQsIGxvb2tzIGxpa2UgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSXQgaXMgbmVjZXNzYXJ5IHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBvbiBhIGhvdCBwYXRoLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQsIGFuZCBgaW9tYXBfemVyb19pdGVyYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgaW9tYXBfemVyb19yYW5nZWAsIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciB3aXRoIGdyZXAgdG8gdW5kZXJzdGFuZCB0aGVpciBjYWxsIHNpdGVzIGFuZCBhc3Nlc3MgaWYgdGhlc2UgYXJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc3MC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzcxOnZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzM6XHR0cmFjZV9pb21hcF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzc0LVx0XHRcdFx0XHRmb2xpb19wb3MoZm9saW8pICYjNDM7IG9mZnNldCwgbGVuKTtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ny19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg5LVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xuZnMvaW9tYXAvdHJhY2UuaDo4NDpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC90cmFjZS5oLTg1LURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRmlsZXN5c3RlbSBGb2xpbyBJbnZhbGlkYXRpb24qKgoKT2theSwgc28gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB2YXJpb3VzIGZpbGVzeXN0ZW1zLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQmIzM5O3MgdGhlIGdvLXRvIGZ1bmN0aW9uIHdoZW4gYSBmb2xpbyBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgaGVhdnkgaGl0dGVycyDigJMgWEZTLCBleHQ0LCBnZnMyLCBidHJmcywgem9uZWZzLCBhbmQgSSYjMzk7bSBzdXJlIG1hbnkgb3RoZXJzLiBTbywgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEkvTyBwYXRoLiBJdCBzb3VuZHMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBtYWludGFpbmluZyBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZXNlIGZpbGVzeXN0ZW1zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBmdXJ0aGVyIGFuZCBsb29rIGludG8gYGlvbWFwX3plcm9faXRlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU0NT1FWFBPUlRfU1lNQk9MX0dQTChpb21hcF9maWxlX3Vuc2hhcmUpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU1MS0gKi9cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTU1MjpzdGF0aWMgaW5saW5lIGludCBpb21hcF96ZXJvX2l0ZXJfZmx1c2hfYW5kX3N0YWxlKHN0cnVjdCBpb21hcF9pdGVyICppKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NjAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTYyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTkxLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlx0XHR0cmFjZV9pb21hcF96ZXJvX2l0ZXIoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXHRcdFx0XHRieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg2LVx0XHRcdFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY4NzpcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoXHUwMDI2aXRlcik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODgtXHRcdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTU6XHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFx1MDAyNml0ZXIsIGRpZF96ZXJvLCB3cml0ZV9vcHMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk2LVx0fVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODY9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbmZzL2lvbWFwL3RyYWNlLmgtODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSU9NQVAgWmVyb2luZyBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpb21hcF96ZXJvX3JhbmdlYC4gUmlnaHQsIGl0IGNhbGxzIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24sIHVzZWQgYnkgZmlsZXN5c3RlbXMgdG8gemVybyBvdXQgc3BlY2lmaWMgcmFuZ2VzIG9mIGRhdGEuIEJ1dCB0aGVuLCBpdCB0cmlnZ2VyZWQgYSB0aG91Z2h0OiB3aGF0IGFib3V0IHRob3NlIG90aGVyIGZ1bmN0aW9ucyBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2A/IFNwZWNpZmljYWxseSwgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YD8gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgc28gdGhleSYjMzk7cmUgb2J2aW91c2x5IGludGVybmFsIHRvIHRoZSBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIHdoYXQgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHVzZWQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGJ1ZmZlcmVkIEkvTyBsYXllciB0cmFja3MgYW5kIG1hbmFnZXMgdGhlIGRpcnR5L3VwdG9kYXRlIHN0YXR1cyBvZiBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX2NsZWFyX3JhbmdlX2RpcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTYzPXN0YXRpYyB1bnNpZ25lZCBpb21hcF9maW5kX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCAqcmFuZ2Vfc3RhcnQsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODItICovXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE4MzpzdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTg0LVx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA2LVx0aWYgKGlmcylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjA3Olx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBEaXJ0eSBQYWdlIENsZWFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhlIGRpcnR5IHBhZ2UgY2xlYXJpbmcgbWVjaGFuaXNtLiBJdCBsb29rcyBsaWtlIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSBjYW4gc2VlIGl0JiMzOTtzIG1ha2luZyBhIGNhbGwgdG8gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgY29ubmVjdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgaW5pdGlhbCBodW5jaCBpcyByaWdodCwgYmFzZWQgb24gdGhhdCBwYXRjaCBJJiMzOTt2ZSBiZWVuIHJldmlld2luZywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmNhbGxpbmcqIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZG9lcywgaWYgdGhlIGNsZWFyIGFuZCBzZXQgZnVuY3Rpb25zIGFyZSBjb3VwbGVkLCBvciByZWxhdGVkIGluIHNvbWUgd2F5LiBUaW1lIHRvIGRpZyBpbnRvICp0aGF0KiBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjE2LSAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMTc6c3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTgtXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjM2PXN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQwLVx0aWYgKGlmcylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjQxOlx0XHRpZnNfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBJL08gRGlydHlpbmcqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBjYWxscyBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgZXhhY3RseSBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCBpcyBkb2luZyB0byBsZXZlcmFnZSBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgaXMgbWVhbnQgdG8gYWNoaWV2ZSwgYW5kIGhvdyBpdCBkZWxlZ2F0ZXMgdG8gYGlmc19zZXRfcmFuZ2VfZGlydHlgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX2RpcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMzcte1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6Nzk2Olx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwNzU6XHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cdGZpbGVtYXBfZGlydHlfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xODg0PWludCBpb21hcF93cml0ZWJhY2tfZm9saW8oc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXHRcdFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5MDk6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBlbmRfcG9zIC0gcG9zKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCdWZmZXJlZCBJTyBIb3QgUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBidWZmZXJlZCBJTyBwYXRoOiBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGV5IGFsbCBmdW5uZWwgaW50byBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGhvdyB0aGUgc3lzdGVtIGlzIG1hbmFnaW5nIGRpcnR5IGRhdGEuIEkmIzM5O20gdGhpbmtpbmcsIHRoZXNlIGFyZSAqaG90KiBmdW5jdGlvbnMsIHJpZ2h0PyBUaGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCgpUaGUgdGhpbmcgaXMsIGlmIGBfX2lvbWFwX3dyaXRlX2VuZGAgb3IgYGlvbWFwX2RpcnR5X2ZvbGlvYCB0dXJuIG91dCB0byBiZSBvdmVybHkgY29tcGxleCBvciByZXNvdXJjZS1pbnRlbnNpdmUgdGhlbXNlbHZlcywgZGlnZ2luZyBpbnRvIHRoZW0gZGlyZWN0bHkgbWlnaHQgYmUgYSByYWJiaXQgaG9sZS4gV2UgbmVlZCB0byBmaW5kIHRoZSByaWdodCBwb2ludHMgZm9yIHRlc3RpbmcuCgpTbywgd2hlcmUgY2FuIHdlIGdldCBzb21lIGxldmVyYWdlPyBXZWxsLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBpb21hcF96ZXJvX3JhbmdlYCBsb29rIHByb21pc2luZyBhcyBmdXp6aW5nIHRhcmdldHMuIFRoZXkmIzM5O3JlIHJlbGF0ZWQsIGJ1dCBwZXJoYXBzIGxlc3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGltbWVkaWF0ZSB3cml0ZSBwcm9jZXNzLiBXZSBjYW4gdGVzdCBlZGdlIGNhc2VzIGluIHRoZXJlIHRoYXQgbWlnaHQgdHJpZ2dlciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBsYXJnZXIgSU8gc3lzdGVtLgoKQmVmb3JlIEkgZ28gdG9vIGZhciwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MsIGlmIHRoZSBkaXJ0aW5lc3Mgc3RhdGUgaXMgbm90IGdldHRpbmcgc2V0IHByb3Blcmx5LCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTU4PXN0YXRpYyB1bnNpZ25lZCBpZnNfbmV4dF9ub251cHRvZGF0ZV9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjUtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjY2OnN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjctXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODA9c3RhdGljIHZvaWQgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy05OS1cdFx0ICovXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwMDpcdFx0bWFya191cHRvZGF0ZSA9IGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIGlmcywgb2ZmLCBsZW4pIFx1MDAyNlx1MDAyNlxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDEtXHRcdFx0XHQhaWZzLVx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZztcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTQyMD12b2lkIGlvbWFwX2ZpbmlzaF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MzYtXHRcdGlmICghZXJyb3IpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjQzNzpcdFx0XHR1cHRvZGF0ZSA9IGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MzgtXHRcdGlmcy1cdTAwM2VyZWFkX2J5dGVzX3BlbmRpbmcgLT0gbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT01BUCBGb2xpbyBVcGRhdGVzIGFuZCBPcHRpbWl6YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgaG90IHNwb3RzIGp1bXAgb3V0LiBgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWRgIGFuZCBgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlYCBib3RoIGNhbGwgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIGluIHRoZSByZWFkIHBhdGguIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBtYW5hZ2VkIGZvciBmb2xpb3Mgd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBzcGVjaWZpYyBlZGdlIGNhc2VzLCB0aGluZ3MgbGlrZSBoYW5kbGluZyB6ZXJvLWxlbmd0aCBvciBlbnN1cmluZyBwcm9wZXIgcm91bmRpbmcgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgYml0cy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3Igc3VidGxlIGJ1Z3MsIHNvIEkmIzM5O20gZ2xhZCB0aGV5JiMzOTtyZSBiZWluZyBhZGRyZXNzZWQuCgpUaGUgb3RoZXIgYml0IHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW9tYXBfemVyb19pdGVyYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgZml4aW5nIHRoZSByZXR1cm4gc3RhdHVzIGhhbmRsaW5nIHdoZW4gYWR2YW5jaW5nIGZhaWxzLCBhbmQgbWFraW5nIHN1cmUgdGhhdCBgZGlkX3plcm9gIGlzIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBmaWxlIHplcm9pbmcuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmU6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgSSYjMzk7bSByZWFsbHkgY3VyaW91cyBhYm91dCBgaW9tYXBfZmlsZV91bnNoYXJlYC4gSXQgdXNlcyBgaW9tYXBfemVyb19pdGVyYCwgSSBhc3N1bWU/IFllcywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB6ZXJvIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgc29saWQuIExldCYjMzk7cyBzZWUgaG93IGBpb21hcF9maWxlX3Vuc2hhcmVgIGlzIGltcGxlbWVudGVkIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZmlsZV91bnNoYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTUyND1pbnRcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTUyNTppb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTUyNi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU0NC19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NDU6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZmlsZV91bnNoYXJlKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIExvZ2ljKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgaW9tYXBfZmlsZV91bnNoYXJlYCB3YXMgbGV2ZXJhZ2luZyBgaW9tYXBfemVyb19pdGVyYCwgYnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhY3R1YWxseSBjYWxsaW5nIGBpb21hcF91bnNoYXJlX2l0ZXJgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBjbGFyaWZ5LiBMZXQgbWUgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCByZXZpc2l0IGhvdyBgaW9tYXBfemVyb19yYW5nZWAgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBjb2RlIGFuZCBub3QgZ2V0dGluZyBtaXhlZCB1cCB3aXRoIHNpbWlsYXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTY1MD1pbnRcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY1MTppb21hcF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk4LX1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY5OTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF96ZXJvX3JhbmdlKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE3MDI9aW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE3MTEtXHRcdHJldHVybiAwO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNzEyOlx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHBvcywgYmxvY2tzaXplIC0gb2ZmLCBkaWRfemVybywgb3BzLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVx0XHRcdHdyaXRlX29wcywgcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSU9NQVAgWmVyb2luZyBhbmQgVHJ1bmNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaW9tYXBgIHN1YnN5c3RlbSBhbmQgaG93IGl0IGhhbmRsZXMgemVyb2luZyBhbmQgdHJ1bmNhdGlvbiBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGBpb21hcF96ZXJvX3JhbmdlYCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgIGFyZSBleHBvcnRlZCBhbmQgdGhleSBib3RoIGxldmVyYWdlIHRoZSBgaW9tYXBfemVyb19pdGVyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCBrZWVwIHRob3NlIHRocmVlIHN5bWJvbHMgaW4gbWluZCBhcyBrZXkgYXJlYXMgdG8gZXhhbWluZS4gQWRkaXRpb25hbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgaW50byBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYXMgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGVzZSBvcGVyYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIEkga25vdyB0aGF0IGZpbGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX0lPTUFQYCBpcyBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgIGFuZCBgZnMvaW9tYXAvS2NvbmZpZ2AgZmlsZXMgdG8gaWRlbnRpZnkgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJlZC1pby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xMi1cdFx0XHRcdCAgIGl0ZXIubyBcXFxuZnMvaW9tYXAvTWFrZWZpbGU6MTM6XHRcdFx0XHQgICBidWZmZXJlZC1pby5vXG5mcy9pb21hcC9NYWtlZmlsZS0xNC1pb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgaW9tYXAgRWNvc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBpb21hcC15YC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYC4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgZmlsZSBzeXN0ZW0gcmVsYXRlZC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgaG93IGBpb21hcGAgaXMgYnVpbHQsIGxpbmtlZCwgYW5kIGdlbmVyYWxseSBpbnRlZ3JhdGVkLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBicm91Z2h0IGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJldCB0aGUgTWFrZWZpbGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGBpb21hcGAgZml0cyBpbiBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSByZWxhdGVkIHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX0ZIQU5ETEUpXHRcdCYjNDM7PSBmaGFuZGxlLm9cbmZzL01ha2VmaWxlOjUxOm9iai15XHRcdFx0XHQmIzQzOz0gaW9tYXAvXG5mcy9NYWtlZmlsZS01Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJT01BUCBCdWlsZCBWZXJpZmljYXRpb24qKgoKSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyB0aGUgYGZzL2lvbWFwL2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbD8gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSB0aGUgY2FzZSwgYnV0IEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEJlc3QgcHJhY3RpY2UgaXMgdG8gdmVyaWZ5LCBzbyBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL2lvbWFwL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgcnVsZXMgaW4gdGhhdCBkaXJlY3RvcnkgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBpdHMgaW5jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTc9Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvaW9tYXAvTWFrZWZpbGUtOC1cbmZzL2lvbWFwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuZnMvaW9tYXAvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBmb3IgRnV6emluZyBJT01BUCBCdWZmZXJlZCBJTyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBDT05GSUdfRlNfSU9NQVBgIHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIFhGUywgRVhUNCwgQlRSRlMsIGFuZCBHRlMyLiBJIGRvbiYjMzk7dCByZWFsbHkgbmVlZCB0byBleHBsaWNpdGx5IGxpc3QgYEZTX0lPTUFQYCBiZWNhdXNlIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGRlZmF1bHQgd2l0aCB0aG9zZSBmaWxlc3lzdGVtcywgYnV0LCBmb3IgY29tcGxldGVuZXNzLCBsaXN0aW5nIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdCBpcyB1c2VmdWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLgoKVGhlIGFjdHVhbCBjb2RlIG1vZGlmaWVkIGlzIHdpdGhpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIGlvbWFwIGxvZ2ljLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmc6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGlvbWFwIGxpYnJhcnksIG1lYW5pbmcgdGhleSYjMzk7cmUgdXNlZCBieSBzZXZlcmFsIGZpbGVzeXN0ZW1zLgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyBkaXJ0eSBiaXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiBmb2xpb3MgYW5kIGhhbmRsaW5nIGVycm9ycy9gZGlkX3plcm9gIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbmQgdGhhdCBtYWtlcyB0aGVtIGZ1enphYmxlLgoKSSBrbm93IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgeGZzX3ZtX2ludmFsaWRhdGVfZm9saW9gLCBgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBidHJmc19pbnZhbGlkYXRlX2ZvbGlvYC4gYGlvbWFwX3plcm9fcmFuZ2VgIGlzIGNhbGxlZCBieSBgeGZzX3plcm9fcmFuZ2VgIGFuZCBgZXh0NF96ZXJvX3JhbmdlYCwgZXRjLiBBbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tLCBlLmcuLCBgeGZzX3RydW5jYXRlX3BhZ2VgLgoKSSBzaG91bGQgY2hlY2sgZm9yIG1vcmUgZnVuY3Rpb25zLiBBaCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgY29tZXMgZnJvbSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHdoaWNoIGlzIGNhbGxlZCBieSBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBjb21lcyBmcm9tIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBfX2lvbWFwX3dyaXRlX2VuZGAsIGFuZCBgaW9tYXBfd3JpdGViYWNrX2ZvbGlvYC4gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgIGNvbWVzIGZyb20gYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBfX2lvbWFwX3dyaXRlX2VuZGAsIGBpb21hcF9maW5pc2hfZm9saW9fcmVhZGAsIGFuZCBgaW9tYXBfcmVhZF9mb2xpb19zeW5jYC4KCkZ1enppbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgd2F5LCBJIGNhbiBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aG91dCB0YXJnZXRpbmcgdGhlIHJlYWxseSBidXN5IHBhdGhzIGxpa2UgYGlvbWFwX2RpcnR5X2ZvbGlvYCBvciBgX19pb21hcF93cml0ZV9lbmRgIHJpZ2h0IGF3YXkuCgpJbiBzaG9ydCwgdGhlIHBhdGNoIGZpeGVzIGhvdyBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgaGFuZGxlZCBmb3IgZm9saW9zLCBhbmQgaG93IGBpb21hcF96ZXJvX2l0ZXJgIG1hbmFnZXMgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgY29kZSB1c2VkIGJ5IFhGUywgZXh0NCwgYW5kIEJ0cmZzLgoKU28gaGVyZSBpcyB0aGUgc3VtbWFyeToKCkZvY3VzIFN5bWJvbHM6Ci0gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCi0gYGlvbWFwX3plcm9fcmFuZ2VgCi0gYGlvbWFwX3RydW5jYXRlX3BhZ2VgCgpFbmFibGUgQ29uZmlnczoKLSBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgIChvciwgcmVhbGx5LCBub3RoaW5nLiBUaGUgZnV6emVycyBlbmFibGUgdGhlc2UgYnkgZGVmYXVsdCkKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTAKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElPTUFQIFN1cHBvcnQqKgoKT2theSwgc28gYEZTX0lPTUFQYCBpcyBhIGhpZGRlbiBjb25maWcsIG1lYW5pbmcgaXQmIzM5O3MgZW5hYmxlZCBpbXBsaWNpdGx5IGJ5IG90aGVyIHNldHRpbmdzIGFuZCBkb2VzbiYjMzk7dCBnZXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSBzaG91bGRuJiMzOTt0IGxpc3QgaXQgZGlyZWN0bHkuIFdoaWxlIEkgbWlnaHQgbGlzdCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBhbmQgYEJUUkZTX0ZTYCwganVzdCBpbiBjYXNlLCB0aGV5JiMzOTtyZSBsaWtlbHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkmIzM5O2xsIGxlYXZlIGBFbmFibGVDb25maWdzYCBlbXB0eSBmb3Igbm93LgoKTm93LCBsZXQmIzM5O3MganVzdCBkbyBhIGZpbmFsIGNoZWNrIG9mIHRoZSBwYXRjaCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJIHJlY2FsbCB0aGF0IGBpb21hcF96ZXJvX2l0ZXJgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBhcmUgYWxsIHN0YXRpYywgY29uZmlybWluZyB0aGV5JiMzOTtyZSBub3QgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhvdWdoLgoKU28gdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBub3c6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfdHJ1bmNhdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3RydW5jYXRlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6MzEuNjc3MDIyMjU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NDQwMTk3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfdHJ1bmNhdGVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMuIEl0IGZpeGVzIGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8gKHJvdW5kaW5nIHVwL2Rvd24gY29ycmVjdGx5IGFuZCBoYW5kbGluZyB6ZXJvIGxlbmd0aCkuIEl0IGFsc28gZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGBkaWRfemVyb2AgdHJhY2tpbmcgaW4gYGlvbWFwX3plcm9faXRlcmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFqb3IgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6MzEuNjc3MDI5OTc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQyNDEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjU4NjkwOTQ4NGI2NDc3YTlhNWE3MGZjNGM4N2M4NmNhMjQ2ZDIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDEyOjMzOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XFxuK1xcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xcbiBcXG4tXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xcbitcXHRpZiAobGVuKSB7XFxuK1xcdFxcdGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xcbiB9XFxuIFxcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbiBcXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXFxuKyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnlcXG4rICogdGhlIHJhbmdlIGFyZSBjbGVhcmVkLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGZvbGlvXFxuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xcbisgKiBpdC5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4rXFx0aWYgKGZpcnN0X2JsayBcXHUwMDNlPSBsYXN0X2JsaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xcbitcXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXFxuK1xcdFxcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpZnMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDE4ICsyMDcsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWZzX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICsgQGxlbikgd2l0aGluIGFcXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxcbisgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxcbisgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXFxuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxcbisgKi9cXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmaXJzdF9ibGsgPSBvZmYgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4rXFx0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcXG4rXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgKyBibGtzX3Blcl9mb2xpbyxcXG4rXFx0XFx0ICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aWZzLVxcdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTc1Nyw2ICs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XFxuIFxcdFxcdGlmc19mcmVlKGZvbGlvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcXG4ge1xcbiBcXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XFxuK1xcdGJvb2wgemVyb2VkID0gZmFsc2U7XFxuIFxcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE1NTQsNiArMTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcXG4gXFx0XFx0LyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJ3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXFxuIFxcdFxcdGlmICghZm9saW8pIHtcXG4gXFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdGJ5dGVzKTtcXG4gXFxuIFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHR6ZXJvZWQgPSB0cnVlO1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gXFxuIFxcdFxcdHJldCA9IGlvbWFwX3dyaXRlX2VuZChpdGVyLCBieXRlcywgYnl0ZXMsIGZvbGlvKTtcXG5AQCAtMTU3MywxMCArMTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcXHUwMDNlIDApO1xcbiBcXG4tXFx0aWYgKGRpZF96ZXJvKVxcbitcXHRpZiAoZGlkX3plcm8gXFx1MDAyNlxcdTAwMjYgemVyb2VkKVxcbiBcXHRcXHQqZGlkX3plcm8gPSB0cnVlO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjMyLjMwMjIwNzUzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMTg4MjU2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfdHJ1bmNhdGVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMuIEl0IGZpeGVzIGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8gKHJvdW5kaW5nIHVwL2Rvd24gY29ycmVjdGx5IGFuZCBoYW5kbGluZyB6ZXJvIGxlbmd0aCkuIEl0IGFsc28gZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGBkaWRfemVyb2AgdHJhY2tpbmcgaW4gYGlvbWFwX3plcm9faXRlcmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFqb3IgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjU4NjkwOTQ4NGI2NDc3YTlhNWE3MGZjNGM4N2M4NmNhMjQ2ZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTI6MzM6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbitcdGlmIChsZW4pIHtcbitcdFx0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIGxhc3RfYmxrIC0gZmlyc3RfYmxrICsgMSk7XG4rXHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxuIFx0cmV0dXJuIHJhbmdlX2VuZCAtICpyYW5nZV9zdGFydDtcbiB9XG4gXG4rLypcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuKyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xuKyAqIGl0LlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XG4rXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuK1x0XHRcdFx0IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbitcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKGZpcnN0X2JsayBcdTAwM2U9IGxhc3RfYmxrKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXG4rXHRcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xOTQsMTggKzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbisvKlxuKyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuKyAqIGJ5IHRoZSByYW5nZSBpcyBtYXJrZWQgZGlydHkuICBUaGlzIGVuc3VyZXMgYmxvY2tzIGNvbnRhaW5pbmcgZXZlbiBhXG4rICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuK1x0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLFxuK1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayArIDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiArNzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gXHRcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuIFx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuIFx0XHRpZnNfZnJlZShmb2xpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcbiB7XG4gXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XG4rXHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgKzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSdyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqL1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XG4rXHRcdFx0aWYgKHN0YXR1cylcbitcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdFx0XHRieXRlcyk7XG4gXG4gXHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHR9IHdoaWxlICgoYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcikpIFx1MDAzZSAwKTtcbiBcbi1cdGlmIChkaWRfemVybylcbitcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozMi4zMDIyMDk5NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDAzOTkxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoZXNlIGlvbWFwIEJ1ZmZlcmVkIElPIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGFuZCBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBjaGFuZ2VzIHRvIHNlZSB0aGUgaW1wYWN0LiBGaXJzdCBvZmYsIHdlJ3ZlIGdvdCBhIGZldyBhZGp1c3RtZW50cyB0byB0aGUgcmFuZ2Ugc2V0dGluZyBhbmQgY2xlYXJpbmcgbG9naWMuIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCBub3cgY2hlY2tzIGZvciBgbGVuYCBiZWZvcmUgc2V0dGluZyB0aGUgYml0bWFwLCB3aGljaCBzZWVtcyBzZW5zaWJsZSBmb3IgZWZmaWNpZW5jeS4gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgaGFzIHNvbWUgcm91bmRpbmcgYWRqdXN0bWVudHMgZm9yIHRoZSBibG9jayBjYWxjdWxhdGlvbnMgYW5kIGluY2x1ZGVzIGEgY2hlY2sgdG8gc2VlIGlmIHRoZSByYW5nZSBpcyB2YWxpZC4gYGlmc19zZXRfcmFuZ2VfZGlydHlgIGFsc28gbm93IGluY2x1ZGVzIGEgYGxlbmAgY2hlY2suIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBub3cgY2FsbGluZyBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIGluIHRoZSBgZWxzZWAgYnJhbmNoLCB3aGljaCBpcyBpbnRlcmVzdGluZyB0byBub3RlLiBBbmQgZmluYWxseSwgYGlvbWFwX3plcm9faXRlcmAgaGFzIHNvbWUgYWRkZWQgbG9naWMgdG8gdHJhY2sgd2hldGhlciB6ZXJvaW5nIGFjdHVhbGx5IG9jY3VycyBiZWZvcmUgc2V0dGluZyB0aGUgYCpkaWRfemVyb2AgZmxhZy4gSXQgYWxzbyBoYXMgZWFybHkgcmV0dXJucyBvbiBzb21lIGVycm9ycy5cblxuR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBpb21hcCBidWZmZXJlZCBJTywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkgaGVyZS4gTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnM6IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIFxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBsb29rcyBsaWtlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgb24gYSBob3QgcGF0aC4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGV4cG9ydGVkLCBzbyB0aGF0IG1ha2VzIGl0IGEgYml0IG1vcmUgc3RyYWlnaHRmb3J3YXJkLCBhbmQgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGlvbWFwX3plcm9fcmFuZ2VgLCBzbyBsZXQncyBjaGVjayBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHdpdGggZ3JlcCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc2l0ZXMgYW5kIGFzc2VzcyBpZiB0aGVzZSBhcmUgcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozOS4zMDYyMDM0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MjgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzE6dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlxcdHRyYWNlX2lvbWFwX2ludmFsaWRhdGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzQtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg3LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmgtODUtREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19pbnZhbGlkYXRlX2ZhaWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozOS40MDE5Mzk1MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTc0MDcxMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEZpbGVzeXN0ZW0gRm9saW8gSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHZhcmlvdXMgZmlsZXN5c3RlbXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCdzIHRoZSBnby10byBmdW5jdGlvbiB3aGVuIGEgZm9saW8gbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQsIGFuZCBpdCdzIGNhbGxlZCBieSB0aGUgaGVhdnkgaGl0dGVycyDigJMgWEZTLCBleHQ0LCBnZnMyLCBidHJmcywgem9uZWZzLCBhbmQgSSdtIHN1cmUgbWFueSBvdGhlcnMuIFNvLCB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgSS9PIHBhdGguIEl0IHNvdW5kcyBsaWtlIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIG1haW50YWluaW5nIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlc2UgZmlsZXN5c3RlbXMuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZnVydGhlciBhbmQgbG9vayBpbnRvIGBpb21hcF96ZXJvX2l0ZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6NDUuMzc2MDEzMDY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1Mzc4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3plcm9faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTQ1PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ZpbGVfdW5zaGFyZSk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NTEtICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTUyOnN0YXRpYyBpbmxpbmUgaW50IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoc3RydWN0IGlvbWFwX2l0ZXIgKmkpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2MC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2Mi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlxcdFxcdHRyYWNlX2lvbWFwX3plcm9faXRlcihpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXFx0XFx0XFx0XFx0Ynl0ZXMpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODYtXFx0XFx0XFx0XFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2ODc6XFx0XFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfemVyb19pdGVyX2ZsdXNoX2FuZF9zdGFsZShcXHUwMDI2aXRlcik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk1OlxcdFxcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFxcdTAwMjZpdGVyLCBkaWRfemVybywgd3JpdGVfb3BzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTYtXFx0fVxcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD04Nj1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX3J3X3F1ZXVlZCk7XFxuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcXG5mcy9pb21hcC90cmFjZS5oLTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzo0NS40NzEzOTY3MTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMyMDIxNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBaZXJvaW5nIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpb21hcF96ZXJvX3JhbmdlYC4gUmlnaHQsIGl0IGNhbGxzIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBleHBvcnRlZCBmdW5jdGlvbiwgdXNlZCBieSBmaWxlc3lzdGVtcyB0byB6ZXJvIG91dCBzcGVjaWZpYyByYW5nZXMgb2YgZGF0YS4gQnV0IHRoZW4sIGl0IHRyaWdnZXJlZCBhIHRob3VnaHQ6IHdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYD8gU3BlY2lmaWNhbGx5LCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBhbmQgYGlmc19zZXRfcmFuZ2VfZGlydHlgPyBUaGV5J3JlIGFsbCBzdGF0aWMsIHNvIHRoZXkncmUgb2J2aW91c2x5IGludGVybmFsIHRvIHRoZSBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24uIExldCdzIGRlbHZlIGludG8gd2hhdCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCBkb2VzIHNwZWNpZmljYWxseS4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBidWZmZXJlZCBJL08gbGF5ZXIgdHJhY2tzIGFuZCBtYW5hZ2VzIHRoZSBkaXJ0eS91cHRvZGF0ZSBzdGF0dXMgb2YgYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjUwLjYwMzQyMDY2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2ODA2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZzX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTE2Mz1zdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODItICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxODM6c3RhdGljIHZvaWQgaWZzX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODQtXFx0XFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDYtXFx0aWYgKGlmcylcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIwNzpcXHRcXHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6NTAuNzM1MTA3Mzc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Nzk2NjQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBEaXJ0eSBQYWdlIENsZWFyaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSBkaXJ0eSBwYWdlIGNsZWFyaW5nIG1lY2hhbmlzbS4gSXQgbG9va3MgbGlrZSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIEkgY2FuIHNlZSBpdCdzIG1ha2luZyBhIGNhbGwgdG8gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQncyB0aGUgY29yZSBjb25uZWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBpbml0aWFsIGh1bmNoIGlzIHJpZ2h0LCBiYXNlZCBvbiB0aGF0IHBhdGNoIEkndmUgYmVlbiByZXZpZXdpbmcsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyB3aGF0J3MgYWN0dWFsbHkgKmNhbGxpbmcqIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHRyaWdnZXJpbmcgdGhlIGNsZWFyLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlmc19zZXRfcmFuZ2VfZGlydHlgIGRvZXMsIGlmIHRoZSBjbGVhciBhbmQgc2V0IGZ1bmN0aW9ucyBhcmUgY291cGxlZCwgb3IgcmVsYXRlZCBpbiBzb21lIHdheS4gVGltZSB0byBkaWcgaW50byAqdGhhdCogZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjU0LjcxMzA3NjEwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzgwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmc19zZXRfcmFuZ2VfZGlydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjAyPXN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIxNi0gKi9cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIxNzpzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTgtXFx0XFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIzNj1zdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQwLVxcdGlmIChpZnMpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyNDE6XFx0XFx0aWZzX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yNDItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzo1NC44NTg0NjE3NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExMTIzNTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIEkvTyBEaXJ0eWluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBjYWxscyBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCBleGFjdGx5IGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIGlzIGRvaW5nIHRvIGxldmVyYWdlIGBpZnNfc2V0X3JhbmdlX2RpcnR5YC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBtYW5pcHVsYXRpb24uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBMZXQncyBmaWd1cmUgb3V0IHdoYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgaXMgbWVhbnQgdG8gYWNoaWV2ZSwgYW5kIGhvdyBpdCBkZWxlZ2F0ZXMgdG8gYGlmc19zZXRfcmFuZ2VfZGlydHlgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjAyLjk2OTY5OTA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzA2Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9zZXRfcmFuZ2VfZGlydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjM1LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjM3LXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc5NS1cXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc5NjpcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzQtXFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDc1OlxcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCBjb3BpZWQpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cXHRmaWxlbWFwX2RpcnR5X2ZvbGlvKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTg4ND1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXFx0XFx0XFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxOTA5OlxcdFxcdFxcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgZW5kX3BvcyAtIHBvcyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTEwLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6MDMuMDY2NzY2NDM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTE3MzA2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJ1ZmZlcmVkIElPIEhvdCBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBidWZmZXJlZCBJTyBwYXRoOiBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoZXkgYWxsIGZ1bm5lbCBpbnRvIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgaG93IHRoZSBzeXN0ZW0gaXMgbWFuYWdpbmcgZGlydHkgZGF0YS4gSSdtIHRoaW5raW5nLCB0aGVzZSBhcmUgKmhvdCogZnVuY3Rpb25zLCByaWdodD8gVGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLlxuXG5UaGUgdGhpbmcgaXMsIGlmIGBfX2lvbWFwX3dyaXRlX2VuZGAgb3IgYGlvbWFwX2RpcnR5X2ZvbGlvYCB0dXJuIG91dCB0byBiZSBvdmVybHkgY29tcGxleCBvciByZXNvdXJjZS1pbnRlbnNpdmUgdGhlbXNlbHZlcywgZGlnZ2luZyBpbnRvIHRoZW0gZGlyZWN0bHkgbWlnaHQgYmUgYSByYWJiaXQgaG9sZS4gV2UgbmVlZCB0byBmaW5kIHRoZSByaWdodCBwb2ludHMgZm9yIHRlc3RpbmcuXG5cblNvLCB3aGVyZSBjYW4gd2UgZ2V0IHNvbWUgbGV2ZXJhZ2U/IFdlbGwsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgIGxvb2sgcHJvbWlzaW5nIGFzIGZ1enppbmcgdGFyZ2V0cy4gVGhleSdyZSByZWxhdGVkLCBidXQgcGVyaGFwcyBsZXNzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBpbW1lZGlhdGUgd3JpdGUgcHJvY2Vzcy4gV2UgY2FuIHRlc3QgZWRnZSBjYXNlcyBpbiB0aGVyZSB0aGF0IG1pZ2h0IHRyaWdnZXIgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIElPIHN5c3RlbS5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MsIGlmIHRoZSBkaXJ0aW5lc3Mgc3RhdGUgaXMgbm90IGdldHRpbmcgc2V0IHByb3Blcmx5LCB0aGlzIGlzIHdoZXJlIHdlJ2xsIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjA3Ljk3ODQ5OTc4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MTIxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZzX3NldF9yYW5nZV91cHRvZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz01OD1zdGF0aWMgdW5zaWduZWQgaWZzX25leHRfbm9udXB0b2RhdGVfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjUtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo2NjpzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy02Ny1cXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODA9c3RhdGljIHZvaWQgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTk5LVxcdFxcdCAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTAwOlxcdFxcdG1hcmtfdXB0b2RhdGUgPSBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBpZnMsIG9mZiwgbGVuKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAxLVxcdFxcdFxcdFxcdCFpZnMtXFx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZztcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NDIwPXZvaWQgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNDM2LVxcdFxcdGlmICghZXJyb3IpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo0Mzc6XFx0XFx0XFx0dXB0b2RhdGUgPSBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTQzOC1cXHRcXHRpZnMtXFx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZyAtPSBsZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjA4LjA3MzkxNjkzM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkzODk2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBGb2xpbyBVcGRhdGVzIGFuZCBPcHRpbWl6YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGhvdCBzcG90cyBqdW1wIG91dC4gYGlvbWFwX2ZpbmlzaF9mb2xpb19yZWFkYCBhbmQgYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAgYm90aCBjYWxsIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGVzZSBhcmUga2V5IGZ1bmN0aW9ucyBpbiB0aGUgcmVhZCBwYXRoLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5UaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBtYW5hZ2VkIGZvciBmb2xpb3Mgd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFNvdW5kcyBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyBzb21lIHNwZWNpZmljIGVkZ2UgY2FzZXMsIHRoaW5ncyBsaWtlIGhhbmRsaW5nIHplcm8tbGVuZ3RoIG9yIGVuc3VyaW5nIHByb3BlciByb3VuZGluZyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBiaXRzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHN1YnRsZSBidWdzLCBzbyBJJ20gZ2xhZCB0aGV5J3JlIGJlaW5nIGFkZHJlc3NlZC5cblxuVGhlIG90aGVyIGJpdCB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGlvbWFwX3plcm9faXRlcmAuIEl0IHNlZW1zIHRoZXkncmUgZml4aW5nIHRoZSByZXR1cm4gc3RhdHVzIGhhbmRsaW5nIHdoZW4gYWR2YW5jaW5nIGZhaWxzLCBhbmQgbWFraW5nIHN1cmUgdGhhdCBgZGlkX3plcm9gIGlzIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSwgYXMgaXQncyBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIGZpbGUgemVyb2luZy5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBhcmU6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgSSdtIHJlYWxseSBjdXJpb3VzIGFib3V0IGBpb21hcF9maWxlX3Vuc2hhcmVgLiBJdCB1c2VzIGBpb21hcF96ZXJvX2l0ZXJgLCBJIGFzc3VtZT8gWWVzLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB6ZXJvIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgc29saWQuIExldCdzIHNlZSBob3cgYGlvbWFwX2ZpbGVfdW5zaGFyZWAgaXMgaW1wbGVtZW50ZWQgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjE1LjA2NzgxNjMyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTQ5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2ZpbGVfdW5zaGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTI0PWludFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTUyNTppb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1MjYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTQ0LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NDU6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZmlsZV91bnNoYXJlKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjE1LjE2ODc3MTI5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEzNjA0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSS9PIE1hcHBpbmcgTG9naWMqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYGlvbWFwX2ZpbGVfdW5zaGFyZWAgd2FzIGxldmVyYWdpbmcgYGlvbWFwX3plcm9faXRlcmAsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCdzIGFjdHVhbGx5IGNhbGxpbmcgYGlvbWFwX3Vuc2hhcmVfaXRlcmAuIE9rYXksIHRoYXQncyBpbXBvcnRhbnQgdG8gY2xhcmlmeS4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgcmV2aXNpdCBob3cgYGlvbWFwX3plcm9fcmFuZ2VgIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBjb2RlIGFuZCBub3QgZ2V0dGluZyBtaXhlZCB1cCB3aXRoIHNpbWlsYXIgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6MjMuNjgyMzc5MDY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDA3OTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjUxOmlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk5OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3plcm9fcmFuZ2UpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTcwMj1pb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVxcdFxcdHJldHVybiAwO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgcG9zLCBibG9ja3NpemUgLSBvZmYsIGRpZF96ZXJvLCBvcHMsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVxcdFxcdFxcdHdyaXRlX29wcywgcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjIzLjc3NjQ2NTk1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2NzExOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIElPTUFQIFplcm9pbmcgYW5kIFRydW5jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBpb21hcGAgc3Vic3lzdGVtIGFuZCBob3cgaXQgaGFuZGxlcyB6ZXJvaW5nIGFuZCB0cnVuY2F0aW9uIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbnMgYGlvbWFwX3plcm9fcmFuZ2VgIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgYXJlIGV4cG9ydGVkIGFuZCB0aGV5IGJvdGggbGV2ZXJhZ2UgdGhlIGBpb21hcF96ZXJvX2l0ZXJgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSdsbCBrZWVwIHRob3NlIHRocmVlIHN5bWJvbHMgaW4gbWluZCBhcyBrZXkgYXJlYXMgdG8gZXhhbWluZS4gQWRkaXRpb25hbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgaW50byBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYXMgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGVzZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb3IgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgYXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBJIGtub3cgdGhhdCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZC4gSSdsbCBhbHNvIGNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgIGFuZCBgZnMvaW9tYXAvS2NvbmZpZ2AgZmlsZXMgdG8gaWRlbnRpZnkgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjI3Ljg0MzE4MTQ1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTk2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1ZmZlcmVkLWlvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcXHRcXHRcXHRcXHQrPSB0cmFjZS5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xMi1cXHRcXHRcXHRcXHQgICBpdGVyLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlOjEzOlxcdFxcdFxcdFxcdCAgIGJ1ZmZlcmVkLWlvLm9cXG5mcy9pb21hcC9NYWtlZmlsZS0xNC1pb21hcC0kKENPTkZJR19CTE9DSylcXHRcXHQrPSBkaXJlY3QtaW8ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjI3Ljk2OTE4NDQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjMxNzI1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBpb21hcCBFY29zeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBpb21hcC15YC4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBmaWd1cmUgb3V0IHdoYXQgd2UncmUgbG9va2luZyBhdC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAuIEl0J3MgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgZmlsZSBzeXN0ZW0gcmVsYXRlZC4gVGhhdCdzIHRoZSBnby10byBzcG90IGZvciBob3cgYGlvbWFwYCBpcyBidWlsdCwgbGlua2VkLCBhbmQgZ2VuZXJhbGx5IGludGVncmF0ZWQuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBJJ2xsIGJldCB0aGUgTWFrZWZpbGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGBpb21hcGAgZml0cyBpbiBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSByZWxhdGVkIHRvIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDozNy42MDA5MTI4MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTQ4NTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfRkhBTkRMRSlcXHRcXHQrPSBmaGFuZGxlLm9cXG5mcy9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdFxcdCs9IGlvbWFwL1xcbmZzL01ha2VmaWxlLTUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDozOC4xNTI0MDM3MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5NjIxNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSU9NQVAgQnVpbGQgVmVyaWZpY2F0aW9uKipcblxuSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyB0aGUgYGZzL2lvbWFwL2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbD8gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSB0aGUgY2FzZSwgYnV0IEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEJlc3QgcHJhY3RpY2UgaXMgdG8gdmVyaWZ5LCBzbyBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBoYXZlIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBydWxlcyBpbiB0aGF0IGRpcmVjdG9yeSB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NDAuNjQ4NjIzNzY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1MDI2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDo0MC43NTUxMzExMjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyOTMzNzM4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIGZvciBGdXp6aW5nIElPTUFQIEJ1ZmZlcmVkIElPIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBDT05GSUdfRlNfSU9NQVBgIHJpbmdzIGEgYmVsbC4gSXQncyB1c2VkIGJ5IGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBFWFQ0LCBCVFJGUywgYW5kIEdGUzIuIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGBGU19JT01BUGAgYmVjYXVzZSBpdCdzIHNlbGVjdGVkIGJ5IGRlZmF1bHQgd2l0aCB0aG9zZSBmaWxlc3lzdGVtcywgYnV0LCBmb3IgY29tcGxldGVuZXNzLCBsaXN0aW5nIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdCBpcyB1c2VmdWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLlxuXG5UaGUgYWN0dWFsIGNvZGUgbW9kaWZpZWQgaXMgd2l0aGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBpb21hcCBsb2dpYy5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZzogYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgaW9tYXAgbGlicmFyeSwgbWVhbmluZyB0aGV5J3JlIHVzZWQgYnkgc2V2ZXJhbCBmaWxlc3lzdGVtcy5cblxuVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyBkaXJ0eSBiaXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiBmb2xpb3MgYW5kIGhhbmRsaW5nIGVycm9ycy9gZGlkX3plcm9gIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbmQgdGhhdCBtYWtlcyB0aGVtIGZ1enphYmxlLlxuXG5JIGtub3cgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB4ZnNfdm1faW52YWxpZGF0ZV9mb2xpb2AsIGBleHQ0X2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGJ0cmZzX2ludmFsaWRhdGVfZm9saW9gLiBgaW9tYXBfemVyb19yYW5nZWAgaXMgY2FsbGVkIGJ5IGB4ZnNfemVyb19yYW5nZWAgYW5kIGBleHQ0X3plcm9fcmFuZ2VgLCBldGMuIEFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgaXMgY2FsbGVkIGZyb20sIGUuZy4sIGB4ZnNfdHJ1bmNhdGVfcGFnZWAuXG5cbkkgc2hvdWxkIGNoZWNrIGZvciBtb3JlIGZ1bmN0aW9ucy4gQWgsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgIGNvbWVzIGZyb20gYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCB3aGljaCBpcyBjYWxsZWQgYnkgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLiBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgY29tZXMgZnJvbSBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCBjb21lcyBmcm9tIGBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGVgIHdoaWNoIGlzIGNhbGxlZCBieSBgX19pb21hcF93cml0ZV9lbmRgLCBgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWRgLCBhbmQgYGlvbWFwX3JlYWRfZm9saW9fc3luY2AuXG5cbkZ1enppbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgd2F5LCBJIGNhbiBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aG91dCB0YXJnZXRpbmcgdGhlIHJlYWxseSBidXN5IHBhdGhzIGxpa2UgYGlvbWFwX2RpcnR5X2ZvbGlvYCBvciBgX19pb21hcF93cml0ZV9lbmRgIHJpZ2h0IGF3YXkuXG5cbkluIHNob3J0LCB0aGUgcGF0Y2ggZml4ZXMgaG93IGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSBoYW5kbGVkIGZvciBmb2xpb3MsIGFuZCBob3cgYGlvbWFwX3plcm9faXRlcmAgbWFuYWdlcyBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBjb2RlIHVzZWQgYnkgWEZTLCBleHQ0LCBhbmQgQnRyZnMuXG5cblNvIGhlcmUgaXMgdGhlIHN1bW1hcnk6XG5cbkZvY3VzIFN5bWJvbHM6XG4tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYFxuLSBgaW9tYXBfemVyb19yYW5nZWBcbi0gYGlvbWFwX3RydW5jYXRlX3BhZ2VgXG5cbkVuYWJsZSBDb25maWdzOlxuLSBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgIChvciwgcmVhbGx5LCBub3RoaW5nLiBUaGUgZnV6emVycyBlbmFibGUgdGhlc2UgYnkgZGVmYXVsdClcblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NTIuMDQ4NTA3NTYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc3MDI1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NTIuMjI2MjE1Njk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk0NzY5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElPTUFQIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgbWVhbmluZyBpdCdzIGVuYWJsZWQgaW1wbGljaXRseSBieSBvdGhlciBzZXR0aW5ncyBhbmQgZG9lc24ndCBnZXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0J3MgZ29vZCB0byBrbm93LiBJIHNob3VsZG4ndCBsaXN0IGl0IGRpcmVjdGx5LiBXaGlsZSBJIG1pZ2h0IGxpc3QgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AsIGp1c3QgaW4gY2FzZSwgdGhleSdyZSBsaWtlbHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbGwgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciBub3cuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIGZpbmFsIGNoZWNrIG9mIHRoZSBwYXRjaCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIEkgcmVjYWxsIHRoYXQgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBBbHNvLCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBhbmQgYGlmc19zZXRfcmFuZ2VfZGlydHlgIGFyZSBhbGwgc3RhdGljLCBjb25maXJtaW5nIHRoZXkncmUgbm90IGV4dGVybmFsbHkgYWNjZXNzaWJsZS4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRob3VnaC5cblxuU28gdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBub3c6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5MCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzU6MDMuNTIwOTg5NTcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX3JhbmdlXCIsXG4gICAgXCJpb21hcF90cnVuY2F0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIixcbiAgICBcImlvbWFwX3RydW5jYXRlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4cmwr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 12:04:34 +0000 UTC FinishedAt: 2026-07-14 12:35:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c", "config_name": "upstream-apparmor-kasan.config", "series_id": "c7c7dbd0-d087-4bf1-9730-cbce3a4e7939" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_invalidate_folio", "iomap_zero_range", "iomap_truncate_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3RydW5jYXRlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2I1ODY5MDk0ODRiNjQ3N2E5YTVhNzBmYzRjODdjODZjYTI0NmQyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDE0IDEyOjMzOjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5pbmRleCBkNTViOTM2ZTY5ODYyOC4uYzEyMjM3ZWQ3Y2RlOWEgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9idWZmZXJlZC1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXG5AQCAtNjcsMTEgJiM0Mzs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbiYjNDM7XHRpZiAobGVuKSB7XG4mIzQzO1x0XHRmaXJzdF9ibGsgPSBvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiYjNDM7XHRcdGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdFx0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMSk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIGlmc19pc19mdWxseV91cHRvZGF0ZShmb2xpbywgaWZzKTtcbiB9XG4gXG5AQCAtMTcxLDE4ICYjNDM7MTczLDI5IEBAIHN0YXRpYyB1bnNpZ25lZCBpb21hcF9maW5kX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCAqcmFuZ2Vfc3RhcnQsXG4gXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2xlYXIgdGhlIHBlci1ibG9jayBkaXJ0eSBiaXRzIGZvciB0aGUgcmFuZ2UgW0BvZmYsIEBvZmYgJiM0MzsgQGxlbikgd2l0aGluIGFcbiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuJiM0MzsgKiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQuICBUaGlzIGlzIHJlcXVpcmVkIGZvciBvcGVyYXRpb25zIGxpa2UgZm9saW9cbiYjNDM7ICogaW52YWxpZGF0aW9uLCB3aGVyZSB3ZSBtdXN0IGVuc3VyZSBhIGJsb2NrIGlzIGZ1bGx5IGNsZWFuIGJlZm9yZSBkaXNjYXJkaW5nXG4mIzQzOyAqIGl0LlxuJiM0MzsgKi9cbiBzdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IHJvdW5kX3VwKG9mZiwgaV9ibG9ja3NpemUoaW5vZGUpKSBcdTAwM2VcdTAwM2VcbiYjNDM7XHRcdFx0XHQgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiYjNDM7XHRpZiAoZmlyc3RfYmxrIFx1MDAzZT0gbGFzdF9ibGspXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbi1cdGJpdG1hcF9jbGVhcihpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywgbnJfYmxrcyk7XG4mIzQzO1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLFxuJiM0MztcdFx0ICAgICBsYXN0X2JsayAtIGZpcnN0X2Jsayk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4gfVxuIFxuQEAgLTE5NCwxOCAmIzQzOzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIHdpdGhpbiBhXG4mIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgb3V0d2FyZHMgc28gdGhhdCBhbnkgYmxvY2sgcGFydGlhbGx5IHRvdWNoZWRcbiYjNDM7ICogYnkgdGhlIHJhbmdlIGlzIG1hcmtlZCBkaXJ0eS4gIFRoaXMgZW5zdXJlcyBibG9ja3MgY29udGFpbmluZyBldmVuIGFcbiYjNDM7ICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuJiM0MzsgKiBkYXRhIGxvc3Mgd2hlbiBwYXJ0aWFsIGJsb2NrcyBhcmUgd3JpdHRlbi5cbiYjNDM7ICovXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgJiM0MzsgMTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4mIzQzO1x0aWYgKCFsZW4pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuJiM0MztcdGxhc3RfYmxrID0gKG9mZiAmIzQzOyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbi1cdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuJiM0MztcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sXG4mIzQzO1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aWZzLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiB9XG4gXG5AQCAtNzU3LDYgJiM0Mzs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbiBcdFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XG4gXHRcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XG4gXHRcdGlmc19mcmVlKGZvbGlvKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcbiBcdH1cbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5AQCAtMTUzNiw2ICYjNDM7MTU2Miw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcdFx0Y29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzKVxuIHtcbiBcdHU2NCBieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKTtcbiYjNDM7XHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgJiM0MzsxNTgxLDggQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFx0XHQvKiBhIE5VTEwgZm9saW8gbWVhbnMgd2UmIzM5O3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXG4gXHRcdGlmICghZm9saW8pIHtcbiBcdFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2VfZnVsbChpdGVyKTtcbiYjNDM7XHRcdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw2ICYjNDM7MTU5Myw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcdFx0XHRcdGJ5dGVzKTtcbiBcbiBcdFx0Zm9saW9femVyb19yYW5nZShmb2xpbywgb2Zmc2V0LCBieXRlcyk7XG4mIzQzO1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgJiM0MzsxNjAzLDEwIEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcbiBcbiBcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGJ5dGVzKTtcbiBcdFx0aWYgKHN0YXR1cylcbi1cdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0cmV0dXJuIHN0YXR1cztcbiBcdH0gd2hpbGUgKChieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKSkgXHUwMDNlIDApO1xuIFxuLVx0aWYgKGRpZF96ZXJvKVxuJiM0MztcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfdHJ1bmNhdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiNTg2OTA5NDg0YjY0NzdhOWE1YTcwZmM0Yzg3Yzg2Y2EyNDZkMjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAxNCAxMjozMzozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCmluZGV4IGQ1NWI5MzZlNjk4NjI4Li5jMTIyMzdlZDdjZGU5YSAxMDA2NDQKLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jCkBAIC02NywxMSAmIzQzOzY3LDEzIEBAIHN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0OwotCXVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSBvZmYgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsazsKIAotCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTsKJiM0MzsJaWYgKGxlbikgewomIzQzOwkJZmlyc3RfYmxrID0gb2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7CiYjNDM7CQlsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKJiM0MzsJCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrLCBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTsKJiM0MzsJfQogCXJldHVybiBpZnNfaXNfZnVsbHlfdXB0b2RhdGUoZm9saW8sIGlmcyk7CiB9CiAKQEAgLTE3MSwxOCAmIzQzOzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LAogCXJldHVybiByYW5nZV9lbmQgLSAqcmFuZ2Vfc3RhcnQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIENsZWFyIHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICYjNDM7IEBsZW4pIHdpdGhpbiBhCiYjNDM7ICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieQomIzQzOyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpbwomIzQzOyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZwomIzQzOyAqIGl0LgomIzQzOyAqLwogc3RhdGljIHZvaWQgaWZzX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby0mZ3Q7bWFwcGluZy0mZ3Q7aG9zdDsKIAl1bnNpZ25lZCBpbnQgYmxrc19wZXJfZm9saW8gPSBpX2Jsb2Nrc19wZXJfZm9saW8oaW5vZGUsIGZvbGlvKTsKLQl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzKTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbiAtIDEpICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHM7Ci0JdW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxOwomIzQzOwl1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpICZndDsmZ3Q7CiYjNDM7CQkJCSBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwl1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICYjNDM7IGxlbikgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiYjNDM7CWlmIChmaXJzdF9ibGsgJmd0Oz0gbGFzdF9ibGspCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfY2xlYXIoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTsKJiM0MzsJYml0bWFwX2NsZWFyKGlmcy0mZ3Q7c3RhdGUsIGZpcnN0X2JsayAmIzQzOyBibGtzX3Blcl9mb2xpbywKJiM0MzsJCSAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtpZnMtJmd0O3N0YXRlX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTk0LDE4ICYjNDM7MjA3LDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiAJCWlmc19jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiAmIzQzOyBAbGVuKSB3aXRoaW4gYQomIzQzOyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgb3V0d2FyZHMgc28gdGhhdCBhbnkgYmxvY2sgcGFydGlhbGx5IHRvdWNoZWQKJiM0MzsgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYQomIzQzOyAqIHNpbmdsZSBkaXJ0eSBieXRlIHdpbGwgYmUgaW5jbHVkZWQgaW4gc3Vic2VxdWVudCB3cml0ZWJhY2ssIHByZXZlbnRpbmcKJiM0MzsgKiBkYXRhIGxvc3Mgd2hlbiBwYXJ0aWFsIGJsb2NrcyBhcmUgd3JpdHRlbi4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJc3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLSZndDttYXBwaW5nLSZndDtob3N0OwogCXVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pOwotCXVuc2lnbmVkIGludCBmaXJzdF9ibGsgPSAob2ZmICZndDsmZ3Q7IGlub2RlLSZndDtpX2Jsa2JpdHMpOwotCXVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKLQl1bnNpZ25lZCBpbnQgbnJfYmxrcyA9IGxhc3RfYmxrIC0gZmlyc3RfYmxrICYjNDM7IDE7CiYjNDM7CXVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKJiM0MzsJaWYgKCFsZW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZpcnN0X2JsayA9IG9mZiAmZ3Q7Jmd0OyBpbm9kZS0mZ3Q7aV9ibGtiaXRzOwomIzQzOwlsYXN0X2JsayA9IChvZmYgJiM0MzsgbGVuIC0gMSkgJmd0OyZndDsgaW5vZGUtJmd0O2lfYmxrYml0czsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2lmcy0mZ3Q7c3RhdGVfbG9jaywgZmxhZ3MpOwotCWJpdG1hcF9zZXQoaWZzLSZndDtzdGF0ZSwgZmlyc3RfYmxrICYjNDM7IGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTsKJiM0MzsJYml0bWFwX3NldChpZnMtJmd0O3N0YXRlLCBmaXJzdF9ibGsgJiM0MzsgYmxrc19wZXJfZm9saW8sCiYjNDM7CQkgICBsYXN0X2JsayAtIGZpcnN0X2JsayAmIzQzOyAxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aWZzLSZndDtzdGF0ZV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTc1Nyw2ICYjNDM7NzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pCiAJCVdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpOwogCQlmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pOwogCQlpZnNfZnJlZShmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pOwpAQCAtMTUzNiw2ICYjNDM7MTU2Miw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlX29wcyAqd3JpdGVfb3BzKQogewogCXU2NCBieXRlcyA9IGlvbWFwX2xlbmd0aChpdGVyKTsKJiM0MzsJYm9vbCB6ZXJvZWQgPSBmYWxzZTsKIAlpbnQgc3RhdHVzOwogCiAJZG8gewpAQCAtMTU1NCw2ICYjNDM7MTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJLyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJiMzOTtyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqLwogCQlpZiAoIWZvbGlvKSB7CiAJCQlzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2VfZnVsbChpdGVyKTsKJiM0MzsJCQlpZiAoc3RhdHVzKQomIzQzOwkJCQlyZXR1cm4gc3RhdHVzOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTU2NCw2ICYjNDM7MTU5Myw3IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybywKIAkJCQlieXRlcyk7CiAKIAkJZm9saW9femVyb19yYW5nZShmb2xpbywgb2Zmc2V0LCBieXRlcyk7CiYjNDM7CQl6ZXJvZWQgPSB0cnVlOwogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKIAogCQlyZXQgPSBpb21hcF93cml0ZV9lbmQoaXRlciwgYnl0ZXMsIGJ5dGVzLCBmb2xpbyk7CkBAIC0xNTczLDEwICYjNDM7MTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sCiAKIAkJc3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGJ5dGVzKTsKIAkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJfSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSAmZ3Q7IDApOwogCi0JaWYgKGRpZF96ZXJvKQomIzQzOwlpZiAoZGlkX3plcm8gJmFtcDsmYW1wOyB6ZXJvZWQpCiAJCSpkaWRfemVybyA9IHRydWU7CiAJcmV0dXJuIHN0YXR1czsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGVzZSBpb21hcCBCdWZmZXJlZCBJTyBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGFuZCBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCB0aGUgY2hhbmdlcyB0byBzZWUgdGhlIGltcGFjdC4gRmlyc3Qgb2ZmLCB3ZSYjMzk7dmUgZ290IGEgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSByYW5nZSBzZXR0aW5nIGFuZCBjbGVhcmluZyBsb2dpYy4gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgIG5vdyBjaGVja3MgZm9yIGBsZW5gIGJlZm9yZSBzZXR0aW5nIHRoZSBiaXRtYXAsIHdoaWNoIHNlZW1zIHNlbnNpYmxlIGZvciBlZmZpY2llbmN5LiBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCBoYXMgc29tZSByb3VuZGluZyBhZGp1c3RtZW50cyBmb3IgdGhlIGJsb2NrIGNhbGN1bGF0aW9ucyBhbmQgaW5jbHVkZXMgYSBjaGVjayB0byBzZWUgaWYgdGhlIHJhbmdlIGlzIHZhbGlkLiBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgYWxzbyBub3cgaW5jbHVkZXMgYSBgbGVuYCBjaGVjay4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIG5vdyBjYWxsaW5nIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgaW4gdGhlIGBlbHNlYCBicmFuY2gsIHdoaWNoIGlzIGludGVyZXN0aW5nIHRvIG5vdGUuIEFuZCBmaW5hbGx5LCBgaW9tYXBfemVyb19pdGVyYCBoYXMgc29tZSBhZGRlZCBsb2dpYyB0byB0cmFjayB3aGV0aGVyIHplcm9pbmcgYWN0dWFsbHkgb2NjdXJzIGJlZm9yZSBzZXR0aW5nIHRoZSBgKmRpZF96ZXJvYCBmbGFnLiBJdCBhbHNvIGhhcyBlYXJseSByZXR1cm5zIG9uIHNvbWUgZXJyb3JzLgoKR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBpb21hcCBidWZmZXJlZCBJTywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkgaGVyZS4gTGV0JiMzOTtzIGxpc3QgdGhvc2UgZnVuY3Rpb25zOiBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBpb21hcF96ZXJvX2l0ZXJgLiAKCkhvbGQgb24gYSBzZWNvbmQsIGxvb2tzIGxpa2UgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gSXQgaXMgbmVjZXNzYXJ5IHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBvbiBhIGhvdCBwYXRoLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZXhwb3J0ZWQsIHNvIHRoYXQgbWFrZXMgaXQgYSBiaXQgbW9yZSBzdHJhaWdodGZvcndhcmQsIGFuZCBgaW9tYXBfemVyb19pdGVyYCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgaW9tYXBfemVyb19yYW5nZWAsIHNvIGxldCYjMzk7cyBjaGVjayBpdHMgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciB3aXRoIGdyZXAgdG8gdW5kZXJzdGFuZCB0aGVpciBjYWxsIHNpdGVzIGFuZCBhc3Nlc3MgaWYgdGhlc2UgYXJlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2ludmFsaWRhdGVfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc3MC1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzcxOnZvaWQgaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzM6XHR0cmFjZV9pb21hcF9pbnZhbGlkYXRlX2ZvbGlvKGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdCxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzc0LVx0XHRcdFx0XHRmb2xpb19wb3MoZm9saW8pICYjNDM7IG9mZnNldCwgbGVuKTtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4Ny19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg5LVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xuZnMvaW9tYXAvdHJhY2UuaDo4NDpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfaW52YWxpZGF0ZV9mb2xpbyk7XG5mcy9pb21hcC90cmFjZS5oLTg1LURFRklORV9SQU5HRV9FVkVOVChpb21hcF9kaW9faW52YWxpZGF0ZV9mYWlsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gRmlsZXN5c3RlbSBGb2xpbyBJbnZhbGlkYXRpb24qKgoKT2theSwgc28gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB2YXJpb3VzIGZpbGVzeXN0ZW1zLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQmIzM5O3MgdGhlIGdvLXRvIGZ1bmN0aW9uIHdoZW4gYSBmb2xpbyBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSB0aGUgaGVhdnkgaGl0dGVycyDigJMgWEZTLCBleHQ0LCBnZnMyLCBidHJmcywgem9uZWZzLCBhbmQgSSYjMzk7bSBzdXJlIG1hbnkgb3RoZXJzLiBTbywgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgdGhlIEkvTyBwYXRoLiBJdCBzb3VuZHMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBtYWludGFpbmluZyBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZXNlIGZpbGVzeXN0ZW1zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBhIGxpdHRsZSBmdXJ0aGVyIGFuZCBsb29rIGludG8gYGlvbWFwX3plcm9faXRlcmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfemVyb19pdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTU0NT1FWFBPUlRfU1lNQk9MX0dQTChpb21hcF9maWxlX3Vuc2hhcmUpO1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU1MS0gKi9cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTU1MjpzdGF0aWMgaW5saW5lIGludCBpb21hcF96ZXJvX2l0ZXJfZmx1c2hfYW5kX3N0YWxlKHN0cnVjdCBpb21hcF9pdGVyICppKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NjAtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTYyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTkxLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlx0XHR0cmFjZV9pb21hcF96ZXJvX2l0ZXIoaXRlci1cdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSAmIzQzOyBvZmZzZXQsXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXHRcdFx0XHRieXRlcyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg2LVx0XHRcdFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY4NzpcdFx0XHRcdHN0YXR1cyA9IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoXHUwMDI2aXRlcik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODgtXHRcdFx0fSBlbHNlIHtcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2OTU6XHRcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFx1MDAyNml0ZXIsIGRpZF96ZXJvLCB3cml0ZV9vcHMpO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk2LVx0fVxuLS1cbmZzL2lvbWFwL3RyYWNlLmg9ODY9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19yd19xdWV1ZWQpO1xuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcbmZzL2lvbWFwL3RyYWNlLmgtODgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSU9NQVAgWmVyb2luZyBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpb21hcF96ZXJvX3JhbmdlYC4gUmlnaHQsIGl0IGNhbGxzIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24sIHVzZWQgYnkgZmlsZXN5c3RlbXMgdG8gemVybyBvdXQgc3BlY2lmaWMgcmFuZ2VzIG9mIGRhdGEuIEJ1dCB0aGVuLCBpdCB0cmlnZ2VyZWQgYSB0aG91Z2h0OiB3aGF0IGFib3V0IHRob3NlIG90aGVyIGZ1bmN0aW9ucyBpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2A/IFNwZWNpZmljYWxseSwgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YD8gVGhleSYjMzk7cmUgYWxsIHN0YXRpYywgc28gdGhleSYjMzk7cmUgb2J2aW91c2x5IGludGVybmFsIHRvIHRoZSBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkZWx2ZSBpbnRvIHdoYXQgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgZG9lcyBzcGVjaWZpY2FsbHkuIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIHVzZWQuIFRoaXMgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgdGhlIGJ1ZmZlcmVkIEkvTyBsYXllciB0cmFja3MgYW5kIG1hbmFnZXMgdGhlIGRpcnR5L3VwdG9kYXRlIHN0YXR1cyBvZiBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX2NsZWFyX3JhbmdlX2RpcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTYzPXN0YXRpYyB1bnNpZ25lZCBpb21hcF9maW5kX2RpcnR5X3JhbmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCAqcmFuZ2Vfc3RhcnQsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODItICovXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE4MzpzdGF0aWMgdm9pZCBpZnNfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTg0LVx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA2LVx0aWYgKGlmcylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjA3Olx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBEaXJ0eSBQYWdlIENsZWFyaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhlIGRpcnR5IHBhZ2UgY2xlYXJpbmcgbWVjaGFuaXNtLiBJdCBsb29rcyBsaWtlIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBhbmQgSSBjYW4gc2VlIGl0JiMzOTtzIG1ha2luZyBhIGNhbGwgdG8gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgY29ubmVjdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTXkgaW5pdGlhbCBodW5jaCBpcyByaWdodCwgYmFzZWQgb24gdGhhdCBwYXRjaCBJJiMzOTt2ZSBiZWVuIHJldmlld2luZywgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmNhbGxpbmcqIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGUgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgZG9lcywgaWYgdGhlIGNsZWFyIGFuZCBzZXQgZnVuY3Rpb25zIGFyZSBjb3VwbGVkLCBvciByZWxhdGVkIGluIHNvbWUgd2F5LiBUaW1lIHRvIGRpZyBpbnRvICp0aGF0KiBmdW5jdGlvbiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX3NldF9yYW5nZV9kaXJ0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjE2LSAqL1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyMTc6c3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTgtXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjM2PXN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQwLVx0aWYgKGlmcylcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjQxOlx0XHRpZnNfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBJL08gRGlydHlpbmcqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBjYWxscyBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQgZXhhY3RseSBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCBpcyBkb2luZyB0byBsZXZlcmFnZSBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgYW5kIGRhdGEgbWFuaXB1bGF0aW9uLiBXaGVyZSBpcyBpdCBiZWluZyBjYWxsZWQgZnJvbT8gV2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQ/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/IExldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgaXMgbWVhbnQgdG8gYWNoaWV2ZSwgYW5kIGhvdyBpdCBkZWxlZ2F0ZXMgdG8gYGlmc19zZXRfcmFuZ2VfZGlydHlgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfc2V0X3JhbmdlX2RpcnR5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIzNS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMzcte1xuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTUtXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6Nzk2Olx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXHRyZXR1cm4gZmlsZW1hcF9kaXJ0eV9mb2xpbyhtYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDc0LVx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwNzU6XHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldF9pbl9mb2xpbyhmb2xpbywgcG9zKSwgY29waWVkKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cdGZpbGVtYXBfZGlydHlfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBmb2xpbyk7XG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xODg0PWludCBpb21hcF93cml0ZWJhY2tfZm9saW8oc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXHRcdFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE5MDk6XHRcdFx0aW9tYXBfc2V0X3JhbmdlX2RpcnR5KGZvbGlvLCAwLCBlbmRfcG9zIC0gcG9zKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTkxMC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCdWZmZXJlZCBJTyBIb3QgUGF0aHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBidWZmZXJlZCBJTyBwYXRoOiBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGV5IGFsbCBmdW5uZWwgaW50byBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCwgd2hpY2ggaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGhvdyB0aGUgc3lzdGVtIGlzIG1hbmFnaW5nIGRpcnR5IGRhdGEuIEkmIzM5O20gdGhpbmtpbmcsIHRoZXNlIGFyZSAqaG90KiBmdW5jdGlvbnMsIHJpZ2h0PyBUaGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCgpUaGUgdGhpbmcgaXMsIGlmIGBfX2lvbWFwX3dyaXRlX2VuZGAgb3IgYGlvbWFwX2RpcnR5X2ZvbGlvYCB0dXJuIG91dCB0byBiZSBvdmVybHkgY29tcGxleCBvciByZXNvdXJjZS1pbnRlbnNpdmUgdGhlbXNlbHZlcywgZGlnZ2luZyBpbnRvIHRoZW0gZGlyZWN0bHkgbWlnaHQgYmUgYSByYWJiaXQgaG9sZS4gV2UgbmVlZCB0byBmaW5kIHRoZSByaWdodCBwb2ludHMgZm9yIHRlc3RpbmcuCgpTbywgd2hlcmUgY2FuIHdlIGdldCBzb21lIGxldmVyYWdlPyBXZWxsLCBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYW5kIGBpb21hcF96ZXJvX3JhbmdlYCBsb29rIHByb21pc2luZyBhcyBmdXp6aW5nIHRhcmdldHMuIFRoZXkmIzM5O3JlIHJlbGF0ZWQsIGJ1dCBwZXJoYXBzIGxlc3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGltbWVkaWF0ZSB3cml0ZSBwcm9jZXNzLiBXZSBjYW4gdGVzdCBlZGdlIGNhc2VzIGluIHRoZXJlIHRoYXQgbWlnaHQgdHJpZ2dlciB1bmV4cGVjdGVkIGJlaGF2aW9yIGluIHRoZSBsYXJnZXIgSU8gc3lzdGVtLgoKQmVmb3JlIEkgZ28gdG9vIGZhciwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MsIGlmIHRoZSBkaXJ0aW5lc3Mgc3RhdGUgaXMgbm90IGdldHRpbmcgc2V0IHByb3Blcmx5LCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZzX3NldF9yYW5nZV91cHRvZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9idWZmZXJlZC1pby5jPTU4PXN0YXRpYyB1bnNpZ25lZCBpZnNfbmV4dF9ub251cHRvZGF0ZV9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjUtXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjY2OnN0YXRpYyBib29sIGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjctXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODA9c3RhdGljIHZvaWQgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy05OS1cdFx0ICovXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjEwMDpcdFx0bWFya191cHRvZGF0ZSA9IGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIGlmcywgb2ZmLCBsZW4pIFx1MDAyNlx1MDAyNlxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xMDEtXHRcdFx0XHQhaWZzLVx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZztcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTQyMD12b2lkIGlvbWFwX2ZpbmlzaF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4sXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MzYtXHRcdGlmICghZXJyb3IpXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjQzNzpcdFx0XHR1cHRvZGF0ZSA9IGlmc19zZXRfcmFuZ2VfdXB0b2RhdGUoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy00MzgtXHRcdGlmcy1cdTAwM2VyZWFkX2J5dGVzX3BlbmRpbmcgLT0gbGVuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJT01BUCBGb2xpbyBVcGRhdGVzIGFuZCBPcHRpbWl6YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSB0aGUgaG90IHNwb3RzIGp1bXAgb3V0LiBgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWRgIGFuZCBgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlYCBib3RoIGNhbGwgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBhbmQgYmFzZWQgb24gdGhlIGNvbnRleHQsIHRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIGluIHRoZSByZWFkIHBhdGguIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGRpZyBkZWVwZXIuCgpUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBtYW5hZ2VkIGZvciBmb2xpb3Mgd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFNvdW5kcyBsaWtlIHRoZXkmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBzcGVjaWZpYyBlZGdlIGNhc2VzLCB0aGluZ3MgbGlrZSBoYW5kbGluZyB6ZXJvLWxlbmd0aCBvciBlbnN1cmluZyBwcm9wZXIgcm91bmRpbmcgd2hlbiBkZWFsaW5nIHdpdGggdGhlc2UgYml0cy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSBmb3Igc3VidGxlIGJ1Z3MsIHNvIEkmIzM5O20gZ2xhZCB0aGV5JiMzOTtyZSBiZWluZyBhZGRyZXNzZWQuCgpUaGUgb3RoZXIgYml0IHRoYXQgY2F0Y2hlcyBteSBleWUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgaW9tYXBfemVyb19pdGVyYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgZml4aW5nIHRoZSByZXR1cm4gc3RhdHVzIGhhbmRsaW5nIHdoZW4gYWR2YW5jaW5nIGZhaWxzLCBhbmQgbWFraW5nIHN1cmUgdGhhdCBgZGlkX3plcm9gIGlzIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgbGlua2VkIHRvIHRoZSBmaWxlIHplcm9pbmcuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgSSYjMzk7bSBmb2N1c2luZyBvbiBhcmU6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgSSYjMzk7bSByZWFsbHkgY3VyaW91cyBhYm91dCBgaW9tYXBfZmlsZV91bnNoYXJlYC4gSXQgdXNlcyBgaW9tYXBfemVyb19pdGVyYCwgSSBhc3N1bWU/IFllcywgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhleSYjMzk7cmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB6ZXJvIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgc29saWQuIExldCYjMzk7cyBzZWUgaG93IGBpb21hcF9maWxlX3Vuc2hhcmVgIGlzIGltcGxlbWVudGVkIGluIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZmlsZV91bnNoYXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTUyND1pbnRcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTUyNTppb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTUyNi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxuLS1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU0NC19XG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NDU6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZmlsZV91bnNoYXJlKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIExvZ2ljKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgaW9tYXBfZmlsZV91bnNoYXJlYCB3YXMgbGV2ZXJhZ2luZyBgaW9tYXBfemVyb19pdGVyYCwgYnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhY3R1YWxseSBjYWxsaW5nIGBpb21hcF91bnNoYXJlX2l0ZXJgLiBPa2F5LCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byBjbGFyaWZ5LiBMZXQgbWUgZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCByZXZpc2l0IGhvdyBgaW9tYXBfemVyb19yYW5nZWAgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBjb2RlIGFuZCBub3QgZ2V0dGluZyBtaXhlZCB1cCB3aXRoIHNpbWlsYXIgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTY1MD1pbnRcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY1MTppb21hcF96ZXJvX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGxvZmZfdCBsZW4sIGJvb2wgKmRpZF96ZXJvLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4tLVxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjk4LX1cbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTY5OTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF96ZXJvX3JhbmdlKTtcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTE3MDI9aW9tYXBfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBib29sICpkaWRfemVybyxcbi0tXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE3MTEtXHRcdHJldHVybiAwO1xuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNzEyOlx0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHBvcywgYmxvY2tzaXplIC0gb2ZmLCBkaWRfemVybywgb3BzLFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVx0XHRcdHdyaXRlX29wcywgcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3ODcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gSU9NQVAgWmVyb2luZyBhbmQgVHJ1bmNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaW9tYXBgIHN1YnN5c3RlbSBhbmQgaG93IGl0IGhhbmRsZXMgemVyb2luZyBhbmQgdHJ1bmNhdGlvbiBvcGVyYXRpb25zLiBUaGUgZnVuY3Rpb25zIGBpb21hcF96ZXJvX3JhbmdlYCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgIGFyZSBleHBvcnRlZCBhbmQgdGhleSBib3RoIGxldmVyYWdlIHRoZSBgaW9tYXBfemVyb19pdGVyYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCBrZWVwIHRob3NlIHRocmVlIHN5bWJvbHMgaW4gbWluZCBhcyBrZXkgYXJlYXMgdG8gZXhhbWluZS4gQWRkaXRpb25hbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgaW50byBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYXMgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGVzZSBvcGVyYXRpb25zLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBmcy9pb21hcC9idWZmZXJlZC1pby5jYCBhcyBhIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIEkga25vdyB0aGF0IGZpbGUgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0ZTX0lPTUFQYCBpcyBlbmFibGVkLiBJJiMzOTtsbCBhbHNvIGNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgIGFuZCBgZnMvaW9tYXAvS2NvbmZpZ2AgZmlsZXMgdG8gaWRlbnRpZnkgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidWZmZXJlZC1pby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcdFx0XHRcdCYjNDM7PSB0cmFjZS5vIFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xMi1cdFx0XHRcdCAgIGl0ZXIubyBcXFxuZnMvaW9tYXAvTWFrZWZpbGU6MTM6XHRcdFx0XHQgICBidWZmZXJlZC1pby5vXG5mcy9pb21hcC9NYWtlZmlsZS0xNC1pb21hcC0kKENPTkZJR19CTE9DSylcdFx0JiM0Mzs9IGRpcmVjdC1pby5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgaW9tYXAgRWNvc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBpb21hcC15YC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZmlndXJlIG91dCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0byBjaGVjayB0aGUgYGZzL01ha2VmaWxlYC4gSXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgZmlsZSBzeXN0ZW0gcmVsYXRlZC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gc3BvdCBmb3IgaG93IGBpb21hcGAgaXMgYnVpbHQsIGxpbmtlZCwgYW5kIGdlbmVyYWxseSBpbnRlZ3JhdGVkLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGhvdyBpdCYjMzk7cyBicm91Z2h0IGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJldCB0aGUgTWFrZWZpbGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGBpb21hcGAgZml0cyBpbiBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSByZWxhdGVkIHRvIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9NTA9b2JqLSQoQ09ORklHX0ZIQU5ETEUpXHRcdCYjNDM7PSBmaGFuZGxlLm9cbmZzL01ha2VmaWxlOjUxOm9iai15XHRcdFx0XHQmIzQzOz0gaW9tYXAvXG5mcy9NYWtlZmlsZS01Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1ODcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJT01BUCBCdWlsZCBWZXJpZmljYXRpb24qKgoKSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyB0aGUgYGZzL2lvbWFwL2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbD8gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSB0aGUgY2FzZSwgYnV0IEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEJlc3QgcHJhY3RpY2UgaXMgdG8gdmVyaWZ5LCBzbyBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL2lvbWFwL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgaGF2ZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgcnVsZXMgaW4gdGhhdCBkaXJlY3RvcnkgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBpdHMgaW5jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL01ha2VmaWxlPTc9Y2NmbGFncy15ICYjNDM7PSAtSSAkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuZnMvaW9tYXAvTWFrZWZpbGUtOC1cbmZzL2lvbWFwL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0ZTX0lPTUFQKVx0XHQmIzQzOz0gaW9tYXAub1xuZnMvaW9tYXAvTWFrZWZpbGUtMTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYXNvbmluZyBmb3IgRnV6emluZyBJT01BUCBCdWZmZXJlZCBJTyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBDT05GSUdfRlNfSU9NQVBgIHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdXNlZCBieSBmaWxlc3lzdGVtcyBsaWtlIFhGUywgRVhUNCwgQlRSRlMsIGFuZCBHRlMyLiBJIGRvbiYjMzk7dCByZWFsbHkgbmVlZCB0byBleHBsaWNpdGx5IGxpc3QgYEZTX0lPTUFQYCBiZWNhdXNlIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGRlZmF1bHQgd2l0aCB0aG9zZSBmaWxlc3lzdGVtcywgYnV0LCBmb3IgY29tcGxldGVuZXNzLCBsaXN0aW5nIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdCBpcyB1c2VmdWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLgoKVGhlIGFjdHVhbCBjb2RlIG1vZGlmaWVkIGlzIHdpdGhpbiBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBjb3JlIGlvbWFwIGxvZ2ljLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmc6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGlvbWFwIGxpYnJhcnksIG1lYW5pbmcgdGhleSYjMzk7cmUgdXNlZCBieSBzZXZlcmFsIGZpbGVzeXN0ZW1zLgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyBkaXJ0eSBiaXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiBmb2xpb3MgYW5kIGhhbmRsaW5nIGVycm9ycy9gZGlkX3plcm9gIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbmQgdGhhdCBtYWtlcyB0aGVtIGZ1enphYmxlLgoKSSBrbm93IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgeGZzX3ZtX2ludmFsaWRhdGVfZm9saW9gLCBgZXh0NF9pbnZhbGlkYXRlX2ZvbGlvYCwgYW5kIGBidHJmc19pbnZhbGlkYXRlX2ZvbGlvYC4gYGlvbWFwX3plcm9fcmFuZ2VgIGlzIGNhbGxlZCBieSBgeGZzX3plcm9fcmFuZ2VgIGFuZCBgZXh0NF96ZXJvX3JhbmdlYCwgZXRjLiBBbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgIGlzIGNhbGxlZCBmcm9tLCBlLmcuLCBgeGZzX3RydW5jYXRlX3BhZ2VgLgoKSSBzaG91bGQgY2hlY2sgZm9yIG1vcmUgZnVuY3Rpb25zLiBBaCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgY29tZXMgZnJvbSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIHdoaWNoIGlzIGNhbGxlZCBieSBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AuIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBjb21lcyBmcm9tIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBpb21hcF9kaXJ0eV9mb2xpb2AsIGBfX2lvbWFwX3dyaXRlX2VuZGAsIGFuZCBgaW9tYXBfd3JpdGViYWNrX2ZvbGlvYC4gYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgIGNvbWVzIGZyb20gYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBfX2lvbWFwX3dyaXRlX2VuZGAsIGBpb21hcF9maW5pc2hfZm9saW9fcmVhZGAsIGFuZCBgaW9tYXBfcmVhZF9mb2xpb19zeW5jYC4KCkZ1enppbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgd2F5LCBJIGNhbiBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aG91dCB0YXJnZXRpbmcgdGhlIHJlYWxseSBidXN5IHBhdGhzIGxpa2UgYGlvbWFwX2RpcnR5X2ZvbGlvYCBvciBgX19pb21hcF93cml0ZV9lbmRgIHJpZ2h0IGF3YXkuCgpJbiBzaG9ydCwgdGhlIHBhdGNoIGZpeGVzIGhvdyBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgaGFuZGxlZCBmb3IgZm9saW9zLCBhbmQgaG93IGBpb21hcF96ZXJvX2l0ZXJgIG1hbmFnZXMgZXJyb3JzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgY29kZSB1c2VkIGJ5IFhGUywgZXh0NCwgYW5kIEJ0cmZzLgoKU28gaGVyZSBpcyB0aGUgc3VtbWFyeToKCkZvY3VzIFN5bWJvbHM6Ci0gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gCi0gYGlvbWFwX3plcm9fcmFuZ2VgCi0gYGlvbWFwX3RydW5jYXRlX3BhZ2VgCgpFbmFibGUgQ29uZmlnczoKLSBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgIChvciwgcmVhbGx5LCBub3RoaW5nLiBUaGUgZnV6emVycyBlbmFibGUgdGhlc2UgYnkgZGVmYXVsdCkKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTAKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJldmlld2luZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElPTUFQIFN1cHBvcnQqKgoKT2theSwgc28gYEZTX0lPTUFQYCBpcyBhIGhpZGRlbiBjb25maWcsIG1lYW5pbmcgaXQmIzM5O3MgZW5hYmxlZCBpbXBsaWNpdGx5IGJ5IG90aGVyIHNldHRpbmdzIGFuZCBkb2VzbiYjMzk7dCBnZXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSBzaG91bGRuJiMzOTt0IGxpc3QgaXQgZGlyZWN0bHkuIFdoaWxlIEkgbWlnaHQgbGlzdCBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBhbmQgYEJUUkZTX0ZTYCwganVzdCBpbiBjYXNlLCB0aGV5JiMzOTtyZSBsaWtlbHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEkmIzM5O2xsIGxlYXZlIGBFbmFibGVDb25maWdzYCBlbXB0eSBmb3Igbm93LgoKTm93LCBsZXQmIzM5O3MganVzdCBkbyBhIGZpbmFsIGNoZWNrIG9mIHRoZSBwYXRjaCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBJIHJlY2FsbCB0aGF0IGBpb21hcF96ZXJvX2l0ZXJgIGlzIHN0YXRpYywgd2hpY2ggaXMgZ29vZC4gQWxzbywgYGlmc19zZXRfcmFuZ2VfdXB0b2RhdGVgLCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCwgYW5kIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCBhcmUgYWxsIHN0YXRpYywgY29uZmlybWluZyB0aGV5JiMzOTtyZSBub3QgZXh0ZXJuYWxseSBhY2Nlc3NpYmxlLiBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgdGhvdWdoLgoKU28gdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBub3c6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTttIHJlYWR5IHRvIG1vdmUgZm9yd2FyZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDEyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9pbnZhbGlkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lvbWFwX3plcm9fcmFuZ2UmIzM0OywKICAgICYjMzQ7aW9tYXBfdHJ1bmNhdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfaW52YWxpZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtpb21hcF96ZXJvX3JhbmdlJiMzNDssCiAgICAmIzM0O2lvbWFwX3RydW5jYXRlX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6MzEuNjc3MDIyMjU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NDQwMTk3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfdHJ1bmNhdGVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMuIEl0IGZpeGVzIGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8gKHJvdW5kaW5nIHVwL2Rvd24gY29ycmVjdGx5IGFuZCBoYW5kbGluZyB6ZXJvIGxlbmd0aCkuIEl0IGFsc28gZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGBkaWRfemVyb2AgdHJhY2tpbmcgaW4gYGlvbWFwX3plcm9faXRlcmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFqb3IgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6MzEuNjc3MDI5OTc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQyNDEwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYjU4NjkwOTQ4NGI2NDc3YTlhNWE3MGZjNGM4N2M4NmNhMjQ2ZDIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDEyOjMzOjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2J1ZmZlcmVkLWlvLmNcXG4rKysgYi9mcy9pb21hcC9idWZmZXJlZC1pby5jXFxuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cXHUwMDNlbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbi1cXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4tXFx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XFxuK1xcdHVuc2lnbmVkIGludCBmaXJzdF9ibGssIGxhc3RfYmxrO1xcbiBcXG4tXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIG5yX2Jsa3MpO1xcbitcXHRpZiAobGVuKSB7XFxuK1xcdFxcdGZpcnN0X2JsayA9IG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHRcXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsaywgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xcbiB9XFxuIFxcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbiBcXHRyZXR1cm4gcmFuZ2VfZW5kIC0gKnJhbmdlX3N0YXJ0O1xcbiB9XFxuIFxcbisvKlxcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXFxuKyAqIGZvbGlvLiAgVGhlIHJhbmdlIGlzIHJvdW5kZWQgaW53YXJkcyBzbyB0aGF0IG9ubHkgYmxvY2tzIGZ1bGx5IGNvdmVyZWQgYnlcXG4rICogdGhlIHJhbmdlIGFyZSBjbGVhcmVkLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGZvbGlvXFxuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xcbisgKiBpdC5cXG4rICovXFxuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFxcdTAwM2VcXHUwMDNlXFxuK1xcdFxcdFxcdFxcdCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuKSBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4rXFx0aWYgKGZpcnN0X2JsayBcXHUwMDNlPSBsYXN0X2JsaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xcbitcXHRiaXRtYXBfY2xlYXIoaWZzLVxcdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXFxuK1xcdFxcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpZnMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG5AQCAtMTk0LDE4ICsyMDcsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4gXFx0XFx0aWZzX2NsZWFyX3JhbmdlX2RpcnR5KGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG4gfVxcbiBcXG4rLypcXG4rICogU2V0IHRoZSBwZXItYmxvY2sgZGlydHkgYml0cyBmb3IgdGhlIHJhbmdlIFtAb2ZmLCBAb2ZmICsgQGxlbikgd2l0aGluIGFcXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxcbisgKiBieSB0aGUgcmFuZ2UgaXMgbWFya2VkIGRpcnR5LiAgVGhpcyBlbnN1cmVzIGJsb2NrcyBjb250YWluaW5nIGV2ZW4gYVxcbisgKiBzaW5nbGUgZGlydHkgYnl0ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHN1YnNlcXVlbnQgd3JpdGViYWNrLCBwcmV2ZW50aW5nXFxuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxcbisgKi9cXG4gc3RhdGljIHZvaWQgaWZzX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIFxcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xcbi1cXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcXHUwMDNlXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKTtcXG4tXFx0dW5zaWduZWQgaW50IGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFxcdTAwM2VcXHUwMDNlIGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xcbitcXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrLCBsYXN0X2JsaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuK1xcdGlmICghbGVuKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmaXJzdF9ibGsgPSBvZmYgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4rXFx0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXFx1MDAzZVxcdTAwM2UgaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmlmcy1cXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xcbi1cXHRiaXRtYXBfc2V0KGlmcy1cXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLCBucl9ibGtzKTtcXG4rXFx0Yml0bWFwX3NldChpZnMtXFx1MDAzZXN0YXRlLCBmaXJzdF9ibGsgKyBibGtzX3Blcl9mb2xpbyxcXG4rXFx0XFx0ICAgbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aWZzLVxcdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuQEAgLTc1Nyw2ICs3ODEsOCBAQCB2b2lkIGlvbWFwX2ludmFsaWRhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcXG4gXFx0XFx0V0FSTl9PTl9PTkNFKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSk7XFxuIFxcdFxcdGZvbGlvX2NhbmNlbF9kaXJ0eShmb2xpbyk7XFxuIFxcdFxcdGlmc19mcmVlKGZvbGlvKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW9tYXBfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIG9mZnNldCwgbGVuKTtcXG4gXFx0fVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcXG4ge1xcbiBcXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XFxuK1xcdGJvb2wgemVyb2VkID0gZmFsc2U7XFxuIFxcdGludCBzdGF0dXM7XFxuIFxcbiBcXHRkbyB7XFxuQEAgLTE1NTQsNiArMTU4MSw4IEBAIHN0YXRpYyBpbnQgaW9tYXBfemVyb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBib29sICpkaWRfemVybyxcXG4gXFx0XFx0LyogYSBOVUxMIGZvbGlvIG1lYW5zIHdlJ3JlIGRvbmUgd2l0aCBhIGZvbGlvIGJhdGNoICovXFxuIFxcdFxcdGlmICghZm9saW8pIHtcXG4gXFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XFxuK1xcdFxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcdFxcdFxcdFxcdGJ5dGVzKTtcXG4gXFxuIFxcdFxcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xcbitcXHRcXHR6ZXJvZWQgPSB0cnVlO1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gXFxuIFxcdFxcdHJldCA9IGlvbWFwX3dyaXRlX2VuZChpdGVyLCBieXRlcywgYnl0ZXMsIGZvbGlvKTtcXG5AQCAtMTU3MywxMCArMTYwMywxMCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXFxuIFxcbiBcXHRcXHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0fSB3aGlsZSAoKGJ5dGVzID0gaW9tYXBfbGVuZ3RoKGl0ZXIpKSBcXHUwMDNlIDApO1xcbiBcXG4tXFx0aWYgKGRpZF96ZXJvKVxcbitcXHRpZiAoZGlkX3plcm8gXFx1MDAyNlxcdTAwMjYgemVyb2VkKVxcbiBcXHRcXHQqZGlkX3plcm8gPSB0cnVlO1xcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjMyLjMwMjIwNzUzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEyMTg4MjU2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICAgIFwiaW9tYXBfemVyb19yYW5nZVwiLFxuICAgIFwiaW9tYXBfdHJ1bmNhdGVfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgaW9tYXAgYnVmZmVyZWQgSU8gbG9naWMuIEl0IGZpeGVzIGhvdyBwZXItYmxvY2sgZGlydHkgYW5kIHVwdG9kYXRlIGJpdHMgYXJlIHRyYWNrZWQgd2l0aGluIGEgZm9saW8gKHJvdW5kaW5nIHVwL2Rvd24gY29ycmVjdGx5IGFuZCBoYW5kbGluZyB6ZXJvIGxlbmd0aCkuIEl0IGFsc28gZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIGBkaWRfemVyb2AgdHJhY2tpbmcgaW4gYGlvbWFwX3plcm9faXRlcmAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHVzZWQgYnkgbWFqb3IgZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYjU4NjkwOTQ4NGI2NDc3YTlhNWE3MGZjNGM4N2M4NmNhMjQ2ZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTI6MzM6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9pb21hcC9idWZmZXJlZC1pby5jIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuaW5kZXggZDU1YjkzNmU2OTg2MjguLmMxMjIzN2VkN2NkZTlhIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuKysrIGIvZnMvaW9tYXAvYnVmZmVyZWQtaW8uY1xuQEAgLTY3LDExICs2NywxMyBAQCBzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBpb21hcF9mb2xpb19zdGF0ZSAqaWZzLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmb2xpby1cdTAwM2VtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrLCBucl9ibGtzKTtcbitcdGlmIChsZW4pIHtcbitcdFx0Zmlyc3RfYmxrID0gb2ZmIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGxhc3RfYmxrID0gKG9mZiArIGxlbiAtIDEpIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4rXHRcdGJpdG1hcF9zZXQoaWZzLVx1MDAzZXN0YXRlLCBmaXJzdF9ibGssIGxhc3RfYmxrIC0gZmlyc3RfYmxrICsgMSk7XG4rXHR9XG4gXHRyZXR1cm4gaWZzX2lzX2Z1bGx5X3VwdG9kYXRlKGZvbGlvLCBpZnMpO1xuIH1cbiBcbkBAIC0xNzEsMTggKzE3MywyOSBAQCBzdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxuIFx0cmV0dXJuIHJhbmdlX2VuZCAtICpyYW5nZV9zdGFydDtcbiB9XG4gXG4rLypcbisgKiBDbGVhciB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBpbndhcmRzIHNvIHRoYXQgb25seSBibG9ja3MgZnVsbHkgY292ZXJlZCBieVxuKyAqIHRoZSByYW5nZSBhcmUgY2xlYXJlZC4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBmb2xpb1xuKyAqIGludmFsaWRhdGlvbiwgd2hlcmUgd2UgbXVzdCBlbnN1cmUgYSBibG9jayBpcyBmdWxseSBjbGVhbiBiZWZvcmUgZGlzY2FyZGluZ1xuKyAqIGl0LlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZm9saW8tXHUwMDNlbWFwcGluZy1cdTAwM2Vob3N0O1xuIFx0dW5zaWduZWQgaW50IGJsa3NfcGVyX2ZvbGlvID0gaV9ibG9ja3NfcGVyX2ZvbGlvKGlub2RlLCBmb2xpbyk7XG4tXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gKG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzKTtcbi1cdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4gLSAxKSBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuLVx0dW5zaWduZWQgaW50IG5yX2Jsa3MgPSBsYXN0X2JsayAtIGZpcnN0X2JsayArIDE7XG4rXHR1bnNpZ25lZCBpbnQgZmlyc3RfYmxrID0gcm91bmRfdXAob2ZmLCBpX2Jsb2Nrc2l6ZShpbm9kZSkpIFx1MDAzZVx1MDAzZVxuK1x0XHRcdFx0IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbitcdHVuc2lnbmVkIGludCBsYXN0X2JsayA9IChvZmYgKyBsZW4pIFx1MDAzZVx1MDAzZSBpbm9kZS1cdTAwM2VpX2Jsa2JpdHM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKGZpcnN0X2JsayBcdTAwM2U9IGxhc3RfYmxrKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX2NsZWFyKGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sXG4rXHRcdCAgICAgbGFzdF9ibGsgLSBmaXJzdF9ibGspO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC0xOTQsMTggKzIwNywyOSBAQCBzdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxuIFx0XHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xuIH1cbiBcbisvKlxuKyAqIFNldCB0aGUgcGVyLWJsb2NrIGRpcnR5IGJpdHMgZm9yIHRoZSByYW5nZSBbQG9mZiwgQG9mZiArIEBsZW4pIHdpdGhpbiBhXG4rICogZm9saW8uICBUaGUgcmFuZ2UgaXMgcm91bmRlZCBvdXR3YXJkcyBzbyB0aGF0IGFueSBibG9jayBwYXJ0aWFsbHkgdG91Y2hlZFxuKyAqIGJ5IHRoZSByYW5nZSBpcyBtYXJrZWQgZGlydHkuICBUaGlzIGVuc3VyZXMgYmxvY2tzIGNvbnRhaW5pbmcgZXZlbiBhXG4rICogc2luZ2xlIGRpcnR5IGJ5dGUgd2lsbCBiZSBpbmNsdWRlZCBpbiBzdWJzZXF1ZW50IHdyaXRlYmFjaywgcHJldmVudGluZ1xuKyAqIGRhdGEgbG9zcyB3aGVuIHBhcnRpYWwgYmxvY2tzIGFyZSB3cml0dGVuLlxuKyAqL1xuIHN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZvbGlvLVx1MDAzZW1hcHBpbmctXHUwMDNlaG9zdDtcbiBcdHVuc2lnbmVkIGludCBibGtzX3Blcl9mb2xpbyA9IGlfYmxvY2tzX3Blcl9mb2xpbyhpbm9kZSwgZm9saW8pO1xuLVx0dW5zaWduZWQgaW50IGZpcnN0X2JsayA9IChvZmYgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cyk7XG4tXHR1bnNpZ25lZCBpbnQgbGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbi1cdHVuc2lnbmVkIGludCBucl9ibGtzID0gbGFzdF9ibGsgLSBmaXJzdF9ibGsgKyAxO1xuK1x0dW5zaWduZWQgaW50IGZpcnN0X2JsaywgbGFzdF9ibGs7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuK1x0aWYgKCFsZW4pXG4rXHRcdHJldHVybjtcbitcbitcdGZpcnN0X2JsayA9IG9mZiBcdTAwM2VcdTAwM2UgaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuK1x0bGFzdF9ibGsgPSAob2ZmICsgbGVuIC0gMSkgXHUwMDNlXHUwMDNlIGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmlmcy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4tXHRiaXRtYXBfc2V0KGlmcy1cdTAwM2VzdGF0ZSwgZmlyc3RfYmxrICsgYmxrc19wZXJfZm9saW8sIG5yX2Jsa3MpO1xuK1x0Yml0bWFwX3NldChpZnMtXHUwMDNlc3RhdGUsIGZpcnN0X2JsayArIGJsa3NfcGVyX2ZvbGlvLFxuK1x0XHQgICBsYXN0X2JsayAtIGZpcnN0X2JsayArIDEpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpZnMtXHUwMDNlc3RhdGVfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbkBAIC03NTcsNiArNzgxLDggQEAgdm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXG4gXHRcdFdBUk5fT05fT05DRShmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpO1xuIFx0XHRmb2xpb19jYW5jZWxfZGlydHkoZm9saW8pO1xuIFx0XHRpZnNfZnJlZShmb2xpbyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0LCBsZW4pO1xuIFx0fVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcbkBAIC0xNTM2LDYgKzE1NjIsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZV9vcHMgKndyaXRlX29wcylcbiB7XG4gXHR1NjQgYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcik7XG4rXHRib29sIHplcm9lZCA9IGZhbHNlO1xuIFx0aW50IHN0YXR1cztcbiBcbiBcdGRvIHtcbkBAIC0xNTU0LDYgKzE1ODEsOCBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdC8qIGEgTlVMTCBmb2xpbyBtZWFucyB3ZSdyZSBkb25lIHdpdGggYSBmb2xpbyBiYXRjaCAqL1xuIFx0XHRpZiAoIWZvbGlvKSB7XG4gXHRcdFx0c3RhdHVzID0gaW9tYXBfaXRlcl9hZHZhbmNlX2Z1bGwoaXRlcik7XG4rXHRcdFx0aWYgKHN0YXR1cylcbitcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDYgKzE1OTMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX3plcm9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgYm9vbCAqZGlkX3plcm8sXG4gXHRcdFx0XHRieXRlcyk7XG4gXG4gXHRcdGZvbGlvX3plcm9fcmFuZ2UoZm9saW8sIG9mZnNldCwgYnl0ZXMpO1xuK1x0XHR6ZXJvZWQgPSB0cnVlO1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiBcbiBcdFx0cmV0ID0gaW9tYXBfd3JpdGVfZW5kKGl0ZXIsIGJ5dGVzLCBieXRlcywgZm9saW8pO1xuQEAgLTE1NzMsMTAgKzE2MDMsMTAgQEAgc3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxuIFxuIFx0XHRzdGF0dXMgPSBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYnl0ZXMpO1xuIFx0XHRpZiAoc3RhdHVzKVxuLVx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHR9IHdoaWxlICgoYnl0ZXMgPSBpb21hcF9sZW5ndGgoaXRlcikpIFx1MDAzZSAwKTtcbiBcbi1cdGlmIChkaWRfemVybylcbitcdGlmIChkaWRfemVybyBcdTAwMjZcdTAwMjYgemVyb2VkKVxuIFx0XHQqZGlkX3plcm8gPSB0cnVlO1xuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozMi4zMDIyMDk5NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDAzOTkxMDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoZXNlIGlvbWFwIEJ1ZmZlcmVkIElPIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AsIGFuZCBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBjaGFuZ2VzIHRvIHNlZSB0aGUgaW1wYWN0LiBGaXJzdCBvZmYsIHdlJ3ZlIGdvdCBhIGZldyBhZGp1c3RtZW50cyB0byB0aGUgcmFuZ2Ugc2V0dGluZyBhbmQgY2xlYXJpbmcgbG9naWMuIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCBub3cgY2hlY2tzIGZvciBgbGVuYCBiZWZvcmUgc2V0dGluZyB0aGUgYml0bWFwLCB3aGljaCBzZWVtcyBzZW5zaWJsZSBmb3IgZWZmaWNpZW5jeS4gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAgaGFzIHNvbWUgcm91bmRpbmcgYWRqdXN0bWVudHMgZm9yIHRoZSBibG9jayBjYWxjdWxhdGlvbnMgYW5kIGluY2x1ZGVzIGEgY2hlY2sgdG8gc2VlIGlmIHRoZSByYW5nZSBpcyB2YWxpZC4gYGlmc19zZXRfcmFuZ2VfZGlydHlgIGFsc28gbm93IGluY2x1ZGVzIGEgYGxlbmAgY2hlY2suIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyBub3cgY2FsbGluZyBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIGluIHRoZSBgZWxzZWAgYnJhbmNoLCB3aGljaCBpcyBpbnRlcmVzdGluZyB0byBub3RlLiBBbmQgZmluYWxseSwgYGlvbWFwX3plcm9faXRlcmAgaGFzIHNvbWUgYWRkZWQgbG9naWMgdG8gdHJhY2sgd2hldGhlciB6ZXJvaW5nIGFjdHVhbGx5IG9jY3VycyBiZWZvcmUgc2V0dGluZyB0aGUgYCpkaWRfemVyb2AgZmxhZy4gSXQgYWxzbyBoYXMgZWFybHkgcmV0dXJucyBvbiBzb21lIGVycm9ycy5cblxuR2l2ZW4gdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBpb21hcCBidWZmZXJlZCBJTywgZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgcHJpb3JpdHkgaGVyZS4gTGV0J3MgbGlzdCB0aG9zZSBmdW5jdGlvbnM6IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGBpZnNfc2V0X3JhbmdlX2RpcnR5YCwgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGlvbWFwX3plcm9faXRlcmAuIFxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBsb29rcyBsaWtlIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAsIGFuZCBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIEl0IGlzIG5lY2Vzc2FyeSB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgb24gYSBob3QgcGF0aC4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGV4cG9ydGVkLCBzbyB0aGF0IG1ha2VzIGl0IGEgYml0IG1vcmUgc3RyYWlnaHRmb3J3YXJkLCBhbmQgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGlvbWFwX3plcm9fcmFuZ2VgLCBzbyBsZXQncyBjaGVjayBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIHdpdGggZ3JlcCB0byB1bmRlcnN0YW5kIHRoZWlyIGNhbGwgc2l0ZXMgYW5kIGFzc2VzcyBpZiB0aGVzZSBhcmUgcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozOS4zMDYyMDM0OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU3MjgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfaW52YWxpZGF0ZV9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz03Njk9RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfcmVsZWFzZV9mb2xpbyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzAtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo3NzE6dm9pZCBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzIte1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6NzczOlxcdHRyYWNlX2lvbWFwX2ludmFsaWRhdGVfZm9saW8oZm9saW8tXFx1MDAzZW1hcHBpbmctXFx1MDAzZWhvc3QsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03NzQtXFx0XFx0XFx0XFx0XFx0Zm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCwgbGVuKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNzg3LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc4ODpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pbnZhbGlkYXRlX2ZvbGlvKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc4OS1cXG4tLVxcbmZzL2lvbWFwL3RyYWNlLmg9ODM9REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX3JlbGVhc2VfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmg6ODQ6REVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2ludmFsaWRhdGVfZm9saW8pO1xcbmZzL2lvbWFwL3RyYWNlLmgtODUtREVGSU5FX1JBTkdFX0VWRU5UKGlvbWFwX2Rpb19pbnZhbGlkYXRlX2ZhaWwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzozOS40MDE5Mzk1MTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTc0MDcxMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEZpbGVzeXN0ZW0gRm9saW8gSW52YWxpZGF0aW9uKipcblxuT2theSwgc28gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHZhcmlvdXMgZmlsZXN5c3RlbXMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCdzIHRoZSBnby10byBmdW5jdGlvbiB3aGVuIGEgZm9saW8gbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQsIGFuZCBpdCdzIGNhbGxlZCBieSB0aGUgaGVhdnkgaGl0dGVycyDigJMgWEZTLCBleHQ0LCBnZnMyLCBidHJmcywgem9uZWZzLCBhbmQgSSdtIHN1cmUgbWFueSBvdGhlcnMuIFNvLCB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgSS9PIHBhdGguIEl0IHNvdW5kcyBsaWtlIGEgY3JpdGljYWwgZnVuY3Rpb24gZm9yIG1haW50YWluaW5nIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlc2UgZmlsZXN5c3RlbXMuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZnVydGhlciBhbmQgbG9vayBpbnRvIGBpb21hcF96ZXJvX2l0ZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzY0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6NDUuMzc2MDEzMDY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1Mzc4ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX3plcm9faXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTQ1PUVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2ZpbGVfdW5zaGFyZSk7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NTEtICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTUyOnN0YXRpYyBpbmxpbmUgaW50IGlvbWFwX3plcm9faXRlcl9mbHVzaF9hbmRfc3RhbGUoc3RydWN0IGlvbWFwX2l0ZXIgKmkpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTUzLXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2MC1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NjE6c3RhdGljIGludCBpb21hcF96ZXJvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIGJvb2wgKmRpZF96ZXJvLFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTU2Mi1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGVfb3BzICp3cml0ZV9vcHMpXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTEtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNTkyOlxcdFxcdHRyYWNlX2lvbWFwX3plcm9faXRlcihpdGVyLVxcdTAwM2Vpbm9kZSwgZm9saW9fcG9zKGZvbGlvKSArIG9mZnNldCxcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1OTMtXFx0XFx0XFx0XFx0Ynl0ZXMpO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNjUxPWlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2ODYtXFx0XFx0XFx0XFx0cmFuZ2VfZGlydHkgPSBmYWxzZTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE2ODc6XFx0XFx0XFx0XFx0c3RhdHVzID0gaW9tYXBfemVyb19pdGVyX2ZsdXNoX2FuZF9zdGFsZShcXHUwMDI2aXRlcik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjg4LVxcdFxcdFxcdH0gZWxzZSB7XFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTQtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk1OlxcdFxcdGl0ZXIuc3RhdHVzID0gaW9tYXBfemVyb19pdGVyKFxcdTAwMjZpdGVyLCBkaWRfemVybywgd3JpdGVfb3BzKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE2OTYtXFx0fVxcbi0tXFxuZnMvaW9tYXAvdHJhY2UuaD04Nj1ERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfZGlvX3J3X3F1ZXVlZCk7XFxuZnMvaW9tYXAvdHJhY2UuaDo4NzpERUZJTkVfUkFOR0VfRVZFTlQoaW9tYXBfemVyb19pdGVyKTtcXG5mcy9pb21hcC90cmFjZS5oLTg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzo0NS40NzEzOTY3MTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTMyMDIxNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBaZXJvaW5nIGFuZCBSZWxhdGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpb21hcF96ZXJvX3JhbmdlYC4gUmlnaHQsIGl0IGNhbGxzIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBleHBvcnRlZCBmdW5jdGlvbiwgdXNlZCBieSBmaWxlc3lzdGVtcyB0byB6ZXJvIG91dCBzcGVjaWZpYyByYW5nZXMgb2YgZGF0YS4gQnV0IHRoZW4sIGl0IHRyaWdnZXJlZCBhIHRob3VnaHQ6IHdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zIGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYD8gU3BlY2lmaWNhbGx5LCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBhbmQgYGlmc19zZXRfcmFuZ2VfZGlydHlgPyBUaGV5J3JlIGFsbCBzdGF0aWMsIHNvIHRoZXkncmUgb2J2aW91c2x5IGludGVybmFsIHRvIHRoZSBidWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24uIExldCdzIGRlbHZlIGludG8gd2hhdCBgaWZzX2NsZWFyX3JhbmdlX2RpcnR5YCBkb2VzIHNwZWNpZmljYWxseS4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkLiBUaGlzIGlzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBidWZmZXJlZCBJL08gbGF5ZXIgdHJhY2tzIGFuZCBtYW5hZ2VzIHRoZSBkaXJ0eS91cHRvZGF0ZSBzdGF0dXMgb2YgYmxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjQ1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjUwLjYwMzQyMDY2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2ODA2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZzX2NsZWFyX3JhbmdlX2RpcnR5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTE2Mz1zdGF0aWMgdW5zaWduZWQgaW9tYXBfZmluZF9kaXJ0eV9yYW5nZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgKnJhbmdlX3N0YXJ0LFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODItICovXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxODM6c3RhdGljIHZvaWQgaWZzX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xODQtXFx0XFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIwMj1zdGF0aWMgdm9pZCBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMDYtXFx0aWYgKGlmcylcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIwNzpcXHRcXHRpZnNfY2xlYXJfcmFuZ2VfZGlydHkoZm9saW8sIGlmcywgb2ZmLCBsZW4pO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjA4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzM6NTAuNzM1MTA3Mzc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3Nzk2NjQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgRmxvdyBvZiBEaXJ0eSBQYWdlIENsZWFyaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoZSBkaXJ0eSBwYWdlIGNsZWFyaW5nIG1lY2hhbmlzbS4gSXQgbG9va3MgbGlrZSBgaW9tYXBfY2xlYXJfcmFuZ2VfZGlydHlgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYW5kIEkgY2FuIHNlZSBpdCdzIG1ha2luZyBhIGNhbGwgdG8gYGlmc19jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQncyB0aGUgY29yZSBjb25uZWN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBNeSBpbml0aWFsIGh1bmNoIGlzIHJpZ2h0LCBiYXNlZCBvbiB0aGF0IHBhdGNoIEkndmUgYmVlbiByZXZpZXdpbmcsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBpcyB3aGF0J3MgYWN0dWFsbHkgKmNhbGxpbmcqIGBpb21hcF9jbGVhcl9yYW5nZV9kaXJ0eWAuIFRoYXQncyB0aGUgZnVuY3Rpb24gdGhhdCdzIHRyaWdnZXJpbmcgdGhlIGNsZWFyLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlmc19zZXRfcmFuZ2VfZGlydHlgIGRvZXMsIGlmIHRoZSBjbGVhciBhbmQgc2V0IGZ1bmN0aW9ucyBhcmUgY291cGxlZCwgb3IgcmVsYXRlZCBpbiBzb21lIHdheS4gVGltZSB0byBkaWcgaW50byAqdGhhdCogZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjMzOjU0LjcxMzA3NjEwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzgwNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmc19zZXRfcmFuZ2VfZGlydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjAyPXN0YXRpYyB2b2lkIGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTIxNi0gKi9cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjIxNzpzdGF0aWMgdm9pZCBpZnNfc2V0X3JhbmdlX2RpcnR5KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yMTgtXFx0XFx0c3RydWN0IGlvbWFwX2ZvbGlvX3N0YXRlICppZnMsIHNpemVfdCBvZmYsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jPTIzNj1zdGF0aWMgdm9pZCBpb21hcF9zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjQwLVxcdGlmIChpZnMpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoyNDE6XFx0XFx0aWZzX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgaWZzLCBvZmYsIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0yNDItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozMzo1NC44NTg0NjE3NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExMTIzNTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyB0aG91Z2ggaXQgd2VyZSBteSB0cmFpbiBvZiB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIEkvTyBEaXJ0eWluZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhhdCBpdCBjYWxscyBgaWZzX3NldF9yYW5nZV9kaXJ0eWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyB0cmFjZSB0aGlzIGFuZCBzZWUgd2hhdCBleGFjdGx5IGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgIGlzIGRvaW5nIHRvIGxldmVyYWdlIGBpZnNfc2V0X3JhbmdlX2RpcnR5YC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGF0YSBtYW5pcHVsYXRpb24uIFdoZXJlIGlzIGl0IGJlaW5nIGNhbGxlZCBmcm9tPyBXaGF0IHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZD8gV2hhdCdzIHRoZSBjb250ZXh0PyBMZXQncyBmaWd1cmUgb3V0IHdoYXQgYGlvbWFwX3NldF9yYW5nZV9kaXJ0eWAgaXMgbWVhbnQgdG8gYWNoaWV2ZSwgYW5kIGhvdyBpdCBkZWxlZ2F0ZXMgdG8gYGlmc19zZXRfcmFuZ2VfZGlydHlgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGlzIGtleSB0byBmaWd1cmluZyB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjAyLjk2OTY5OTA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzA2Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9zZXRfcmFuZ2VfZGlydHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MjE3PXN0YXRpYyB2b2lkIGlmc19zZXRfcmFuZ2VfZGlydHkoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjM1LVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MjM2OnN0YXRpYyB2b2lkIGlvbWFwX3NldF9yYW5nZV9kaXJ0eShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2ZmLCBzaXplX3QgbGVuKVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMjM3LXtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NzkwPWJvb2wgaW9tYXBfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTc5NS1cXHRpZnNfYWxsb2MoaW5vZGUsIGZvbGlvLCAwKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjc5NjpcXHRpb21hcF9zZXRfcmFuZ2VfZGlydHkoZm9saW8sIDAsIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy03OTctXFx0cmV0dXJuIGZpbGVtYXBfZGlydHlfZm9saW8obWFwcGluZywgZm9saW8pO1xcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xMDU2PXN0YXRpYyBib29sIF9faW9tYXBfd3JpdGVfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTEwNzQtXFx0aW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBvZmZzZXRfaW5fZm9saW8oZm9saW8sIHBvcyksIGxlbik7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxMDc1OlxcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgb2Zmc2V0X2luX2ZvbGlvKGZvbGlvLCBwb3MpLCBjb3BpZWQpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTA3Ni1cXHRmaWxlbWFwX2RpcnR5X2ZvbGlvKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIGZvbGlvKTtcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTg4ND1pbnQgaW9tYXBfd3JpdGViYWNrX2ZvbGlvKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE5MDgtXFx0XFx0XFx0aWZzID0gaWZzX2FsbG9jKGlub2RlLCBmb2xpbywgMCk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxOTA5OlxcdFxcdFxcdGlvbWFwX3NldF9yYW5nZV9kaXJ0eShmb2xpbywgMCwgZW5kX3BvcyAtIHBvcyk7XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xOTEwLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6MDMuMDY2NzY2NDM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTE3MzA2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJ1ZmZlcmVkIElPIEhvdCBQYXRocyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvcmUgZnVuY3Rpb25zIGluIHRoZSBidWZmZXJlZCBJTyBwYXRoOiBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoZXkgYWxsIGZ1bm5lbCBpbnRvIGBpb21hcF9zZXRfcmFuZ2VfZGlydHlgLCB3aGljaCBpcyBhIGtleSBpbmRpY2F0b3Igb2YgaG93IHRoZSBzeXN0ZW0gaXMgbWFuYWdpbmcgZGlydHkgZGF0YS4gSSdtIHRoaW5raW5nLCB0aGVzZSBhcmUgKmhvdCogZnVuY3Rpb25zLCByaWdodD8gVGhlIG9uZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLlxuXG5UaGUgdGhpbmcgaXMsIGlmIGBfX2lvbWFwX3dyaXRlX2VuZGAgb3IgYGlvbWFwX2RpcnR5X2ZvbGlvYCB0dXJuIG91dCB0byBiZSBvdmVybHkgY29tcGxleCBvciByZXNvdXJjZS1pbnRlbnNpdmUgdGhlbXNlbHZlcywgZGlnZ2luZyBpbnRvIHRoZW0gZGlyZWN0bHkgbWlnaHQgYmUgYSByYWJiaXQgaG9sZS4gV2UgbmVlZCB0byBmaW5kIHRoZSByaWdodCBwb2ludHMgZm9yIHRlc3RpbmcuXG5cblNvLCB3aGVyZSBjYW4gd2UgZ2V0IHNvbWUgbGV2ZXJhZ2U/IFdlbGwsIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgIGxvb2sgcHJvbWlzaW5nIGFzIGZ1enppbmcgdGFyZ2V0cy4gVGhleSdyZSByZWxhdGVkLCBidXQgcGVyaGFwcyBsZXNzIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBpbW1lZGlhdGUgd3JpdGUgcHJvY2Vzcy4gV2UgY2FuIHRlc3QgZWRnZSBjYXNlcyBpbiB0aGVyZSB0aGF0IG1pZ2h0IHRyaWdnZXIgdW5leHBlY3RlZCBiZWhhdmlvciBpbiB0aGUgbGFyZ2VyIElPIHN5c3RlbS5cblxuQmVmb3JlIEkgZ28gdG9vIGZhciwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MsIGlmIHRoZSBkaXJ0aW5lc3Mgc3RhdGUgaXMgbm90IGdldHRpbmcgc2V0IHByb3Blcmx5LCB0aGlzIGlzIHdoZXJlIHdlJ2xsIGZpbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjA3Ljk3ODQ5OTc4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU0MTIxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZzX3NldF9yYW5nZV91cHRvZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz01OD1zdGF0aWMgdW5zaWduZWQgaWZzX25leHRfbm9udXB0b2RhdGVfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNjUtXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo2NjpzdGF0aWMgYm9vbCBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy02Ny1cXHRcXHRzdHJ1Y3QgaW9tYXBfZm9saW9fc3RhdGUgKmlmcywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbilcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9ODA9c3RhdGljIHZvaWQgaW9tYXBfc2V0X3JhbmdlX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmYsXFxuLS1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTk5LVxcdFxcdCAqL1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTAwOlxcdFxcdG1hcmtfdXB0b2RhdGUgPSBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBpZnMsIG9mZiwgbGVuKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTAxLVxcdFxcdFxcdFxcdCFpZnMtXFx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZztcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9NDIwPXZvaWQgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZiwgc2l6ZV90IGxlbixcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtNDM2LVxcdFxcdGlmICghZXJyb3IpXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzo0Mzc6XFx0XFx0XFx0dXB0b2RhdGUgPSBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlKGZvbGlvLCBpZnMsIG9mZiwgbGVuKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTQzOC1cXHRcXHRpZnMtXFx1MDAzZXJlYWRfYnl0ZXNfcGVuZGluZyAtPSBsZW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjA4LjA3MzkxNjkzM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkzODk2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJT01BUCBGb2xpbyBVcGRhdGVzIGFuZCBPcHRpbWl6YXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGhvdCBzcG90cyBqdW1wIG91dC4gYGlvbWFwX2ZpbmlzaF9mb2xpb19yZWFkYCBhbmQgYGlvbWFwX3NldF9yYW5nZV91cHRvZGF0ZWAgYm90aCBjYWxsIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCwgYW5kIGJhc2VkIG9uIHRoZSBjb250ZXh0LCB0aGVzZSBhcmUga2V5IGZ1bmN0aW9ucyBpbiB0aGUgcmVhZCBwYXRoLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBkaWcgZGVlcGVyLlxuXG5UaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBkaXJ0eSBhbmQgdXAtdG8tZGF0ZSBiaXRzIGFyZSBtYW5hZ2VkIGZvciBmb2xpb3Mgd2l0aGluIHRoZSBpb21hcCBmcmFtZXdvcmsuIFNvdW5kcyBsaWtlIHRoZXkncmUgYWRkcmVzc2luZyBzb21lIHNwZWNpZmljIGVkZ2UgY2FzZXMsIHRoaW5ncyBsaWtlIGhhbmRsaW5nIHplcm8tbGVuZ3RoIG9yIGVuc3VyaW5nIHByb3BlciByb3VuZGluZyB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBiaXRzLiBUaGF0J3MgYSBjbGFzc2ljIGFyZWEgZm9yIHN1YnRsZSBidWdzLCBzbyBJJ20gZ2xhZCB0aGV5J3JlIGJlaW5nIGFkZHJlc3NlZC5cblxuVGhlIG90aGVyIGJpdCB0aGF0IGNhdGNoZXMgbXkgZXllIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYGlvbWFwX3plcm9faXRlcmAuIEl0IHNlZW1zIHRoZXkncmUgZml4aW5nIHRoZSByZXR1cm4gc3RhdHVzIGhhbmRsaW5nIHdoZW4gYWR2YW5jaW5nIGZhaWxzLCBhbmQgbWFraW5nIHN1cmUgdGhhdCBgZGlkX3plcm9gIGlzIGNvcnJlY3RseSB0cmFja2VkLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBkYXRhIGludGVncml0eSwgYXMgaXQncyBkaXJlY3RseSBsaW5rZWQgdG8gdGhlIGZpbGUgemVyb2luZy5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBhcmU6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgSSdtIHJlYWxseSBjdXJpb3VzIGFib3V0IGBpb21hcF9maWxlX3Vuc2hhcmVgLiBJdCB1c2VzIGBpb21hcF96ZXJvX2l0ZXJgLCBJIGFzc3VtZT8gWWVzLCBJJ2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoZXkncmUgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB3aG9sZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB6ZXJvIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgc29saWQuIExldCdzIHNlZSBob3cgYGlvbWFwX2ZpbGVfdW5zaGFyZWAgaXMgaW1wbGVtZW50ZWQgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDk3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjE1LjA2NzgxNjMyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTQ5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2ZpbGVfdW5zaGFyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvYnVmZmVyZWQtaW8uYz0xNTI0PWludFxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTUyNTppb21hcF9maWxlX3Vuc2hhcmUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbixcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1MjYtXFx0XFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNTQ0LX1cXG5mcy9pb21hcC9idWZmZXJlZC1pby5jOjE1NDU6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZmlsZV91bnNoYXJlKTtcXG5mcy9pb21hcC9idWZmZXJlZC1pby5jLTE1NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjE1LjE2ODc3MTI5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTEzNjA0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSS9PIE1hcHBpbmcgTG9naWMqKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYGlvbWFwX2ZpbGVfdW5zaGFyZWAgd2FzIGxldmVyYWdpbmcgYGlvbWFwX3plcm9faXRlcmAsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gSXQgbG9va3MgbGlrZSBpdCdzIGFjdHVhbGx5IGNhbGxpbmcgYGlvbWFwX3Vuc2hhcmVfaXRlcmAuIE9rYXksIHRoYXQncyBpbXBvcnRhbnQgdG8gY2xhcmlmeS4gTGV0IG1lIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucyBhbmQgcmV2aXNpdCBob3cgYGlvbWFwX3plcm9fcmFuZ2VgIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBOZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBjb3JyZWN0IHBhdGggd2l0aGluIHRoZSBjb2RlIGFuZCBub3QgZ2V0dGluZyBtaXhlZCB1cCB3aXRoIHNpbWlsYXIgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6MjMuNjgyMzc5MDY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDA3OTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF96ZXJvX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9idWZmZXJlZC1pby5jPTE2NTA9aW50XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjUxOmlvbWFwX3plcm9fcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgbG9mZl90IGxlbiwgYm9vbCAqZGlkX3plcm8sXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNjUyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTY5OC19XFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYzoxNjk5OkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3plcm9fcmFuZ2UpO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmMtMTcwMC1cXG4tLVxcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM9MTcwMj1pb21hcF90cnVuY2F0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIGJvb2wgKmRpZF96ZXJvLFxcbi0tXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzExLVxcdFxcdHJldHVybiAwO1xcbmZzL2lvbWFwL2J1ZmZlcmVkLWlvLmM6MTcxMjpcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgcG9zLCBibG9ja3NpemUgLSBvZmYsIGRpZF96ZXJvLCBvcHMsXFxuZnMvaW9tYXAvYnVmZmVyZWQtaW8uYy0xNzEzLVxcdFxcdFxcdHdyaXRlX29wcywgcHJpdmF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjIzLjc3NjQ2NTk1MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2NzExOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIElPTUFQIFplcm9pbmcgYW5kIFRydW5jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBpb21hcGAgc3Vic3lzdGVtIGFuZCBob3cgaXQgaGFuZGxlcyB6ZXJvaW5nIGFuZCB0cnVuY2F0aW9uIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbnMgYGlvbWFwX3plcm9fcmFuZ2VgIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgYXJlIGV4cG9ydGVkIGFuZCB0aGV5IGJvdGggbGV2ZXJhZ2UgdGhlIGBpb21hcF96ZXJvX2l0ZXJgIGZ1bmN0aW9uLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgSSdsbCBrZWVwIHRob3NlIHRocmVlIHN5bWJvbHMgaW4gbWluZCBhcyBrZXkgYXJlYXMgdG8gZXhhbWluZS4gQWRkaXRpb25hbGx5LCBJIHNob3VsZCBhbHNvIGxvb2sgaW50byBgaW9tYXBfaW52YWxpZGF0ZV9mb2xpb2AgYXMgaXQgc2VlbXMgcmVsYXRlZCB0byB0aGVzZSBvcGVyYXRpb25zLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb3IgYXZhaWxhYmlsaXR5IG9mIHRoZXNlIGZ1bmN0aW9ucy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgZnMvaW9tYXAvYnVmZmVyZWQtaW8uY2AgYXMgYSBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBJIGtub3cgdGhhdCBmaWxlIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZC4gSSdsbCBhbHNvIGNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgIGFuZCBgZnMvaW9tYXAvS2NvbmZpZ2AgZmlsZXMgdG8gaWRlbnRpZnkgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Nzg3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjI3Ljg0MzE4MTQ1NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTk2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJ1ZmZlcmVkLWlvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL01ha2VmaWxlPTExPWlvbWFwLXlcXHRcXHRcXHRcXHQrPSB0cmFjZS5vIFxcXFxcXG5mcy9pb21hcC9NYWtlZmlsZS0xMi1cXHRcXHRcXHRcXHQgICBpdGVyLm8gXFxcXFxcbmZzL2lvbWFwL01ha2VmaWxlOjEzOlxcdFxcdFxcdFxcdCAgIGJ1ZmZlcmVkLWlvLm9cXG5mcy9pb21hcC9NYWtlZmlsZS0xNC1pb21hcC0kKENPTkZJR19CTE9DSylcXHRcXHQrPSBkaXJlY3QtaW8ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDEyOjM0OjI3Ljk2OTE4NDQxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjMxNzI1ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBpb21hcCBFY29zeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGBpb21hcC15YC4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBmaWd1cmUgb3V0IHdoYXQgd2UncmUgbG9va2luZyBhdC4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdG8gY2hlY2sgdGhlIGBmcy9NYWtlZmlsZWAuIEl0J3MgYWxtb3N0IGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vayBmb3IgYW55dGhpbmcgZmlsZSBzeXN0ZW0gcmVsYXRlZC4gVGhhdCdzIHRoZSBnby10byBzcG90IGZvciBob3cgYGlvbWFwYCBpcyBidWlsdCwgbGlua2VkLCBhbmQgZ2VuZXJhbGx5IGludGVncmF0ZWQuIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY2llcyBhbmQgaG93IGl0J3MgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBJJ2xsIGJldCB0aGUgTWFrZWZpbGUgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoZXJlIGBpb21hcGAgZml0cyBpbiBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGFyZSByZWxhdGVkIHRvIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDozNy42MDA5MTI4MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTQ4NTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9NYWtlZmlsZT01MD1vYmotJChDT05GSUdfRkhBTkRMRSlcXHRcXHQrPSBmaGFuZGxlLm9cXG5mcy9NYWtlZmlsZTo1MTpvYmoteVxcdFxcdFxcdFxcdCs9IGlvbWFwL1xcbmZzL01ha2VmaWxlLTUyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDozOC4xNTI0MDM3MTdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ5NjIxNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSU9NQVAgQnVpbGQgVmVyaWZpY2F0aW9uKipcblxuSG1tLCBub3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBpcyB0aGUgYGZzL2lvbWFwL2AgZGlyZWN0b3J5ICphbHdheXMqIGJ1aWx0IGludG8gdGhlIGtlcm5lbD8gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSB0aGUgY2FzZSwgYnV0IEkgd2FudCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIEJlc3QgcHJhY3RpY2UgaXMgdG8gdmVyaWZ5LCBzbyBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvaW9tYXAvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBoYXZlIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBidWlsZCBydWxlcyBpbiB0aGF0IGRpcmVjdG9yeSB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGl0cyBpbmNsdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NDAuNjQ4NjIzNzY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY1MDI2MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxMjozNDo0MC43NTUxMzExMjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyOTMzNzM4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhc29uaW5nIGZvciBGdXp6aW5nIElPTUFQIEJ1ZmZlcmVkIElPIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIGBDT05GSUdfRlNfSU9NQVBgIHJpbmdzIGEgYmVsbC4gSXQncyB1c2VkIGJ5IGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBFWFQ0LCBCVFJGUywgYW5kIEdGUzIuIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGBGU19JT01BUGAgYmVjYXVzZSBpdCdzIHNlbGVjdGVkIGJ5IGRlZmF1bHQgd2l0aCB0aG9zZSBmaWxlc3lzdGVtcywgYnV0LCBmb3IgY29tcGxldGVuZXNzLCBsaXN0aW5nIHRoZSBmaWxlc3lzdGVtcyB0aGF0IHVzZSBpdCBpcyB1c2VmdWwuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBYRlNfRlNgLCBgRVhUNF9GU2AsIGFuZCBgQlRSRlNfRlNgLlxuXG5UaGUgYWN0dWFsIGNvZGUgbW9kaWZpZWQgaXMgd2l0aGluIGBmcy9pb21hcC9idWZmZXJlZC1pby5jYC4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBpb21hcCBsb2dpYy5cblxuTGV0J3Mgc3VtbWFyaXplIHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZzogYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgaW9tYXAgbGlicmFyeSwgbWVhbmluZyB0aGV5J3JlIHVzZWQgYnkgc2V2ZXJhbCBmaWxlc3lzdGVtcy5cblxuVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGhvdyBkaXJ0eSBiaXRzIGFyZSBtYW5hZ2VkIHdpdGhpbiBmb2xpb3MgYW5kIGhhbmRsaW5nIGVycm9ycy9gZGlkX3plcm9gIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzLCBhbmQgdGhhdCBtYWtlcyB0aGVtIGZ1enphYmxlLlxuXG5JIGtub3cgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB4ZnNfdm1faW52YWxpZGF0ZV9mb2xpb2AsIGBleHQ0X2ludmFsaWRhdGVfZm9saW9gLCBhbmQgYGJ0cmZzX2ludmFsaWRhdGVfZm9saW9gLiBgaW9tYXBfemVyb19yYW5nZWAgaXMgY2FsbGVkIGJ5IGB4ZnNfemVyb19yYW5nZWAgYW5kIGBleHQ0X3plcm9fcmFuZ2VgLCBldGMuIEFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgaXMgY2FsbGVkIGZyb20sIGUuZy4sIGB4ZnNfdHJ1bmNhdGVfcGFnZWAuXG5cbkkgc2hvdWxkIGNoZWNrIGZvciBtb3JlIGZ1bmN0aW9ucy4gQWgsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgIGNvbWVzIGZyb20gYGlvbWFwX2NsZWFyX3JhbmdlX2RpcnR5YCB3aGljaCBpcyBjYWxsZWQgYnkgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLiBgaWZzX3NldF9yYW5nZV9kaXJ0eWAgY29tZXMgZnJvbSBgaW9tYXBfc2V0X3JhbmdlX2RpcnR5YCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaW9tYXBfZGlydHlfZm9saW9gLCBgX19pb21hcF93cml0ZV9lbmRgLCBhbmQgYGlvbWFwX3dyaXRlYmFja19mb2xpb2AuIGBpZnNfc2V0X3JhbmdlX3VwdG9kYXRlYCBjb21lcyBmcm9tIGBpb21hcF9zZXRfcmFuZ2VfdXB0b2RhdGVgIHdoaWNoIGlzIGNhbGxlZCBieSBgX19pb21hcF93cml0ZV9lbmRgLCBgaW9tYXBfZmluaXNoX2ZvbGlvX3JlYWRgLCBhbmQgYGlvbWFwX3JlYWRfZm9saW9fc3luY2AuXG5cbkZ1enppbmcgYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gLCBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBgaW9tYXBfdHJ1bmNhdGVfcGFnZWAgbG9va3MgbGlrZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoYXQgd2F5LCBJIGNhbiBoaXQgdGhlIG1vZGlmaWVkIGNvZGUgd2l0aG91dCB0YXJnZXRpbmcgdGhlIHJlYWxseSBidXN5IHBhdGhzIGxpa2UgYGlvbWFwX2RpcnR5X2ZvbGlvYCBvciBgX19pb21hcF93cml0ZV9lbmRgIHJpZ2h0IGF3YXkuXG5cbkluIHNob3J0LCB0aGUgcGF0Y2ggZml4ZXMgaG93IGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSBoYW5kbGVkIGZvciBmb2xpb3MsIGFuZCBob3cgYGlvbWFwX3plcm9faXRlcmAgbWFuYWdlcyBlcnJvcnMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBjb2RlIHVzZWQgYnkgWEZTLCBleHQ0LCBhbmQgQnRyZnMuXG5cblNvIGhlcmUgaXMgdGhlIHN1bW1hcnk6XG5cbkZvY3VzIFN5bWJvbHM6XG4tIGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYFxuLSBgaW9tYXBfemVyb19yYW5nZWBcbi0gYGlvbWFwX3RydW5jYXRlX3BhZ2VgXG5cbkVuYWJsZSBDb25maWdzOlxuLSBgWEZTX0ZTYCwgYEVYVDRfRlNgLCBgQlRSRlNfRlNgIChvciwgcmVhbGx5LCBub3RoaW5nLiBUaGUgZnV6emVycyBlbmFibGUgdGhlc2UgYnkgZGVmYXVsdClcblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NTIuMDQ4NTA3NTYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc3MDI1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzQ6NTIuMjI2MjE1Njk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjk0NzY5MzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJldmlld2luZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIElPTUFQIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyBgRlNfSU9NQVBgIGlzIGEgaGlkZGVuIGNvbmZpZywgbWVhbmluZyBpdCdzIGVuYWJsZWQgaW1wbGljaXRseSBieSBvdGhlciBzZXR0aW5ncyBhbmQgZG9lc24ndCBnZXQgYSBkaXJlY3QgcHJvbXB0LiBUaGF0J3MgZ29vZCB0byBrbm93LiBJIHNob3VsZG4ndCBsaXN0IGl0IGRpcmVjdGx5LiBXaGlsZSBJIG1pZ2h0IGxpc3QgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AsIGp1c3QgaW4gY2FzZSwgdGhleSdyZSBsaWtlbHkgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIEknbGwgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciBub3cuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIGZpbmFsIGNoZWNrIG9mIHRoZSBwYXRjaCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuIEkgcmVjYWxsIHRoYXQgYGlvbWFwX3plcm9faXRlcmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLiBBbHNvLCBgaWZzX3NldF9yYW5nZV91cHRvZGF0ZWAsIGBpZnNfY2xlYXJfcmFuZ2VfZGlydHlgLCBhbmQgYGlmc19zZXRfcmFuZ2VfZGlydHlgIGFyZSBhbGwgc3RhdGljLCBjb25maXJtaW5nIHRoZXkncmUgbm90IGV4dGVybmFsbHkgYWNjZXNzaWJsZS4gYGlvbWFwX2ludmFsaWRhdGVfZm9saW9gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHRob3VnaC5cblxuU28gdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBUaGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBub3c6IGBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvYCwgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgYGlvbWFwX3RydW5jYXRlX3BhZ2VgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5MCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTI6MzU6MDMuNTIwOTg5NTcyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9pbnZhbGlkYXRlX2ZvbGlvXCIsXG4gICAgXCJpb21hcF96ZXJvX3JhbmdlXCIsXG4gICAgXCJpb21hcF90cnVuY2F0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBpb21hcCBidWZmZXJlZCBJTyBsb2dpYy4gSXQgZml4ZXMgaG93IHBlci1ibG9jayBkaXJ0eSBhbmQgdXB0b2RhdGUgYml0cyBhcmUgdHJhY2tlZCB3aXRoaW4gYSBmb2xpbyAocm91bmRpbmcgdXAvZG93biBjb3JyZWN0bHkgYW5kIGhhbmRsaW5nIHplcm8gbGVuZ3RoKS4gSXQgYWxzbyBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgYGRpZF96ZXJvYCB0cmFja2luZyBpbiBgaW9tYXBfemVyb19pdGVyYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgdXNlZCBieSBtYWpvciBmaWxlc3lzdGVtcyBsaWtlIFhGUywgZXh0NCwgYW5kIGJ0cmZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2ludmFsaWRhdGVfZm9saW9cIixcbiAgICBcImlvbWFwX3plcm9fcmFuZ2VcIixcbiAgICBcImlvbWFwX3RydW5jYXRlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGlvbWFwIGJ1ZmZlcmVkIElPIGxvZ2ljLiBJdCBmaXhlcyBob3cgcGVyLWJsb2NrIGRpcnR5IGFuZCB1cHRvZGF0ZSBiaXRzIGFyZSB0cmFja2VkIHdpdGhpbiBhIGZvbGlvIChyb3VuZGluZyB1cC9kb3duIGNvcnJlY3RseSBhbmQgaGFuZGxpbmcgemVybyBsZW5ndGgpLiBJdCBhbHNvIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBgZGlkX3plcm9gIHRyYWNraW5nIGluIGBpb21hcF96ZXJvX2l0ZXJgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB1c2VkIGJ5IG1ham9yIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow4cmwr[1] Phase: Succeeded StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 12:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 12:35:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2] Phase: Succeeded StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 16:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 16:53:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 12:35:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 12:35:16 +0000 UTC FinishedAt: 2026-07-14 12:35:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-669778188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 12:35:26 +0000 UTC FinishedAt: 2026-07-14 13:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 12:35:26 +0000 UTC FinishedAt: 2026-07-14 13:11:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2a1d65ec-43d4-4e0d-9a2f-590c7d8a423e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-669778188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "20456696-be20-40db-a3e5-61bb7f1081e2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-1049282362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 12:35:26 +0000 UTC FinishedAt: 2026-07-14 13:11:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2a1d65ec-43d4-4e0d-9a2f-590c7d8a423e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-669778188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "20456696-be20-40db-a3e5-61bb7f1081e2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-1049282362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 13:11:42 +0000 UTC FinishedAt: 2026-07-14 13:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 13:11:42 +0000 UTC FinishedAt: 2026-07-14 13:11:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 13:11:42 +0000 UTC FinishedAt: 2026-07-14 13:11:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 13:11:42 +0000 UTC FinishedAt: 2026-07-14 13:11:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-1728651851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 13:11:52 +0000 UTC FinishedAt: 2026-07-14 13:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 13:11:52 +0000 UTC FinishedAt: 2026-07-14 13:13:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*20456696-be20-40db-a3e5-61bb7f1081e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-1049282362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 13:13:59 +0000 UTC FinishedAt: 2026-07-14 13:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 13:13:59 +0000 UTC FinishedAt: 2026-07-14 13:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 13:13:59 +0000 UTC FinishedAt: 2026-07-14 13:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 13:13:59 +0000 UTC FinishedAt: 2026-07-14 13:49:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2a1d65ec-43d4-4e0d-9a2f-590c7d8a423e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-1728651851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3794d326-c909-409c-8dc4-34e42e2a12b3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-310855407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 13:13:59 +0000 UTC FinishedAt: 2026-07-14 13:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2a1d65ec-43d4-4e0d-9a2f-590c7d8a423e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-1728651851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3794d326-c909-409c-8dc4-34e42e2a12b3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-310855407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 13:49:22 +0000 UTC FinishedAt: 2026-07-14 13:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 13:49:22 +0000 UTC FinishedAt: 2026-07-14 13:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 13:49:22 +0000 UTC FinishedAt: 2026-07-14 13:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 13:49:22 +0000 UTC FinishedAt: 2026-07-14 13:51:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3794d326-c909-409c-8dc4-34e42e2a12b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-310855407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 16:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 16:53:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*20456696-be20-40db-a3e5-61bb7f1081e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3794d326-c909-409c-8dc4-34e42e2a12b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-1049282362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-310855407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 13:51:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 13:51:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-3968119012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 13:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 13:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 13:51:30 +0000 UTC FinishedAt: 2026-07-14 13:51:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 13:51:40 +0000 UTC FinishedAt: 2026-07-14 16:53:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4cmwr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_invalidate_folio","iomap_zero_range","iomap_truncate_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e1e31e0ec8a609e17fd2e86b77bc00d9cbb24d7c","config_name":"upstream-apparmor-kasan.config","series_id":"c7c7dbd0-d087-4bf1-9730-cbce3a4e7939","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 13:51:40 +0000 UTC FinishedAt: 2026-07-14 16:53:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*20456696-be20-40db-a3e5-61bb7f1081e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3794d326-c909-409c-8dc4-34e42e2a12b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-1049282362/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-build-action-310855407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4cmwr/series-workflow4cmwr-convert-artifact-3968119012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}