Name: series-workflowspt7j Phase: Succeeded StartedAt: 2026-08-13 09:26:48 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[0] Phase: Succeeded StartedAt: 2026-08-13 09:26:48 +0000 UTC FinishedAt: 2026-08-13 09:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:26:48 +0000 UTC FinishedAt: 2026-08-13 09:30:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7da514d819a0afb148634aac92b3d190f34947c3", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7da514d819a0afb148634aac92b3d190f34947c3", "config_name": "upstream-apparmor-kasan.config", "series_id": "13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "set_memory_rox", "set_memory_ro", "set_memory_rw", "set_memory_x", "set_memory_nx", "text_poke", "text_poke_copy", "text_poke_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBhbmQgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMpIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGV4dF9wb2tlICh3aGljaCB1c2VzIHZtYWxsb2NfdG9fcGFnZSkgYW5kIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyAod2hpY2ggaXMgY2FsbGVkIGJ5IHNldF9tZW1vcnlfcm94IGFuZCBvdGhlcnMpLiBJdCBpbnRyb2R1Y2VzIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBzZXJpYWxpemUgdGhlc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBCUEYsIG1vZHVsZSBsb2FkaW5nLCBrcHJvYmVzLCBmdHJhY2UsIGV0Yy4gSXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIxZjE0OGJlZTEwZWZmNDI1NjM4YzVlNDk4ZjkzNjI3YWQyM2ZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjI4OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbkBAIC02LDYgJiM0Mzs2LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4ZWNtZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2dkYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pbnNuLmhcdTAwM2VcbkBAIC0yNTQzLDYgJiM0MzsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4gXG4gdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgX19wb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHQgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuJiM0Mzt7XG4mIzQzO1x0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XG4mIzQzO1x0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4mIzQzO1x0XHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLFxuJiM0MztcdFx0XHQgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGluX2RiZ19tYXN0ZXIoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxuJiM0MztcdFx0ICogYW55d2F5IHNvIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGxvY2tzXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlXG4mIzQzO1x0XHQgKiBjb2xsYXBzZWQgdG8gaHVnZSBQTUQgZW50cmllcywgYW5kIHRoaXMgY29sbGFwc2UgY2FuIGhhcHBlblxuJiM0MztcdFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBQcmV2ZW50IHZtYWxsb2NfdG9fcGFnZSgpIGZyb20gcmFjaW5nIGJ5IGFjcXVpcmluZyBhblxuJiM0MztcdFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXG4mIzQzO1x0XHQgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICYjNDM7IGxlbiBcdTAwM2UgUEFHRV9TSVpFO1xuQEAgLTI1NjAsOSAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbFxuIFx0QlVHX09OKCFhZnRlcl9ib290bWVtKTtcbiBcbiBcdGlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkge1xuLVx0XHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbi1cdFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4tXHRcdFx0cGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0cG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHBhZ2VzWzBdID0gdmlydF90b19wYWdlKGFkZHIpO1xuIFx0XHRXQVJOX09OKCFQYWdlUmVzZXJ2ZWQocGFnZXNbMF0pKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDhkMDU3ZjQ0NDE3OC4uNDMwZDBiNDQ4MzcxOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgJiM0Mzs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7XG4gXHR1bnNpZ25lZCBpbnRcdGZsYWdzO1xuIFx0dW5zaWduZWQgaW50XHRmb3JjZV9zcGxpdFx0XHQ6IDEsXG4gXHRcdFx0Zm9yY2Vfc3RhdGljX3Byb3RcdDogMSxcbi1cdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxO1xuJiM0MztcdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxLFxuJiM0MztcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTQwOSw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00MzksMTAgJiM0Mzs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuJiM0MztcdFx0ICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuJiM0MztcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4mIzQzO1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuJiM0MztcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjNDM7XHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTczMiw3ICYjNDM7NzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7XG4gXHRpZiAocDRkX25vbmUoKnA0ZCkpXG5AQCAtNzQzLDcgJiM0Mzs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XG4gXHQqbnggfD0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU0LDcgJiM0Mzs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMk07XG4gXHQqbnggfD0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XG4gXHRpZiAocG1kX25vbmUoKnBtZCkpXG5AQCAtNzY1LDcgJiM0Mzs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTtcbiB9XG5AQCAtMTEyMCwxMSAmIzQzOzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gc3RhdGljIGludFxuIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKVxuJiM0MztcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuJiM0MztcdHN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTtcbiBcdHVuc2lnbmVkIGludCBpLCBsZXZlbDtcbiBcdHBncHJvdF90IHJlZl9wcm90O1xuIFx0Ym9vbCBueCwgcnc7XG5AQCAtMTIyNCwxNiAmIzQzOzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiBcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcbiYjNDM7XHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbiYjNDM7XHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuJiM0MztcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuJiM0MztcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEyMSw3ICYjNDM7MjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0LyogQXZvaWQgcmFjZSB3aXRoIGNvbmN1cnJlbnQgQ1BBIGNvbGxhcHNlLiAqL1xuJiM0MztcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuJiM0MztcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgJiM0Mzs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuJiM0MztcdCAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyMWYxNDhiZWUxMGVmZjQyNTYzOGM1ZTQ5OGY5MzYyN2FkMjNmYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOToyODoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggNjI5MzZhM2JkZTE5Yi4uZjgxZDZiYzkwYTZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTYsNiAmIzQzOzYsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1vcnkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leGVjbWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2dkYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbWFwX2xvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90ZXh0LXBhdGNoaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2luc24uaCZndDsKQEAgLTI1NDMsNiAmIzQzOzI1NDYsMzggQEAgc3RhdGljIHZvaWQgdGV4dF9wb2tlX21lbXNldCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIAogdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTsKIAomIzQzO3N0YXRpYyB2b2lkIF9fcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsCiYjNDM7CQkJCSBib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7ewomIzQzOwlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKJiM0MzsJaWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7CQlwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICYjNDM7IFBBR0VfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLAomIzQzOwkJCSAgICAgICBib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7ewomIzQzOwlpZiAoaW5fZGJnX21hc3RlcigpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgY2FsbGVkIGZyb20ga2dkYiBjYW5ub3Qgc2xlZXAsIGJ1dCBhbGwgb3RoZXIgQ1BVcyBzdG9wcGVkCiYjNDM7CQkgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3MKJiM0MzsJCSAqLwomIzQzOwkJX19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlCiYjNDM7CQkgKiBjb2xsYXBzZWQgdG8gaHVnZSBQTUQgZW50cmllcywgYW5kIHRoaXMgY29sbGFwc2UgY2FuIGhhcHBlbgomIzQzOwkJICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBQcmV2ZW50IHZtYWxsb2NfdG9fcGFnZSgpIGZyb20gcmFjaW5nIGJ5IGFjcXVpcmluZyBhbgomIzQzOwkJICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluCiYjNDM7CQkgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS4KJiM0MzsJCSAqLwomIzQzOwkJZ3VhcmQobW1hcF9yZWFkX2xvY2spKCZhbXA7aW5pdF9tbSk7CiYjNDM7CQlfX3Bva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICYjNDM7IGxlbiAmZ3Q7IFBBR0VfU0laRTsKQEAgLTI1NjAsOSAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbAogCUJVR19PTighYWZ0ZXJfYm9vdG1lbSk7CiAKIAlpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHsKLQkJcGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7Ci0JCWlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KQotCQkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpOwomIzQzOwkJcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTsKIAl9IGVsc2UgewogCQlwYWdlc1swXSA9IHZpcnRfdG9fcGFnZShhZGRyKTsKIAkJV0FSTl9PTighUGFnZVJlc2VydmVkKHBhZ2VzWzBdKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwppbmRleCBkOGQwNTdmNDQ0MTc4Li40MzBkMGI0NDgzNzE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2NfcGxhdGZvcm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZXRfbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVnaW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9lODIwL2FwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTQ5LDcgJiM0Mzs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7CiAJdW5zaWduZWQgaW50CWZsYWdzOwogCXVuc2lnbmVkIGludAlmb3JjZV9zcGxpdAkJOiAxLAogCQkJZm9yY2Vfc3RhdGljX3Byb3QJOiAxLAotCQkJZm9yY2VfZmx1c2hfYWxsCQk6IDE7CiYjNDM7CQkJZm9yY2VfZmx1c2hfYWxsCQk6IDEsCiYjNDM7CQkJaW5pdF9tbV9yZWFkX2xvY2tlZAk6IDE7CiAJc3RydWN0IHBhZ2UJKipwYWdlczsKIH07CiAKQEAgLTQwOSw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7CiAKLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7CiAJc3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wOwpAQCAtNDM5LDEwICYjNDM7NDQxLDMwIEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewogCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZQomIzQzOwkJICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseQomIzQzOwkJICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLgomIzQzOwkJICovCiYjNDM7CQlpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpCiYjNDM7CQkJcGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86CiYjNDM7CSAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd24KJiM0MzsJICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLgomIzQzOwkgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgJmFtcDtpbml0X21tKQomIzQzOwkJX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTczMiw3ICYjNDM7NzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7CiAJKm54IHw9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmIChwNGRfbm9uZSgqcDRkKSkKQEAgLTc0Myw3ICYjNDM7NzY1LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzFHOwogCSpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTsKIAlpZiAocHVkX25vbmUoKnB1ZCkpCkBAIC03NTQsNyAmIzQzOzc3Niw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF8yTTsKIAkqbnggfD0gcHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJaWYgKHBtZF9ub25lKCpwbWQpKQpAQCAtNzY1LDcgJiM0Mzs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfNEs7CiAJKm54IHw9IHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiB9CkBAIC0xMTIwLDExICYjNDM7MTE0MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAogc3RhdGljIGludAogX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpCiYjNDM7CQkgICBwdGVfdCAqcGJhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7Ci0Jc3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpOwotCXB0ZV90ICpwYmFzZSA9IChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhiYXNlKTsKJiM0MzsJc3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpOwogCXVuc2lnbmVkIGludCBpLCBsZXZlbDsKIAlwZ3Byb3RfdCByZWZfcHJvdDsKIAlib29sIG54LCBydzsKQEAgLTEyMjQsMTYgJiM0MzsxMjQ1LDIwIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYzsKJiM0MzsJcHRlX3QgKnB0ZTsKIAogCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwotCXB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTsKJiM0MzsJaWYgKGNwYS0mZ3Q7aW5pdF9tbV9yZWFkX2xvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF91bmxvY2soJmFtcDtpbml0X21tKTsKJiM0MzsJcHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoJmFtcDtpbml0X21tKTsKJiM0MzsJaWYgKGNwYS0mZ3Q7aW5pdF9tbV9yZWFkX2xvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSk7CiAJc3Bpbl9sb2NrKCZhbXA7Y3BhX2xvY2spOwotCWlmICghcHRkZXNjKQomIzQzOwlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRkZXNjKSkKLQkJcGFnZXRhYmxlX2ZyZWUocHRkZXNjKTsKJiM0MzsJaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZSkpCiYjNDM7CQlwdGVfZnJlZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwdGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTIxLDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlOwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAppbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgeDg2IE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AsIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYCDigJMgdGhhdCBoaXRzIHNvbWUgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIGFyb3VuZCBjcml0aWNhbCBzZWN0aW9ucywgdGFyZ2V0aW5nIHRoaW5ncyBsaWtlIGBpbml0X21tYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwb2tlX3ZtYWxsb2NfcGFnZXNgLCBhbmQgYHNwbGl0X2xhcmdlX3BhZ2VgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWFsaW5nIHdpdGggcGFnZSBhdHRyaWJ1dGUgKENQQSkgY29kZSBhbmQgdGhlIGFsdGVybmF0aXZlIHRleHQgcG9raW5nIG1lY2hhbmlzbS4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZGVzaWduZWQgdG8gZml4IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIENQQSBjb2xsYXBzZSBhbmQgdm1hbGxvYyBwYWdlIHBva2luZyBvY2N1ciBjb25jdXJyZW50bHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhdCB0aGUgaGVhcnQgb2YgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGV0Yy4gTm93LCB0aG9zZSBhcmUgdXNlZCAqZXZlcnl3aGVyZSouIFRoaW5rIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZS4uLiB0aGUgbGlzdCBnb2VzIG9uLiBBbmQgYHRleHRfcG9rZWAgaXMgdXNlZCBpbiBhbHRlcm5hdGl2ZXMsIGtwcm9iZXMsIGZ0cmFjZSwganVtcCBsYWJlbHMsIGV0Yy4gU28sIHRoaXMgcGF0Y2ggaW1wYWN0cyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlLgoKR2l2ZW4gdGhlIGltcGFjdCBvbiB0aGUgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHNvbWUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQgYSBtaW51dGUsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZGlyZWN0bHkgdG8gc2VlIHdoYXQgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBleHRlcm5hbGx5IGNhbGxhYmxlIGZyb20gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgc2V0X21lbW9yeV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2My17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzU0OmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3ODppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk1OmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyOT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgX190ZXh0X3Bva2UgTW9kaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyB0d2Vha2luZyBgX190ZXh0X3Bva2VgIHdpdGhpbiBgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgX190ZXh0X3Bva2VgLiBUaGF0JiMzOTtzIGEgbG93LWxldmVsIGZ1bmN0aW9uIOKAkyBhIHRleHQtc3BhY2Ugd3JpdGUgb3BlcmF0aW9uLiBMaWtlbHkgdXNlZCBmb3IgcGF0Y2hpbmcgb3IgbW9kaWZ5aW5nIGluc3RydWN0aW9uIHN0cmVhbXMgYXQgcnVudGltZSwgcG9zc2libHkgZm9yIGFsdGVybmF0aXZlcyBvciBzZWN1cml0eSBmZWF0dXJlcy4mIzM0OwoKTXkgbmV4dCBtb3ZlPyBEZWZpbml0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fdGV4dF9wb2tlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kICp3aHkqIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBpcyBiZWluZyBkZXBsb3llZCwgd2hhdCYjMzk7cyBjYWxsaW5nIGl0LCBhbmQgd2hhdCBhbHRlcm5hdGl2ZXMgaXQmIzM5O3MgcGF0Y2hpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBtaWNyb2NvZGUgdXBkYXRlcywga2VybmVsIGluc3RydW1lbnRhdGlvbiwgc2VjdXJpdHkgbWl0aWdhdGlvbnMgKGxpa2UgdGhvc2UgYWdhaW5zdCBTcGVjdHJlIG9yIE1lbHRkb3duKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gb2YgdGhlIG1vZGlmaWVkIGBfX3RleHRfcG9rZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqP3RleHRfcG9rZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTQ3MD1zdGF0aWMgdm9pZCBfX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyMy1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjUyNDp2b2lkIHRleHRfcG9rZV9hcHBseV9yZWxvY2F0aW9uKHU4ICpidWYsIGNvbnN0IHU4ICogY29uc3QgaW5zdHIsIHNpemVfdCBpbnN0cmxlbiwgdTggKnJlcGwsIHNpemVfdCByZXBsX2xlbilcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyNS17XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MjU4MT1zdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3MDAtICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzAxOnZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAyLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzIxLSAqL1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyMjp2b2lkICp0ZXh0X3Bva2Vfa2dkYih2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzIzLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI2LVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyNzp2b2lkICp0ZXh0X3Bva2VfY29weV9sb2NrZWQodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuLFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjcyOC1cdFx0XHQgICAgYm9vbCBjb3JlX29rKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NTktICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzYwOnZvaWQgKnRleHRfcG9rZV9jb3B5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbilcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NjEte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NzYtICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzc3OnZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgeDg2IE1lbW9yeSBQcm90ZWN0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGV5IGFsbCBsb29rIGxpa2UgZ29vZCBpbmRpY2F0b3JzIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIG1lbW9yeSBtYW5pcHVsYXRpb24uIEFuZCB0aGVuIHdlIGhhdmUgdGhlc2UgYHNldF9tZW1vcnlfKmAgZnVuY3Rpb25zOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIG5vdyBJIHNlZSBgc2V0X21lbW9yeV9yb3hgLiBXYWl0LCBoYW5nIG9uLi4uIGBzZXRfbWVtb3J5X3JveGAgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkIGluIHRoZSBwYXRjaCBjb21tZW50LCBtZW50aW9uaW5nIHNvbWV0aGluZyBhYm91dCBleGVjbWVtIFJPWCByYW5nZXMgYmVpbmcgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gaHVnZSBQTUQgZW50cmllcyBhbmQgYHNldF9tZW1vcnlfcm94KClgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGVsbGluZyBtZSB3aGVyZSB0aGUgcGFpbiBwb2ludHMgYXJlIQoKUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIFdoZXJlIGlzIHRoZSBjb2RlPyBJdCBhcHBlYXJzIHRvIGJlIGluIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhvc2UgYXJlIGNvcmUgeDg2IGZpbGVzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBwcmV0dHkgZnVuZGFtZW50YWwuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIGBNYWtlZmlsZWAgaW4gdGhvc2UgZGlyZWN0b3JpZXM6IGBhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVgIGFuZCBgYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMgb3IgcmVsZXZhbnQgZmxhZ3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY29kZSBhbmQgd2hpY2ggZmVhdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGNvZGUgaXMgc3VwcG9zZWQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWx0ZXJuYXRpdmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZT04NT1vYmoteVx0XHRcdCYjNDM7PSBwY2ktZG1hLm8gcXVpcmtzLm8ga2RlYnVnZnMub1xuYXJjaC94ODYva2VybmVsL01ha2VmaWxlOjg2Om9iai15XHRcdFx0JiM0Mzs9IGFsdGVybmF0aXZlLm8gaTgyNTMubyBod19icmVha3BvaW50Lm9cbmFyY2gveDg2L2tlcm5lbC9NYWtlZmlsZS04Ny1vYmoteVx0XHRcdCYjNDM7PSB0c2MubyB0c2NfbXNyLm8gaW9fZGVsYXkubyBydGMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeXN0ZW1zIHByb2dyYW1taW5nOgoKKipEZWNvbnN0cnVjdGluZyBgc2V0X21lbW9yeS5jYCAtIEEgTWljcm8tQW5hbHlzaXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc2V0X21lbW9yeS5jYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgZnVuY3Rpb24gaXQgbGlrZWx5IGNvbnRhaW5zIOKAkyB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc29tZXRoaW5nIGxpa2UgYG1lbXNldGAgb3IgYSBjdXN0b20gbWVtb3J5LXNldHRpbmcgcm91dGluZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlczogdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBzcGVlZCBhbmQgc2FmZXR5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gYWxsb2NhdGVkLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXM6IGJ5dGUtYnktYnl0ZSBhc3NpZ25tZW50cyB2ZXJzdXMgdXNpbmcgd29yZC1zaXplZCBvcGVyYXRpb25zICgzMi1iaXQsIDY0LWJpdCwgd2hhdGV2ZXIgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cykuIElzIGl0IGdvaW5nIHRvIGJlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBhbGlnbm1lbnQgb2YgdGhlIG1lbW9yeSByZWdpb24/IFRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIGFjaGlldmluZyBtYXhpbXVtIHRocm91Z2hwdXQsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhhdCBpbiB0aGUgY29kZS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBib3VuZGFyeSBjaGVja3MuIERvZXMgaXQgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBzaXplIGFyZ3VtZW50IGlzIHplcm8sIG9yIHdoZXJlIHRoZSBtZW1vcnkgcmVnaW9uIGlzIHBhcnRpYWxseSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZT8gQSByb2J1c3QgaW1wbGVtZW50YXRpb24gKm11c3QqIGd1YXJkIGFnYWluc3QgdGhvc2Ugc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgaG93IG90aGVyIHByb2Nlc3NlcyBtaWdodCBiZSBzaGFyaW5nIG1lbW9yeSwgYW5kIHdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYm91bmRhcnkgY2hlY2tzIHdlcmUgbm90IGVuZm9yY2VkLiBJcyBpdCBnb2luZyB0byBiZSB1c2luZyBhc3NlbWJseSwgb3IgaXMgaXQgZ29pbmcgdG8gYmUgd3JpdHRlbiBpbiBDLCBhbmQgd2hhdCB0cmFkZSBvZmZzIHdlcmUgbWFkZT8KClRoZSBuZXh0IHRoaW5nIHRoYXQgSSYjMzk7bSBjb25zaWRlcmluZyBpcyB0aGUgaW1wbGljYXRpb25zIG9uIHRocmVhZGluZy4gSXMgaXQgdGhyZWFkLXNhZmU/IERvZXMgaXQgbmVlZCB0byBiZT8gSWYgaXQgaXMgbXVsdGktdGhyZWFkZWQsIHRoZW4gdGhlcmUgY291bGQgYmUgdmFyaW91cyBjb25zaWRlcmF0aW9ucyBhcm91bmQgZW5zdXJpbmcgdGhhdCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biBzY29wZSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3Qgd3JpdGUgdG8gbG9jYXRpb25zIG91dHNpZGUgb2YgdGhlIHNjb3BlLgoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuIElzIHRoaXMgYSBsb3ctbGV2ZWwsIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHJvdXRpbmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbD8gT3IgaXMgaXQgYSBsaWJyYXJ5IGZ1bmN0aW9uIHVzZWQgYnkgYXBwbGljYXRpb24gY29kZT8gVGhlIGFuc3dlciB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBkZXNpZ24gY2hvaWNlcyBhbmQgdGhlIGxldmVsIG9mIGVycm9yLWNoZWNraW5nLiBUaGUgbW9yZSBJIGxlYXJuIGFib3V0IHRoZSBjb250ZXh0IHRoZSBiZXR0ZXIgSSBjYW4gcHJvdmlkZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZXZlcnl0aGluZyBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgb24geDg2LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBwZWN1bGlhciBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgdGV4dF9wb2tlYCBhbmQgYHNldF9tZW1vcnlfcm94YCwgYXJlIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBvZnRlbiBjcnVjaWFsIGZvciBtb2R1bGUgbWFuaXB1bGF0aW9uLCBCUEYsIGtwcm9iZXMsIGFuZCBmdHJhY2UsIHNvIGFjY2Vzc2liaWxpdHkgaXMgcGFyYW1vdW50LgoKWWVzLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIGhlYXZpbHkgdXNlZCEgVGhhdCYjMzk7cyBleGNlbGxlbnQuIEtub3dpbmcgdGhhdCwgSSBjYW4gZm9jdXMgb24gYSBzZXQgb2YgcmVsYXRlZCBmdW5jdGlvbnM6IGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgdGV4dF9wb2tlYCwgYHRleHRfcG9rZV9jb3B5YCwgYW5kIGB0ZXh0X3Bva2Vfc2V0YC4gVGhlc2UgYXJlIGFsbCBwcmltZSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4KCkhvbGQgb24sIGBzZXRfbWVtb3J5X3JveGAgc2VlbXMgcGFydGljdWxhcmx5IHByb21pc2luZy4gSXRzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgcmVsZXZhbnQgdG8gbXkgYXJlYSBvZiBmb2N1cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHNldF9tZW1vcnlfcm94YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZS4gSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGRvd24gYSBibGluZCBhbGxleSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzZXRfbWVtb3J5X3JveCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiBgc2V0X21lbW9yeV9yb3hgIHdhcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBzZXQsIGJ1dCBub3cgdGhhdCBJJiMzOTttIGxvb2tpbmcgYXQgaXQsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgbmVlZHMgYSBjbG9zZXIgbG9vay4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgaXRzIGNvbXBhbmlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBldmVuIHdvcnNlLCBtaXNyZW1lbWJlcmluZyB0aGUgbmFtZSBhbHRvZ2V0aGVyISBMZXQmIzM5O3MgdmVyaWZ5IGBzZXRfbWVtb3J5X3JvYC4gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIHF1aWNrbHkuIElmIGBzZXRfbWVtb3J5X3JvYCBpcyB0aGVyZSwgdGhlIGFic2VuY2Ugb2YgYHNldF9tZW1vcnlfcm94YCBtYWtlcyB0aGUgc2l0dWF0aW9uIG1vcmUgaW50ZXJlc3RpbmcuIElmIGBzZXRfbWVtb3J5X3JvYCBpc24mIzM5O3QgdGhlcmUsIHdlbGwgdGhlbiBJJiMzOTt2ZSBsaWtlbHkgZ290IGEgbXVjaCBtb3JlIHNlcmlvdXMgcHJvYmxlbSB3aXRoIG15IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb2RlIExvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIG1pZ2h0IGJlIGRlZmluZWQgb3IgaGFuZGxlZC4gSXQgZmVlbHMgbGlrZSBJICpzaG91bGQqIGJlIGxvb2tpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBidXQgdGhlcmUmIzM5O3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBpdCBtaWdodCBiZSBlbHNld2hlcmUsIHBlcmhhcHMgZXZlbiAqd2l0aG91dCogdGhlIGBfR1BMYCBkZXNpZ25hdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYmVpbmcgZXhwb3J0ZWQgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbHRvZ2V0aGVyPwoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgc2V0X21lbW9yeV9yb3hgIHdpdGhpbiB0aGUgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZpbGUgaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYnJhbmNoIG91dCBpZiBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNjI9aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY3OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIEZpbGUgU3RydWN0dXJlIGFuZCBFeHBlY3RlZCBPdXRwdXQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGZpbGUuLi4gYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIGRhdGEmIzM5O3Mgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIHJlc3VsdHMgSSYjMzk7bSBsb29raW5nIGZvciBhZ2dyZWdhdGVkIGFuZCBkdW1wZWQgYXQgdGhlICplbmQqIG9mIHRoZSBmaWxlPyBUaGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4sIHlvdSBrbm93LCBlc3BlY2lhbGx5IHdpdGggbG9nZ2luZyBvciBsYXJnZSBkYXRhIGR1bXBzLiBJdCBzYXZlcyBhIGxvdCBvZiBwcm9jZXNzaW5nIHRvIHN0cmVhbSB0aGUgaW1wb3J0YW50IGRhdGEgb3V0IGF0IG9uY2UuIEl0JiMzOTtzIG9mdGVuIGNsZWFuZXIgdGhhbiBpbnRlcmxlYXZpbmcgcmVzdWx0cyB0aHJvdWdob3V0LiBTbywgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGludGVyZXN0aW5nIGJpdHMgYXJlIHByb2JhYmx5IHdhaXRpbmcgYXQgdGhlIGJvdHRvbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzQ5PXZvaWQgY2xmbHVzaF9jYWNoZV9yYW5nZSh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozNTU6RVhQT1JUX1NZTUJPTF9HUEwoY2xmbHVzaF9jYWNoZV9yYW5nZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM1Ni1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM1OD12b2lkIGFyY2hfaW52YWxpZGF0ZV9wbWVtKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYxLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzYyOkVYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaW52YWxpZGF0ZV9wbWVtKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzY2PWJvb2wgY3B1X2NhY2hlX2hhc19pbnZhbGlkYXRlX21lbXJlZ2lvbih2b2lkKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzY5LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzcwOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGNwdV9jYWNoZV9oYXNfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFwmIzM0O0RFVk1FTVwmIzM0Oyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM3MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzcyPWludCBjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24ocGh5c19hZGRyX3Qgc3RhcnQsIHNpemVfdCBsZW4pXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNzgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozNzk6RVhQT1JUX1NZTUJPTF9OU19HUEwoY3B1X2NhY2hlX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcJiMzNDtERVZNRU1cJiMzNDspO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zODAtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04MTQ9cHRlX3QgKmxvb2t1cF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxNy19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChsb29rdXBfYWRkcmVzcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxOS1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTg3Mz1waHlzX2FkZHJfdCBzbG93X3ZpcnRfdG9fcGh5cyh2b2lkICpfX3ZpcnRfYWRkcilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNC19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjkwNTpFWFBPUlRfU1lNQk9MX0dQTChzbG93X3ZpcnRfdG9fcGh5cyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNi1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyMjE9aW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQzLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI0NDpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQ1LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI2Mj1pbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzYtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc3OkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjkyPWludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3diKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwNC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMDc9aW50IHNldF9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMzQ6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21jZV9ub3NwZWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzM1LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMzNz1pbnQgY2xlYXJfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDItfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQzOkVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ0LSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTI1PWludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI5OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzMT1pbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTM0LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUzNTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RlY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzYtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1Mzc9aW50IHNldF9wYWdlc191YyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU0Mi19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1NDM6RVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfdWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ0LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU5MT1pbnQgc2V0X3BhZ2VzX2FycmF5X3VjKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1OTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTk1OkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3VjKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU5Nz1pbnQgc2V0X3BhZ2VzX2FycmF5X3djKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDAtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjAxOkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3djKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwOTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MTE9aW50IHNldF9wYWdlc19hcnJheV93YihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjMzLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYzNDpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yik7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVW5kb2N1bWVudGVkIE1lbW9yeSBNYW5pcHVsYXRpb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRob3NlIGZ1bmN0aW9ucyDigJMgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBhbmQgYHNldF9tZW1vcnlfcndgIOKAkyBhcmVuJiMzOTt0IGluIHRoZSBleHBvcnRlZCBzeW1ib2wgdGFibGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwsIHByb2JhYmx5IGludGVncmFsIHRvIHRoaW5ncyBsaWtlIHRoZSBtb2R1bGUgbG9hZGVyIG9yIEJQRiBpbXBsZW1lbnRhdGlvbiwgYW5kIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGNvcmUuIFN0YXRpYyBsaW5raW5nIG1ha2VzIHNlbnNlIGluIHRoYXQgY29udGV4dC4KCldhaXQgYSBzZWNvbmQuLi4gZGlkbiYjMzk7dCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYHNldF9tZW1vcnlfcm9gIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYD8gT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gTm9wZSwgdGhhdCYjMzk7cyBub3QgaXQuIFNjcmF0Y2ggdGhhdC4KCk9rYXksIGJhY2sgdG8gYmFzaWNzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgd2hhdCB0aGF0IGhlYWRlciBmaWxlIHRlbGxzIHVzIGFib3V0IHRoZXNlIGZ1bmN0aW9ucywgaWYgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHNjb3BlLCBhdCBsZWFzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE2LVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTg6c3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVW5leHBvcnRlZCBGdW5jdGlvbiBgc2V0X21lbW9yeV9yb3hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZXRfbWVtb3J5X3JveGAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKi4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBOb3JtYWxseSwgSSYjMzk7ZCBleHBlY3Qgc29tZXRoaW5nIGxpa2UgdGhpcyB0byBiZSBkZWNsYXJlZCBpbiBhIGhlYWRlciBpZiBpdCYjMzk7cyBtZWFudCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIHNpbXBsZSBvdmVyc2lnaHQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGRlY2xhcmF0aW9uIHRoZXJlLiBQZXJoYXBzIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQsIG9yIGRlZmluZWQgaW4gYSB3YXkgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBpZiBhdCBhbGwsIGdpdmVuIGl0cyBsYWNrIG9mIG9idmlvdXMgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByb2NlZHVyZSwgbmVlZCB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIFg4NiBNZW1vcnkgTWFuYWdlbWVudCBSYWNlIENvbmRpdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFyZSBhYnNvbHV0ZWx5IG5vcm1hbCBhbmQgYWNjZXNzaWJsZS4gU2luY2UgdGhleSYjMzk7cmUgY29yZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhleSYjMzk7cmUgdW5kZW5pYWJseSByZWFjaGFibGUgYW5kIGV4cGxvaXRhYmxlIGZvciBmdXp6aW5nLiBJJiMzOTttIGdvaW5nIHRvIGFkZCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHRleHRfcG9rZWAsIGB0ZXh0X3Bva2VfY29weWAsIGFuZCBgdGV4dF9wb2tlX3NldGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgdG8gaW5jbHVkZS4gQWgsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYywgc28gaXQmIzM5O3MgYSBub24tc3RhcnRlciBmb3IgZGlyZWN0IGZ1enppbmcuIFRoZSBzYW1lIGdvZXMgZm9yIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLgoKVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGlzIHBhdGNoOiBpdCYjMzk7cyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB0ZXh0X3Bva2VgLCB3aGljaCByZWxpZXMgb24gYHZtYWxsb2NfdG9fcGFnZWAsIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzZXRfbWVtb3J5X3JveGAgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zLiBTbywgZnV6emluZyB0aGVzZSBjb25jdXJyZW50bHkgaXMgdGhlIG1vbmV5IHNob3QhCgpMZXQmIzM5O3Mgd3JpdGUgYSBjbGVhciByYXRpb25hbGU6CgpUaGUgcGF0Y2ggYWx0ZXJzIGVzc2VudGlhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHRleHRfcG9rZWAgKHVzaW5nIGB2bWFsbG9jX3RvX3BhZ2VgKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgKGNhbGxlZCBieSBgc2V0X21lbW9yeV9yb3hgIGFuZCBvdGhlcnMpLiBUaGUgc29sdXRpb24gaW52b2x2ZXMgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIHRvIHN5bmNocm9uaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBhbmQgb3RoZXIgY29tbW9uIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmU6CgoqICAgYHNldF9tZW1vcnlfcm94YAoqICAgYHNldF9tZW1vcnlfcm9gCiogICBgc2V0X21lbW9yeV9yd2AKKiAgIGBzZXRfbWVtb3J5X3hgCiogICBgc2V0X21lbW9yeV9ueGAKKiAgIGB0ZXh0X3Bva2VgCiogICBgdGV4dF9wb2tlX2NvcHlgCiogICBgdGV4dF9wb2tlX3NldGAKCk5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGNvcmUgeDg2IGNvZGUuCgpKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYHRleHRfcG9rZWAgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGV4dF9wb2tlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdGV4dF9wb2tlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRleHRfcG9rZWAsIGFuZCBpbml0aWFsbHksIGl0IHNlZW1lZCBsaWtlIHRoaXMgZnVuY3Rpb24gd2FzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGludGVybmFsLiBCdXQgdGhlbiBJIHJlYWxpemVkLCBoYW5nIG9uLCBpdCYjMzk7cyBhY3R1YWxseSB1c2VkIGJ5IGEgYnVuY2ggb2YgY3JpdGljYWwgY29yZSBjb2RlIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlLiBJIHNlZSBgdGV4dF9wb2tlYCBiZWluZyB1c2VkIGJ5IGBhcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmNgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgcHJvYmluZyBtZWNoYW5pc20sIGFuZCBhbHNvIGJ5IGBhcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmNgLCB0aGUgZnVuY3Rpb24gdHJhY2luZyBjb2RlLCBhbmQgYGFyY2gveDg2L2tlcm5lbC9qdW1wX2xhYmVsLmNgLCBkZWFsaW5nIHdpdGgganVtcCBsYWJlbHMuIFNvLCBteSBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgaGVuY2Ugbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGB0ZXh0X3Bva2VgIGlzIGRlY2xhcmVkIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQgZ2l2ZW4gaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTUtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTY6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2Vhcmx5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC0xOS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMzMtICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MzQ6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM1OmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc3luY19lYWNoX2NwdSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNjpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2tnZGIodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNzpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2NvcHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozODojZGVmaW5lIHRleHRfcG9rZV9jb3B5IHRleHRfcG9rZV9jb3B5XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzk6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5X2xvY2tlZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGJvb2wgY29yZV9vayk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDA6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQxOmV4dGVybiBpbnQgc21wX3RleHRfcG9rZV9pbnQzX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQyOmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc2luZ2xlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqZW11bGF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtNDMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDQ6ZXh0ZXJuIHZvaWQgc21wX3RleHRfcG9rZV9iYXRjaF9hZGQodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuLCBjb25zdCB2b2lkICplbXVsYXRlKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NTpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2ZpbmlzaCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC00Ni1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9NjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGV4dF9vcGNvZGVfc2l6ZSh1OCBvcGNvZGUpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTgzLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjg0OnVuaW9uIHRleHRfcG9rZV9pbnNuIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC04NS1cdHU4IHRleHRbVEVYVF9QT0tFX01BWF9PUENPREVfU0laRV07XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTkzPXZvaWQgX190ZXh0X2dlbl9pbnNuKHZvaWQgKmJ1ZiwgdTggb3Bjb2RlLCBjb25zdCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpkZXN0LCBpbnQgc2l6ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC05NC17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6OTU6XHR1bmlvbiB0ZXh0X3Bva2VfaW5zbiAqaW5zbiA9IGJ1ZjtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC05Ni1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9MTIzPXZvaWQgKnRleHRfZ2VuX2luc24odTggb3Bjb2RlLCBjb25zdCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpkZXN0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTEyNC17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTI1Olx0c3RhdGljIHVuaW9uIHRleHRfcG9rZV9pbnNuIGluc247IC8qIHBlciBpbnN0YW5jZSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTEyNi1cdF9fdGV4dF9nZW5faW5zbihcdTAwMjZpbnNuLCBvcGNvZGUsIGFkZHIsIGRlc3QsIHRleHRfb3Bjb2RlX3NpemUob3Bjb2RlKSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEzMD1leHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTMxOmV4dGVybiBfX3JvX2FmdGVyX2luaXQgc3RydWN0IG1tX3N0cnVjdCAqdGV4dF9wb2tlX21tO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjEzMjpleHRlcm4gX19yb19hZnRlcl9pbml0IHVuc2lnbmVkIGxvbmcgdGV4dF9wb2tlX21tX2FkZHI7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMQoJCQkJCQkJb3V0cHV0OiAyMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqTWFraW5nIHRoZSBDb25uZWN0aW9uKioKClJpZ2h0LCBzbyB0aGVzZSB0aGluZ3Mg4oCTIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsg4oCTIHRoZXkmIzM5O3JlIGJlaW5nIGV4cG9ydGVkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIHRoZW0ga2V5LiBUaGF0IGV4cG9ydCBpbXBsaWVzIHRoZXkmIzM5O3JlIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhY3RpbmcgYXMgYSBjcnVjaWFsIGNvbW11bmljYXRpb24gcG9pbnQuIFRoZXJlZm9yZSwgdGhleSBmdW5jdGlvbiBhcyBwcmV0dHkgc29saWQgZm9jdXMgc3ltYm9scywgdGhlIGtpbmQgb2YgZWxlbWVudHMgSSBjYW4gcmVhbGx5IHNpbmsgbXkgdGVldGggaW50by4KCkNvbnNpZGVyaW5nIHRoZWlyIHJvbGUgYXMgY29tbXVuaWNhdGlvbiB0b29scywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgcmlnaHQgbm93LiBJdCBpcyBhIG5hdHVyYWwgbmV4dCBzdGVwIGdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2UmIzM0OywKICAgICYjMzQ7dGV4dF9wb2tlX2NvcHkmIzM0OywKICAgICYjMzQ7dGV4dF9wb2tlX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGFuZCBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYykgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0ZXh0X3Bva2UgKHdoaWNoIHVzZXMgdm1hbGxvY190b19wYWdlKSBhbmQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzICh3aGljaCBpcyBjYWxsZWQgYnkgc2V0X21lbW9yeV9yb3ggYW5kIG90aGVycykuIEl0IGludHJvZHVjZXMgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHNlcmlhbGl6ZSB0aGVzZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZSwgZXRjLiBJdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHBhZ2UgdGFibGUgY29sbGFwc2UgKGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSksIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGNvbmN1cnJlbmN5L2xvY2tpbmcgZGV0ZWN0b3JzIChsaWtlIExPQ0tERVApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjFmMTQ4YmVlMTBlZmY0MjU2MzhjNWU0OThmOTM2MjdhZDIzZmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02LDYgJiM0Mzs2LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhlY21lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tnZGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hcF9sb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGV4dC1wYXRjaGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pbnNuLmgmZ3Q7CkBAIC0yNTQzLDYgJiM0MzsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiAKIHR5cGVkZWYgdm9pZCB0ZXh0X3Bva2VfZih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CiAKJiM0MztzdGF0aWMgdm9pZCBfX3Bva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLAomIzQzOwkJCQkgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzO3sKJiM0MzsJcGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CiYjNDM7CWlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzOwkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkciwKJiM0MzsJCQkgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzO3sKJiM0MzsJaWYgKGluX2RiZ19tYXN0ZXIoKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZAomIzQzOwkJICogYW55d2F5IHNvIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGxvY2tzCiYjNDM7CQkgKi8KJiM0MzsJCV9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBleGVjbWVtIFJPWCByYW5nZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG1vZHVsZXMgYW5kIGNhbiBiZQomIzQzOwkJICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW4KJiM0MzsJCSAqIGNvbmN1cnJlbnRseSB3aXRoIGEgcmFjaW5nIHNldF9tZW1vcnlfcm94KCkuCiYjNDM7CQkgKgomIzQzOwkJICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW4KJiM0MzsJCSAqIGluaXRfbW0gcmVhZCBsb2NrIHdoaWNoIHBhaXJzIHdpdGggdGhlIGluaXRfbW0gd3JpdGUgbG9jayBpbgomIzQzOwkJICogY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWd1YXJkKG1tYXBfcmVhZF9sb2NrKSgmYW1wO2luaXRfbW0pOwomIzQzOwkJX19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIHsKIAlib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkgPSBvZmZzZXRfaW5fcGFnZShhZGRyKSAmIzQzOyBsZW4gJmd0OyBQQUdFX1NJWkU7CkBAIC0yNTYwLDkgJiM0MzsyNTk1LDcgQEAgc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGwKIAlCVUdfT04oIWFmdGVyX2Jvb3RtZW0pOwogCiAJaWYgKCFjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKSB7Ci0JCXBhZ2VzWzBdID0gdm1hbGxvY190b19wYWdlKGFkZHIpOwotCQlpZiAoY3Jvc3NfcGFnZV9ib3VuZGFyeSkKLQkJCXBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgJiM0MzsgUEFHRV9TSVpFKTsKJiM0MzsJCXBva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7CiAJfSBlbHNlIHsKIAkJcGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CiAJCVdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDhkMDU3ZjQ0NDE3OC4uNDMwZDBiNDQ4MzcxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00OSw3ICYjNDM7NTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEgewogCXVuc2lnbmVkIGludAlmbGFnczsKIAl1bnNpZ25lZCBpbnQJZm9yY2Vfc3BsaXQJCTogMSwKIAkJCWZvcmNlX3N0YXRpY19wcm90CTogMSwKLQkJCWZvcmNlX2ZsdXNoX2FsbAkJOiAxOwomIzQzOwkJCWZvcmNlX2ZsdXNoX2FsbAkJOiAxLAomIzQzOwkJCWluaXRfbW1fcmVhZF9sb2NrZWQJOiAxOwogCXN0cnVjdCBwYWdlCSoqcGFnZXM7CiB9OwogCkBAIC00MDksNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQzOSwxMCAmIzQzOzQ0MSwzMCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDtwdGRlc2MtJmd0O3B0X2xpc3QpOwotCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgZWFybHkgYWxsb2MmIzM5O2QgZGlyZWN0IG1hcCBzaG91bGQgbm90IGJlIGZsYWdnZWQgUEdfdGFibGUKJiM0MzsJCSAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4mIzM5O3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHkKJiM0MzsJCSAqIGNhdXRpb3VzIGFuZCBoYW5kbGUgdGhlICFQR190YWJsZSBjYXNlIHRvby4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKQomIzQzOwkJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOgomIzQzOwkgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duCiYjNDM7CSAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS4KJiM0MzsJICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCV9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC03MzIsNyAmIzQzOzc1NCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF81MTJHOwogCSpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX1JXKTsKIAogCXA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlpZiAocDRkX25vbmUoKnA0ZCkpCkBAIC03NDMsNyAmIzQzOzc2NSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF8xRzsKIAkqbnggfD0gcDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7CiAJaWYgKHB1ZF9ub25lKCpwdWQpKQpAQCAtNzU0LDcgJiM0Mzs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfMk07CiAJKm54IHw9IHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCWlmIChwbWRfbm9uZSgqcG1kKSkKQEAgLTc2NSw3ICYjNDM7Nzg3LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzRLOwogCSpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogfQpAQCAtMTEyMCwxMSAmIzQzOzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAKIHN0YXRpYyBpbnQKIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKQomIzQzOwkJICAgcHRlX3QgKnBiYXNlKQogewogCXVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxOwotCXN0cnVjdCBwYWdlICpiYXNlID0gcHRkZXNjX3BhZ2UocHRkZXNjKTsKLQlwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7CiYjNDM7CXN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTsKIAl1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7CiAJcGdwcm90X3QgcmVmX3Byb3Q7CiAJYm9vbCBueCwgcnc7CkBAIC0xMjI0LDE2ICYjNDM7MTI0NSwyMCBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7CiYjNDM7CXB0ZV90ICpwdGU7CiAKIAlzcGluX3VubG9jaygmYW1wO2NwYV9sb2NrKTsKLQlwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKCZhbXA7aW5pdF9tbSk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwogCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKLQlpZiAoIXB0ZGVzYykKJiM0MzsJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpCi0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CWlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKQomIzQzOwkJcHRlX2ZyZWVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcHRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjEyMSw3ICYjNDM7MjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJY3BhLmN1cnBhZ2UgPSAwOwogCWNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0OwogCi0JcmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmFtcDtjcGEsIDEpOwomIzQzOwkvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovCiYjNDM7CWNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CWNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOC4uZjRjZWI5NjhhZWIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC02MjEsNiAmIzQzOzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKiwKIAkgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpCiYjNDM7REVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAomIzQzOwkgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSkKIAogc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgZm9jdXNlZCBvbiBwcm90ZWN0aW5nIHNvbWUgY3JpdGljYWwgbWVtb3J5IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgbGFyZ2UgcGFnZSBjb2xsYXBzZSBhbmQgdmlydHVhbCBtZW1vcnkgbWFwcGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbW1hcF9yZWFkX2xvY2tgIGFuZCBgbW1hcF93cml0ZV9sb2NrYCBvbiBgaW5pdF9tbWAgaXMgZGVmaW5pdGVseSBhIHJlZCBmbGFnLCBidXQgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgY29uY2VybiBhYm91dCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBmdW5jdGlvbnMgbGlrZSBgdm1hbGxvY190b19wYWdlYCAob3IsIGJ5IGluZmVyZW5jZSwgdGhpbmdzIGxpa2UgYHB0ZHVtcGAgd2hpY2ggbWlnaHQgYmUgdXNpbmcgc2ltaWxhciBtZWNoYW5pc21zKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgbWFuaXB1bGF0aW5nIHBhZ2UgdGFibGVzLCB5b3UgKmhhdmUqIHRvIHByb3RlY3QgaXQuCgpUaGUgY2hhbmdlcyB0byBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHVzaW5nIGBwYWdldGFibGVfZHRvcl9mcmVlYCBpZiBgUGFnZVRhYmxlYCBpcyBzZXQgYWxzbyBsb29rcyBnb29kLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBiZSBtb3JlIGNhcmVmdWwgYWJvdXQgaG93IHBhZ2UgdGFibGUgbWVtb3J5IGlzIHJlY2xhaW1lZCBhZnRlciBsYXJnZSBwYWdlcyBhcmUgY29sbGFwc2VkLiBTaW1pbGFybHksIHN3aXRjaGluZyB0byBgcHRlX2FsbG9jX29uZV9rZXJuZWxgIGFuZCBgcHRlX2ZyZWVfa2VybmVsYCBpbiBgc3BsaXRfbGFyZ2VfcGFnZWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhIGRlc2lyZSB0byB1c2UgdGhlIG1vcmUgbW9kZXJuIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgaXMgdGhlIGNhc2UuCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBiaXR3aXNlIEFORCBmaXggaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGAqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVztgIHNlZW1zIGxpa2UgaXQgd291bGQgaW50cm9kdWNlIGluY29ycmVjdCBiZWhhdmlvdXIsIG5vdyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGl0IHRvIGAqcncgJmFtcDs9ICEhKHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVyk7YC4gVGhpcyBpcyBiZWNhdXNlIGAqcndgIGlzIGEgYGJvb2xgIHBvaW50ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCBiaXR3aXNlIG9wZXJhdGlvbiBuZWVkcyB0byBiZSBhIGJvb2xlYW4gb3BlcmF0aW9uLiBTbywgdGhleSYjMzk7cmUgZW5zdXJpbmcgYCpyd2AgaXMgZWl0aGVyIDAgb3IgMSwgd2hpY2ggaXMgY29ycmVjdC4gSSBoYXZlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAgdG8gbWFrZSBzdXJlIEkgYW0gY29ycmVjdCwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGJ1ZyBmaXguCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCB3YWl0LCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgbW9zdCBvZiB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgbG9ja2luZywgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBhbmQgY29ycmVjdGluZyBhIGJpdHdpc2UgbG9naWMgZXJyb3IuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgYSBnb29kIHNpZ24uIFRoZSBiaXR3aXNlIGZpeCBpcyB0aGUgbW9zdCBpbnRlcmVzdGluZzsgZW5zdXJpbmcgdGhlIGNvcnJlY3QgYm9vbGVhbiByZXN1bHQgaXMgaW1wb3J0YW50LiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gYCpyd2AgaXMgaW5kZWVkIGEgYGJvb2xgIHBvaW50ZXIgaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oPTU2Nz1leHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgtNTY4LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCAqbGV2ZWwpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oOjU2OTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oLTU3MC1cdFx0XHRcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTUxNT1zaG93X2ZhdWx0X29vcHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbmFyY2gveDg2L21tL2ZhdWx0LmMtNTI4LVxuYXJjaC94ODYvbW0vZmF1bHQuYzo1Mjk6XHRcdHB0ZSA9IGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgXHUwMDI2bGV2ZWwsIFx1MDAyNm54LCBcdTAwMjZydyk7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTUzMC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTY5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03NDAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc0MTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03NDItXHRcdFx0XHQgIHVuc2lnbmVkIGludCAqbGV2ZWwsIGJvb2wgKm54LCBib29sICpydylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTc5OT1wdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6ODA0Olx0cmV0dXJuIGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgbGV2ZWwsIFx1MDAyNm54LCBcdTAwMjZydyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwNS19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04MjA9c3RhdGljIHB0ZV90ICpfbG9va3VwX2FkZHJlc3NfY3BhKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MjktXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgzMDpcdHJldHVybiBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2QsIGFkZHJlc3MsIGxldmVsLCBueCwgcncpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc5CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgcHJpbWFyaWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIGNvbmN1cnJlbmN5IGFuZCBhIHNuZWFreSBsb2dpYyBidWcuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGBueGAgYW5kIGByd2AgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZXNzZW50aWFsbHkgYm9vbGVhbiBwb2ludGVycyAoYGJvb2wgKmApLiBUaGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGAqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVztgIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgYCpyd2Agd2FzIHRydWUgKDEpIGFuZCBgX1BBR0VfUldgIGhhZCBpdHMgUlcgYml0IHNldCAoMiksIHRoZSBBTkQgb3BlcmF0aW9uIHdvdWxkIHVuZXhwZWN0ZWRseSBjbGVhciBgKnJ3YCB0byBmYWxzZSAoMCksIGV2ZW4gd2hlbiBpdCBzaG91bGQgaGF2ZSByZW1haW5lZCB0cnVlISBUaGUgcHJvcG9zZWQgZml4LCBgKnJ3ICZhbXA7PSAhIShwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlcpO2AsIGlzIHRoZSByaWdodCB3YXkgdG8gY29lcmNlIHRoZSByZXN1bHQgdG8gZWl0aGVyIDEgb3IgMCwgcmVzb2x2aW5nIHRoZSBpc3N1ZS4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIHdoaWNoIGlzIGdvb2QuIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBhcm91bmQgbG9ja2luZywgc3BlY2lmaWNhbGx5IHRvIGFkZHJlc3MgaXNzdWVzIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgY29sbGFwc2UuIFRoZXNlIGFyZSBlc3NlbnRpYWwgdG8gcHJldmVudCB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIHdoaWNoIGFyZSBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIHBlcmZlY3QgZm9yIGNhdGNoaW5nIHRob3NlIHVzZS1hZnRlci1mcmVlIGFuZCBsb2NraW5nIGlzc3VlcywgdGhleSYjMzk7cmUgdGFpbG9yLW1hZGUgZm9yIGl0LiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBwYXRjaCByZXNvbHZlcyBkYXRhIHJhY2VzIGR1cmluZyBwYWdlIHRhYmxlIGNvbGxhcHNlIGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2ssIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcywgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIGxvY2tpbmcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0IGZvci4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbmVlZCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gcGFnZSB0YWJsZSBjb2xsYXBzZSAoYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tKSwgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgY29uY3VycmVuY3kvbG9ja2luZyBkZXRlY3RvcnMgKGxpa2UgTE9DS0RFUCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCB3b3VsZCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjIwLjc5MjU4MTQ0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODY1NTcxNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInRleHRfcG9rZVwiLFxuICAgIFwidGV4dF9wb2tlX2NvcHlcIixcbiAgICBcInRleHRfcG9rZV9zZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gcGFnZSB0YWJsZSBjb2xsYXBzZSAoYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tKSwgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgY29uY3VycmVuY3kvbG9ja2luZyBkZXRlY3RvcnMgKGxpa2UgTE9DS0RFUCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCB3b3VsZCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBhbmQgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMpIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGV4dF9wb2tlICh3aGljaCB1c2VzIHZtYWxsb2NfdG9fcGFnZSkgYW5kIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyAod2hpY2ggaXMgY2FsbGVkIGJ5IHNldF9tZW1vcnlfcm94IGFuZCBvdGhlcnMpLiBJdCBpbnRyb2R1Y2VzIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBzZXJpYWxpemUgdGhlc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBCUEYsIG1vZHVsZSBsb2FkaW5nLCBrcHJvYmVzLCBmdHJhY2UsIGV0Yy4gSXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODoyMC43OTI1ODYwMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzkxNjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMWYxNDhiZWUxMGVmZjQyNTYzOGM1ZTQ5OGY5MzYyN2FkMjNmYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xcbmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xcbkBAIC02LDYgKzYsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leGVjbWVtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZ2RiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFwX2xvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGV4dC1wYXRjaGluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2luc24uaFxcdTAwM2VcXG5AQCAtMjU0Myw2ICsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIFxcbiB0eXBlZGVmIHZvaWQgdGV4dF9wb2tlX2Yodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pO1xcbiBcXG4rc3RhdGljIHZvaWQgX19wb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0IGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcXG4re1xcbitcXHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcXG4rXFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXFxuK1xcdFxcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcXG4re1xcbitcXHRpZiAoaW5fZGJnX21hc3RlcigpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxcbitcXHRcXHQgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZXhlY21lbSBST1ggcmFuZ2VzIGFyZSBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjYW4gYmVcXG4rXFx0XFx0ICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW5cXG4rXFx0XFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW5cXG4rXFx0XFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXFxuK1xcdFxcdCAqIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0XFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0Ym9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcikgKyBsZW4gXFx1MDAzZSBQQUdFX1NJWkU7XFxuQEAgLTI1NjAsOSArMjU5NSw3IEBAIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsXFxuIFxcdEJVR19PTighYWZ0ZXJfYm9vdG1lbSk7XFxuIFxcbiBcXHRpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHtcXG4tXFx0XFx0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XFxuLVxcdFxcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxcbi1cXHRcXHRcXHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTtcXG4rXFx0XFx0cG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7XFxuIFxcdFxcdFdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGQ4ZDA1N2Y0NDQxNzguLjQzMGQwYjQ0ODM3MTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lODIwL2FwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC00OSw3ICs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7XFxuIFxcdHVuc2lnbmVkIGludFxcdGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRmb3JjZV9zcGxpdFxcdFxcdDogMSxcXG4gXFx0XFx0XFx0Zm9yY2Vfc3RhdGljX3Byb3RcXHQ6IDEsXFxuLVxcdFxcdFxcdGZvcmNlX2ZsdXNoX2FsbFxcdFxcdDogMTtcXG4rXFx0XFx0XFx0Zm9yY2VfZmx1c2hfYWxsXFx0XFx0OiAxLFxcbitcXHRcXHRcXHRpbml0X21tX3JlYWRfbG9ja2VkXFx0OiAxO1xcbiBcXHRzdHJ1Y3QgcGFnZVxcdCoqcGFnZXM7XFxuIH07XFxuIFxcbkBAIC00MDksNyArNDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXFxuIFxcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbiBcXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbitzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XFxuIFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcXG5AQCAtNDM5LDEwICs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxcbitcXHRcXHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcXG4rXFx0XFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxcbitcXHRcXHRcXHRwYWdldGFibGVfZHRvcl9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XFxuK1xcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cXG4rXFx0ICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLlxcbitcXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXFx1MDAyNmluaXRfbW0pXFxuK1xcdFxcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC03MzIsNyArNzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFxuIFxcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XFxuIFxcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpO1xcbiBcXHRpZiAocDRkX25vbmUoKnA0ZCkpXFxuQEAgLTc0Myw3ICs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XFxuIFxcdCpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHJlc3MpO1xcbiBcXHRpZiAocHVkX25vbmUoKnB1ZCkpXFxuQEAgLTc1NCw3ICs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfMk07XFxuIFxcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHB1ZF9mbGFncygqcHVkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xcbiBcXHRpZiAocG1kX25vbmUoKnBtZCkpXFxuQEAgLTc2NSw3ICs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XFxuIFxcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocG1kX2ZsYWdzKCpwbWQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7XFxuIH1cXG5AQCAtMTEyMCwxMSArMTE0MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFxuIHN0YXRpYyBpbnRcXG4gX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHQgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpXFxuK1xcdFxcdCAgIHB0ZV90ICpwYmFzZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxwYWRkciwgbHBpbmMsIHJlZl9wZm4sIHBmbiwgcGZuaW5jID0gMTtcXG4tXFx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xcbi1cXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XFxuK1xcdHN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTtcXG4gXFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xcbiBcXHRwZ3Byb3RfdCByZWZfcHJvdDtcXG4gXFx0Ym9vbCBueCwgcnc7XFxuQEAgLTEyMjQsMTYgKzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4rXFx0cHRlX3QgKnB0ZTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuLVxcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcXG4rXFx0aWYgKGNwYS1cXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcXG4rXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0aWYgKGNwYS1cXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcXG4rXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmNwYV9sb2NrKTtcXG4tXFx0aWYgKCFwdGRlc2MpXFxuK1xcdGlmICghcHRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxcbi1cXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbitcXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRlKSlcXG4rXFx0XFx0cHRlX2ZyZWVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwdGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjEyMSw3ICsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0Y3BhLmN1cnBhZ2UgPSAwO1xcbiBcXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcXG4gXFxuLVxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbitcXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXFxuK1xcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuK1xcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjEuMjA3MTI5NzkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMwNDE0NDI1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwidGV4dF9wb2tlXCIsXG4gICAgXCJ0ZXh0X3Bva2VfY29weVwiLFxuICAgIFwidGV4dF9wb2tlX3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzIxZjE0OGJlZTEwZWZmNDI1NjM4YzVlNDk4ZjkzNjI3YWQyM2ZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjI4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuaW5kZXggNjI5MzZhM2JkZTE5Yi4uZjgxZDZiYzkwYTZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuQEAgLTYsNiArNiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leGVjbWVtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZ2RiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFwX2xvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90ZXh0LXBhdGNoaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG5AQCAtMjU0Myw2ICsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4gXG4gdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTtcbiBcbitzdGF0aWMgdm9pZCBfX3Bva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLFxuK1x0XHRcdFx0IGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcbit7XG4rXHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbitcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK1x0XHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsXG4rXHRcdFx0ICAgICAgIGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcbit7XG4rXHRpZiAoaW5fZGJnX21hc3RlcigpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxuK1x0XHQgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3NcbitcdFx0ICovXG4rXHRcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlXG4rXHRcdCAqIGNvbGxhcHNlZCB0byBodWdlIFBNRCBlbnRyaWVzLCBhbmQgdGhpcyBjb2xsYXBzZSBjYW4gaGFwcGVuXG4rXHRcdCAqIGNvbmN1cnJlbnRseSB3aXRoIGEgcmFjaW5nIHNldF9tZW1vcnlfcm94KCkuXG4rXHRcdCAqXG4rXHRcdCAqIFByZXZlbnQgdm1hbGxvY190b19wYWdlKCkgZnJvbSByYWNpbmcgYnkgYWNxdWlyaW5nIGFuXG4rXHRcdCAqIGluaXRfbW0gcmVhZCBsb2NrIHdoaWNoIHBhaXJzIHdpdGggdGhlIGluaXRfbW0gd3JpdGUgbG9jayBpblxuK1x0XHQgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS5cbitcdFx0ICovXG4rXHRcdGd1YXJkKG1tYXBfcmVhZF9sb2NrKShcdTAwMjZpbml0X21tKTtcbitcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICsgbGVuIFx1MDAzZSBQQUdFX1NJWkU7XG5AQCAtMjU2MCw5ICsyNTk1LDcgQEAgc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxcbiBcdEJVR19PTighYWZ0ZXJfYm9vdG1lbSk7XG4gXG4gXHRpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHtcbi1cdFx0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XG4tXHRcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxuLVx0XHRcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xuK1x0XHRwb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7XG4gXHRcdFdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkOGQwNTdmNDQ0MTc4Li40MzBkMGI0NDgzNzE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgKzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHtcbiBcdHVuc2lnbmVkIGludFx0ZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnRcdGZvcmNlX3NwbGl0XHRcdDogMSxcbiBcdFx0XHRmb3JjZV9zdGF0aWNfcHJvdFx0OiAxLFxuLVx0XHRcdGZvcmNlX2ZsdXNoX2FsbFx0XHQ6IDE7XG4rXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbitcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTQwOSw3ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuIFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbitzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XG4gXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XG5AQCAtNDM5LDEwICs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuK1x0XHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcbitcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuK1x0XHQgKi9cbitcdFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxuK1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbit7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4rXHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG4rXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4rXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuK1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbkBAIC03MzIsNyArNzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDMsNyArNzY1LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzFHO1xuIFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU0LDcgKzc3Niw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xuIFx0aWYgKHBtZF9ub25lKCpwbWQpKVxuQEAgLTc2NSw3ICs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTIwLDExICsxMTQyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFxuIHN0YXRpYyBpbnRcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcbitcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuK1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjI0LDE2ICsxMjQ1LDIwIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRlX3QgKnB0ZTtcbiBcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcbitcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbitcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbitcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjcGFfbG9jayk7XG4tXHRpZiAoIXB0ZGVzYylcbitcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZSkpXG4rXHRcdHB0ZV9mcmVlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwdGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIxMjEsNyArMjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IHRydWU7XG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjEuMjA3MTMxMTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwMjM4OTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgYGluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhgIOKAkyB0aGF0IGhpdHMgc29tZSBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBhZGRpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2AgYXJvdW5kIGNyaXRpY2FsIHNlY3Rpb25zLCB0YXJnZXRpbmcgdGhpbmdzIGxpa2UgYGluaXRfbW1gLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHBva2Vfdm1hbGxvY19wYWdlc2AsIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVhbGluZyB3aXRoIHBhZ2UgYXR0cmlidXRlIChDUEEpIGNvZGUgYW5kIHRoZSBhbHRlcm5hdGl2ZSB0ZXh0IHBva2luZyBtZWNoYW5pc20uIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGZpeCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBDUEEgY29sbGFwc2UgYW5kIHZtYWxsb2MgcGFnZSBwb2tpbmcgb2NjdXIgY29uY3VycmVudGx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhdCB0aGUgaGVhcnQgb2YgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGV0Yy4gTm93LCB0aG9zZSBhcmUgdXNlZCAqZXZlcnl3aGVyZSouIFRoaW5rIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZS4uLiB0aGUgbGlzdCBnb2VzIG9uLiBBbmQgYHRleHRfcG9rZWAgaXMgdXNlZCBpbiBhbHRlcm5hdGl2ZXMsIGtwcm9iZXMsIGZ0cmFjZSwganVtcCBsYWJlbHMsIGV0Yy4gU28sIHRoaXMgcGF0Y2ggaW1wYWN0cyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlLlxuXG5HaXZlbiB0aGUgaW1wYWN0IG9uIHRoZSBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBzb21lIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQgYSBtaW51dGUsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZGlyZWN0bHkgdG8gc2VlIHdoYXQgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBleHRlcm5hbGx5IGNhbGxhYmxlIGZyb20gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjkuNDA5NTIyNDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTA0NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2V0X21lbW9yeV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyMDg9aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIyMTppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjIte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjQ2PWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNjI6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI4NT1pbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjkyOmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI5My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDM9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYXJfbWNlX25vc3BlYyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ2OmludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM1My1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNTQ6aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjc6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc4OmludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzg4OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTU6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwNzppbnQgc2V0X21lbW9yeV9ub25nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MTM6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI1OmludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTI5PUVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTMxOmludCBzZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODoyOS40NTQwMzMwODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA3MzU0Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBfX3RleHRfcG9rZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYF9fdGV4dF9wb2tlYCB3aXRoaW4gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYF9fdGV4dF9wb2tlYC4gVGhhdCdzIGEgbG93LWxldmVsIGZ1bmN0aW9uIOKAkyBhIHRleHQtc3BhY2Ugd3JpdGUgb3BlcmF0aW9uLiBMaWtlbHkgdXNlZCBmb3IgcGF0Y2hpbmcgb3IgbW9kaWZ5aW5nIGluc3RydWN0aW9uIHN0cmVhbXMgYXQgcnVudGltZSwgcG9zc2libHkgZm9yIGFsdGVybmF0aXZlcyBvciBzZWN1cml0eSBmZWF0dXJlcy5cIlxuXG5NeSBuZXh0IG1vdmU/IERlZmluaXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3RleHRfcG9rZWAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCBhbmQgKndoeSogdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0cyB3aGVyZSB0aGlzIGlzIGJlaW5nIGRlcGxveWVkLCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIGl0J3MgcGF0Y2hpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBtaWNyb2NvZGUgdXBkYXRlcywga2VybmVsIGluc3RydW1lbnRhdGlvbiwgc2VjdXJpdHkgbWl0aWdhdGlvbnMgKGxpa2UgdGhvc2UgYWdhaW5zdCBTcGVjdHJlIG9yIE1lbHRkb3duKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gb2YgdGhlIG1vZGlmaWVkIGBfX3RleHRfcG9rZWAuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjMzLjc2MTM5MDY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg3MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKj90ZXh0X3Bva2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9NDcwPXN0YXRpYyB2b2lkIF9fYXBwbHlfcmVsb2NhdGlvbih1OCAqYnVmLCBjb25zdCB1OCAqIGNvbnN0IGluc3RyLCBzaXplX3QgaW5zdHJsZW4sIHU4ICpyZXBsLCBzaXplX3QgcmVwbF9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy01MjMtXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6NTI0OnZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyNS17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0yNTgxPXN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAwLSAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3MDE6dm9pZCAqdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbilcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAyLXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3MjEtICovXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyMjp2b2lkICp0ZXh0X3Bva2Vfa2dkYih2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjcyMy17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI2LVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3Mjc6dm9pZCAqdGV4dF9wb2tlX2NvcHlfbG9ja2VkKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbixcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI4LVxcdFxcdFxcdCAgICBib29sIGNvcmVfb2spXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzU5LSAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3NjA6dm9pZCAqdGV4dF9wb2tlX2NvcHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NjEte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjc3Ni0gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzc3OnZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjc3OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjMzLjgwNTI2NDQwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzI0MzAxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgTWVtb3J5IFByb3RlY3Rpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGV5IGFsbCBsb29rIGxpa2UgZ29vZCBpbmRpY2F0b3JzIG9mIHdoYXQncyBnb2luZyBvbiBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmlwdWxhdGlvbi4gQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgc2V0X21lbW9yeV8qYCBmdW5jdGlvbnM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBhbmQgbm93IEkgc2VlIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQsIGhhbmcgb24uLi4gYHNldF9tZW1vcnlfcm94YCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnQsIG1lbnRpb25pbmcgc29tZXRoaW5nIGFib3V0IGV4ZWNtZW0gUk9YIHJhbmdlcyBiZWluZyBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byBodWdlIFBNRCBlbnRyaWVzIGFuZCBgc2V0X21lbW9yeV9yb3goKWAuIFRoYXQncyBpbXBvcnRhbnQ7IGl0J3MgcHJhY3RpY2FsbHkgdGVsbGluZyBtZSB3aGVyZSB0aGUgcGFpbiBwb2ludHMgYXJlIVxuXG5SaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gV2hlcmUgaXMgdGhlIGNvZGU/IEl0IGFwcGVhcnMgdG8gYmUgaW4gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaG9zZSBhcmUgY29yZSB4ODYgZmlsZXMsIHNvIGl0J3MgcHJvYmFibHkgcHJldHR5IGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgTWFrZWZpbGVgIGluIHRob3NlIGRpcmVjdG9yaWVzOiBgYXJjaC94ODYva2VybmVsL01ha2VmaWxlYCBhbmQgYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGZsYWdzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGlzIGNvZGUgYW5kIHdoaWNoIGZlYXR1cmVzIG1pZ2h0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIHN1cHBvc2VkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjM5LjYzNzY5Nzk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwNTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbHRlcm5hdGl2ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL01ha2VmaWxlPTg1PW9iai15XFx0XFx0XFx0Kz0gcGNpLWRtYS5vIHF1aXJrcy5vIGtkZWJ1Z2ZzLm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU6ODY6b2JqLXlcXHRcXHRcXHQrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8gaHdfYnJlYWtwb2ludC5vXFxuYXJjaC94ODYva2VybmVsL01ha2VmaWxlLTg3LW9iai15XFx0XFx0XFx0Kz0gdHNjLm8gdHNjX21zci5vIGlvX2RlbGF5Lm8gcnRjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MzkuNjgxNjA3ODgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5Mzg0MDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c3RlbXMgcHJvZ3JhbW1pbmc6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHNldF9tZW1vcnkuY2AgLSBBIE1pY3JvLUFuYWx5c2lzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBzZXRfbWVtb3J5LmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBmdW5jdGlvbiBpdCBsaWtlbHkgY29udGFpbnMg4oCTIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21ldGhpbmcgbGlrZSBgbWVtc2V0YCBvciBhIGN1c3RvbSBtZW1vcnktc2V0dGluZyByb3V0aW5lLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXM6IHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gc3BlZWQgYW5kIHNhZmV0eSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBtZW1vcnkgdGhhdCdzIGJlZW4gYWxsb2NhdGVkLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzOiBieXRlLWJ5LWJ5dGUgYXNzaWdubWVudHMgdmVyc3VzIHVzaW5nIHdvcmQtc2l6ZWQgb3BlcmF0aW9ucyAoMzItYml0LCA2NC1iaXQsIHdoYXRldmVyIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMpLiBJcyBpdCBnb2luZyB0byBiZSBvcHRpbWl6ZWQgZm9yIGEgc3BlY2lmaWMgYWxpZ25tZW50IG9mIHRoZSBtZW1vcnkgcmVnaW9uPyBUaGF0J3MgY3JpdGljYWwgZm9yIGFjaGlldmluZyBtYXhpbXVtIHRocm91Z2hwdXQsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB0aGF0IGluIHRoZSBjb2RlLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBib3VuZGFyeSBjaGVja3MuIERvZXMgaXQgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBzaXplIGFyZ3VtZW50IGlzIHplcm8sIG9yIHdoZXJlIHRoZSBtZW1vcnkgcmVnaW9uIGlzIHBhcnRpYWxseSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZT8gQSByb2J1c3QgaW1wbGVtZW50YXRpb24gKm11c3QqIGd1YXJkIGFnYWluc3QgdGhvc2Ugc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgaG93IG90aGVyIHByb2Nlc3NlcyBtaWdodCBiZSBzaGFyaW5nIG1lbW9yeSwgYW5kIHdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYm91bmRhcnkgY2hlY2tzIHdlcmUgbm90IGVuZm9yY2VkLiBJcyBpdCBnb2luZyB0byBiZSB1c2luZyBhc3NlbWJseSwgb3IgaXMgaXQgZ29pbmcgdG8gYmUgd3JpdHRlbiBpbiBDLCBhbmQgd2hhdCB0cmFkZSBvZmZzIHdlcmUgbWFkZT9cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBJJ20gY29uc2lkZXJpbmcgaXMgdGhlIGltcGxpY2F0aW9ucyBvbiB0aHJlYWRpbmcuIElzIGl0IHRocmVhZC1zYWZlPyBEb2VzIGl0IG5lZWQgdG8gYmU/IElmIGl0IGlzIG11bHRpLXRocmVhZGVkLCB0aGVuIHRoZXJlIGNvdWxkIGJlIHZhcmlvdXMgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGVuc3VyaW5nIHRoYXQgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gc2NvcGUgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNuJ3Qgd3JpdGUgdG8gbG9jYXRpb25zIG91dHNpZGUgb2YgdGhlIHNjb3BlLlxuXG5JJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlLiBJcyB0aGlzIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCByb3V0aW5lIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IE9yIGlzIGl0IGEgbGlicmFyeSBmdW5jdGlvbiB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGU/IFRoZSBhbnN3ZXIgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHRoZSBsZXZlbCBvZiBlcnJvci1jaGVja2luZy4gVGhlIG1vcmUgSSBsZWFybiBhYm91dCB0aGUgY29udGV4dCB0aGUgYmV0dGVyIEkgY2FuIHByb3ZpZGUgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjQ0LjE3NTQ1MDc1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTY1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjQ0LjIxODExNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NTQ2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudGx5IGNvbXBpbGVkIG9uIHg4Niwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgcGVjdWxpYXIgY29uZmlndXJhdGlvbnMgaGVyZS4gVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBrZXkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHRleHRfcG9rZWAgYW5kIGBzZXRfbWVtb3J5X3JveGAsIGFyZSBhY2Nlc3NpYmxlIGFuZCBleHBvcnRlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbW9kdWxlIG1hbmlwdWxhdGlvbiwgQlBGLCBrcHJvYmVzLCBhbmQgZnRyYWNlLCBzbyBhY2Nlc3NpYmlsaXR5IGlzIHBhcmFtb3VudC5cblxuWWVzLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIGhlYXZpbHkgdXNlZCEgVGhhdCdzIGV4Y2VsbGVudC4gS25vd2luZyB0aGF0LCBJIGNhbiBmb2N1cyBvbiBhIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9uczogYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGVzZSBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5Ib2xkIG9uLCBgc2V0X21lbW9yeV9yb3hgIHNlZW1zIHBhcnRpY3VsYXJseSBwcm9taXNpbmcuIEl0cyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZm9jdXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBzZXRfbWVtb3J5X3JveGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2UuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGRvd24gYSBibGluZCBhbGxleSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTczNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODo0OS43MDM1ODY5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTQ4MDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODo0OS43NDY3NDIyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUzNzE5NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIGBzZXRfbWVtb3J5X3JveGAgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHNldCwgYnV0IG5vdyB0aGF0IEknbSBsb29raW5nIGF0IGl0LCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgZXhwb3J0ZWQuIFRoYXQncyB1bnVzdWFsLCBhbmQgZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nLCBsZXQncyBqdXN0IGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IG9mIGl0cyBjb21wYW5pb24gZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBldmVuIHdvcnNlLCBtaXNyZW1lbWJlcmluZyB0aGUgbmFtZSBhbHRvZ2V0aGVyISBMZXQncyB2ZXJpZnkgYHNldF9tZW1vcnlfcm9gLiBBIHF1aWNrIGNoZWNrIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgcXVpY2tseS4gSWYgYHNldF9tZW1vcnlfcm9gIGlzIHRoZXJlLCB0aGUgYWJzZW5jZSBvZiBgc2V0X21lbW9yeV9yb3hgIG1ha2VzIHRoZSBzaXR1YXRpb24gbW9yZSBpbnRlcmVzdGluZy4gSWYgYHNldF9tZW1vcnlfcm9gIGlzbid0IHRoZXJlLCB3ZWxsIHRoZW4gSSd2ZSBsaWtlbHkgZ290IGEgbXVjaCBtb3JlIHNlcmlvdXMgcHJvYmxlbSB3aXRoIG15IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjUzLjcwMDQ2NTkxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzc3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6NTMuNzQ0NzA5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA2NzIxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvZGUgTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIG1pZ2h0IGJlIGRlZmluZWQgb3IgaGFuZGxlZC4gSXQgZmVlbHMgbGlrZSBJICpzaG91bGQqIGJlIGxvb2tpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBidXQgdGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGl0IG1pZ2h0IGJlIGVsc2V3aGVyZSwgcGVyaGFwcyBldmVuICp3aXRob3V0KiB0aGUgYF9HUExgIGRlc2lnbmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBiZWluZyBleHBvcnRlZCBpbiBhIGRpZmZlcmVudCBmaWxlIGFsdG9nZXRoZXI/XG5cbkxldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBzZXRfbWVtb3J5X3JveGAgd2l0aGluIHRoZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZmlsZSBpdHNlbGYuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEZyb20gdGhlcmUsIEknbGwgYnJhbmNoIG91dCBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6NTcuNTUxNDMzNzY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk2NzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Mj1pbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjc6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjU3LjU5NDQwNTMyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMyMDUwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgRmlsZSBTdHJ1Y3R1cmUgYW5kIEV4cGVjdGVkIE91dHB1dCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGZpbGUuLi4gYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIGRhdGEncyBzdHJ1Y3R1cmVkLiBTcGVjaWZpY2FsbHksIGFyZSB0aGUgcmVzdWx0cyBJJ20gbG9va2luZyBmb3IgYWdncmVnYXRlZCBhbmQgZHVtcGVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgZmlsZT8gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIHlvdSBrbm93LCBlc3BlY2lhbGx5IHdpdGggbG9nZ2luZyBvciBsYXJnZSBkYXRhIGR1bXBzLiBJdCBzYXZlcyBhIGxvdCBvZiBwcm9jZXNzaW5nIHRvIHN0cmVhbSB0aGUgaW1wb3J0YW50IGRhdGEgb3V0IGF0IG9uY2UuIEl0J3Mgb2Z0ZW4gY2xlYW5lciB0aGFuIGludGVybGVhdmluZyByZXN1bHRzIHRocm91Z2hvdXQuIFNvLCBJJ20gYmV0dGluZyB0aGF0IHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZSBwcm9iYWJseSB3YWl0aW5nIGF0IHRoZSBib3R0b20uIEknbGwgbmVlZCB0byBjb25maXJtLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTowMi4yMjY0NTg3NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzE1MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM0OT12b2lkIGNsZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNTQtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzU1OkVYUE9SVF9TWU1CT0xfR1BMKGNsZmx1c2hfY2FjaGVfcmFuZ2UpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzU2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNTg9dm9pZCBhcmNoX2ludmFsaWRhdGVfcG1lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYxLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM2MjpFWFBPUlRfU1lNQk9MX0dQTChhcmNoX2ludmFsaWRhdGVfcG1lbSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNjMtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM2Nj1ib29sIGNwdV9jYWNoZV9oYXNfaW52YWxpZGF0ZV9tZW1yZWdpb24odm9pZClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzY5LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM3MDpFWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaGFzX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcXFwiREVWTUVNXFxcIik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNzEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNzI9aW50IGNwdV9jYWNoZV9pbnZhbGlkYXRlX21lbXJlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwgc2l6ZV90IGxlbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzc4LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM3OTpFWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFxcXCJERVZNRU1cXFwiKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM4MC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9ODE0PXB0ZV90ICpsb29rdXBfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxNy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwobG9va3VwX2FkZHJlc3MpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtODE5LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04NzM9cGh5c19hZGRyX3Qgc2xvd192aXJ0X3RvX3BoeXModm9pZCAqX192aXJ0X2FkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo5MDU6RVhQT1JUX1NZTUJPTF9HUEwoc2xvd192aXJ0X3RvX3BoeXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtOTA2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjIxPWludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQzLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNDQ6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3VjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNjI9aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzYtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI3NzpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfd2MpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3OC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI5Mj1pbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzAzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzA0LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzA3PWludCBzZXRfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tY2Vfbm9zcGVjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzc9aW50IGNsZWFyX21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDItfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MzpFWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDQtI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi9cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyNT1pbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjgtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyOTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzMT1pbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzQtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUzNTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RlY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTM2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzNz1pbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NDItfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0MzpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc191Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ0LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTkxPWludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTk0LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1OTU6RVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfYXJyYXlfdWMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1OTc9aW50IHNldF9wYWdlc19hcnJheV93YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDAtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwMTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjAyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDgtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwOTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjEwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYxMT1pbnQgc2V0X3BhZ2VzX2FycmF5X3diKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzMy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjM0OkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3diKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjAyLjI3MDE3OTA5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU5NzMyMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVW5kb2N1bWVudGVkIE1lbW9yeSBNYW5pcHVsYXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaG9zZSBmdW5jdGlvbnMg4oCTIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3J3YCDigJMgYXJlbid0IGluIHRoZSBleHBvcnRlZCBzeW1ib2wgdGFibGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSdyZSBsaWtlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgcHJvYmFibHkgaW50ZWdyYWwgdG8gdGhpbmdzIGxpa2UgdGhlIG1vZHVsZSBsb2FkZXIgb3IgQlBGIGltcGxlbWVudGF0aW9uLCBhbmQgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgY29yZS4gU3RhdGljIGxpbmtpbmcgbWFrZXMgc2Vuc2UgaW4gdGhhdCBjb250ZXh0LlxuXG5XYWl0IGEgc2Vjb25kLi4uIGRpZG4ndCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYHNldF9tZW1vcnlfcm9gIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYD8gT2theSwgbGV0J3MgZG91YmxlLWNoZWNrLiBOb3BlLCB0aGF0J3Mgbm90IGl0LiBTY3JhdGNoIHRoYXQuXG5cbk9rYXksIGJhY2sgdG8gYmFzaWNzLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgYW5kIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhlc2UgZnVuY3Rpb25zLCBpZiBhbnl0aGluZy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIGludGVuZGVkIHVzYWdlIGFuZCBzY29wZSwgYXQgbGVhc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjA2LjYyOTkxMzkwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTg3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeV9yb3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9MTQ9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE2LVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE3OiNpZm5kZWYgc2V0X21lbW9yeV9yb3hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjA2LjY3MzU3Njc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNTk0NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQgRnVuY3Rpb24gYHNldF9tZW1vcnlfcm94YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNldF9tZW1vcnlfcm94YCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuICBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBhY3R1YWxseSAqZXhwb3J0ZWQqLiBUaGF0J3MgYSBiaXQgdW51c3VhbC4gTm9ybWFsbHksIEknZCBleHBlY3Qgc29tZXRoaW5nIGxpa2UgdGhpcyB0byBiZSBkZWNsYXJlZCBpbiBhIGhlYWRlciBpZiBpdCdzIG1lYW50IGZvciBicm9hZGVyIHVzZSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJ3QgYSBzaW1wbGUgb3ZlcnNpZ2h0LiBJJ2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgZGVjbGFyYXRpb24gdGhlcmUuIFBlcmhhcHMgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBvciBkZWZpbmVkIGluIGEgd2F5IHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBpZiBhdCBhbGwsIGdpdmVuIGl0cyBsYWNrIG9mIG9idmlvdXMgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByb2NlZHVyZSwgbmVlZCB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aHkuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MTAuNzk0MTczOTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzMjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MTAuODM4MTEwMDI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTE4NTU0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgWDg2IE1lbW9yeSBNYW5hZ2VtZW50IFJhY2UgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFyZSBhYnNvbHV0ZWx5IG5vcm1hbCBhbmQgYWNjZXNzaWJsZS4gU2luY2UgdGhleSdyZSBjb3JlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGV5J3JlIHVuZGVuaWFibHkgcmVhY2hhYmxlIGFuZCBleHBsb2l0YWJsZSBmb3IgZnV6emluZy4gSSdtIGdvaW5nIHRvIGFkZCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHRleHRfcG9rZWAsIGB0ZXh0X3Bva2VfY29weWAsIGFuZCBgdGV4dF9wb2tlX3NldGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgdG8gaW5jbHVkZS4gQWgsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYywgc28gaXQncyBhIG5vbi1zdGFydGVyIGZvciBkaXJlY3QgZnV6emluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhpcyBwYXRjaDogaXQncyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB0ZXh0X3Bva2VgLCB3aGljaCByZWxpZXMgb24gYHZtYWxsb2NfdG9fcGFnZWAsIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzZXRfbWVtb3J5X3JveGAgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zLiBTbywgZnV6emluZyB0aGVzZSBjb25jdXJyZW50bHkgaXMgdGhlIG1vbmV5IHNob3QhXG5cbkxldCdzIHdyaXRlIGEgY2xlYXIgcmF0aW9uYWxlOlxuXG5UaGUgcGF0Y2ggYWx0ZXJzIGVzc2VudGlhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHRleHRfcG9rZWAgKHVzaW5nIGB2bWFsbG9jX3RvX3BhZ2VgKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgKGNhbGxlZCBieSBgc2V0X21lbW9yeV9yb3hgIGFuZCBvdGhlcnMpLiBUaGUgc29sdXRpb24gaW52b2x2ZXMgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIHRvIHN5bmNocm9uaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBhbmQgb3RoZXIgY29tbW9uIGVudHJ5IHBvaW50cy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgYEZvY3VzU3ltYm9sc2AgYXJlOlxuXG4qICAgYHNldF9tZW1vcnlfcm94YFxuKiAgIGBzZXRfbWVtb3J5X3JvYFxuKiAgIGBzZXRfbWVtb3J5X3J3YFxuKiAgIGBzZXRfbWVtb3J5X3hgXG4qICAgYHNldF9tZW1vcnlfbnhgXG4qICAgYHRleHRfcG9rZWBcbiogICBgdGV4dF9wb2tlX2NvcHlgXG4qICAgYHRleHRfcG9rZV9zZXRgXG5cbk5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGNvcmUgeDg2IGNvZGUuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgdGV4dF9wb2tlYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MjQuOTU2NjcxMDQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM4MjYxMDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRleHRfcG9rZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MjUuMjYwNTI2ODI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzc4NDQ3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHRleHRfcG9rZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGV4dF9wb2tlYCwgYW5kIGluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgdGhpcyBmdW5jdGlvbiB3YXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBiZSBpbnRlcm5hbC4gQnV0IHRoZW4gSSByZWFsaXplZCwgaGFuZyBvbiwgaXQncyBhY3R1YWxseSB1c2VkIGJ5IGEgYnVuY2ggb2YgY3JpdGljYWwgY29yZSBjb2RlIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlLiBJIHNlZSBgdGV4dF9wb2tlYCBiZWluZyB1c2VkIGJ5IGBhcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmNgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwncyBwcm9iaW5nIG1lY2hhbmlzbSwgYW5kIGFsc28gYnkgYGFyY2gveDg2L2tlcm5lbC9mdHJhY2UuY2AsIHRoZSBmdW5jdGlvbiB0cmFjaW5nIGNvZGUsIGFuZCBgYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuY2AsIGRlYWxpbmcgd2l0aCBqdW1wIGxhYmVscy4gU28sIG15IGh1bmNoIGlzIHRoYXQgaXQgbWlnaHQgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBoZW5jZSBub3QgZXhwbGljaXRseSBleHBvcnRlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYHRleHRfcG9rZWAgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaGAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgZ2l2ZW4gaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjI5LjI5ODM3NDUxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4ODgwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGV4dF9wb2tlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTUtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjE2OmV4dGVybiB2b2lkIHRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC0xNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTktXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMzMtICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM0OmV4dGVybiB2b2lkICp0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MzU6ZXh0ZXJuIHZvaWQgc21wX3RleHRfcG9rZV9zeW5jX2VhY2hfY3B1KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNjpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2tnZGIodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzc6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM4OiNkZWZpbmUgdGV4dF9wb2tlX2NvcHkgdGV4dF9wb2tlX2NvcHlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzk6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5X2xvY2tlZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGJvb2wgY29yZV9vayk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQwOmV4dGVybiB2b2lkICp0ZXh0X3Bva2Vfc2V0KHZvaWQgKmFkZHIsIGludCBjLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDE6ZXh0ZXJuIGludCBzbXBfdGV4dF9wb2tlX2ludDNfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQyOmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc2luZ2xlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqZW11bGF0ZSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTQzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NDpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2FkZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmVtdWxhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NTpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2ZpbmlzaCh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtNDYtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9NjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGV4dF9vcGNvZGVfc2l6ZSh1OCBvcGNvZGUpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtODMtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjg0OnVuaW9uIHRleHRfcG9rZV9pbnNuIHtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtODUtXFx0dTggdGV4dFtURVhUX1BPS0VfTUFYX09QQ09ERV9TSVpFXTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaD05Mz12b2lkIF9fdGV4dF9nZW5faW5zbih2b2lkICpidWYsIHU4IG9wY29kZSwgY29uc3Qgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqZGVzdCwgaW50IHNpemUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTk0LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6OTU6XFx0dW5pb24gdGV4dF9wb2tlX2luc24gKmluc24gPSBidWY7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTk2LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEyMz12b2lkICp0ZXh0X2dlbl9pbnNuKHU4IG9wY29kZSwgY29uc3Qgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqZGVzdClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTI0LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTI1OlxcdHN0YXRpYyB1bmlvbiB0ZXh0X3Bva2VfaW5zbiBpbnNuOyAvKiBwZXIgaW5zdGFuY2UgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTI2LVxcdF9fdGV4dF9nZW5faW5zbihcXHUwMDI2aW5zbiwgb3Bjb2RlLCBhZGRyLCBkZXN0LCB0ZXh0X29wY29kZV9zaXplKG9wY29kZSkpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEzMD1leHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjEzMTpleHRlcm4gX19yb19hZnRlcl9pbml0IHN0cnVjdCBtbV9zdHJ1Y3QgKnRleHRfcG9rZV9tbTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTMyOmV4dGVybiBfX3JvX2FmdGVyX2luaXQgdW5zaWduZWQgbG9uZyB0ZXh0X3Bva2VfbW1fYWRkcjtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOToyOS4zNDIyNjcxNTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjI3MzE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk1ha2luZyB0aGUgQ29ubmVjdGlvbioqXG5cblJpZ2h0LCBzbyB0aGVzZSB0aGluZ3Mg4oCTIHRoZSBcInRob3VnaHRzXCIg4oCTIHRoZXkncmUgYmVpbmcgZXhwb3J0ZWQgaW4gdGhlIGhlYWRlciwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhlbSBrZXkuIFRoYXQgZXhwb3J0IGltcGxpZXMgdGhleSdyZSBiZWluZyBhY2Nlc3NlZCBhbmQgdXRpbGl6ZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgYWN0aW5nIGFzIGEgY3J1Y2lhbCBjb21tdW5pY2F0aW9uIHBvaW50LiBUaGVyZWZvcmUsIHRoZXkgZnVuY3Rpb24gYXMgcHJldHR5IHNvbGlkIGZvY3VzIHN5bWJvbHMsIHRoZSBraW5kIG9mIGVsZW1lbnRzIEkgY2FuIHJlYWxseSBzaW5rIG15IHRlZXRoIGludG8uXG5cbkNvbnNpZGVyaW5nIHRoZWlyIHJvbGUgYXMgY29tbXVuaWNhdGlvbiB0b29scywgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCByaWdodCBub3cuIEl0IGlzIGEgbmF0dXJhbCBuZXh0IHN0ZXAgZ2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwMSwiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTozNC4yNDg1NDM1ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInRleHRfcG9rZVwiLFxuICAgIFwidGV4dF9wb2tlX2NvcHlcIixcbiAgICBcInRleHRfcG9rZV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGFuZCBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYykgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0ZXh0X3Bva2UgKHdoaWNoIHVzZXMgdm1hbGxvY190b19wYWdlKSBhbmQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzICh3aGljaCBpcyBjYWxsZWQgYnkgc2V0X21lbW9yeV9yb3ggYW5kIG90aGVycykuIEl0IGludHJvZHVjZXMgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHNlcmlhbGl6ZSB0aGVzZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZSwgZXRjLiBJdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwidGV4dF9wb2tlXCIsXG4gICAgXCJ0ZXh0X3Bva2VfY29weVwiLFxuICAgIFwidGV4dF9wb2tlX3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MzQuMjQ4NTc0NTc0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQwOTU2NjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjM0LjI0ODk5NTkxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQwOTE0MTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjFmMTQ4YmVlMTBlZmY0MjU2MzhjNWU0OThmOTM2MjdhZDIzZmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG5pbmRleCA2MjkzNmEzYmRlMTliLi5mODFkNmJjOTBhNmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG5AQCAtNiw2ICs2LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4ZWNtZW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tnZGIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pbnNuLmhcdTAwM2VcbkBAIC0yNTQzLDYgKzI1NDYsMzggQEAgc3RhdGljIHZvaWQgdGV4dF9wb2tlX21lbXNldCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiBcbiB0eXBlZGVmIHZvaWQgdGV4dF9wb2tlX2Yodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pO1xuIFxuK3N0YXRpYyB2b2lkIF9fcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsXG4rXHRcdFx0XHQgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK3tcbitcdHBhZ2VzWzBdID0gdm1hbGxvY190b19wYWdlKGFkZHIpO1xuK1x0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4rXHRcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcbitcdFx0XHQgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK3tcbitcdGlmIChpbl9kYmdfbWFzdGVyKCkpIHtcbitcdFx0LypcbitcdFx0ICogSWYgY2FsbGVkIGZyb20ga2dkYiBjYW5ub3Qgc2xlZXAsIGJ1dCBhbGwgb3RoZXIgQ1BVcyBzdG9wcGVkXG4rXHRcdCAqIGFueXdheSBzbyBzYWZlIHRvIHByb2NlZWQgd2l0aG91dCBsb2Nrc1xuK1x0XHQgKi9cbitcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuK1x0fSBlbHNlIHtcbitcdFx0LypcbitcdFx0ICogZXhlY21lbSBST1ggcmFuZ2VzIGFyZSBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjYW4gYmVcbitcdFx0ICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW5cbitcdFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cbitcdFx0ICpcbitcdFx0ICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW5cbitcdFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXG4rXHRcdCAqIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcygpLlxuK1x0XHQgKi9cbitcdFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFx1MDAyNmluaXRfbW0pO1xuK1x0XHRfX3Bva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0Ym9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcikgKyBsZW4gXHUwMDNlIFBBR0VfU0laRTtcbkBAIC0yNTYwLDkgKzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbFxuIFx0QlVHX09OKCFhZnRlcl9ib290bWVtKTtcbiBcbiBcdGlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkge1xuLVx0XHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbi1cdFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4tXHRcdFx0cGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7XG4rXHRcdHBva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwYWdlc1swXSA9IHZpcnRfdG9fcGFnZShhZGRyKTtcbiBcdFx0V0FSTl9PTighUGFnZVJlc2VydmVkKHBhZ2VzWzBdKSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQ4ZDA1N2Y0NDQxNzguLjQzMGQwYjQ0ODM3MTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDksNyArNTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xuIFx0dW5zaWduZWQgaW50XHRmbGFncztcbiBcdHVuc2lnbmVkIGludFx0Zm9yY2Vfc3BsaXRcdFx0OiAxLFxuIFx0XHRcdGZvcmNlX3N0YXRpY19wcm90XHQ6IDEsXG4tXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMTtcbitcdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxLFxuK1x0XHRcdGluaXRfbW1fcmVhZF9sb2NrZWRcdDogMTtcbiBcdHN0cnVjdCBwYWdlXHQqKnBhZ2VzO1xuIH07XG4gXG5AQCAtNDA5LDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00MzksMTAgKzQ0MSwzMCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdFx0LypcbitcdFx0ICogT25seSBlYXJseSBhbGxvYydkIGRpcmVjdCBtYXAgc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIFBHX3RhYmxlXG4rXHRcdCAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4ndCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuK1x0XHQgKiBjYXV0aW91cyBhbmQgaGFuZGxlIHRoZSAhUEdfdGFibGUgY2FzZSB0b28uXG4rXHRcdCAqL1xuK1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4rXHRcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3tcbitcdC8qXG4rXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcbitcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbitcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbitcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTczMiw3ICs3NTQsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcbiBcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpO1xuIFx0aWYgKHA0ZF9ub25lKCpwNGQpKVxuQEAgLTc0Myw3ICs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XG4gXHQqbnggfD0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTtcbiBcdGlmIChwdWRfbm9uZSgqcHVkKSlcbkBAIC03NTQsNyArNzc2LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzJNO1xuIFx0Km54IHw9IHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XG4gXHRpZiAocG1kX25vbmUoKnBtZCkpXG5AQCAtNzY1LDcgKzc4Nyw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcbiBcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7XG4gfVxuQEAgLTExMjAsMTEgKzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gc3RhdGljIGludFxuIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKVxuK1x0XHQgICBwdGVfdCAqcGJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7XG4tXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XG4tXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XG4rXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHZpcnRfdG9fcGFnZShwYmFzZSk7XG4gXHR1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7XG4gXHRwZ3Byb3RfdCByZWZfcHJvdDtcbiBcdGJvb2wgbngsIHJ3O1xuQEAgLTEyMjQsMTYgKzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4rXHRwdGVfdCAqcHRlO1xuIFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuK1x0cHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSk7XG4rXHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4rXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuK1x0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpXG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRlKSlcbitcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEyMSw3ICsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cbitcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgKzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbitcdCAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTozNC4yNDg5OTY1NDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4NTY1ODc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNgIGFuZCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGZvY3VzZWQgb24gcHJvdGVjdGluZyBzb21lIGNyaXRpY2FsIG1lbW9yeSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxhcmdlIHBhZ2UgY29sbGFwc2UgYW5kIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYnV0IGEgZ29vZCBvbmUuIEl0IGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gZnVuY3Rpb25zIGxpa2UgYHZtYWxsb2NfdG9fcGFnZWAgKG9yLCBieSBpbmZlcmVuY2UsIHRoaW5ncyBsaWtlIGBwdGR1bXBgIHdoaWNoIG1pZ2h0IGJlIHVzaW5nIHNpbWlsYXIgbWVjaGFuaXNtcykgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG1hbmlwdWxhdGluZyBwYWdlIHRhYmxlcywgeW91ICpoYXZlKiB0byBwcm90ZWN0IGl0LlxuXG5UaGUgY2hhbmdlcyB0byBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHVzaW5nIGBwYWdldGFibGVfZHRvcl9mcmVlYCBpZiBgUGFnZVRhYmxlYCBpcyBzZXQgYWxzbyBsb29rcyBnb29kLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGJlIG1vcmUgY2FyZWZ1bCBhYm91dCBob3cgcGFnZSB0YWJsZSBtZW1vcnkgaXMgcmVjbGFpbWVkIGFmdGVyIGxhcmdlIHBhZ2VzIGFyZSBjb2xsYXBzZWQuIFNpbWlsYXJseSwgc3dpdGNoaW5nIHRvIGBwdGVfYWxsb2Nfb25lX2tlcm5lbGAgYW5kIGBwdGVfZnJlZV9rZXJuZWxgIGluIGBzcGxpdF9sYXJnZV9wYWdlYCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZGVzaXJlIHRvIHVzZSB0aGUgbW9yZSBtb2Rlcm4gaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0IGlzIHRoZSBjYXNlLlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBiaXR3aXNlIEFORCBmaXggaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGAqcncgXHUwMDI2PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXO2Agc2VlbXMgbGlrZSBpdCB3b3VsZCBpbnRyb2R1Y2UgaW5jb3JyZWN0IGJlaGF2aW91ciwgbm93IHRoZXkndmUgY2hhbmdlZCBpdCB0byBgKnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7YC4gVGhpcyBpcyBiZWNhdXNlIGAqcndgIGlzIGEgYGJvb2xgIHBvaW50ZXIsIGlzbid0IGl0PyBUaGF0IGJpdHdpc2Ugb3BlcmF0aW9uIG5lZWRzIHRvIGJlIGEgYm9vbGVhbiBvcGVyYXRpb24uIFNvLCB0aGV5J3JlIGVuc3VyaW5nIGAqcndgIGlzIGVpdGhlciAwIG9yIDEsIHdoaWNoIGlzIGNvcnJlY3QuIEkgaGF2ZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJgIHRvIG1ha2Ugc3VyZSBJIGFtIGNvcnJlY3QsIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBidWcgZml4LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgbG9vayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIHdhaXQsIGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBtb3N0IG9mIHRoZSBjaGFuZ2VzIGFyZSBhYm91dCBsb2NraW5nLCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBjb3JyZWN0aW5nIGEgYml0d2lzZSBsb2dpYyBlcnJvci4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGEgZ29vZCBzaWduLiBUaGUgYml0d2lzZSBmaXggaXMgdGhlIG1vc3QgaW50ZXJlc3Rpbmc7IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJvb2xlYW4gcmVzdWx0IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBjb25maXJtIGAqcndgIGlzIGluZGVlZCBhIGBib29sYCBwb2ludGVyIGluIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTo0Mi45MzQ2NTkzMzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY3NTk2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oPTU2Nz1leHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oLTU2OC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50ICpsZXZlbCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oOjU2OTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaC01NzAtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgKmxldmVsLCBib29sICpueCwgYm9vbCAqcncpO1xcbi0tXFxuYXJjaC94ODYvbW0vZmF1bHQuYz01MTU9c2hvd19mYXVsdF9vb3BzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbmFyY2gveDg2L21tL2ZhdWx0LmMtNTI4LVxcbmFyY2gveDg2L21tL2ZhdWx0LmM6NTI5OlxcdFxcdHB0ZSA9IGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgXFx1MDAyNmxldmVsLCBcXHUwMDI2bngsIFxcdTAwMjZydyk7XFxuYXJjaC94ODYvbW0vZmF1bHQuYy01MzAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTY5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc0MC0gKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc0MTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzQyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03OTk9cHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwMy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgwNDpcXHRyZXR1cm4gbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkLCBhZGRyZXNzLCBsZXZlbCwgXFx1MDAyNm54LCBcXHUwMDI2cncpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtODA1LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9ODIwPXN0YXRpYyBwdGVfdCAqX2xvb2t1cF9hZGRyZXNzX2NwYShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MjktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo4MzA6XFx0cmV0dXJuIGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgbGV2ZWwsIG54LCBydyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTo0NC41NDE0MjM4NDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExNjY5MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHByaW1hcmlseSBjb25jZXJucyBpdHNlbGYgd2l0aCBjb25jdXJyZW5jeSBhbmQgYSBzbmVha3kgbG9naWMgYnVnLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgbnhgIGFuZCBgcndgIGFyZSwgYXMgSSBzdXNwZWN0ZWQsIGVzc2VudGlhbGx5IGJvb2xlYW4gcG9pbnRlcnMgKGBib29sICpgKS4gVGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgKnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztgIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgYCpyd2Agd2FzIHRydWUgKDEpIGFuZCBgX1BBR0VfUldgIGhhZCBpdHMgUlcgYml0IHNldCAoMiksIHRoZSBBTkQgb3BlcmF0aW9uIHdvdWxkIHVuZXhwZWN0ZWRseSBjbGVhciBgKnJ3YCB0byBmYWxzZSAoMCksIGV2ZW4gd2hlbiBpdCBzaG91bGQgaGF2ZSByZW1haW5lZCB0cnVlISBUaGUgcHJvcG9zZWQgZml4LCBgKnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7YCwgaXMgdGhlIHJpZ2h0IHdheSB0byBjb2VyY2UgdGhlIHJlc3VsdCB0byBlaXRoZXIgMSBvciAwLCByZXNvbHZpbmcgdGhlIGlzc3VlLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgYXJvdW5kIGxvY2tpbmcsIHNwZWNpZmljYWxseSB0byBhZGRyZXNzIGlzc3VlcyBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIGNvbGxhcHNlLiBUaGVzZSBhcmUgZXNzZW50aWFsIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIOKAkyB3aGljaCBhcmUgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBwZXJmZWN0IGZvciBjYXRjaGluZyB0aG9zZSB1c2UtYWZ0ZXItZnJlZSBhbmQgbG9ja2luZyBpc3N1ZXMsIHRoZXkncmUgdGFpbG9yLW1hZGUgZm9yIGl0LiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlc29sdmVzIGRhdGEgcmFjZXMgZHVyaW5nIHBhZ2UgdGFibGUgY29sbGFwc2UgYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jaywgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgbG9ja2luZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3QgZm9yLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBkb2Vzbid0IG5lZWQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzksIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjUyLjY1ODExODI3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHBhZ2UgdGFibGUgY29sbGFwc2UgKGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSksIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGNvbmN1cnJlbmN5L2xvY2tpbmcgZGV0ZWN0b3JzIChsaWtlIExPQ0tERVApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowspt7j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:26:48 +0000 UTC FinishedAt: 2026-08-13 09:29:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7da514d819a0afb148634aac92b3d190f34947c3", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7da514d819a0afb148634aac92b3d190f34947c3", "config_name": "upstream-apparmor-kasan.config", "series_id": "13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "set_memory_rox", "set_memory_ro", "set_memory_rw", "set_memory_x", "set_memory_nx", "text_poke", "text_poke_copy", "text_poke_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBhbmQgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMpIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGV4dF9wb2tlICh3aGljaCB1c2VzIHZtYWxsb2NfdG9fcGFnZSkgYW5kIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyAod2hpY2ggaXMgY2FsbGVkIGJ5IHNldF9tZW1vcnlfcm94IGFuZCBvdGhlcnMpLiBJdCBpbnRyb2R1Y2VzIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBzZXJpYWxpemUgdGhlc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBCUEYsIG1vZHVsZSBsb2FkaW5nLCBrcHJvYmVzLCBmdHJhY2UsIGV0Yy4gSXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzIxZjE0OGJlZTEwZWZmNDI1NjM4YzVlNDk4ZjkzNjI3YWQyM2ZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjI4OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbkBAIC02LDYgJiM0Mzs2LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4ZWNtZW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2dkYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pbnNuLmhcdTAwM2VcbkBAIC0yNTQzLDYgJiM0MzsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4gXG4gdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgX19wb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHQgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuJiM0Mzt7XG4mIzQzO1x0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XG4mIzQzO1x0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4mIzQzO1x0XHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICYjNDM7IFBBR0VfU0laRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLFxuJiM0MztcdFx0XHQgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGluX2RiZ19tYXN0ZXIoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxuJiM0MztcdFx0ICogYW55d2F5IHNvIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGxvY2tzXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlXG4mIzQzO1x0XHQgKiBjb2xsYXBzZWQgdG8gaHVnZSBQTUQgZW50cmllcywgYW5kIHRoaXMgY29sbGFwc2UgY2FuIGhhcHBlblxuJiM0MztcdFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBQcmV2ZW50IHZtYWxsb2NfdG9fcGFnZSgpIGZyb20gcmFjaW5nIGJ5IGFjcXVpcmluZyBhblxuJiM0MztcdFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXG4mIzQzO1x0XHQgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICYjNDM7IGxlbiBcdTAwM2UgUEFHRV9TSVpFO1xuQEAgLTI1NjAsOSAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbFxuIFx0QlVHX09OKCFhZnRlcl9ib290bWVtKTtcbiBcbiBcdGlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkge1xuLVx0XHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbi1cdFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4tXHRcdFx0cGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpO1xuJiM0MztcdFx0cG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHBhZ2VzWzBdID0gdmlydF90b19wYWdlKGFkZHIpO1xuIFx0XHRXQVJOX09OKCFQYWdlUmVzZXJ2ZWQocGFnZXNbMF0pKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuaW5kZXggZDhkMDU3ZjQ0NDE3OC4uNDMwZDBiNDQ4MzcxOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0yMiw2ICYjNDM7MjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgJiM0Mzs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7XG4gXHR1bnNpZ25lZCBpbnRcdGZsYWdzO1xuIFx0dW5zaWduZWQgaW50XHRmb3JjZV9zcGxpdFx0XHQ6IDEsXG4gXHRcdFx0Zm9yY2Vfc3RhdGljX3Byb3RcdDogMSxcbi1cdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxO1xuJiM0MztcdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxLFxuJiM0MztcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTQwOSw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXG4gXG4gc3RhdGljIGludCBjb2xsYXBzZV9sYXJnZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKTtcbiBcbi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4mIzQzO3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00MzksMTAgJiM0Mzs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuJiM0MztcdFx0ICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuJiM0MztcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4mIzQzO1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4mIzQzO1x0ICogLSBBdm9pZCBhIHVzZS1hZnRlci1mcmVlIGlmIHJhY2VkIGJ5IHB0ZHVtcCAod2hpY2ggdGFrZXMgaXRzIG93blxuJiM0MztcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbiYjNDM7XHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTczMiw3ICYjNDM7NzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwNGQgPSBwNGRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7XG4gXHRpZiAocDRkX25vbmUoKnA0ZCkpXG5AQCAtNzQzLDcgJiM0Mzs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XG4gXHQqbnggfD0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU0LDcgJiM0Mzs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMk07XG4gXHQqbnggfD0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XG4gXHRpZiAocG1kX25vbmUoKnBtZCkpXG5AQCAtNzY1LDcgJiM0Mzs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4mIzQzO1x0KnJ3IFx1MDAyNj0gISEocG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRyZXR1cm4gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTtcbiB9XG5AQCAtMTEyMCwxMSAmIzQzOzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gc3RhdGljIGludFxuIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKVxuJiM0MztcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuJiM0MztcdHN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTtcbiBcdHVuc2lnbmVkIGludCBpLCBsZXZlbDtcbiBcdHBncHJvdF90IHJlZl9wcm90O1xuIFx0Ym9vbCBueCwgcnc7XG5AQCAtMTIyNCwxNiAmIzQzOzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4mIzQzO1x0cHRlX3QgKnB0ZTtcbiBcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcbiYjNDM7XHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4mIzQzO1x0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuJiM0MztcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbiYjNDM7XHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuJiM0MztcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuJiM0MztcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKVxuJiM0MztcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEyMSw3ICYjNDM7MjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4mIzQzO1x0LyogQXZvaWQgcmFjZSB3aXRoIGNvbmN1cnJlbnQgQ1BBIGNvbGxhcHNlLiAqL1xuJiM0MztcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4mIzQzO1x0XHRyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihcdTAwMjZjcGEsIDEpO1xuJiM0MztcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgJiM0Mzs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbiYjNDM7REVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuJiM0MztcdCAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyMWYxNDhiZWUxMGVmZjQyNTYzOGM1ZTQ5OGY5MzYyN2FkMjNmYjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwOToyODoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggNjI5MzZhM2JkZTE5Yi4uZjgxZDZiYzkwYTZmZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTYsNiAmIzQzOzYsOSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1vcnkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leGVjbWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2dkYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbWFwX2xvY2suaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS90ZXh0LXBhdGNoaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2luc24uaCZndDsKQEAgLTI1NDMsNiAmIzQzOzI1NDYsMzggQEAgc3RhdGljIHZvaWQgdGV4dF9wb2tlX21lbXNldCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIAogdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTsKIAomIzQzO3N0YXRpYyB2b2lkIF9fcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsCiYjNDM7CQkJCSBib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7ewomIzQzOwlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKJiM0MzsJaWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7CQlwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICYjNDM7IFBBR0VfU0laRSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLAomIzQzOwkJCSAgICAgICBib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkpCiYjNDM7ewomIzQzOwlpZiAoaW5fZGJnX21hc3RlcigpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgY2FsbGVkIGZyb20ga2dkYiBjYW5ub3Qgc2xlZXAsIGJ1dCBhbGwgb3RoZXIgQ1BVcyBzdG9wcGVkCiYjNDM7CQkgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3MKJiM0MzsJCSAqLwomIzQzOwkJX19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyoKJiM0MzsJCSAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlCiYjNDM7CQkgKiBjb2xsYXBzZWQgdG8gaHVnZSBQTUQgZW50cmllcywgYW5kIHRoaXMgY29sbGFwc2UgY2FuIGhhcHBlbgomIzQzOwkJICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBQcmV2ZW50IHZtYWxsb2NfdG9fcGFnZSgpIGZyb20gcmFjaW5nIGJ5IGFjcXVpcmluZyBhbgomIzQzOwkJICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluCiYjNDM7CQkgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS4KJiM0MzsJCSAqLwomIzQzOwkJZ3VhcmQobW1hcF9yZWFkX2xvY2spKCZhbXA7aW5pdF9tbSk7CiYjNDM7CQlfX3Bva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICYjNDM7IGxlbiAmZ3Q7IFBBR0VfU0laRTsKQEAgLTI1NjAsOSAmIzQzOzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbAogCUJVR19PTighYWZ0ZXJfYm9vdG1lbSk7CiAKIAlpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHsKLQkJcGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7Ci0JCWlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KQotCQkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpOwomIzQzOwkJcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTsKIAl9IGVsc2UgewogCQlwYWdlc1swXSA9IHZpcnRfdG9fcGFnZShhZGRyKTsKIAkJV0FSTl9PTighUGFnZVJlc2VydmVkKHBhZ2VzWzBdKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwppbmRleCBkOGQwNTdmNDQ0MTc4Li40MzBkMGI0NDgzNzE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY2NfcGxhdGZvcm0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zZXRfbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVnaW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9lODIwL2FwaS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKQEAgLTQ5LDcgJiM0Mzs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7CiAJdW5zaWduZWQgaW50CWZsYWdzOwogCXVuc2lnbmVkIGludAlmb3JjZV9zcGxpdAkJOiAxLAogCQkJZm9yY2Vfc3RhdGljX3Byb3QJOiAxLAotCQkJZm9yY2VfZmx1c2hfYWxsCQk6IDE7CiYjNDM7CQkJZm9yY2VfZmx1c2hfYWxsCQk6IDEsCiYjNDM7CQkJaW5pdF9tbV9yZWFkX2xvY2tlZAk6IDE7CiAJc3RydWN0IHBhZ2UJKipwYWdlczsKIH07CiAKQEAgLTQwOSw3ICYjNDM7NDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7CiAKLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0MztzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7CiAJc3RydWN0IHB0ZGVzYyAqcHRkZXNjLCAqdG1wOwpAQCAtNDM5LDEwICYjNDM7NDQxLDMwIEBAIHN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdGRlc2MsIHRtcCwgJmFtcDtwZ3RhYmxlcywgcHRfbGlzdCkgewogCQlsaXN0X2RlbCgmYW1wO3B0ZGVzYy0mZ3Q7cHRfbGlzdCk7Ci0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CQkvKgomIzQzOwkJICogT25seSBlYXJseSBhbGxvYyYjMzk7ZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZQomIzQzOwkJICogaGVyZSBhbmQgdGhvc2Ugc2hvdWxkbiYjMzk7dCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseQomIzQzOwkJICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLgomIzQzOwkJICovCiYjNDM7CQlpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpCiYjNDM7CQkJcGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpOwomIzQzOwkJZWxzZQomIzQzOwkJCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86CiYjNDM7CSAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd24KJiM0MzsJICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLgomIzQzOwkgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLgomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgJmFtcDtpbml0X21tKQomIzQzOwkJX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoY3BhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTczMiw3ICYjNDM7NzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7CiAJKm54IHw9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpOwogCWlmIChwNGRfbm9uZSgqcDRkKSkKQEAgLTc0Myw3ICYjNDM7NzY1LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzFHOwogCSpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwNGRfZmxhZ3MoKnA0ZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTsKIAlpZiAocHVkX25vbmUoKnB1ZCkpCkBAIC03NTQsNyAmIzQzOzc3Niw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF8yTTsKIAkqbnggfD0gcHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcHVkX2ZsYWdzKCpwdWQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7CiAJaWYgKHBtZF9ub25lKCpwbWQpKQpAQCAtNzY1LDcgJiM0Mzs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfNEs7CiAJKm54IHw9IHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHBtZF9mbGFncygqcG1kKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiB9CkBAIC0xMTIwLDExICYjNDM7MTE0MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAogc3RhdGljIGludAogX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpCiYjNDM7CQkgICBwdGVfdCAqcGJhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7Ci0Jc3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpOwotCXB0ZV90ICpwYmFzZSA9IChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhiYXNlKTsKJiM0MzsJc3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpOwogCXVuc2lnbmVkIGludCBpLCBsZXZlbDsKIAlwZ3Byb3RfdCByZWZfcHJvdDsKIAlib29sIG54LCBydzsKQEAgLTEyMjQsMTYgJiM0MzsxMjQ1LDIwIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYzsKJiM0MzsJcHRlX3QgKnB0ZTsKIAogCXNwaW5fdW5sb2NrKCZhbXA7Y3BhX2xvY2spOwotCXB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTsKJiM0MzsJaWYgKGNwYS0mZ3Q7aW5pdF9tbV9yZWFkX2xvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF91bmxvY2soJmFtcDtpbml0X21tKTsKJiM0MzsJcHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoJmFtcDtpbml0X21tKTsKJiM0MzsJaWYgKGNwYS0mZ3Q7aW5pdF9tbV9yZWFkX2xvY2tlZCkKJiM0MzsJCW1tYXBfcmVhZF9sb2NrKCZhbXA7aW5pdF9tbSk7CiAJc3Bpbl9sb2NrKCZhbXA7Y3BhX2xvY2spOwotCWlmICghcHRkZXNjKQomIzQzOwlpZiAoIXB0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRkZXNjKSkKLQkJcGFnZXRhYmxlX2ZyZWUocHRkZXNjKTsKJiM0MzsJaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZSkpCiYjNDM7CQlwdGVfZnJlZV9rZXJuZWwoJmFtcDtpbml0X21tLCBwdGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTIxLDcgJiM0MzsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAljcGEuY3VycGFnZSA9IDA7CiAJY3BhLmZvcmNlX3NwbGl0ID0gZm9yY2Vfc3BsaXQ7CiAKLQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CS8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi8KJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSB0cnVlOwomIzQzOwlzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbXA7Y3BhLCAxKTsKJiM0MzsJY3BhLmluaXRfbW1fcmVhZF9sb2NrZWQgPSBmYWxzZTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAppbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKQEAgLTYyMSw2ICYjNDM7NjIxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAogCSAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSkKJiM0MztERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosCiYjNDM7CSAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgeDg2IE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AsIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oYCDigJMgdGhhdCBoaXRzIHNvbWUgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBtbWFwX3JlYWRfbG9ja2AgYW5kIGBtbWFwX3dyaXRlX2xvY2tgIGFyb3VuZCBjcml0aWNhbCBzZWN0aW9ucywgdGFyZ2V0aW5nIHRoaW5ncyBsaWtlIGBpbml0X21tYCwgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AsIGBwb2tlX3ZtYWxsb2NfcGFnZXNgLCBhbmQgYHNwbGl0X2xhcmdlX3BhZ2VgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWFsaW5nIHdpdGggcGFnZSBhdHRyaWJ1dGUgKENQQSkgY29kZSBhbmQgdGhlIGFsdGVybmF0aXZlIHRleHQgcG9raW5nIG1lY2hhbmlzbS4gRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZGVzaWduZWQgdG8gZml4IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIENQQSBjb2xsYXBzZSBhbmQgdm1hbGxvYyBwYWdlIHBva2luZyBvY2N1ciBjb25jdXJyZW50bHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhdCB0aGUgaGVhcnQgb2YgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGV0Yy4gTm93LCB0aG9zZSBhcmUgdXNlZCAqZXZlcnl3aGVyZSouIFRoaW5rIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZS4uLiB0aGUgbGlzdCBnb2VzIG9uLiBBbmQgYHRleHRfcG9rZWAgaXMgdXNlZCBpbiBhbHRlcm5hdGl2ZXMsIGtwcm9iZXMsIGZ0cmFjZSwganVtcCBsYWJlbHMsIGV0Yy4gU28sIHRoaXMgcGF0Y2ggaW1wYWN0cyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlLgoKR2l2ZW4gdGhlIGltcGFjdCBvbiB0aGUgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHNvbWUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQgYSBtaW51dGUsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZGlyZWN0bHkgdG8gc2VlIHdoYXQgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBleHRlcm5hbGx5IGNhbGxhYmxlIGZyb20gdGhhdCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgc2V0X21lbW9yeV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjIwOD1pbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjIxOmludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIyLXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNDY9aW50IF9zZXRfbWVtb3J5X3djKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI2MjppbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2My17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjg1PWludCBfc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyOTI6aW50IHNldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM0Mz1FWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNDY6aW50IHNldF9tZW1vcnlfeCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM0Ny17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzUzLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzU0OmludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjEtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjMte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM2NzppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNjgte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3Ny1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM3ODppbnQgc2V0X21lbW9yeV9ydyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzgyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg0LXtcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzODg6aW50IHNldF9tZW1vcnlfbnBfbm9hbGlhcyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4OS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk0LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzk1OmludCBzZXRfbWVtb3J5X3AodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5OS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwMS17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDA3OmludCBzZXRfbWVtb3J5X25vbmdsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQwOC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDEyLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNDEzOmludCBzZXRfbWVtb3J5X2dsb2JhbCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTA5PXN0YXRpYyBpbnQgX19zZXRfbWVtb3J5X2VuY19kZWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsIGJvb2wgZW5jKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUyNC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyNTppbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyOT1FWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1MzE6aW50IHNldF9tZW1vcnlfZGVjcnlwdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTQzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgX190ZXh0X3Bva2UgTW9kaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyB0d2Vha2luZyBgX190ZXh0X3Bva2VgIHdpdGhpbiBgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBgX190ZXh0X3Bva2VgLiBUaGF0JiMzOTtzIGEgbG93LWxldmVsIGZ1bmN0aW9uIOKAkyBhIHRleHQtc3BhY2Ugd3JpdGUgb3BlcmF0aW9uLiBMaWtlbHkgdXNlZCBmb3IgcGF0Y2hpbmcgb3IgbW9kaWZ5aW5nIGluc3RydWN0aW9uIHN0cmVhbXMgYXQgcnVudGltZSwgcG9zc2libHkgZm9yIGFsdGVybmF0aXZlcyBvciBzZWN1cml0eSBmZWF0dXJlcy4mIzM0OwoKTXkgbmV4dCBtb3ZlPyBEZWZpbml0ZWx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYF9fdGV4dF9wb2tlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kICp3aHkqIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBpcyBiZWluZyBkZXBsb3llZCwgd2hhdCYjMzk7cyBjYWxsaW5nIGl0LCBhbmQgd2hhdCBhbHRlcm5hdGl2ZXMgaXQmIzM5O3MgcGF0Y2hpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBtaWNyb2NvZGUgdXBkYXRlcywga2VybmVsIGluc3RydW1lbnRhdGlvbiwgc2VjdXJpdHkgbWl0aWdhdGlvbnMgKGxpa2UgdGhvc2UgYWdhaW5zdCBTcGVjdHJlIG9yIE1lbHRkb3duKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gb2YgdGhlIG1vZGlmaWVkIGBfX3RleHRfcG9rZWAuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqP3RleHRfcG9rZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jPTQ3MD1zdGF0aWMgdm9pZCBfX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyMy1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjUyNDp2b2lkIHRleHRfcG9rZV9hcHBseV9yZWxvY2F0aW9uKHU4ICpidWYsIGNvbnN0IHU4ICogY29uc3QgaW5zdHIsIHNpemVfdCBpbnN0cmxlbiwgdTggKnJlcGwsIHNpemVfdCByZXBsX2xlbilcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyNS17XG4tLVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9MjU4MT1zdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3MDAtICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzAxOnZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAyLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzIxLSAqL1xuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyMjp2b2lkICp0ZXh0X3Bva2Vfa2dkYih2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzIzLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI2LVxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyNzp2b2lkICp0ZXh0X3Bva2VfY29weV9sb2NrZWQodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuLFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjcyOC1cdFx0XHQgICAgYm9vbCBjb3JlX29rKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NTktICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzYwOnZvaWQgKnRleHRfcG9rZV9jb3B5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbilcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NjEte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NzYtICovXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzc3OnZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgeDg2IE1lbW9yeSBQcm90ZWN0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGV5IGFsbCBsb29rIGxpa2UgZ29vZCBpbmRpY2F0b3JzIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSwgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIG1lbW9yeSBtYW5pcHVsYXRpb24uIEFuZCB0aGVuIHdlIGhhdmUgdGhlc2UgYHNldF9tZW1vcnlfKmAgZnVuY3Rpb25zOiBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIG5vdyBJIHNlZSBgc2V0X21lbW9yeV9yb3hgLiBXYWl0LCBoYW5nIG9uLi4uIGBzZXRfbWVtb3J5X3JveGAgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkIGluIHRoZSBwYXRjaCBjb21tZW50LCBtZW50aW9uaW5nIHNvbWV0aGluZyBhYm91dCBleGVjbWVtIFJPWCByYW5nZXMgYmVpbmcgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gaHVnZSBQTUQgZW50cmllcyBhbmQgYHNldF9tZW1vcnlfcm94KClgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQmIzM5O3MgcHJhY3RpY2FsbHkgdGVsbGluZyBtZSB3aGVyZSB0aGUgcGFpbiBwb2ludHMgYXJlIQoKUmlnaHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIFdoZXJlIGlzIHRoZSBjb2RlPyBJdCBhcHBlYXJzIHRvIGJlIGluIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AgYW5kIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gVGhvc2UgYXJlIGNvcmUgeDg2IGZpbGVzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBwcmV0dHkgZnVuZGFtZW50YWwuIExldCBtZSBxdWlja2x5IHNjYW4gdGhlIGBNYWtlZmlsZWAgaW4gdGhvc2UgZGlyZWN0b3JpZXM6IGBhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVgIGFuZCBgYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMgb3IgcmVsZXZhbnQgZmxhZ3MuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBjb250ZXh0IG9mIHRoaXMgY29kZSBhbmQgd2hpY2ggZmVhdHVyZXMgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGNvZGUgaXMgc3VwcG9zZWQgdG8gZG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWx0ZXJuYXRpdmVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZT04NT1vYmoteVx0XHRcdCYjNDM7PSBwY2ktZG1hLm8gcXVpcmtzLm8ga2RlYnVnZnMub1xuYXJjaC94ODYva2VybmVsL01ha2VmaWxlOjg2Om9iai15XHRcdFx0JiM0Mzs9IGFsdGVybmF0aXZlLm8gaTgyNTMubyBod19icmVha3BvaW50Lm9cbmFyY2gveDg2L2tlcm5lbC9NYWtlZmlsZS04Ny1vYmoteVx0XHRcdCYjNDM7PSB0c2MubyB0c2NfbXNyLm8gaW9fZGVsYXkubyBydGMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXBseSBmYW1pbGlhciB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzeXN0ZW1zIHByb2dyYW1taW5nOgoKKipEZWNvbnN0cnVjdGluZyBgc2V0X21lbW9yeS5jYCAtIEEgTWljcm8tQW5hbHlzaXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgc2V0X21lbW9yeS5jYC4gSW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIGNvcmUgZnVuY3Rpb24gaXQgbGlrZWx5IGNvbnRhaW5zIOKAkyB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc29tZXRoaW5nIGxpa2UgYG1lbXNldGAgb3IgYSBjdXN0b20gbWVtb3J5LXNldHRpbmcgcm91dGluZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlczogdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBzcGVlZCBhbmQgc2FmZXR5LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIG1lbW9yeSB0aGF0JiMzOTtzIGJlZW4gYWxsb2NhdGVkLgoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXM6IGJ5dGUtYnktYnl0ZSBhc3NpZ25tZW50cyB2ZXJzdXMgdXNpbmcgd29yZC1zaXplZCBvcGVyYXRpb25zICgzMi1iaXQsIDY0LWJpdCwgd2hhdGV2ZXIgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cykuIElzIGl0IGdvaW5nIHRvIGJlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBhbGlnbm1lbnQgb2YgdGhlIG1lbW9yeSByZWdpb24/IFRoYXQmIzM5O3MgY3JpdGljYWwgZm9yIGFjaGlldmluZyBtYXhpbXVtIHRocm91Z2hwdXQsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhhdCBpbiB0aGUgY29kZS4KClRoZW4sIHRoZXJlJiMzOTtzIHRoZSBxdWVzdGlvbiBvZiBib3VuZGFyeSBjaGVja3MuIERvZXMgaXQgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBzaXplIGFyZ3VtZW50IGlzIHplcm8sIG9yIHdoZXJlIHRoZSBtZW1vcnkgcmVnaW9uIGlzIHBhcnRpYWxseSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZT8gQSByb2J1c3QgaW1wbGVtZW50YXRpb24gKm11c3QqIGd1YXJkIGFnYWluc3QgdGhvc2Ugc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgaG93IG90aGVyIHByb2Nlc3NlcyBtaWdodCBiZSBzaGFyaW5nIG1lbW9yeSwgYW5kIHdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYm91bmRhcnkgY2hlY2tzIHdlcmUgbm90IGVuZm9yY2VkLiBJcyBpdCBnb2luZyB0byBiZSB1c2luZyBhc3NlbWJseSwgb3IgaXMgaXQgZ29pbmcgdG8gYmUgd3JpdHRlbiBpbiBDLCBhbmQgd2hhdCB0cmFkZSBvZmZzIHdlcmUgbWFkZT8KClRoZSBuZXh0IHRoaW5nIHRoYXQgSSYjMzk7bSBjb25zaWRlcmluZyBpcyB0aGUgaW1wbGljYXRpb25zIG9uIHRocmVhZGluZy4gSXMgaXQgdGhyZWFkLXNhZmU/IERvZXMgaXQgbmVlZCB0byBiZT8gSWYgaXQgaXMgbXVsdGktdGhyZWFkZWQsIHRoZW4gdGhlcmUgY291bGQgYmUgdmFyaW91cyBjb25zaWRlcmF0aW9ucyBhcm91bmQgZW5zdXJpbmcgdGhhdCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biBzY29wZSBhbmQgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24mIzM5O3Qgd3JpdGUgdG8gbG9jYXRpb25zIG91dHNpZGUgb2YgdGhlIHNjb3BlLgoKSSYjMzk7bSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgaW50ZW5kZWQgdXNlIGNhc2UuIElzIHRoaXMgYSBsb3ctbGV2ZWwsIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHJvdXRpbmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbD8gT3IgaXMgaXQgYSBsaWJyYXJ5IGZ1bmN0aW9uIHVzZWQgYnkgYXBwbGljYXRpb24gY29kZT8gVGhlIGFuc3dlciB3aWxsIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBkZXNpZ24gY2hvaWNlcyBhbmQgdGhlIGxldmVsIG9mIGVycm9yLWNoZWNraW5nLiBUaGUgbW9yZSBJIGxlYXJuIGFib3V0IHRoZSBjb250ZXh0IHRoZSBiZXR0ZXIgSSBjYW4gcHJvdmlkZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgZXZlcnl0aGluZyBpcyBjb25zaXN0ZW50bHkgY29tcGlsZWQgb24geDg2LCB3aGljaCBzaW1wbGlmaWVzIHRoaW5ncy4gTm8gbmVlZCB0byB3b3JyeSBhYm91dCBwZWN1bGlhciBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgdGV4dF9wb2tlYCBhbmQgYHNldF9tZW1vcnlfcm94YCwgYXJlIGFjY2Vzc2libGUgYW5kIGV4cG9ydGVkLiBJIGtub3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBvZnRlbiBjcnVjaWFsIGZvciBtb2R1bGUgbWFuaXB1bGF0aW9uLCBCUEYsIGtwcm9iZXMsIGFuZCBmdHJhY2UsIHNvIGFjY2Vzc2liaWxpdHkgaXMgcGFyYW1vdW50LgoKWWVzLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIGhlYXZpbHkgdXNlZCEgVGhhdCYjMzk7cyBleGNlbGxlbnQuIEtub3dpbmcgdGhhdCwgSSBjYW4gZm9jdXMgb24gYSBzZXQgb2YgcmVsYXRlZCBmdW5jdGlvbnM6IGBzZXRfbWVtb3J5X3JveGAsIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBgdGV4dF9wb2tlYCwgYHRleHRfcG9rZV9jb3B5YCwgYW5kIGB0ZXh0X3Bva2Vfc2V0YC4gVGhlc2UgYXJlIGFsbCBwcmltZSBjYW5kaWRhdGVzIGZvciBjbG9zZXIgaW5zcGVjdGlvbi4KCkhvbGQgb24sIGBzZXRfbWVtb3J5X3JveGAgc2VlbXMgcGFydGljdWxhcmx5IHByb21pc2luZy4gSXRzIGZ1bmN0aW9uYWxpdHkgaXMgZGlyZWN0bHkgcmVsZXZhbnQgdG8gbXkgYXJlYSBvZiBmb2N1cy4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYHNldF9tZW1vcnlfcm94YCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZS4gSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGRvd24gYSBibGluZCBhbGxleSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzZXRfbWVtb3J5X3JveCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiBgc2V0X21lbW9yeV9yb3hgIHdhcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBzZXQsIGJ1dCBub3cgdGhhdCBJJiMzOTttIGxvb2tpbmcgYXQgaXQsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdW51c3VhbCwgYW5kIGRlZmluaXRlbHkgbmVlZHMgYSBjbG9zZXIgbG9vay4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgaXRzIGNvbXBhbmlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBldmVuIHdvcnNlLCBtaXNyZW1lbWJlcmluZyB0aGUgbmFtZSBhbHRvZ2V0aGVyISBMZXQmIzM5O3MgdmVyaWZ5IGBzZXRfbWVtb3J5X3JvYC4gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgYW5zd2VyIHF1aWNrbHkuIElmIGBzZXRfbWVtb3J5X3JvYCBpcyB0aGVyZSwgdGhlIGFic2VuY2Ugb2YgYHNldF9tZW1vcnlfcm94YCBtYWtlcyB0aGUgc2l0dWF0aW9uIG1vcmUgaW50ZXJlc3RpbmcuIElmIGBzZXRfbWVtb3J5X3JvYCBpc24mIzM5O3QgdGhlcmUsIHdlbGwgdGhlbiBJJiMzOTt2ZSBsaWtlbHkgZ290IGEgbXVjaCBtb3JlIHNlcmlvdXMgcHJvYmxlbSB3aXRoIG15IHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnNldF9tZW1vcnlfcm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb2RlIExvY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIG1pZ2h0IGJlIGRlZmluZWQgb3IgaGFuZGxlZC4gSXQgZmVlbHMgbGlrZSBJICpzaG91bGQqIGJlIGxvb2tpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBidXQgdGhlcmUmIzM5O3MgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBpdCBtaWdodCBiZSBlbHNld2hlcmUsIHBlcmhhcHMgZXZlbiAqd2l0aG91dCogdGhlIGBfR1BMYCBkZXNpZ25hdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgYmVpbmcgZXhwb3J0ZWQgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbHRvZ2V0aGVyPwoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgc2V0X21lbW9yeV9yb3hgIHdpdGhpbiB0aGUgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZpbGUgaXRzZWxmLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYnJhbmNoIG91dCBpZiBuZWNlc3NhcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNjI9aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzY2LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzY3OmludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIEZpbGUgU3RydWN0dXJlIGFuZCBFeHBlY3RlZCBPdXRwdXQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGZpbGUuLi4gYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIGRhdGEmIzM5O3Mgc3RydWN0dXJlZC4gU3BlY2lmaWNhbGx5LCBhcmUgdGhlIHJlc3VsdHMgSSYjMzk7bSBsb29raW5nIGZvciBhZ2dyZWdhdGVkIGFuZCBkdW1wZWQgYXQgdGhlICplbmQqIG9mIHRoZSBmaWxlPyBUaGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4sIHlvdSBrbm93LCBlc3BlY2lhbGx5IHdpdGggbG9nZ2luZyBvciBsYXJnZSBkYXRhIGR1bXBzLiBJdCBzYXZlcyBhIGxvdCBvZiBwcm9jZXNzaW5nIHRvIHN0cmVhbSB0aGUgaW1wb3J0YW50IGRhdGEgb3V0IGF0IG9uY2UuIEl0JiMzOTtzIG9mdGVuIGNsZWFuZXIgdGhhbiBpbnRlcmxlYXZpbmcgcmVzdWx0cyB0aHJvdWdob3V0LiBTbywgSSYjMzk7bSBiZXR0aW5nIHRoYXQgdGhlIGludGVyZXN0aW5nIGJpdHMgYXJlIHByb2JhYmx5IHdhaXRpbmcgYXQgdGhlIGJvdHRvbS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzQ5PXZvaWQgY2xmbHVzaF9jYWNoZV9yYW5nZSh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozNTU6RVhQT1JUX1NZTUJPTF9HUEwoY2xmbHVzaF9jYWNoZV9yYW5nZSk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM1Ni1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM1OD12b2lkIGFyY2hfaW52YWxpZGF0ZV9wbWVtKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYxLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzYyOkVYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaW52YWxpZGF0ZV9wbWVtKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYzLSNlbmRpZlxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzY2PWJvb2wgY3B1X2NhY2hlX2hhc19pbnZhbGlkYXRlX21lbXJlZ2lvbih2b2lkKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzY5LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzcwOkVYUE9SVF9TWU1CT0xfTlNfR1BMKGNwdV9jYWNoZV9oYXNfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFwmIzM0O0RFVk1FTVwmIzM0Oyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM3MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MzcyPWludCBjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24ocGh5c19hZGRyX3Qgc3RhcnQsIHNpemVfdCBsZW4pXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNzgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzozNzk6RVhQT1JUX1NZTUJPTF9OU19HUEwoY3B1X2NhY2hlX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcJiMzNDtERVZNRU1cJiMzNDspO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zODAtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04MTQ9cHRlX3QgKmxvb2t1cF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgaW50ICpsZXZlbClcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxNy19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChsb29rdXBfYWRkcmVzcyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxOS1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTg3Mz1waHlzX2FkZHJfdCBzbG93X3ZpcnRfdG9fcGh5cyh2b2lkICpfX3ZpcnRfYWRkcilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNC19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjkwNTpFWFBPUlRfU1lNQk9MX0dQTChzbG93X3ZpcnRfdG9fcGh5cyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNi1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyMjE9aW50IHNldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQzLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI0NDpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfdWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQ1LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI2Mj1pbnQgc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzYtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjc3OkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzgtXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjkyPWludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMDM6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3diKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwNC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMDc9aW50IHNldF9tY2Vfbm9zcGVjKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzMzQ6RVhQT1JUX1NZTUJPTF9HUEwoc2V0X21jZV9ub3NwZWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzM1LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjMzNz1pbnQgY2xlYXJfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDItfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQzOkVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX21jZV9ub3NwZWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ0LSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTI1PWludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjgtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI5OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjUzMC1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzMT1pbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTM0LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUzNTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RlY3J5cHRlZCk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzYtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1Mzc9aW50IHNldF9wYWdlc191YyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU0Mi19XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1NDM6RVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfdWMpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ0LVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU5MT1pbnQgc2V0X3BhZ2VzX2FycmF5X3VjKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1OTQtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTk1OkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3VjKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Ni1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjU5Nz1pbnQgc2V0X3BhZ2VzX2FycmF5X3djKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDAtfVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjAxOkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3djKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYwMi1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjA4LX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwOTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MTAtXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI2MTE9aW50IHNldF9wYWdlc19hcnJheV93YihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjMzLX1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYzNDpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yik7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVW5kb2N1bWVudGVkIE1lbW9yeSBNYW5pcHVsYXRpb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRob3NlIGZ1bmN0aW9ucyDigJMgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBhbmQgYHNldF9tZW1vcnlfcndgIOKAkyBhcmVuJiMzOTt0IGluIHRoZSBleHBvcnRlZCBzeW1ib2wgdGFibGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBrZXJuZWwsIHByb2JhYmx5IGludGVncmFsIHRvIHRoaW5ncyBsaWtlIHRoZSBtb2R1bGUgbG9hZGVyIG9yIEJQRiBpbXBsZW1lbnRhdGlvbiwgYW5kIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGNvcmUuIFN0YXRpYyBsaW5raW5nIG1ha2VzIHNlbnNlIGluIHRoYXQgY29udGV4dC4KCldhaXQgYSBzZWNvbmQuLi4gZGlkbiYjMzk7dCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYHNldF9tZW1vcnlfcm9gIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYD8gT2theSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gTm9wZSwgdGhhdCYjMzk7cyBub3QgaXQuIFNjcmF0Y2ggdGhhdC4KCk9rYXksIGJhY2sgdG8gYmFzaWNzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgd2hhdCB0aGF0IGhlYWRlciBmaWxlIHRlbGxzIHVzIGFib3V0IHRoZXNlIGZ1bmN0aW9ucywgaWYgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBzb21ldGhpbmcgb2J2aW91cy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlaXIgaW50ZW5kZWQgdXNhZ2UgYW5kIHNjb3BlLCBhdCBsZWFzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaD0xND1zdGF0aWMgaW5saW5lIGludCBfX211c3RfY2hlY2sgc2V0X21lbW9yeV9ueCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykgeyByZXR1cm4gMDsgfVxuLS1cbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE2LVxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTc6I2lmbmRlZiBzZXRfbWVtb3J5X3JveFxuaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg6MTg6c3RhdGljIGlubGluZSBpbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzkwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVW5leHBvcnRlZCBGdW5jdGlvbiBgc2V0X21lbW9yeV9yb3hgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzZXRfbWVtb3J5X3JveGAgZnVuY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBpdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKi4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBOb3JtYWxseSwgSSYjMzk7ZCBleHBlY3Qgc29tZXRoaW5nIGxpa2UgdGhpcyB0byBiZSBkZWNsYXJlZCBpbiBhIGhlYWRlciBpZiBpdCYjMzk7cyBtZWFudCBmb3IgYnJvYWRlciB1c2Ugd2l0aGluIHRoZSBrZXJuZWwuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzbiYjMzk7dCBhIHNpbXBsZSBvdmVyc2lnaHQuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGRlY2xhcmF0aW9uIHRoZXJlLiBQZXJoYXBzIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgaW5jbHVkZWQsIG9yIGRlZmluZWQgaW4gYSB3YXkgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBpZiBhdCBhbGwsIGdpdmVuIGl0cyBsYWNrIG9mIG9idmlvdXMgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByb2NlZHVyZSwgbmVlZCB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaGVhZGVyIGZpbGUgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5X3JveCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmgtOC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDo5OiNkZWZpbmUgc2V0X21lbW9yeV9yb3ggc2V0X21lbW9yeV9yb3hcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIFg4NiBNZW1vcnkgTWFuYWdlbWVudCBSYWNlIENvbmRpdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFyZSBhYnNvbHV0ZWx5IG5vcm1hbCBhbmQgYWNjZXNzaWJsZS4gU2luY2UgdGhleSYjMzk7cmUgY29yZSB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhleSYjMzk7cmUgdW5kZW5pYWJseSByZWFjaGFibGUgYW5kIGV4cGxvaXRhYmxlIGZvciBmdXp6aW5nLiBJJiMzOTttIGdvaW5nIHRvIGFkZCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHRleHRfcG9rZWAsIGB0ZXh0X3Bva2VfY29weWAsIGFuZCBgdGV4dF9wb2tlX3NldGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgdG8gaW5jbHVkZS4gQWgsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYywgc28gaXQmIzM5O3MgYSBub24tc3RhcnRlciBmb3IgZGlyZWN0IGZ1enppbmcuIFRoZSBzYW1lIGdvZXMgZm9yIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgLgoKVGhlIGNydXggb2YgdGhlIG1hdHRlciBpcyB0aGlzIHBhdGNoOiBpdCYjMzk7cyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB0ZXh0X3Bva2VgLCB3aGljaCByZWxpZXMgb24gYHZtYWxsb2NfdG9fcGFnZWAsIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzZXRfbWVtb3J5X3JveGAgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zLiBTbywgZnV6emluZyB0aGVzZSBjb25jdXJyZW50bHkgaXMgdGhlIG1vbmV5IHNob3QhCgpMZXQmIzM5O3Mgd3JpdGUgYSBjbGVhciByYXRpb25hbGU6CgpUaGUgcGF0Y2ggYWx0ZXJzIGVzc2VudGlhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHRleHRfcG9rZWAgKHVzaW5nIGB2bWFsbG9jX3RvX3BhZ2VgKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgKGNhbGxlZCBieSBgc2V0X21lbW9yeV9yb3hgIGFuZCBvdGhlcnMpLiBUaGUgc29sdXRpb24gaW52b2x2ZXMgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIHRvIHN5bmNocm9uaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBhbmQgb3RoZXIgY29tbW9uIGVudHJ5IHBvaW50cy4gSXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmU6CgoqICAgYHNldF9tZW1vcnlfcm94YAoqICAgYHNldF9tZW1vcnlfcm9gCiogICBgc2V0X21lbW9yeV9yd2AKKiAgIGBzZXRfbWVtb3J5X3hgCiogICBgc2V0X21lbW9yeV9ueGAKKiAgIGB0ZXh0X3Bva2VgCiogICBgdGV4dF9wb2tlX2NvcHlgCiogICBgdGV4dF9wb2tlX3NldGAKCk5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGNvcmUgeDg2IGNvZGUuCgpKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBkb3VibGUtY2hlY2sgaWYgYHRleHRfcG9rZWAgaXMgZXhwb3J0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGV4dF9wb2tlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdGV4dF9wb2tlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHRleHRfcG9rZWAsIGFuZCBpbml0aWFsbHksIGl0IHNlZW1lZCBsaWtlIHRoaXMgZnVuY3Rpb24gd2FzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGludGVybmFsLiBCdXQgdGhlbiBJIHJlYWxpemVkLCBoYW5nIG9uLCBpdCYjMzk7cyBhY3R1YWxseSB1c2VkIGJ5IGEgYnVuY2ggb2YgY3JpdGljYWwgY29yZSBjb2RlIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlLiBJIHNlZSBgdGV4dF9wb2tlYCBiZWluZyB1c2VkIGJ5IGBhcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmNgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgcHJvYmluZyBtZWNoYW5pc20sIGFuZCBhbHNvIGJ5IGBhcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmNgLCB0aGUgZnVuY3Rpb24gdHJhY2luZyBjb2RlLCBhbmQgYGFyY2gveDg2L2tlcm5lbC9qdW1wX2xhYmVsLmNgLCBkZWFsaW5nIHdpdGgganVtcCBsYWJlbHMuIFNvLCBteSBodW5jaCBpcyB0aGF0IGl0IG1pZ2h0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgaGVuY2Ugbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGB0ZXh0X3Bva2VgIGlzIGRlY2xhcmVkIGluIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmhgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgaXQgZ2l2ZW4gaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTUtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTY6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2Vhcmx5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTctXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC0xOS1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMzMtICovXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MzQ6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM1OmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc3luY19lYWNoX2NwdSh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNjpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2tnZGIodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNzpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2NvcHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozODojZGVmaW5lIHRleHRfcG9rZV9jb3B5IHRleHRfcG9rZV9jb3B5XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzk6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5X2xvY2tlZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGJvb2wgY29yZV9vayk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDA6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQxOmV4dGVybiBpbnQgc21wX3RleHRfcG9rZV9pbnQzX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQyOmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc2luZ2xlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqZW11bGF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtNDMtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDQ6ZXh0ZXJuIHZvaWQgc21wX3RleHRfcG9rZV9iYXRjaF9hZGQodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuLCBjb25zdCB2b2lkICplbXVsYXRlKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NTpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2ZpbmlzaCh2b2lkKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC00Ni1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9NjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGV4dF9vcGNvZGVfc2l6ZSh1OCBvcGNvZGUpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTgzLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjg0OnVuaW9uIHRleHRfcG9rZV9pbnNuIHtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC04NS1cdHU4IHRleHRbVEVYVF9QT0tFX01BWF9PUENPREVfU0laRV07XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTkzPXZvaWQgX190ZXh0X2dlbl9pbnNuKHZvaWQgKmJ1ZiwgdTggb3Bjb2RlLCBjb25zdCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpkZXN0LCBpbnQgc2l6ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC05NC17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6OTU6XHR1bmlvbiB0ZXh0X3Bva2VfaW5zbiAqaW5zbiA9IGJ1ZjtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC05Ni1cbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9MTIzPXZvaWQgKnRleHRfZ2VuX2luc24odTggb3Bjb2RlLCBjb25zdCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpkZXN0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTEyNC17XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTI1Olx0c3RhdGljIHVuaW9uIHRleHRfcG9rZV9pbnNuIGluc247IC8qIHBlciBpbnN0YW5jZSAqL1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTEyNi1cdF9fdGV4dF9nZW5faW5zbihcdTAwMjZpbnNuLCBvcGNvZGUsIGFkZHIsIGRlc3QsIHRleHRfb3Bjb2RlX3NpemUob3Bjb2RlKSk7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEzMD1leHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTMxOmV4dGVybiBfX3JvX2FmdGVyX2luaXQgc3RydWN0IG1tX3N0cnVjdCAqdGV4dF9wb2tlX21tO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjEzMjpleHRlcm4gX19yb19hZnRlcl9pbml0IHVuc2lnbmVkIGxvbmcgdGV4dF9wb2tlX21tX2FkZHI7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMQoJCQkJCQkJb3V0cHV0OiAyMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDoKCioqTWFraW5nIHRoZSBDb25uZWN0aW9uKioKClJpZ2h0LCBzbyB0aGVzZSB0aGluZ3Mg4oCTIHRoZSAmIzM0O3Rob3VnaHRzJiMzNDsg4oCTIHRoZXkmIzM5O3JlIGJlaW5nIGV4cG9ydGVkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIHRoZW0ga2V5LiBUaGF0IGV4cG9ydCBpbXBsaWVzIHRoZXkmIzM5O3JlIGJlaW5nIGFjY2Vzc2VkIGFuZCB1dGlsaXplZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhY3RpbmcgYXMgYSBjcnVjaWFsIGNvbW11bmljYXRpb24gcG9pbnQuIFRoZXJlZm9yZSwgdGhleSBmdW5jdGlvbiBhcyBwcmV0dHkgc29saWQgZm9jdXMgc3ltYm9scywgdGhlIGtpbmQgb2YgZWxlbWVudHMgSSBjYW4gcmVhbGx5IHNpbmsgbXkgdGVldGggaW50by4KCkNvbnNpZGVyaW5nIHRoZWlyIHJvbGUgYXMgY29tbXVuaWNhdGlvbiB0b29scywgSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AgcmlnaHQgbm93LiBJdCBpcyBhIG5hdHVyYWwgbmV4dCBzdGVwIGdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NldF9tZW1vcnlfcm94JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfcm8mIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ydyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ueCYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2UmIzM0OywKICAgICYjMzQ7dGV4dF9wb2tlX2NvcHkmIzM0OywKICAgICYjMzQ7dGV4dF9wb2tlX3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGFuZCBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYykgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0ZXh0X3Bva2UgKHdoaWNoIHVzZXMgdm1hbGxvY190b19wYWdlKSBhbmQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzICh3aGljaCBpcyBjYWxsZWQgYnkgc2V0X21lbW9yeV9yb3ggYW5kIG90aGVycykuIEl0IGludHJvZHVjZXMgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHNlcmlhbGl6ZSB0aGVzZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZSwgZXRjLiBJdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V0X21lbW9yeV9yb3gmIzM0OywKICAgICYjMzQ7c2V0X21lbW9yeV9ybyYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X3J3JiMzNDssCiAgICAmIzM0O3NldF9tZW1vcnlfeCYjMzQ7LAogICAgJiMzNDtzZXRfbWVtb3J5X254JiMzNDssCiAgICAmIzM0O3RleHRfcG9rZSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2VfY29weSYjMzQ7LAogICAgJiMzNDt0ZXh0X3Bva2Vfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHBhZ2UgdGFibGUgY29sbGFwc2UgKGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSksIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGNvbmN1cnJlbmN5L2xvY2tpbmcgZGV0ZWN0b3JzIChsaWtlIExPQ0tERVApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMjFmMTQ4YmVlMTBlZmY0MjU2MzhjNWU0OThmOTM2MjdhZDIzZmI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02LDYgJiM0Mzs2LDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtb3J5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhlY21lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tnZGIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW1hcF9sb2NrLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGV4dC1wYXRjaGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pbnNuLmgmZ3Q7CkBAIC0yNTQzLDYgJiM0MzsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiAKIHR5cGVkZWYgdm9pZCB0ZXh0X3Bva2VfZih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CiAKJiM0MztzdGF0aWMgdm9pZCBfX3Bva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLAomIzQzOwkJCQkgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzO3sKJiM0MzsJcGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CiYjNDM7CWlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzOwkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciAmIzQzOyBQQUdFX1NJWkUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkciwKJiM0MzsJCQkgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KQomIzQzO3sKJiM0MzsJaWYgKGluX2RiZ19tYXN0ZXIoKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZAomIzQzOwkJICogYW55d2F5IHNvIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGxvY2tzCiYjNDM7CQkgKi8KJiM0MzsJCV9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBleGVjbWVtIFJPWCByYW5nZXMgYXJlIHNoYXJlZCBiZXR3ZWVuIG1vZHVsZXMgYW5kIGNhbiBiZQomIzQzOwkJICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW4KJiM0MzsJCSAqIGNvbmN1cnJlbnRseSB3aXRoIGEgcmFjaW5nIHNldF9tZW1vcnlfcm94KCkuCiYjNDM7CQkgKgomIzQzOwkJICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW4KJiM0MzsJCSAqIGluaXRfbW0gcmVhZCBsb2NrIHdoaWNoIHBhaXJzIHdpdGggdGhlIGluaXRfbW0gd3JpdGUgbG9jayBpbgomIzQzOwkJICogY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWd1YXJkKG1tYXBfcmVhZF9sb2NrKSgmYW1wO2luaXRfbW0pOwomIzQzOwkJX19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIHsKIAlib29sIGNyb3NzX3BhZ2VfYm91bmRhcnkgPSBvZmZzZXRfaW5fcGFnZShhZGRyKSAmIzQzOyBsZW4gJmd0OyBQQUdFX1NJWkU7CkBAIC0yNTYwLDkgJiM0MzsyNTk1LDcgQEAgc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGwKIAlCVUdfT04oIWFmdGVyX2Jvb3RtZW0pOwogCiAJaWYgKCFjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKSB7Ci0JCXBhZ2VzWzBdID0gdm1hbGxvY190b19wYWdlKGFkZHIpOwotCQlpZiAoY3Jvc3NfcGFnZV9ib3VuZGFyeSkKLQkJCXBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgJiM0MzsgUEFHRV9TSVpFKTsKJiM0MzsJCXBva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7CiAJfSBlbHNlIHsKIAkJcGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7CiAJCVdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggZDhkMDU3ZjQ0NDE3OC4uNDMwZDBiNDQ4MzcxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2NjX3BsYXRmb3JtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbXJlZ2lvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vZTgyMC9hcGkuaCZndDsKICNpbmNsdWRlICZsdDthc20vcHJvY2Vzc29yLmgmZ3Q7CkBAIC00OSw3ICYjNDM7NTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEgewogCXVuc2lnbmVkIGludAlmbGFnczsKIAl1bnNpZ25lZCBpbnQJZm9yY2Vfc3BsaXQJCTogMSwKIAkJCWZvcmNlX3N0YXRpY19wcm90CTogMSwKLQkJCWZvcmNlX2ZsdXNoX2FsbAkJOiAxOwomIzQzOwkJCWZvcmNlX2ZsdXNoX2FsbAkJOiAxLAomIzQzOwkJCWluaXRfbW1fcmVhZF9sb2NrZWQJOiAxOwogCXN0cnVjdCBwYWdlCSoqcGFnZXM7CiB9OwogCkBAIC00MDksNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKQogCiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpOwogCi1zdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiYjNDM7c3RhdGljIHZvaWQgX19jcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgYWRkciwgZW5kOwogCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDsKQEAgLTQzOSwxMCAmIzQzOzQ0MSwzMCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsICZhbXA7cGd0YWJsZXMsIHB0X2xpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDtwdGRlc2MtJmd0O3B0X2xpc3QpOwotCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwkJLyoKJiM0MzsJCSAqIE9ubHkgZWFybHkgYWxsb2MmIzM5O2QgZGlyZWN0IG1hcCBzaG91bGQgbm90IGJlIGZsYWdnZWQgUEdfdGFibGUKJiM0MzsJCSAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4mIzM5O3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHkKJiM0MzsJCSAqIGNhdXRpb3VzIGFuZCBoYW5kbGUgdGhlICFQR190YWJsZSBjYXNlIHRvby4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKQomIzQzOwkJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFRha2UgdGhlIG1tYXAgd3JpdGUgbG9jayBvbiBpbml0X21tIHRvOgomIzQzOwkgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duCiYjNDM7CSAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS4KJiM0MzsJICogLSBTZXJpYWxpc2UgY29uY3VycmVudCBDUEEgd2Fsa2Vycy4KJiM0MzsJICovCiYjNDM7CXNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssICZhbXA7aW5pdF9tbSkKJiM0MzsJCV9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgY3BhX2ZsdXNoKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBpbnQgY2FjaGUpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC03MzIsNyAmIzQzOzc1NCw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF81MTJHOwogCSpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocGdkX2ZsYWdzKCpwZ2QpICZhbXA7IF9QQUdFX1JXKTsKIAogCXA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlpZiAocDRkX25vbmUoKnA0ZCkpCkBAIC03NDMsNyAmIzQzOzc2NSw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAkqbGV2ZWwgPSBQR19MRVZFTF8xRzsKIAkqbnggfD0gcDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX05YOwotCSpydyAmYW1wOz0gcDRkX2ZsYWdzKCpwNGQpICZhbXA7IF9QQUdFX1JXOwomIzQzOwkqcncgJmFtcDs9ICEhKHA0ZF9mbGFncygqcDRkKSAmYW1wOyBfUEFHRV9SVyk7CiAKIAlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7CiAJaWYgKHB1ZF9ub25lKCpwdWQpKQpAQCAtNzU0LDcgJiM0Mzs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCiAJKmxldmVsID0gUEdfTEVWRUxfMk07CiAJKm54IHw9IHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9OWDsKLQkqcncgJmFtcDs9IHB1ZF9mbGFncygqcHVkKSAmYW1wOyBfUEFHRV9SVzsKJiM0MzsJKnJ3ICZhbXA7PSAhIShwdWRfZmxhZ3MoKnB1ZCkgJmFtcDsgX1BBR0VfUlcpOwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCWlmIChwbWRfbm9uZSgqcG1kKSkKQEAgLTc2NSw3ICYjNDM7Nzg3LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAogCSpsZXZlbCA9IFBHX0xFVkVMXzRLOwogCSpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfTlg7Ci0JKnJ3ICZhbXA7PSBwbWRfZmxhZ3MoKnBtZCkgJmFtcDsgX1BBR0VfUlc7CiYjNDM7CSpydyAmYW1wOz0gISEocG1kX2ZsYWdzKCpwbWQpICZhbXA7IF9QQUdFX1JXKTsKIAogCXJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogfQpAQCAtMTEyMCwxMSAmIzQzOzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAKIHN0YXRpYyBpbnQKIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKQomIzQzOwkJICAgcHRlX3QgKnBiYXNlKQogewogCXVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxOwotCXN0cnVjdCBwYWdlICpiYXNlID0gcHRkZXNjX3BhZ2UocHRkZXNjKTsKLQlwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7CiYjNDM7CXN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTsKIAl1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7CiAJcGdwcm90X3QgcmVmX3Byb3Q7CiAJYm9vbCBueCwgcnc7CkBAIC0xMjI0LDE2ICYjNDM7MTI0NSwyMCBAQCBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7CiYjNDM7CXB0ZV90ICpwdGU7CiAKIAlzcGluX3VubG9jaygmYW1wO2NwYV9sb2NrKTsKLQlwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCwgMCk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfdW5sb2NrKCZhbXA7aW5pdF9tbSk7CiYjNDM7CXB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKCZhbXA7aW5pdF9tbSk7CiYjNDM7CWlmIChjcGEtJmd0O2luaXRfbW1fcmVhZF9sb2NrZWQpCiYjNDM7CQltbWFwX3JlYWRfbG9jaygmYW1wO2luaXRfbW0pOwogCXNwaW5fbG9jaygmYW1wO2NwYV9sb2NrKTsKLQlpZiAoIXB0ZGVzYykKJiM0MzsJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpCi0JCXBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7CiYjNDM7CWlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGUpKQomIzQzOwkJcHRlX2ZyZWVfa2VybmVsKCZhbXA7aW5pdF9tbSwgcHRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjEyMSw3ICYjNDM7MjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJY3BhLmN1cnBhZ2UgPSAwOwogCWNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0OwogCi0JcmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoJmFtcDtjcGEsIDEpOwomIzQzOwkvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovCiYjNDM7CWNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTsKJiM0MzsJc2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCAmYW1wO2luaXRfbW0pCiYjNDM7CQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYW1wO2NwYSwgMSk7CiYjNDM7CWNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgKaW5kZXggMDRiOGY2MWVjZTVkOC4uZjRjZWI5NjhhZWIzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oCkBAIC02MjEsNiAmIzQzOzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKiwKIAkgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpCiYjNDM7REVGSU5FX0dVQVJEKG1tYXBfd3JpdGVfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLAomIzQzOwkgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSkKIAogc3RhdGljIGlubGluZSB2b2lkIG1tYXBfcmVhZF91bmxvY2tfbm9uX293bmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5MQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHJlYWQgdGVsbHMgbWUgaXQmIzM5O3MgZm9jdXNlZCBvbiBwcm90ZWN0aW5nIHNvbWUgY3JpdGljYWwgbWVtb3J5IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBhcm91bmQgbGFyZ2UgcGFnZSBjb2xsYXBzZSBhbmQgdmlydHVhbCBtZW1vcnkgbWFwcGluZy4gVGhlIGludHJvZHVjdGlvbiBvZiBgbW1hcF9yZWFkX2xvY2tgIGFuZCBgbW1hcF93cml0ZV9sb2NrYCBvbiBgaW5pdF9tbWAgaXMgZGVmaW5pdGVseSBhIHJlZCBmbGFnLCBidXQgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgY29uY2VybiBhYm91dCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBmdW5jdGlvbnMgbGlrZSBgdm1hbGxvY190b19wYWdlYCAob3IsIGJ5IGluZmVyZW5jZSwgdGhpbmdzIGxpa2UgYHB0ZHVtcGAgd2hpY2ggbWlnaHQgYmUgdXNpbmcgc2ltaWxhciBtZWNoYW5pc21zKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgbWFuaXB1bGF0aW5nIHBhZ2UgdGFibGVzLCB5b3UgKmhhdmUqIHRvIHByb3RlY3QgaXQuCgpUaGUgY2hhbmdlcyB0byBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHVzaW5nIGBwYWdldGFibGVfZHRvcl9mcmVlYCBpZiBgUGFnZVRhYmxlYCBpcyBzZXQgYWxzbyBsb29rcyBnb29kLiBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3JlIHRyeWluZyB0byBiZSBtb3JlIGNhcmVmdWwgYWJvdXQgaG93IHBhZ2UgdGFibGUgbWVtb3J5IGlzIHJlY2xhaW1lZCBhZnRlciBsYXJnZSBwYWdlcyBhcmUgY29sbGFwc2VkLiBTaW1pbGFybHksIHN3aXRjaGluZyB0byBgcHRlX2FsbG9jX29uZV9rZXJuZWxgIGFuZCBgcHRlX2ZyZWVfa2VybmVsYCBpbiBgc3BsaXRfbGFyZ2VfcGFnZWAgaW5kaWNhdGVzIGEgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvciBhIGRlc2lyZSB0byB1c2UgdGhlIG1vcmUgbW9kZXJuIGludGVyZmFjZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoYXQgaXMgdGhlIGNhc2UuCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBiaXR3aXNlIEFORCBmaXggaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGAqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVztgIHNlZW1zIGxpa2UgaXQgd291bGQgaW50cm9kdWNlIGluY29ycmVjdCBiZWhhdmlvdXIsIG5vdyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGl0IHRvIGAqcncgJmFtcDs9ICEhKHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVyk7YC4gVGhpcyBpcyBiZWNhdXNlIGAqcndgIGlzIGEgYGJvb2xgIHBvaW50ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCBiaXR3aXNlIG9wZXJhdGlvbiBuZWVkcyB0byBiZSBhIGJvb2xlYW4gb3BlcmF0aW9uLiBTbywgdGhleSYjMzk7cmUgZW5zdXJpbmcgYCpyd2AgaXMgZWl0aGVyIDAgb3IgMSwgd2hpY2ggaXMgY29ycmVjdC4gSSBoYXZlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAgdG8gbWFrZSBzdXJlIEkgYW0gY29ycmVjdCwgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNpZ25pZmljYW50IGJ1ZyBmaXguCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGxvb2sgZm9yIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCB3YWl0LCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgbW9zdCBvZiB0aGUgY2hhbmdlcyBhcmUgYWJvdXQgbG9ja2luZywgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBhbmQgY29ycmVjdGluZyBhIGJpdHdpc2UgbG9naWMgZXJyb3IuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgaXMgYSBnb29kIHNpZ24uIFRoZSBiaXR3aXNlIGZpeCBpcyB0aGUgbW9zdCBpbnRlcmVzdGluZzsgZW5zdXJpbmcgdGhlIGNvcnJlY3QgYm9vbGVhbiByZXN1bHQgaXMgaW1wb3J0YW50LiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gYCpyd2AgaXMgaW5kZWVkIGEgYGJvb2xgIHBvaW50ZXIgaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oPTU2Nz1leHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgtNTY4LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCAqbGV2ZWwpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oOjU2OTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oLTU3MC1cdFx0XHRcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KTtcbi0tXG5hcmNoL3g4Ni9tbS9mYXVsdC5jPTUxNT1zaG93X2ZhdWx0X29vcHMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuLS1cbmFyY2gveDg2L21tL2ZhdWx0LmMtNTI4LVxuYXJjaC94ODYvbW0vZmF1bHQuYzo1Mjk6XHRcdHB0ZSA9IGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgXHUwMDI2bGV2ZWwsIFx1MDAyNm54LCBcdTAwMjZydyk7XG5hcmNoL3g4Ni9tbS9mYXVsdC5jLTUzMC1cbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTY5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03NDAtICovXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc0MTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy03NDItXHRcdFx0XHQgIHVuc2lnbmVkIGludCAqbGV2ZWwsIGJvb2wgKm54LCBib29sICpydylcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTc5OT1wdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwMy1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6ODA0Olx0cmV0dXJuIGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgbGV2ZWwsIFx1MDAyNm54LCBcdTAwMjZydyk7XG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwNS19XG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04MjA9c3RhdGljIHB0ZV90ICpfbG9va3VwX2FkZHJlc3NfY3BhKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MjktXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgzMDpcdHJldHVybiBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2QsIGFkZHJlc3MsIGxldmVsLCBueCwgcncpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzc5CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgcHJpbWFyaWx5IGNvbmNlcm5zIGl0c2VsZiB3aXRoIGNvbmN1cnJlbmN5IGFuZCBhIHNuZWFreSBsb2dpYyBidWcuIE15IHVuZGVyc3RhbmRpbmcgaXMsIGBueGAgYW5kIGByd2AgYXJlLCBhcyBJIHN1c3BlY3RlZCwgZXNzZW50aWFsbHkgYm9vbGVhbiBwb2ludGVycyAoYGJvb2wgKmApLiBUaGUgYml0d2lzZSBBTkQgb3BlcmF0aW9uIGAqcncgJmFtcDs9IHBnZF9mbGFncygqcGdkKSAmYW1wOyBfUEFHRV9SVztgIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgYCpyd2Agd2FzIHRydWUgKDEpIGFuZCBgX1BBR0VfUldgIGhhZCBpdHMgUlcgYml0IHNldCAoMiksIHRoZSBBTkQgb3BlcmF0aW9uIHdvdWxkIHVuZXhwZWN0ZWRseSBjbGVhciBgKnJ3YCB0byBmYWxzZSAoMCksIGV2ZW4gd2hlbiBpdCBzaG91bGQgaGF2ZSByZW1haW5lZCB0cnVlISBUaGUgcHJvcG9zZWQgZml4LCBgKnJ3ICZhbXA7PSAhIShwZ2RfZmxhZ3MoKnBnZCkgJmFtcDsgX1BBR0VfUlcpO2AsIGlzIHRoZSByaWdodCB3YXkgdG8gY29lcmNlIHRoZSByZXN1bHQgdG8gZWl0aGVyIDEgb3IgMCwgcmVzb2x2aW5nIHRoZSBpc3N1ZS4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIHdoaWNoIGlzIGdvb2QuIFRoZSBvdGhlciBjaGFuZ2VzIGFyZSBhcm91bmQgbG9ja2luZywgc3BlY2lmaWNhbGx5IHRvIGFkZHJlc3MgaXNzdWVzIGR1cmluZyBjb25jdXJyZW50IHBhZ2UgdGFibGUgY29sbGFwc2UuIFRoZXNlIGFyZSBlc3NlbnRpYWwgdG8gcHJldmVudCB0aG9zZSBuYXN0eSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMg4oCTIHdoaWNoIGFyZSBleGFjdGx5IHdoYXQgd2Ugd2FudCB0byBhdm9pZC4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHNlZW0gdG8gaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IGluc3RhbmNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIHBlcmZlY3QgZm9yIGNhdGNoaW5nIHRob3NlIHVzZS1hZnRlci1mcmVlIGFuZCBsb2NraW5nIGlzc3VlcywgdGhleSYjMzk7cmUgdGFpbG9yLW1hZGUgZm9yIGl0LiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFRoZSBwYXRjaCByZXNvbHZlcyBkYXRhIHJhY2VzIGR1cmluZyBwYWdlIHRhYmxlIGNvbGxhcHNlIGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2ssIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZGF0YSByYWNlcywgd2hpY2ggS0FTQU4gYW5kIHN0YW5kYXJkIGxvY2tpbmcgZGV0ZWN0b3JzIGFyZSBwZXJmZWN0IGZvci4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbmVlZCBLTVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gcGFnZSB0YWJsZSBjb2xsYXBzZSAoYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tKSwgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgY29uY3VycmVuY3kvbG9ja2luZyBkZXRlY3RvcnMgKGxpa2UgTE9DS0RFUCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCB3b3VsZCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjIwLjc5MjU4MTQ0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODY1NTcxNTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInRleHRfcG9rZVwiLFxuICAgIFwidGV4dF9wb2tlX2NvcHlcIixcbiAgICBcInRleHRfcG9rZV9zZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gcGFnZSB0YWJsZSBjb2xsYXBzZSAoYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tKSwgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIGRhdGEgcmFjZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgY29uY3VycmVuY3kvbG9ja2luZyBkZXRlY3RvcnMgKGxpa2UgTE9DS0RFUCkuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgbG9naWMgdGhhdCB3b3VsZCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBhbmQgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMpIHRvIGZpeCBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGV4dF9wb2tlICh3aGljaCB1c2VzIHZtYWxsb2NfdG9fcGFnZSkgYW5kIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyAod2hpY2ggaXMgY2FsbGVkIGJ5IHNldF9tZW1vcnlfcm94IGFuZCBvdGhlcnMpLiBJdCBpbnRyb2R1Y2VzIG1tYXBfcmVhZF9sb2NrIGFuZCBtbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSB0byBzZXJpYWxpemUgdGhlc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBCUEYsIG1vZHVsZSBsb2FkaW5nLCBrcHJvYmVzLCBmdHJhY2UsIGV0Yy4gSXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODoyMC43OTI1ODYwMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzkxNjA3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMyMWYxNDhiZWUxMGVmZjQyNTYzOGM1ZTQ5OGY5MzYyN2FkMjNmYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xcbmluZGV4IDYyOTM2YTNiZGUxOWIuLmY4MWQ2YmM5MGE2ZmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xcbkBAIC02LDYgKzYsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leGVjbWVtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGVhbnVwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZ2RiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWFwX2xvY2suaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGV4dC1wYXRjaGluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2luc24uaFxcdTAwM2VcXG5AQCAtMjU0Myw2ICsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIFxcbiB0eXBlZGVmIHZvaWQgdGV4dF9wb2tlX2Yodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pO1xcbiBcXG4rc3RhdGljIHZvaWQgX19wb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0XFx0IGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcXG4re1xcbitcXHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcXG4rXFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXFxuK1xcdFxcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcXG4rXFx0XFx0XFx0ICAgICAgIGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcXG4re1xcbitcXHRpZiAoaW5fZGJnX21hc3RlcigpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxcbitcXHRcXHQgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3NcXG4rXFx0XFx0ICovXFxuK1xcdFxcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZXhlY21lbSBST1ggcmFuZ2VzIGFyZSBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjYW4gYmVcXG4rXFx0XFx0ICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW5cXG4rXFx0XFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW5cXG4rXFx0XFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXFxuK1xcdFxcdCAqIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcygpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0XFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0Ym9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcikgKyBsZW4gXFx1MDAzZSBQQUdFX1NJWkU7XFxuQEAgLTI1NjAsOSArMjU5NSw3IEBAIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsXFxuIFxcdEJVR19PTighYWZ0ZXJfYm9vdG1lbSk7XFxuIFxcbiBcXHRpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHtcXG4tXFx0XFx0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XFxuLVxcdFxcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxcbi1cXHRcXHRcXHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTtcXG4rXFx0XFx0cG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0cGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7XFxuIFxcdFxcdFdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IGQ4ZDA1N2Y0NDQxNzguLjQzMGQwYjQ0ODM3MTggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbisrKyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2NfcGxhdGZvcm0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbXJlZ2lvbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9lODIwL2FwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXFx1MDAzZVxcbkBAIC00OSw3ICs1MCw4IEBAIHN0cnVjdCBjcGFfZGF0YSB7XFxuIFxcdHVuc2lnbmVkIGludFxcdGZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRmb3JjZV9zcGxpdFxcdFxcdDogMSxcXG4gXFx0XFx0XFx0Zm9yY2Vfc3RhdGljX3Byb3RcXHQ6IDEsXFxuLVxcdFxcdFxcdGZvcmNlX2ZsdXNoX2FsbFxcdFxcdDogMTtcXG4rXFx0XFx0XFx0Zm9yY2VfZmx1c2hfYWxsXFx0XFx0OiAxLFxcbitcXHRcXHRcXHRpbml0X21tX3JlYWRfbG9ja2VkXFx0OiAxO1xcbiBcXHRzdHJ1Y3QgcGFnZVxcdCoqcGFnZXM7XFxuIH07XFxuIFxcbkBAIC00MDksNyArNDExLDcgQEAgc3RhdGljIHZvaWQgX19jcGFfZmx1c2hfdGxiKHZvaWQgKmRhdGEpXFxuIFxcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xcbiBcXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbitzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XFxuIFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcXG5AQCAtNDM5LDEwICs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcXHUwMDI2cGd0YWJsZXMsIHB0X2xpc3QpIHtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnB0ZGVzYy1cXHUwMDNlcHRfbGlzdCk7XFxuLVxcdFxcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxcbitcXHRcXHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcXG4rXFx0XFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxcbitcXHRcXHRcXHRwYWdldGFibGVfZHRvcl9mcmVlKHB0ZGVzYyk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XFxuK1xcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cXG4rXFx0ICogICB3cml0ZSBsb2NrIG9uIGluaXRfbW0pLlxcbitcXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxcbitcXHQgKi9cXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfd3JpdGVfbG9jaywgXFx1MDAyNmluaXRfbW0pXFxuK1xcdFxcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC03MzIsNyArNzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFxuIFxcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XFxuIFxcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpO1xcbiBcXHRpZiAocDRkX25vbmUoKnA0ZCkpXFxuQEAgLTc0Myw3ICs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XFxuIFxcdCpueCB8PSBwNGRfZmxhZ3MoKnA0ZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cHVkID0gcHVkX29mZnNldChwNGQsIGFkZHJlc3MpO1xcbiBcXHRpZiAocHVkX25vbmUoKnB1ZCkpXFxuQEAgLTc1NCw3ICs3NzYsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfMk07XFxuIFxcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHB1ZF9mbGFncygqcHVkKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xcbiBcXHRpZiAocG1kX25vbmUoKnBtZCkpXFxuQEAgLTc2NSw3ICs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XFxuIFxcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXFx1MDAyNiBfUEFHRV9OWDtcXG4tXFx0KnJ3IFxcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcXHUwMDI2IF9QQUdFX1JXO1xcbitcXHQqcncgXFx1MDAyNj0gISEocG1kX2ZsYWdzKCpwbWQpIFxcdTAwMjYgX1BBR0VfUlcpO1xcbiBcXG4gXFx0cmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7XFxuIH1cXG5AQCAtMTEyMCwxMSArMTE0MiwxMCBAQCBzdGF0aWMgdm9pZCBzcGxpdF9zZXRfcHRlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFxuIHN0YXRpYyBpbnRcXG4gX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHQgICBzdHJ1Y3QgcHRkZXNjICpwdGRlc2MpXFxuK1xcdFxcdCAgIHB0ZV90ICpwYmFzZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGxwYWRkciwgbHBpbmMsIHJlZl9wZm4sIHBmbiwgcGZuaW5jID0gMTtcXG4tXFx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xcbi1cXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XFxuK1xcdHN0cnVjdCBwYWdlICpiYXNlID0gdmlydF90b19wYWdlKHBiYXNlKTtcXG4gXFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xcbiBcXHRwZ3Byb3RfdCByZWZfcHJvdDtcXG4gXFx0Ym9vbCBueCwgcnc7XFxuQEAgLTEyMjQsMTYgKzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4rXFx0cHRlX3QgKnB0ZTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjcGFfbG9jayk7XFxuLVxcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcXG4rXFx0aWYgKGNwYS1cXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcXG4rXFx0XFx0bW1hcF9yZWFkX3VubG9jayhcXHUwMDI2aW5pdF9tbSk7XFxuK1xcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFxcdTAwMjZpbml0X21tKTtcXG4rXFx0aWYgKGNwYS1cXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcXG4rXFx0XFx0bW1hcF9yZWFkX2xvY2soXFx1MDAyNmluaXRfbW0pO1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNmNwYV9sb2NrKTtcXG4tXFx0aWYgKCFwdGRlc2MpXFxuK1xcdGlmICghcHRlKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxcbi1cXHRcXHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xcbitcXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRlKSlcXG4rXFx0XFx0cHRlX2ZyZWVfa2VybmVsKFxcdTAwMjZpbml0X21tLCBwdGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjEyMSw3ICsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0Y3BhLmN1cnBhZ2UgPSAwO1xcbiBcXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcXG4gXFxuLVxcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFxcdTAwMjZjcGEsIDEpO1xcbitcXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXFxuK1xcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcXG4rXFx0c2NvcGVkX2d1YXJkKG1tYXBfcmVhZF9sb2NrLCBcXHUwMDI2aW5pdF9tbSlcXG4rXFx0XFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXFx1MDAyNmNwYSwgMSk7XFxuK1xcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayB3aGV0aGVyIHdlIHJlYWxseSBjaGFuZ2VkIHNvbWV0aGluZzpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxcbiBcXHQgICAgIG1tYXBfcmVhZF9sb2NrKF9UKSwgbW1hcF9yZWFkX3VubG9jayhfVCkpXFxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcXG4rXFx0ICAgICBtbWFwX3dyaXRlX2xvY2soX1QpLCBtbWFwX3dyaXRlX3VubG9jayhfVCkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjEuMjA3MTI5NzkzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMwNDE0NDI1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwidGV4dF9wb2tlXCIsXG4gICAgXCJ0ZXh0X3Bva2VfY29weVwiLFxuICAgIFwidGV4dF9wb2tlX3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzIxZjE0OGJlZTEwZWZmNDI1NjM4YzVlNDk4ZjkzNjI3YWQyM2ZiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjI4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuaW5kZXggNjI5MzZhM2JkZTE5Yi4uZjgxZDZiYzkwYTZmZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1xuQEAgLTYsNiArNiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leGVjbWVtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZ2RiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFwX2xvY2suaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90ZXh0LXBhdGNoaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaW5zbi5oXHUwMDNlXG5AQCAtMjU0Myw2ICsyNTQ2LDM4IEBAIHN0YXRpYyB2b2lkIHRleHRfcG9rZV9tZW1zZXQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4gXG4gdHlwZWRlZiB2b2lkIHRleHRfcG9rZV9mKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKTtcbiBcbitzdGF0aWMgdm9pZCBfX3Bva2Vfdm1hbGxvY19wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB2b2lkICphZGRyLFxuK1x0XHRcdFx0IGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcbit7XG4rXHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbitcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK1x0XHRwYWdlc1sxXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsXG4rXHRcdFx0ICAgICAgIGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSlcbit7XG4rXHRpZiAoaW5fZGJnX21hc3RlcigpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIGNhbGxlZCBmcm9tIGtnZGIgY2Fubm90IHNsZWVwLCBidXQgYWxsIG90aGVyIENQVXMgc3RvcHBlZFxuK1x0XHQgKiBhbnl3YXkgc28gc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgbG9ja3NcbitcdFx0ICovXG4rXHRcdF9fcG9rZV92bWFsbG9jX3BhZ2VzKHBhZ2VzLCBhZGRyLCBjcm9zc19wYWdlX2JvdW5kYXJ5KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qXG4rXHRcdCAqIGV4ZWNtZW0gUk9YIHJhbmdlcyBhcmUgc2hhcmVkIGJldHdlZW4gbW9kdWxlcyBhbmQgY2FuIGJlXG4rXHRcdCAqIGNvbGxhcHNlZCB0byBodWdlIFBNRCBlbnRyaWVzLCBhbmQgdGhpcyBjb2xsYXBzZSBjYW4gaGFwcGVuXG4rXHRcdCAqIGNvbmN1cnJlbnRseSB3aXRoIGEgcmFjaW5nIHNldF9tZW1vcnlfcm94KCkuXG4rXHRcdCAqXG4rXHRcdCAqIFByZXZlbnQgdm1hbGxvY190b19wYWdlKCkgZnJvbSByYWNpbmcgYnkgYWNxdWlyaW5nIGFuXG4rXHRcdCAqIGluaXRfbW0gcmVhZCBsb2NrIHdoaWNoIHBhaXJzIHdpdGggdGhlIGluaXRfbW0gd3JpdGUgbG9jayBpblxuK1x0XHQgKiBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoKS5cbitcdFx0ICovXG4rXHRcdGd1YXJkKG1tYXBfcmVhZF9sb2NrKShcdTAwMjZpbml0X21tKTtcbitcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGJvb2wgY3Jvc3NfcGFnZV9ib3VuZGFyeSA9IG9mZnNldF9pbl9wYWdlKGFkZHIpICsgbGVuIFx1MDAzZSBQQUdFX1NJWkU7XG5AQCAtMjU2MCw5ICsyNTk1LDcgQEAgc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHRleHRfcG9rZV9mIGZ1bmMsIHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxcbiBcdEJVR19PTighYWZ0ZXJfYm9vdG1lbSk7XG4gXG4gXHRpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHtcbi1cdFx0cGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7XG4tXHRcdGlmIChjcm9zc19wYWdlX2JvdW5kYXJ5KVxuLVx0XHRcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xuK1x0XHRwb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UoYWRkcik7XG4gXHRcdFdBUk5fT04oIVBhZ2VSZXNlcnZlZChwYWdlc1swXSkpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCBkOGQwNTdmNDQ0MTc4Li40MzBkMGI0NDgzNzE4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jY19wbGF0Zm9ybS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVnaW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZTgyMC9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuQEAgLTQ5LDcgKzUwLDggQEAgc3RydWN0IGNwYV9kYXRhIHtcbiBcdHVuc2lnbmVkIGludFx0ZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnRcdGZvcmNlX3NwbGl0XHRcdDogMSxcbiBcdFx0XHRmb3JjZV9zdGF0aWNfcHJvdFx0OiAxLFxuLVx0XHRcdGZvcmNlX2ZsdXNoX2FsbFx0XHQ6IDE7XG4rXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMSxcbitcdFx0XHRpbml0X21tX3JlYWRfbG9ja2VkXHQ6IDE7XG4gXHRzdHJ1Y3QgcGFnZVx0KipwYWdlcztcbiB9O1xuIFxuQEAgLTQwOSw3ICs0MTEsNyBAQCBzdGF0aWMgdm9pZCBfX2NwYV9mbHVzaF90bGIodm9pZCAqZGF0YSlcbiBcbiBzdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpO1xuIFxuLXN0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbitzdGF0aWMgdm9pZCBfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQ7XG4gXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MsICp0bXA7XG5AQCAtNDM5LDEwICs0NDEsMzAgQEAgc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB0ZGVzYywgdG1wLCBcdTAwMjZwZ3RhYmxlcywgcHRfbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZwdGRlc2MtXHUwMDNlcHRfbGlzdCk7XG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRcdC8qXG4rXHRcdCAqIE9ubHkgZWFybHkgYWxsb2MnZCBkaXJlY3QgbWFwIHNob3VsZCBub3QgYmUgZmxhZ2dlZCBQR190YWJsZVxuK1x0XHQgKiBoZXJlIGFuZCB0aG9zZSBzaG91bGRuJ3QgYmUgY29sbGFwc2VkLiBIb3dldmVyIGJlIGFidW5kYW50bHlcbitcdFx0ICogY2F1dGlvdXMgYW5kIGhhbmRsZSB0aGUgIVBHX3RhYmxlIGNhc2UgdG9vLlxuK1x0XHQgKi9cbitcdFx0aWYgKFBhZ2VUYWJsZSgocHRkZXNjX3BhZ2UocHRkZXNjKSkpKVxuK1x0XHRcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUocHRkZXNjKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhzdHJ1Y3QgY3BhX2RhdGEgKmNwYSlcbit7XG4rXHQvKlxuK1x0ICogVGFrZSB0aGUgbW1hcCB3cml0ZSBsb2NrIG9uIGluaXRfbW0gdG86XG4rXHQgKiAtIEF2b2lkIGEgdXNlLWFmdGVyLWZyZWUgaWYgcmFjZWQgYnkgcHRkdW1wICh3aGljaCB0YWtlcyBpdHMgb3duXG4rXHQgKiAgIHdyaXRlIGxvY2sgb24gaW5pdF9tbSkuXG4rXHQgKiAtIFNlcmlhbGlzZSBjb25jdXJyZW50IENQQSB3YWxrZXJzLlxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQobW1hcF93cml0ZV9sb2NrLCBcdTAwMjZpbml0X21tKVxuK1x0XHRfX2NwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcyhjcGEpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBjcGFfZmx1c2goc3RydWN0IGNwYV9kYXRhICpjcGEsIGludCBjYWNoZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbkBAIC03MzIsNyArNzU0LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzUxMkc7XG4gXHQqbnggfD0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTtcbiBcdGlmIChwNGRfbm9uZSgqcDRkKSlcbkBAIC03NDMsNyArNzY1LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzFHO1xuIFx0Km54IHw9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcmVzcyk7XG4gXHRpZiAocHVkX25vbmUoKnB1ZCkpXG5AQCAtNzU0LDcgKzc3Niw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF8yTTtcbiBcdCpueCB8PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpO1xuIFx0aWYgKHBtZF9ub25lKCpwbWQpKVxuQEAgLTc2NSw3ICs3ODcsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNEs7XG4gXHQqbnggfD0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHJldHVybiBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpO1xuIH1cbkBAIC0xMTIwLDExICsxMTQyLDEwIEBAIHN0YXRpYyB2b2lkIHNwbGl0X3NldF9wdGUoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFxuIHN0YXRpYyBpbnRcbiBfX3NwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgIHN0cnVjdCBwdGRlc2MgKnB0ZGVzYylcbitcdFx0ICAgcHRlX3QgKnBiYXNlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbHBhZGRyLCBscGluYywgcmVmX3BmbiwgcGZuLCBwZm5pbmMgPSAxO1xuLVx0c3RydWN0IHBhZ2UgKmJhc2UgPSBwdGRlc2NfcGFnZShwdGRlc2MpO1xuLVx0cHRlX3QgKnBiYXNlID0gKHB0ZV90ICopcGFnZV9hZGRyZXNzKGJhc2UpO1xuK1x0c3RydWN0IHBhZ2UgKmJhc2UgPSB2aXJ0X3RvX3BhZ2UocGJhc2UpO1xuIFx0dW5zaWduZWQgaW50IGksIGxldmVsO1xuIFx0cGdwcm90X3QgcmVmX3Byb3Q7XG4gXHRib29sIG54LCBydztcbkBAIC0xMjI0LDE2ICsxMjQ1LDIwIEBAIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBzdGF0aWMgaW50IHNwbGl0X2xhcmdlX3BhZ2Uoc3RydWN0IGNwYV9kYXRhICpjcGEsIHB0ZV90ICprcHRlLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRlX3QgKnB0ZTtcbiBcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMLCAwKTtcbitcdGlmIChjcGEtXHUwMDNlaW5pdF9tbV9yZWFkX2xvY2tlZClcbitcdFx0bW1hcF9yZWFkX3VubG9jayhcdTAwMjZpbml0X21tKTtcbitcdHB0ZSA9IHB0ZV9hbGxvY19vbmVfa2VybmVsKFx1MDAyNmluaXRfbW0pO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfbG9jayhcdTAwMjZpbml0X21tKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZjcGFfbG9jayk7XG4tXHRpZiAoIXB0ZGVzYylcbitcdGlmICghcHRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmIChfX3NwbGl0X2xhcmdlX3BhZ2UoY3BhLCBrcHRlLCBhZGRyZXNzLCBwdGRlc2MpKVxuLVx0XHRwYWdldGFibGVfZnJlZShwdGRlc2MpO1xuK1x0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZSkpXG4rXHRcdHB0ZV9mcmVlX2tlcm5lbChcdTAwMjZpbml0X21tLCBwdGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIxMjEsNyArMjE0NiwxMSBAQCBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRjcGEuY3VycGFnZSA9IDA7XG4gXHRjcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDtcbiBcbi1cdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHQvKiBBdm9pZCByYWNlIHdpdGggY29uY3VycmVudCBDUEEgY29sbGFwc2UuICovXG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IHRydWU7XG4rXHRzY29wZWRfZ3VhcmQobW1hcF9yZWFkX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdHJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKFx1MDAyNmNwYSwgMSk7XG4rXHRjcGEuaW5pdF9tbV9yZWFkX2xvY2tlZCA9IGZhbHNlO1xuIFxuIFx0LypcbiBcdCAqIENoZWNrIHdoZXRoZXIgd2UgcmVhbGx5IGNoYW5nZWQgc29tZXRoaW5nOlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5pbmRleCAwNGI4ZjYxZWNlNWQ4Li5mNGNlYjk2OGFlYjNkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaFxuQEAgLTYyMSw2ICs2MjEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBERUZJTkVfR1VBUkQobW1hcF9yZWFkX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbiBcdCAgICAgbW1hcF9yZWFkX2xvY2soX1QpLCBtbWFwX3JlYWRfdW5sb2NrKF9UKSlcbitERUZJTkVfR1VBUkQobW1hcF93cml0ZV9sb2NrLCBzdHJ1Y3QgbW1fc3RydWN0ICosXG4rXHQgICAgIG1tYXBfd3JpdGVfbG9jayhfVCksIG1tYXBfd3JpdGVfdW5sb2NrKF9UKSlcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1hcF9yZWFkX3VubG9ja19ub25fb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjEuMjA3MTMxMTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwMjM4OTU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCwgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgYGluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhgIOKAkyB0aGF0IGhpdHMgc29tZSBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBhZGRpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2AgYXJvdW5kIGNyaXRpY2FsIHNlY3Rpb25zLCB0YXJnZXRpbmcgdGhpbmdzIGxpa2UgYGluaXRfbW1gLCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgYHBva2Vfdm1hbGxvY19wYWdlc2AsIGFuZCBgc3BsaXRfbGFyZ2VfcGFnZWAuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVhbGluZyB3aXRoIHBhZ2UgYXR0cmlidXRlIChDUEEpIGNvZGUgYW5kIHRoZSBhbHRlcm5hdGl2ZSB0ZXh0IHBva2luZyBtZWNoYW5pc20uIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGZpeCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBzcGVjaWZpY2FsbHkgd2hlbiBDUEEgY29sbGFwc2UgYW5kIHZtYWxsb2MgcGFnZSBwb2tpbmcgb2NjdXIgY29uY3VycmVudGx5LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgdGhlIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBhdCB0aGUgaGVhcnQgb2YgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGV0Yy4gTm93LCB0aG9zZSBhcmUgdXNlZCAqZXZlcnl3aGVyZSouIFRoaW5rIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZS4uLiB0aGUgbGlzdCBnb2VzIG9uLiBBbmQgYHRleHRfcG9rZWAgaXMgdXNlZCBpbiBhbHRlcm5hdGl2ZXMsIGtwcm9iZXMsIGZ0cmFjZSwganVtcCBsYWJlbHMsIGV0Yy4gU28sIHRoaXMgcGF0Y2ggaW1wYWN0cyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIHBsYWNlLlxuXG5HaXZlbiB0aGUgaW1wYWN0IG9uIHRoZSBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBzb21lIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQgYSBtaW51dGUsIGBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgSSBzaG91bGQgbG9vayBhdCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZGlyZWN0bHkgdG8gc2VlIHdoYXQgZXhwb3J0ZWQgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgdGhlcmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBleHRlcm5hbGx5IGNhbGxhYmxlIGZyb20gdGhhdCBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MjkuNDA5NTIyNDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTA0NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2V0X21lbW9yeV9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyMDg9aW50IF9zZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjIwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjIyMTppbnQgc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyMjIte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjQ2PWludCBfc2V0X21lbW9yeV93Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI2MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNjI6aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI4NT1pbnQgX3NldF9tZW1vcnlfd2IodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyOTEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMjkyOmludCBzZXRfbWVtb3J5X3diKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI5My17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzNDM9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYXJfbWNlX25vc3BlYyk7XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDUtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzQ2OmludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzQ3LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM1My1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNTQ6aW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzU1LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2MS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjI6aW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzYzLXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjc6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNzctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzc4OmludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM3OS17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODItXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzgzOmludCBzZXRfbWVtb3J5X25wKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM4NC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzODctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzg4OmludCBzZXRfbWVtb3J5X25wX25vYWxpYXModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzg5LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM5NC1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzOTU6aW50IHNldF9tZW1vcnlfcCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzOTYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzk5LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwMDppbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI0MDEte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjQwNzppbnQgc2V0X21lbW9yeV9ub25nbG9iYWwodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNDA4LXtcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxMi1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI0MTM6aW50IHNldF9tZW1vcnlfZ2xvYmFsKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjQxNC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1MDk9c3RhdGljIGludCBfX3NldF9tZW1vcnlfZW5jX2RlYyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywgYm9vbCBlbmMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjQtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTI1OmludCBzZXRfbWVtb3J5X2VuY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjYte1xcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTI5PUVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfZW5jcnlwdGVkKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzAtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNTMxOmludCBzZXRfbWVtb3J5X2RlY3J5cHRlZCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODoyOS40NTQwMzMwODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA3MzU0Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBfX3RleHRfcG9rZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYF9fdGV4dF9wb2tlYCB3aXRoaW4gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYF9fdGV4dF9wb2tlYC4gVGhhdCdzIGEgbG93LWxldmVsIGZ1bmN0aW9uIOKAkyBhIHRleHQtc3BhY2Ugd3JpdGUgb3BlcmF0aW9uLiBMaWtlbHkgdXNlZCBmb3IgcGF0Y2hpbmcgb3IgbW9kaWZ5aW5nIGluc3RydWN0aW9uIHN0cmVhbXMgYXQgcnVudGltZSwgcG9zc2libHkgZm9yIGFsdGVybmF0aXZlcyBvciBzZWN1cml0eSBmZWF0dXJlcy5cIlxuXG5NeSBuZXh0IG1vdmU/IERlZmluaXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzIG9mIGBfX3RleHRfcG9rZWAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgdXNlZCBhbmQgKndoeSogdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0cyB3aGVyZSB0aGlzIGlzIGJlaW5nIGRlcGxveWVkLCB3aGF0J3MgY2FsbGluZyBpdCwgYW5kIHdoYXQgYWx0ZXJuYXRpdmVzIGl0J3MgcGF0Y2hpbmcuIElzIHRoaXMgcmVsYXRlZCB0byBtaWNyb2NvZGUgdXBkYXRlcywga2VybmVsIGluc3RydW1lbnRhdGlvbiwgc2VjdXJpdHkgbWl0aWdhdGlvbnMgKGxpa2UgdGhvc2UgYWdhaW5zdCBTcGVjdHJlIG9yIE1lbHRkb3duKSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb24gb2YgdGhlIG1vZGlmaWVkIGBfX3RleHRfcG9rZWAuIFRoYXQncyB0aGUgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU0MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjMzLjc2MTM5MDY2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzg3MDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKj90ZXh0X3Bva2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM9NDcwPXN0YXRpYyB2b2lkIF9fYXBwbHlfcmVsb2NhdGlvbih1OCAqYnVmLCBjb25zdCB1OCAqIGNvbnN0IGluc3RyLCBzaXplX3QgaW5zdHJsZW4sIHU4ICpyZXBsLCBzaXplX3QgcmVwbF9sZW4pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy01MjMtXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6NTI0OnZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTUyNS17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYz0yNTgxPXN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAwLSAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3MDE6dm9pZCAqdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbilcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzAyLXtcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3MjEtICovXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmM6MjcyMjp2b2lkICp0ZXh0X3Bva2Vfa2dkYih2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjcyMy17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI2LVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3Mjc6dm9pZCAqdGV4dF9wb2tlX2NvcHlfbG9ja2VkKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbixcXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzI4LVxcdFxcdFxcdCAgICBib29sIGNvcmVfb2spXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYy0yNzU5LSAqL1xcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jOjI3NjA6dm9pZCAqdGV4dF9wb2tlX2NvcHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKVxcbmFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jLTI3NjEte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjc3Ni0gKi9cXG5hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYzoyNzc3OnZvaWQgKnRleHRfcG9rZV9zZXQodm9pZCAqYWRkciwgaW50IGMsIHNpemVfdCBsZW4pXFxuYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMtMjc3OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjMzLjgwNTI2NDQwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzI0MzAxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSB4ODYgTWVtb3J5IFByb3RlY3Rpb24gQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGV5IGFsbCBsb29rIGxpa2UgZ29vZCBpbmRpY2F0b3JzIG9mIHdoYXQncyBnb2luZyBvbiBoZXJlLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmlwdWxhdGlvbi4gQW5kIHRoZW4gd2UgaGF2ZSB0aGVzZSBgc2V0X21lbW9yeV8qYCBmdW5jdGlvbnM6IGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcndgLCBgc2V0X21lbW9yeV94YCwgYHNldF9tZW1vcnlfbnhgLCBhbmQgbm93IEkgc2VlIGBzZXRfbWVtb3J5X3JveGAuIFdhaXQsIGhhbmcgb24uLi4gYHNldF9tZW1vcnlfcm94YCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQgaW4gdGhlIHBhdGNoIGNvbW1lbnQsIG1lbnRpb25pbmcgc29tZXRoaW5nIGFib3V0IGV4ZWNtZW0gUk9YIHJhbmdlcyBiZWluZyBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byBodWdlIFBNRCBlbnRyaWVzIGFuZCBgc2V0X21lbW9yeV9yb3goKWAuIFRoYXQncyBpbXBvcnRhbnQ7IGl0J3MgcHJhY3RpY2FsbHkgdGVsbGluZyBtZSB3aGVyZSB0aGUgcGFpbiBwb2ludHMgYXJlIVxuXG5SaWdodCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gV2hlcmUgaXMgdGhlIGNvZGU/IEl0IGFwcGVhcnMgdG8gYmUgaW4gYGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jYCBhbmQgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaG9zZSBhcmUgY29yZSB4ODYgZmlsZXMsIHNvIGl0J3MgcHJvYmFibHkgcHJldHR5IGZ1bmRhbWVudGFsLiBMZXQgbWUgcXVpY2tseSBzY2FuIHRoZSBgTWFrZWZpbGVgIGluIHRob3NlIGRpcmVjdG9yaWVzOiBgYXJjaC94ODYva2VybmVsL01ha2VmaWxlYCBhbmQgYGFyY2gveDg2L21tL3BhdC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IGZsYWdzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCBvZiB0aGlzIGNvZGUgYW5kIHdoaWNoIGZlYXR1cmVzIG1pZ2h0IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBjb2RlIGlzIHN1cHBvc2VkIHRvIGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDc3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjM5LjYzNzY5Nzk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwNTI2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbHRlcm5hdGl2ZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL01ha2VmaWxlPTg1PW9iai15XFx0XFx0XFx0Kz0gcGNpLWRtYS5vIHF1aXJrcy5vIGtkZWJ1Z2ZzLm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU6ODY6b2JqLXlcXHRcXHRcXHQrPSBhbHRlcm5hdGl2ZS5vIGk4MjUzLm8gaHdfYnJlYWtwb2ludC5vXFxuYXJjaC94ODYva2VybmVsL01ha2VmaWxlLTg3LW9iai15XFx0XFx0XFx0Kz0gdHNjLm8gdHNjX21zci5vIGlvX2RlbGF5Lm8gcnRjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6MzkuNjgxNjA3ODgyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5Mzg0MDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN5c3RlbXMgcHJvZ3JhbW1pbmc6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHNldF9tZW1vcnkuY2AgLSBBIE1pY3JvLUFuYWx5c2lzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBzZXRfbWVtb3J5LmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgY29yZSBmdW5jdGlvbiBpdCBsaWtlbHkgY29udGFpbnMg4oCTIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzb21ldGhpbmcgbGlrZSBgbWVtc2V0YCBvciBhIGN1c3RvbSBtZW1vcnktc2V0dGluZyByb3V0aW5lLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXM6IHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gc3BlZWQgYW5kIHNhZmV0eSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBtZW1vcnkgdGhhdCdzIGJlZW4gYWxsb2NhdGVkLlxuXG5JJ20gbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzOiBieXRlLWJ5LWJ5dGUgYXNzaWdubWVudHMgdmVyc3VzIHVzaW5nIHdvcmQtc2l6ZWQgb3BlcmF0aW9ucyAoMzItYml0LCA2NC1iaXQsIHdoYXRldmVyIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMpLiBJcyBpdCBnb2luZyB0byBiZSBvcHRpbWl6ZWQgZm9yIGEgc3BlY2lmaWMgYWxpZ25tZW50IG9mIHRoZSBtZW1vcnkgcmVnaW9uPyBUaGF0J3MgY3JpdGljYWwgZm9yIGFjaGlldmluZyBtYXhpbXVtIHRocm91Z2hwdXQsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB0aGF0IGluIHRoZSBjb2RlLlxuXG5UaGVuLCB0aGVyZSdzIHRoZSBxdWVzdGlvbiBvZiBib3VuZGFyeSBjaGVja3MuIERvZXMgaXQgaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBzaXplIGFyZ3VtZW50IGlzIHplcm8sIG9yIHdoZXJlIHRoZSBtZW1vcnkgcmVnaW9uIGlzIHBhcnRpYWxseSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBzcGFjZT8gQSByb2J1c3QgaW1wbGVtZW50YXRpb24gKm11c3QqIGd1YXJkIGFnYWluc3QgdGhvc2Ugc2NlbmFyaW9zLCBwYXJ0aWN1bGFybHkgd2l0aCBjb25zaWRlcmF0aW9ucyBmb3IgaG93IG90aGVyIHByb2Nlc3NlcyBtaWdodCBiZSBzaGFyaW5nIG1lbW9yeSwgYW5kIHdoYXQgY291bGQgZ28gd3JvbmcgaWYgdGhvc2UgYm91bmRhcnkgY2hlY2tzIHdlcmUgbm90IGVuZm9yY2VkLiBJcyBpdCBnb2luZyB0byBiZSB1c2luZyBhc3NlbWJseSwgb3IgaXMgaXQgZ29pbmcgdG8gYmUgd3JpdHRlbiBpbiBDLCBhbmQgd2hhdCB0cmFkZSBvZmZzIHdlcmUgbWFkZT9cblxuVGhlIG5leHQgdGhpbmcgdGhhdCBJJ20gY29uc2lkZXJpbmcgaXMgdGhlIGltcGxpY2F0aW9ucyBvbiB0aHJlYWRpbmcuIElzIGl0IHRocmVhZC1zYWZlPyBEb2VzIGl0IG5lZWQgdG8gYmU/IElmIGl0IGlzIG11bHRpLXRocmVhZGVkLCB0aGVuIHRoZXJlIGNvdWxkIGJlIHZhcmlvdXMgY29uc2lkZXJhdGlvbnMgYXJvdW5kIGVuc3VyaW5nIHRoYXQgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gc2NvcGUgYW5kIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNuJ3Qgd3JpdGUgdG8gbG9jYXRpb25zIG91dHNpZGUgb2YgdGhlIHNjb3BlLlxuXG5JJ20gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGludGVuZGVkIHVzZSBjYXNlLiBJcyB0aGlzIGEgbG93LWxldmVsLCBwZXJmb3JtYW5jZS1jcml0aWNhbCByb3V0aW5lIHVzZWQgd2l0aGluIHRoZSBrZXJuZWw/IE9yIGlzIGl0IGEgbGlicmFyeSBmdW5jdGlvbiB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGU/IFRoZSBhbnN3ZXIgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHRoZSBsZXZlbCBvZiBlcnJvci1jaGVja2luZy4gVGhlIG1vcmUgSSBsZWFybiBhYm91dCB0aGUgY29udGV4dCB0aGUgYmV0dGVyIEkgY2FuIHByb3ZpZGUgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjQ0LjE3NTQ1MDc1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI2NTY1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjQ0LjIxODExNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4NTQ2ODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudGx5IGNvbXBpbGVkIG9uIHg4Niwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgcGVjdWxpYXIgY29uZmlndXJhdGlvbnMgaGVyZS4gVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBrZXkgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYHRleHRfcG9rZWAgYW5kIGBzZXRfbWVtb3J5X3JveGAsIGFyZSBhY2Nlc3NpYmxlIGFuZCBleHBvcnRlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgb2Z0ZW4gY3J1Y2lhbCBmb3IgbW9kdWxlIG1hbmlwdWxhdGlvbiwgQlBGLCBrcHJvYmVzLCBhbmQgZnRyYWNlLCBzbyBhY2Nlc3NpYmlsaXR5IGlzIHBhcmFtb3VudC5cblxuWWVzLCBpdCBsb29rcyBsaWtlIHRoZXkgYXJlIGhlYXZpbHkgdXNlZCEgVGhhdCdzIGV4Y2VsbGVudC4gS25vd2luZyB0aGF0LCBJIGNhbiBmb2N1cyBvbiBhIHNldCBvZiByZWxhdGVkIGZ1bmN0aW9uczogYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfcm9gLCBgc2V0X21lbW9yeV9yd2AsIGBzZXRfbWVtb3J5X3hgLCBgc2V0X21lbW9yeV9ueGAsIGB0ZXh0X3Bva2VgLCBgdGV4dF9wb2tlX2NvcHlgLCBhbmQgYHRleHRfcG9rZV9zZXRgLiBUaGVzZSBhcmUgYWxsIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGNsb3NlciBpbnNwZWN0aW9uLlxuXG5Ib2xkIG9uLCBgc2V0X21lbW9yeV9yb3hgIHNlZW1zIHBhcnRpY3VsYXJseSBwcm9taXNpbmcuIEl0cyBmdW5jdGlvbmFsaXR5IGlzIGRpcmVjdGx5IHJlbGV2YW50IHRvIG15IGFyZWEgb2YgZm9jdXMuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBzZXRfbWVtb3J5X3JveGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2UuIEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGRvd24gYSBibGluZCBhbGxleSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTczNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODo0OS43MDM1ODY5OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTQ4MDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyODo0OS43NDY3NDIyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUzNzE5NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgUXVpY2sgRGlhZ25vc3RpYyBDaGVjayoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIGBzZXRfbWVtb3J5X3JveGAgd2FzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIHNldCwgYnV0IG5vdyB0aGF0IEknbSBsb29raW5nIGF0IGl0LCBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgZXhwb3J0ZWQuIFRoYXQncyB1bnVzdWFsLCBhbmQgZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nLCBsZXQncyBqdXN0IGNvbmZpcm0gdGhlIHByZXNlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IG9mIGl0cyBjb21wYW5pb24gZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBvciBldmVuIHdvcnNlLCBtaXNyZW1lbWJlcmluZyB0aGUgbmFtZSBhbHRvZ2V0aGVyISBMZXQncyB2ZXJpZnkgYHNldF9tZW1vcnlfcm9gLiBBIHF1aWNrIGNoZWNrIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIgcXVpY2tseS4gSWYgYHNldF9tZW1vcnlfcm9gIGlzIHRoZXJlLCB0aGUgYWJzZW5jZSBvZiBgc2V0X21lbW9yeV9yb3hgIG1ha2VzIHRoZSBzaXR1YXRpb24gbW9yZSBpbnRlcmVzdGluZy4gSWYgYHNldF9tZW1vcnlfcm9gIGlzbid0IHRoZXJlLCB3ZWxsIHRoZW4gSSd2ZSBsaWtlbHkgZ290IGEgbXVjaCBtb3JlIHNlcmlvdXMgcHJvYmxlbSB3aXRoIG15IHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjUzLjcwMDQ2NTkxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMzc3MjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNldF9tZW1vcnlfcm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6NTMuNzQ0NzA5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA2NzIxNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIENvZGUgTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIG1pZ2h0IGJlIGRlZmluZWQgb3IgaGFuZGxlZC4gSXQgZmVlbHMgbGlrZSBJICpzaG91bGQqIGJlIGxvb2tpbmcgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBidXQgdGhlcmUncyBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGl0IG1pZ2h0IGJlIGVsc2V3aGVyZSwgcGVyaGFwcyBldmVuICp3aXRob3V0KiB0aGUgYF9HUExgIGRlc2lnbmF0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBiZWluZyBleHBvcnRlZCBpbiBhIGRpZmZlcmVudCBmaWxlIGFsdG9nZXRoZXI/XG5cbkxldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgbXkgc3VzcGljaW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBzZXRfbWVtb3J5X3JveGAgd2l0aGluIHRoZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZmlsZSBpdHNlbGYuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIEZyb20gdGhlcmUsIEknbGwgYnJhbmNoIG91dCBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDY2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjg6NTcuNTUxNDMzNzY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk2NzUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjM2Mj1pbnQgc2V0X21lbW9yeV9ybyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIzNjc6aW50IHNldF9tZW1vcnlfcm94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjM2OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI4OjU3LjU5NDQwNTMyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMyMDUwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgRmlsZSBTdHJ1Y3R1cmUgYW5kIEV4cGVjdGVkIE91dHB1dCoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGZpbGUuLi4gYW5kIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhlIGRhdGEncyBzdHJ1Y3R1cmVkLiBTcGVjaWZpY2FsbHksIGFyZSB0aGUgcmVzdWx0cyBJJ20gbG9va2luZyBmb3IgYWdncmVnYXRlZCBhbmQgZHVtcGVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgZmlsZT8gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIHlvdSBrbm93LCBlc3BlY2lhbGx5IHdpdGggbG9nZ2luZyBvciBsYXJnZSBkYXRhIGR1bXBzLiBJdCBzYXZlcyBhIGxvdCBvZiBwcm9jZXNzaW5nIHRvIHN0cmVhbSB0aGUgaW1wb3J0YW50IGRhdGEgb3V0IGF0IG9uY2UuIEl0J3Mgb2Z0ZW4gY2xlYW5lciB0aGFuIGludGVybGVhdmluZyByZXN1bHRzIHRocm91Z2hvdXQuIFNvLCBJJ20gYmV0dGluZyB0aGF0IHRoZSBpbnRlcmVzdGluZyBiaXRzIGFyZSBwcm9iYWJseSB3YWl0aW5nIGF0IHRoZSBib3R0b20uIEknbGwgbmVlZCB0byBjb25maXJtLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTowMi4yMjY0NTg3NjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzE1MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM0OT12b2lkIGNsZmx1c2hfY2FjaGVfcmFuZ2Uodm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNTQtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MzU1OkVYUE9SVF9TWU1CT0xfR1BMKGNsZmx1c2hfY2FjaGVfcmFuZ2UpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzU2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNTg9dm9pZCBhcmNoX2ludmFsaWRhdGVfcG1lbSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzYxLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM2MjpFWFBPUlRfU1lNQk9MX0dQTChhcmNoX2ludmFsaWRhdGVfcG1lbSk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNjMtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTM2Nj1ib29sIGNwdV9jYWNoZV9oYXNfaW52YWxpZGF0ZV9tZW1yZWdpb24odm9pZClcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzY5LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM3MDpFWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaGFzX2ludmFsaWRhdGVfbWVtcmVnaW9uLCBcXFwiREVWTUVNXFxcIik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0zNzEtXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0zNzI9aW50IGNwdV9jYWNoZV9pbnZhbGlkYXRlX21lbXJlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwgc2l6ZV90IGxlbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMzc4LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjM3OTpFWFBPUlRfU1lNQk9MX05TX0dQTChjcHVfY2FjaGVfaW52YWxpZGF0ZV9tZW1yZWdpb24sIFxcXCJERVZNRU1cXFwiKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTM4MC0jZW5kaWZcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9ODE0PXB0ZV90ICpsb29rdXBfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGludCAqbGV2ZWwpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgxNy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwobG9va3VwX2FkZHJlc3MpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtODE5LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz04NzM9cGh5c19hZGRyX3Qgc2xvd192aXJ0X3RvX3BoeXModm9pZCAqX192aXJ0X2FkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTkwNC19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo5MDU6RVhQT1JUX1NZTUJPTF9HUEwoc2xvd192aXJ0X3RvX3BoeXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtOTA2LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMjIxPWludCBzZXRfbWVtb3J5X3VjKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMjQzLX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjIyNDQ6RVhQT1JUX1NZTUJPTChzZXRfbWVtb3J5X3VjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNDUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIyNjI9aW50IHNldF9tZW1vcnlfd2ModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIyNzYtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjI3NzpFWFBPUlRfU1lNQk9MKHNldF9tZW1vcnlfd2MpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjI3OC1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjI5Mj1pbnQgc2V0X21lbW9yeV93Yih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMwMi19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzAzOkVYUE9SVF9TWU1CT0woc2V0X21lbW9yeV93Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yMzA0LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yMzA3PWludCBzZXRfbWNlX25vc3BlYyh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjMzMy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyMzM0OkVYUE9SVF9TWU1CT0xfR1BMKHNldF9tY2Vfbm9zcGVjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzMzUtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTIzMzc9aW50IGNsZWFyX21jZV9ub3NwZWModW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDItfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjM0MzpFWFBPUlRfU1lNQk9MX0dQTChjbGVhcl9tY2Vfbm9zcGVjKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTIzNDQtI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi9cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUyNT1pbnQgc2V0X21lbW9yeV9lbmNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MjgtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUyOTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2VuY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTMwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzMT1pbnQgc2V0X21lbW9yeV9kZWNyeXB0ZWQodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1MzQtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjUzNTpFWFBPUlRfU1lNQk9MX0dQTChzZXRfbWVtb3J5X2RlY3J5cHRlZCk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTM2LVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjUzNz1pbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI1NDItfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjU0MzpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc191Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTQ0LVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0yNTkxPWludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzKVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNTk0LX1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjI1OTU6RVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfYXJyYXlfdWMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjU5Ni1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTI1OTc9aW50IHNldF9wYWdlc19hcnJheV93YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDAtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwMTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjAyLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYwMz1pbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MDgtfVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MjYwOTpFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0yNjEwLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MjYxMT1pbnQgc2V0X3BhZ2VzX2FycmF5X3diKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMjYzMy19XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoyNjM0OkVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3diKTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTI2MzUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjAyLjI3MDE3OTA5NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzU5NzMyMDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVW5kb2N1bWVudGVkIE1lbW9yeSBNYW5pcHVsYXRpb24gRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBUaG9zZSBmdW5jdGlvbnMg4oCTIGBzZXRfbWVtb3J5X3JvYCwgYHNldF9tZW1vcnlfcm94YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYW5kIGBzZXRfbWVtb3J5X3J3YCDigJMgYXJlbid0IGluIHRoZSBleHBvcnRlZCBzeW1ib2wgdGFibGUuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhleSdyZSBsaWtlbHkgaW50ZXJuYWwgdG8gdGhlIGtlcm5lbCwgcHJvYmFibHkgaW50ZWdyYWwgdG8gdGhpbmdzIGxpa2UgdGhlIG1vZHVsZSBsb2FkZXIgb3IgQlBGIGltcGxlbWVudGF0aW9uLCBhbmQgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgY29yZS4gU3RhdGljIGxpbmtpbmcgbWFrZXMgc2Vuc2UgaW4gdGhhdCBjb250ZXh0LlxuXG5XYWl0IGEgc2Vjb25kLi4uIGRpZG4ndCBJIHNlZSBzb21ldGhpbmcgYWJvdXQgYHNldF9tZW1vcnlfcm9gIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYD8gT2theSwgbGV0J3MgZG91YmxlLWNoZWNrLiBOb3BlLCB0aGF0J3Mgbm90IGl0LiBTY3JhdGNoIHRoYXQuXG5cbk9rYXksIGJhY2sgdG8gYmFzaWNzLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaGAgYW5kIHNlZSB3aGF0IHRoYXQgaGVhZGVyIGZpbGUgdGVsbHMgdXMgYWJvdXQgdGhlc2UgZnVuY3Rpb25zLCBpZiBhbnl0aGluZy4gR290dGEgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIGludGVuZGVkIHVzYWdlIGFuZCBzY29wZSwgYXQgbGVhc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjA2LjYyOTkxMzkwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2NTg3OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V0X21lbW9yeV9yb3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zZXRfbWVtb3J5Lmg9MTQ9c3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oLTE2LVxcbmluY2x1ZGUvbGludXgvc2V0X21lbW9yeS5oOjE3OiNpZm5kZWYgc2V0X21lbW9yeV9yb3hcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaDoxODpzdGF0aWMgaW5saW5lIGludCBzZXRfbWVtb3J5X3JveCh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcylcXG5pbmNsdWRlL2xpbnV4L3NldF9tZW1vcnkuaC0xOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjA2LjY3MzU3Njc4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTIwNTk0NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQgRnVuY3Rpb24gYHNldF9tZW1vcnlfcm94YCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHNldF9tZW1vcnlfcm94YCBmdW5jdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuICBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gaXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBhY3R1YWxseSAqZXhwb3J0ZWQqLiBUaGF0J3MgYSBiaXQgdW51c3VhbC4gTm9ybWFsbHksIEknZCBleHBlY3Qgc29tZXRoaW5nIGxpa2UgdGhpcyB0byBiZSBkZWNsYXJlZCBpbiBhIGhlYWRlciBpZiBpdCdzIG1lYW50IGZvciBicm9hZGVyIHVzZSB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXNuJ3QgYSBzaW1wbGUgb3ZlcnNpZ2h0LiBJJ2xsIHRha2UgYSBsb29rIGF0IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhgIGFuZCBzZWUgaWYgdGhlcmUncyBhbnkgZGVjbGFyYXRpb24gdGhlcmUuIFBlcmhhcHMgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBvciBkZWZpbmVkIGluIGEgd2F5IHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSBqdW1wIG91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBpZiBhdCBhbGwsIGdpdmVuIGl0cyBsYWNrIG9mIG9idmlvdXMgZXh0ZXJuYWwgbGlua2FnZS4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHByb2NlZHVyZSwgbmVlZCB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aHkuIExldCdzIHNlZSB3aGF0IHRoZSBoZWFkZXIgZmlsZSByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzkwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MTAuNzk0MTczOTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzMjA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXRfbWVtb3J5X3JveFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXRfbWVtb3J5LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oLTgtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0X21lbW9yeS5oOjk6I2RlZmluZSBzZXRfbWVtb3J5X3JveCBzZXRfbWVtb3J5X3JveFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaDoxMDppbnQgc2V0X21lbW9yeV9yb3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3NldF9tZW1vcnkuaC0xMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MTAuODM4MTEwMDI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTE4NTU0MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUGxhbiBmb3IgWDg2IE1lbW9yeSBNYW5hZ2VtZW50IFJhY2UgQ29uZGl0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZXNlIGZ1bmN0aW9ucywgdGhlIG9uZXMgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIGFyZSBhYnNvbHV0ZWx5IG5vcm1hbCBhbmQgYWNjZXNzaWJsZS4gU2luY2UgdGhleSdyZSBjb3JlIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGV5J3JlIHVuZGVuaWFibHkgcmVhY2hhYmxlIGFuZCBleHBsb2l0YWJsZSBmb3IgZnV6emluZy4gSSdtIGdvaW5nIHRvIGFkZCBgc2V0X21lbW9yeV9yb3hgLCBgc2V0X21lbW9yeV9yb2AsIGBzZXRfbWVtb3J5X3J3YCwgYHNldF9tZW1vcnlfeGAsIGBzZXRfbWVtb3J5X254YCwgYHRleHRfcG9rZWAsIGB0ZXh0X3Bva2VfY29weWAsIGFuZCBgdGV4dF9wb2tlX3NldGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIGJlIGhlbHBmdWwgdG8gaW5jbHVkZS4gQWgsIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIGlzIHN0YXRpYywgc28gaXQncyBhIG5vbi1zdGFydGVyIGZvciBkaXJlY3QgZnV6emluZy4gVGhlIHNhbWUgZ29lcyBmb3IgYGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscmAuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIgaXMgdGhpcyBwYXRjaDogaXQncyBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGB0ZXh0X3Bva2VgLCB3aGljaCByZWxpZXMgb24gYHZtYWxsb2NfdG9fcGFnZWAsIGFuZCBgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzZXRfbWVtb3J5X3JveGAgYW5kIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zLiBTbywgZnV6emluZyB0aGVzZSBjb25jdXJyZW50bHkgaXMgdGhlIG1vbmV5IHNob3QhXG5cbkxldCdzIHdyaXRlIGEgY2xlYXIgcmF0aW9uYWxlOlxuXG5UaGUgcGF0Y2ggYWx0ZXJzIGVzc2VudGlhbCB4ODYgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY2AuIEl0IGFkZHJlc3NlcyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gYHRleHRfcG9rZWAgKHVzaW5nIGB2bWFsbG9jX3RvX3BhZ2VgKSBhbmQgYGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlc2AgKGNhbGxlZCBieSBgc2V0X21lbW9yeV9yb3hgIGFuZCBvdGhlcnMpLiBUaGUgc29sdXRpb24gaW52b2x2ZXMgaW50cm9kdWNpbmcgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIHRvIHN5bmNocm9uaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGFuZCBpdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBhbmQgb3RoZXIgY29tbW9uIGVudHJ5IHBvaW50cy4gSXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgYEZvY3VzU3ltYm9sc2AgYXJlOlxuXG4qICAgYHNldF9tZW1vcnlfcm94YFxuKiAgIGBzZXRfbWVtb3J5X3JvYFxuKiAgIGBzZXRfbWVtb3J5X3J3YFxuKiAgIGBzZXRfbWVtb3J5X3hgXG4qICAgYHNldF9tZW1vcnlfbnhgXG4qICAgYHRleHRfcG9rZWBcbiogICBgdGV4dF9wb2tlX2NvcHlgXG4qICAgYHRleHRfcG9rZV9zZXRgXG5cbk5vIHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgYmVjYXVzZSB0aGlzIGlzIGNvcmUgeDg2IGNvZGUuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjayBpZiBgdGV4dF9wb2tlYCBpcyBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNDUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MjQuOTU2NjcxMDQzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDM4MjYxMDEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRleHRfcG9rZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MjUuMjYwNTI2ODI0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzc4NDQ3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgU2NvcGUgb2YgYHRleHRfcG9rZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgdGV4dF9wb2tlYCwgYW5kIGluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgdGhpcyBmdW5jdGlvbiB3YXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCwgbWVhbmluZyBpdCBtaWdodCBiZSBpbnRlcm5hbC4gQnV0IHRoZW4gSSByZWFsaXplZCwgaGFuZyBvbiwgaXQncyBhY3R1YWxseSB1c2VkIGJ5IGEgYnVuY2ggb2YgY3JpdGljYWwgY29yZSBjb2RlIGNvbXBvbmVudHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlLiBJIHNlZSBgdGV4dF9wb2tlYCBiZWluZyB1c2VkIGJ5IGBhcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy9jb3JlLmNgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwncyBwcm9iaW5nIG1lY2hhbmlzbSwgYW5kIGFsc28gYnkgYGFyY2gveDg2L2tlcm5lbC9mdHJhY2UuY2AsIHRoZSBmdW5jdGlvbiB0cmFjaW5nIGNvZGUsIGFuZCBgYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuY2AsIGRlYWxpbmcgd2l0aCBqdW1wIGxhYmVscy4gU28sIG15IGh1bmNoIGlzIHRoYXQgaXQgbWlnaHQgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBoZW5jZSBub3QgZXhwbGljaXRseSBleHBvcnRlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYHRleHRfcG9rZWAgaXMgZGVjbGFyZWQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaGAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgaXQgZ2l2ZW4gaXRzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjI5LjI5ODM3NDUxMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4ODgwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGV4dF9wb2tlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTUtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjE2OmV4dGVybiB2b2lkIHRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaC0xNy1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTg6ZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX2FwcGx5X3JlbG9jYXRpb24odTggKmJ1ZiwgY29uc3QgdTggKiBjb25zdCBpbnN0ciwgc2l6ZV90IGluc3RybGVuLCB1OCAqcmVwbCwgc2l6ZV90IHJlcGxfbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTktXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMzMtICovXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM0OmV4dGVybiB2b2lkICp0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MzU6ZXh0ZXJuIHZvaWQgc21wX3RleHRfcG9rZV9zeW5jX2VhY2hfY3B1KHZvaWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDozNjpleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2tnZGIodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzc6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbik7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjM4OiNkZWZpbmUgdGV4dF9wb2tlX2NvcHkgdGV4dF9wb2tlX2NvcHlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6Mzk6ZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9jb3B5X2xvY2tlZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGJvb2wgY29yZV9vayk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQwOmV4dGVybiB2b2lkICp0ZXh0X3Bva2Vfc2V0KHZvaWQgKmFkZHIsIGludCBjLCBzaXplX3QgbGVuKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6NDE6ZXh0ZXJuIGludCBzbXBfdGV4dF9wb2tlX2ludDNfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjQyOmV4dGVybiB2b2lkIHNtcF90ZXh0X3Bva2Vfc2luZ2xlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqZW11bGF0ZSk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTQzLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NDpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2FkZCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmVtdWxhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaDo0NTpleHRlcm4gdm9pZCBzbXBfdGV4dF9wb2tlX2JhdGNoX2ZpbmlzaCh2b2lkKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtNDYtXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg9NjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGV4dF9vcGNvZGVfc2l6ZSh1OCBvcGNvZGUpXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtODMtXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjg0OnVuaW9uIHRleHRfcG9rZV9pbnNuIHtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtODUtXFx0dTggdGV4dFtURVhUX1BPS0VfTUFYX09QQ09ERV9TSVpFXTtcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3RleHQtcGF0Y2hpbmcuaD05Mz12b2lkIF9fdGV4dF9nZW5faW5zbih2b2lkICpidWYsIHU4IG9wY29kZSwgY29uc3Qgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqZGVzdCwgaW50IHNpemUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTk0LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6OTU6XFx0dW5pb24gdGV4dF9wb2tlX2luc24gKmluc24gPSBidWY7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oLTk2LVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEyMz12b2lkICp0ZXh0X2dlbl9pbnNuKHU4IG9wY29kZSwgY29uc3Qgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqZGVzdClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTI0LXtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTI1OlxcdHN0YXRpYyB1bmlvbiB0ZXh0X3Bva2VfaW5zbiBpbnNuOyAvKiBwZXIgaW5zdGFuY2UgKi9cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTI2LVxcdF9fdGV4dF9nZW5faW5zbihcXHUwMDI2aW5zbiwgb3Bjb2RlLCBhZGRyLCBkZXN0LCB0ZXh0X29wY29kZV9zaXplKG9wY29kZSkpO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oPTEzMD1leHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oOjEzMTpleHRlcm4gX19yb19hZnRlcl9pbml0IHN0cnVjdCBtbV9zdHJ1Y3QgKnRleHRfcG9rZV9tbTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmg6MTMyOmV4dGVybiBfX3JvX2FmdGVyX2luaXQgdW5zaWduZWQgbG9uZyB0ZXh0X3Bva2VfbW1fYWRkcjtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgtMTMzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOToyOS4zNDIyNjcxNTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjI3MzE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk1ha2luZyB0aGUgQ29ubmVjdGlvbioqXG5cblJpZ2h0LCBzbyB0aGVzZSB0aGluZ3Mg4oCTIHRoZSBcInRob3VnaHRzXCIg4oCTIHRoZXkncmUgYmVpbmcgZXhwb3J0ZWQgaW4gdGhlIGhlYWRlciwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgdGhlbSBrZXkuIFRoYXQgZXhwb3J0IGltcGxpZXMgdGhleSdyZSBiZWluZyBhY2Nlc3NlZCBhbmQgdXRpbGl6ZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSwgYWN0aW5nIGFzIGEgY3J1Y2lhbCBjb21tdW5pY2F0aW9uIHBvaW50LiBUaGVyZWZvcmUsIHRoZXkgZnVuY3Rpb24gYXMgcHJldHR5IHNvbGlkIGZvY3VzIHN5bWJvbHMsIHRoZSBraW5kIG9mIGVsZW1lbnRzIEkgY2FuIHJlYWxseSBzaW5rIG15IHRlZXRoIGludG8uXG5cbkNvbnNpZGVyaW5nIHRoZWlyIHJvbGUgYXMgY29tbXVuaWNhdGlvbiB0b29scywgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCByaWdodCBub3cuIEl0IGlzIGEgbmF0dXJhbCBuZXh0IHN0ZXAgZ2l2ZW4gdGhpcyB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwMSwiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTozNC4yNDg1NDM1ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldF9tZW1vcnlfcm94XCIsXG4gICAgXCJzZXRfbWVtb3J5X3JvXCIsXG4gICAgXCJzZXRfbWVtb3J5X3J3XCIsXG4gICAgXCJzZXRfbWVtb3J5X3hcIixcbiAgICBcInNldF9tZW1vcnlfbnhcIixcbiAgICBcInRleHRfcG9rZVwiLFxuICAgIFwidGV4dF9wb2tlX2NvcHlcIixcbiAgICBcInRleHRfcG9rZV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHg4NiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIChhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGFuZCBhcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYykgdG8gZml4IGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0ZXh0X3Bva2UgKHdoaWNoIHVzZXMgdm1hbGxvY190b19wYWdlKSBhbmQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzICh3aGljaCBpcyBjYWxsZWQgYnkgc2V0X21lbW9yeV9yb3ggYW5kIG90aGVycykuIEl0IGludHJvZHVjZXMgbW1hcF9yZWFkX2xvY2sgYW5kIG1tYXBfd3JpdGVfbG9jayBvbiBpbml0X21tIHRvIHNlcmlhbGl6ZSB0aGVzZSBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIEJQRiwgbW9kdWxlIGxvYWRpbmcsIGtwcm9iZXMsIGZ0cmFjZSwgZXRjLiBJdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V0X21lbW9yeV9yb3hcIixcbiAgICBcInNldF9tZW1vcnlfcm9cIixcbiAgICBcInNldF9tZW1vcnlfcndcIixcbiAgICBcInNldF9tZW1vcnlfeFwiLFxuICAgIFwic2V0X21lbW9yeV9ueFwiLFxuICAgIFwidGV4dF9wb2tlXCIsXG4gICAgXCJ0ZXh0X3Bva2VfY29weVwiLFxuICAgIFwidGV4dF9wb2tlX3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgeDg2IG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYW5kIGFyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jKSB0byBmaXggYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRleHRfcG9rZSAod2hpY2ggdXNlcyB2bWFsbG9jX3RvX3BhZ2UpIGFuZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMgKHdoaWNoIGlzIGNhbGxlZCBieSBzZXRfbWVtb3J5X3JveCBhbmQgb3RoZXJzKS4gSXQgaW50cm9kdWNlcyBtbWFwX3JlYWRfbG9jayBhbmQgbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0gdG8gc2VyaWFsaXplIHRoZXNlIG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgQlBGLCBtb2R1bGUgbG9hZGluZywga3Byb2JlcywgZnRyYWNlLCBldGMuIEl0IGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6Mjk6MzQuMjQ4NTc0NTc0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQwOTU2NjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjM0LjI0ODk5NTkxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODQwOTE0MTg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjFmMTQ4YmVlMTBlZmY0MjU2MzhjNWU0OThmOTM2MjdhZDIzZmI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6Mjg6MTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG5pbmRleCA2MjkzNmEzYmRlMTliLi5mODFkNmJjOTBhNmZmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jXG5AQCAtNiw2ICs2LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4ZWNtZW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tnZGIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYXBfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3RleHQtcGF0Y2hpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pbnNuLmhcdTAwM2VcbkBAIC0yNTQzLDYgKzI1NDYsMzggQEAgc3RhdGljIHZvaWQgdGV4dF9wb2tlX21lbXNldCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiBcbiB0eXBlZGVmIHZvaWQgdGV4dF9wb2tlX2Yodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pO1xuIFxuK3N0YXRpYyB2b2lkIF9fcG9rZV92bWFsbG9jX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHZvaWQgKmFkZHIsXG4rXHRcdFx0XHQgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK3tcbitcdHBhZ2VzWzBdID0gdm1hbGxvY190b19wYWdlKGFkZHIpO1xuK1x0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4rXHRcdHBhZ2VzWzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBwb2tlX3ZtYWxsb2NfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgdm9pZCAqYWRkcixcbitcdFx0XHQgICAgICAgYm9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5KVxuK3tcbitcdGlmIChpbl9kYmdfbWFzdGVyKCkpIHtcbitcdFx0LypcbitcdFx0ICogSWYgY2FsbGVkIGZyb20ga2dkYiBjYW5ub3Qgc2xlZXAsIGJ1dCBhbGwgb3RoZXIgQ1BVcyBzdG9wcGVkXG4rXHRcdCAqIGFueXdheSBzbyBzYWZlIHRvIHByb2NlZWQgd2l0aG91dCBsb2Nrc1xuK1x0XHQgKi9cbitcdFx0X19wb2tlX3ZtYWxsb2NfcGFnZXMocGFnZXMsIGFkZHIsIGNyb3NzX3BhZ2VfYm91bmRhcnkpO1xuK1x0fSBlbHNlIHtcbitcdFx0LypcbitcdFx0ICogZXhlY21lbSBST1ggcmFuZ2VzIGFyZSBzaGFyZWQgYmV0d2VlbiBtb2R1bGVzIGFuZCBjYW4gYmVcbitcdFx0ICogY29sbGFwc2VkIHRvIGh1Z2UgUE1EIGVudHJpZXMsIGFuZCB0aGlzIGNvbGxhcHNlIGNhbiBoYXBwZW5cbitcdFx0ICogY29uY3VycmVudGx5IHdpdGggYSByYWNpbmcgc2V0X21lbW9yeV9yb3goKS5cbitcdFx0ICpcbitcdFx0ICogUHJldmVudCB2bWFsbG9jX3RvX3BhZ2UoKSBmcm9tIHJhY2luZyBieSBhY3F1aXJpbmcgYW5cbitcdFx0ICogaW5pdF9tbSByZWFkIGxvY2sgd2hpY2ggcGFpcnMgd2l0aCB0aGUgaW5pdF9tbSB3cml0ZSBsb2NrIGluXG4rXHRcdCAqIGNwYV9jb2xsYXBzZV9sYXJnZV9wYWdlcygpLlxuK1x0XHQgKi9cbitcdFx0Z3VhcmQobW1hcF9yZWFkX2xvY2spKFx1MDAyNmluaXRfbW0pO1xuK1x0XHRfX3Bva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkICpfX3RleHRfcG9rZSh0ZXh0X3Bva2VfZiBmdW5jLCB2b2lkICphZGRyLCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0Ym9vbCBjcm9zc19wYWdlX2JvdW5kYXJ5ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcikgKyBsZW4gXHUwMDNlIFBBR0VfU0laRTtcbkBAIC0yNTYwLDkgKzI1OTUsNyBAQCBzdGF0aWMgdm9pZCAqX190ZXh0X3Bva2UodGV4dF9wb2tlX2YgZnVuYywgdm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbFxuIFx0QlVHX09OKCFhZnRlcl9ib290bWVtKTtcbiBcbiBcdGlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkge1xuLVx0XHRwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTtcbi1cdFx0aWYgKGNyb3NzX3BhZ2VfYm91bmRhcnkpXG4tXHRcdFx0cGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7XG4rXHRcdHBva2Vfdm1hbGxvY19wYWdlcyhwYWdlcywgYWRkciwgY3Jvc3NfcGFnZV9ib3VuZGFyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwYWdlc1swXSA9IHZpcnRfdG9fcGFnZShhZGRyKTtcbiBcdFx0V0FSTl9PTighUGFnZVJlc2VydmVkKHBhZ2VzWzBdKSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IGQ4ZDA1N2Y0NDQxNzguLjQzMGQwYjQ0ODM3MTggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMjIsNiArMjIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NjX3BsYXRmb3JtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZWdpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9lODIwL2FwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Byb2Nlc3Nvci5oXHUwMDNlXG5AQCAtNDksNyArNTAsOCBAQCBzdHJ1Y3QgY3BhX2RhdGEge1xuIFx0dW5zaWduZWQgaW50XHRmbGFncztcbiBcdHVuc2lnbmVkIGludFx0Zm9yY2Vfc3BsaXRcdFx0OiAxLFxuIFx0XHRcdGZvcmNlX3N0YXRpY19wcm90XHQ6IDEsXG4tXHRcdFx0Zm9yY2VfZmx1c2hfYWxsXHRcdDogMTtcbitcdFx0XHRmb3JjZV9mbHVzaF9hbGxcdFx0OiAxLFxuK1x0XHRcdGluaXRfbW1fcmVhZF9sb2NrZWRcdDogMTtcbiBcdHN0cnVjdCBwYWdlXHQqKnBhZ2VzO1xuIH07XG4gXG5AQCAtNDA5LDcgKzQxMSw3IEBAIHN0YXRpYyB2b2lkIF9fY3BhX2ZsdXNoX3RsYih2b2lkICpkYXRhKVxuIFxuIHN0YXRpYyBpbnQgY29sbGFwc2VfbGFyZ2VfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcyk7XG4gXG4tc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3N0YXRpYyB2b2lkIF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGFkZHIsIGVuZDtcbiBcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYywgKnRtcDtcbkBAIC00MzksMTAgKzQ0MSwzMCBAQCBzdGF0aWMgdm9pZCBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXMoc3RydWN0IGNwYV9kYXRhICpjcGEpXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHRkZXNjLCB0bXAsIFx1MDAyNnBndGFibGVzLCBwdF9saXN0KSB7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnB0ZGVzYy1cdTAwM2VwdF9saXN0KTtcbi1cdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdFx0LypcbitcdFx0ICogT25seSBlYXJseSBhbGxvYydkIGRpcmVjdCBtYXAgc2hvdWxkIG5vdCBiZSBmbGFnZ2VkIFBHX3RhYmxlXG4rXHRcdCAqIGhlcmUgYW5kIHRob3NlIHNob3VsZG4ndCBiZSBjb2xsYXBzZWQuIEhvd2V2ZXIgYmUgYWJ1bmRhbnRseVxuK1x0XHQgKiBjYXV0aW91cyBhbmQgaGFuZGxlIHRoZSAhUEdfdGFibGUgY2FzZSB0b28uXG4rXHRcdCAqL1xuK1x0XHRpZiAoUGFnZVRhYmxlKChwdGRlc2NfcGFnZShwdGRlc2MpKSkpXG4rXHRcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZShwdGRlc2MpO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHZvaWQgY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKHN0cnVjdCBjcGFfZGF0YSAqY3BhKVxuK3tcbitcdC8qXG4rXHQgKiBUYWtlIHRoZSBtbWFwIHdyaXRlIGxvY2sgb24gaW5pdF9tbSB0bzpcbitcdCAqIC0gQXZvaWQgYSB1c2UtYWZ0ZXItZnJlZSBpZiByYWNlZCBieSBwdGR1bXAgKHdoaWNoIHRha2VzIGl0cyBvd25cbitcdCAqICAgd3JpdGUgbG9jayBvbiBpbml0X21tKS5cbitcdCAqIC0gU2VyaWFsaXNlIGNvbmN1cnJlbnQgQ1BBIHdhbGtlcnMuXG4rXHQgKi9cbitcdHNjb3BlZF9ndWFyZChtbWFwX3dyaXRlX2xvY2ssIFx1MDAyNmluaXRfbW0pXG4rXHRcdF9fY3BhX2NvbGxhcHNlX2xhcmdlX3BhZ2VzKGNwYSk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGNwYV9mbHVzaChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgaW50IGNhY2hlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTczMiw3ICs3NTQsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfNTEyRztcbiBcdCpueCB8PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHBnZF9mbGFncygqcGdkKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cDRkID0gcDRkX29mZnNldChwZ2QsIGFkZHJlc3MpO1xuIFx0aWYgKHA0ZF9ub25lKCpwNGQpKVxuQEAgLTc0Myw3ICs3NjUsNyBAQCBwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0KmxldmVsID0gUEdfTEVWRUxfMUc7XG4gXHQqbnggfD0gcDRkX2ZsYWdzKCpwNGQpIFx1MDAyNiBfUEFHRV9OWDtcbi1cdCpydyBcdTAwMjY9IHA0ZF9mbGFncygqcDRkKSBcdTAwMjYgX1BBR0VfUlc7XG4rXHQqcncgXHUwMDI2PSAhIShwNGRfZmxhZ3MoKnA0ZCkgXHUwMDI2IF9QQUdFX1JXKTtcbiBcbiBcdHB1ZCA9IHB1ZF9vZmZzZXQocDRkLCBhZGRyZXNzKTtcbiBcdGlmIChwdWRfbm9uZSgqcHVkKSlcbkBAIC03NTQsNyArNzc2LDcgQEAgcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcbiBcdCpsZXZlbCA9IFBHX0xFVkVMXzJNO1xuIFx0Km54IHw9IHB1ZF9mbGFncygqcHVkKSBcdTAwMjYgX1BBR0VfTlg7XG4tXHQqcncgXHUwMDI2PSBwdWRfZmxhZ3MoKnB1ZCkgXHUwMDI2IF9QQUdFX1JXO1xuK1x0KnJ3IFx1MDAyNj0gISEocHVkX2ZsYWdzKCpwdWQpIFx1MDAyNiBfUEFHRV9SVyk7XG4gXG4gXHRwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcyk7XG4gXHRpZiAocG1kX25vbmUoKnBtZCkpXG5AQCAtNzY1LDcgKzc4Nyw3IEBAIHB0ZV90ICpsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHQqbGV2ZWwgPSBQR19MRVZFTF80SztcbiBcdCpueCB8PSBwbWRfZmxhZ3MoKnBtZCkgXHUwMDI2IF9QQUdFX05YO1xuLVx0KnJ3IFx1MDAyNj0gcG1kX2ZsYWdzKCpwbWQpIFx1MDAyNiBfUEFHRV9SVztcbitcdCpydyBcdTAwMjY9ICEhKHBtZF9mbGFncygqcG1kKSBcdTAwMjYgX1BBR0VfUlcpO1xuIFxuIFx0cmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7XG4gfVxuQEAgLTExMjAsMTEgKzExNDIsMTAgQEAgc3RhdGljIHZvaWQgc3BsaXRfc2V0X3B0ZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gc3RhdGljIGludFxuIF9fc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgc3RydWN0IHB0ZGVzYyAqcHRkZXNjKVxuK1x0XHQgICBwdGVfdCAqcGJhc2UpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBscGFkZHIsIGxwaW5jLCByZWZfcGZuLCBwZm4sIHBmbmluYyA9IDE7XG4tXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHB0ZGVzY19wYWdlKHB0ZGVzYyk7XG4tXHRwdGVfdCAqcGJhc2UgPSAocHRlX3QgKilwYWdlX2FkZHJlc3MoYmFzZSk7XG4rXHRzdHJ1Y3QgcGFnZSAqYmFzZSA9IHZpcnRfdG9fcGFnZShwYmFzZSk7XG4gXHR1bnNpZ25lZCBpbnQgaSwgbGV2ZWw7XG4gXHRwZ3Byb3RfdCByZWZfcHJvdDtcbiBcdGJvb2wgbngsIHJ3O1xuQEAgLTEyMjQsMTYgKzEyNDUsMjAgQEAgX19zcGxpdF9sYXJnZV9wYWdlKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCBwdGVfdCAqa3B0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIHN0YXRpYyBpbnQgc3BsaXRfbGFyZ2VfcGFnZShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgcHRlX3QgKmtwdGUsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4rXHRwdGVfdCAqcHRlO1xuIFxuIFx0c3Bpbl91bmxvY2soXHUwMDI2Y3BhX2xvY2spO1xuLVx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwsIDApO1xuK1x0aWYgKGNwYS1cdTAwM2Vpbml0X21tX3JlYWRfbG9ja2VkKVxuK1x0XHRtbWFwX3JlYWRfdW5sb2NrKFx1MDAyNmluaXRfbW0pO1xuK1x0cHRlID0gcHRlX2FsbG9jX29uZV9rZXJuZWwoXHUwMDI2aW5pdF9tbSk7XG4rXHRpZiAoY3BhLVx1MDAzZWluaXRfbW1fcmVhZF9sb2NrZWQpXG4rXHRcdG1tYXBfcmVhZF9sb2NrKFx1MDAyNmluaXRfbW0pO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNwYV9sb2NrKTtcbi1cdGlmICghcHRkZXNjKVxuK1x0aWYgKCFwdGUpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0aWYgKF9fc3BsaXRfbGFyZ2VfcGFnZShjcGEsIGtwdGUsIGFkZHJlc3MsIHB0ZGVzYykpXG4tXHRcdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHRpZiAoX19zcGxpdF9sYXJnZV9wYWdlKGNwYSwga3B0ZSwgYWRkcmVzcywgcHRlKSlcbitcdFx0cHRlX2ZyZWVfa2VybmVsKFx1MDAyNmluaXRfbW0sIHB0ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjEyMSw3ICsyMTQ2LDExIEBAIHN0YXRpYyBpbnQgY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcyxcbiBcdGNwYS5jdXJwYWdlID0gMDtcbiBcdGNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0O1xuIFxuLVx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdC8qIEF2b2lkIHJhY2Ugd2l0aCBjb25jdXJyZW50IENQQSBjb2xsYXBzZS4gKi9cbitcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gdHJ1ZTtcbitcdHNjb3BlZF9ndWFyZChtbWFwX3JlYWRfbG9jaywgXHUwMDI2aW5pdF9tbSlcbitcdFx0cmV0ID0gX19jaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoXHUwMDI2Y3BhLCAxKTtcbitcdGNwYS5pbml0X21tX3JlYWRfbG9ja2VkID0gZmFsc2U7XG4gXG4gXHQvKlxuIFx0ICogQ2hlY2sgd2hldGhlciB3ZSByZWFsbHkgY2hhbmdlZCBzb21ldGhpbmc6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvbW1hcF9sb2NrLmhcbmluZGV4IDA0YjhmNjFlY2U1ZDguLmY0Y2ViOTY4YWViM2QgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oXG5AQCAtNjIxLDYgKzYyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIERFRklORV9HVUFSRChtbWFwX3JlYWRfbG9jaywgc3RydWN0IG1tX3N0cnVjdCAqLFxuIFx0ICAgICBtbWFwX3JlYWRfbG9jayhfVCksIG1tYXBfcmVhZF91bmxvY2soX1QpKVxuK0RFRklORV9HVUFSRChtbWFwX3dyaXRlX2xvY2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKixcbitcdCAgICAgbW1hcF93cml0ZV9sb2NrKF9UKSwgbW1hcF93cml0ZV91bmxvY2soX1QpKVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWFwX3JlYWRfdW5sb2NrX25vbl9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTozNC4yNDg5OTY1NDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY4NTY1ODc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmNgIGFuZCBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGZvY3VzZWQgb24gcHJvdGVjdGluZyBzb21lIGNyaXRpY2FsIG1lbW9yeSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxhcmdlIHBhZ2UgY29sbGFwc2UgYW5kIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG1tYXBfcmVhZF9sb2NrYCBhbmQgYG1tYXBfd3JpdGVfbG9ja2Agb24gYGluaXRfbW1gIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZywgYnV0IGEgZ29vZCBvbmUuIEl0IGluZGljYXRlcyBhIGNvbmNlcm4gYWJvdXQgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gZnVuY3Rpb25zIGxpa2UgYHZtYWxsb2NfdG9fcGFnZWAgKG9yLCBieSBpbmZlcmVuY2UsIHRoaW5ncyBsaWtlIGBwdGR1bXBgIHdoaWNoIG1pZ2h0IGJlIHVzaW5nIHNpbWlsYXIgbWVjaGFuaXNtcykgYW5kIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgLiBUaGF0IG1ha2VzIHNlbnNlOyBpZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG1hbmlwdWxhdGluZyBwYWdlIHRhYmxlcywgeW91ICpoYXZlKiB0byBwcm90ZWN0IGl0LlxuXG5UaGUgY2hhbmdlcyB0byBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIGluIGBjcGFfY29sbGFwc2VfbGFyZ2VfcGFnZXNgIHVzaW5nIGBwYWdldGFibGVfZHRvcl9mcmVlYCBpZiBgUGFnZVRhYmxlYCBpcyBzZXQgYWxzbyBsb29rcyBnb29kLiBJdCBzZWVtcyBsaWtlIHRoZXkncmUgdHJ5aW5nIHRvIGJlIG1vcmUgY2FyZWZ1bCBhYm91dCBob3cgcGFnZSB0YWJsZSBtZW1vcnkgaXMgcmVjbGFpbWVkIGFmdGVyIGxhcmdlIHBhZ2VzIGFyZSBjb2xsYXBzZWQuIFNpbWlsYXJseSwgc3dpdGNoaW5nIHRvIGBwdGVfYWxsb2Nfb25lX2tlcm5lbGAgYW5kIGBwdGVfZnJlZV9rZXJuZWxgIGluIGBzcGxpdF9sYXJnZV9wYWdlYCBpbmRpY2F0ZXMgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9yIGEgZGVzaXJlIHRvIHVzZSB0aGUgbW9yZSBtb2Rlcm4gaW50ZXJmYWNlcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGF0IGlzIHRoZSBjYXNlLlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBiaXR3aXNlIEFORCBmaXggaW4gYGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyYC4gVGhlIG9yaWdpbmFsIGNvZGUsIGAqcncgXHUwMDI2PSBwZ2RfZmxhZ3MoKnBnZCkgXHUwMDI2IF9QQUdFX1JXO2Agc2VlbXMgbGlrZSBpdCB3b3VsZCBpbnRyb2R1Y2UgaW5jb3JyZWN0IGJlaGF2aW91ciwgbm93IHRoZXkndmUgY2hhbmdlZCBpdCB0byBgKnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7YC4gVGhpcyBpcyBiZWNhdXNlIGAqcndgIGlzIGEgYGJvb2xgIHBvaW50ZXIsIGlzbid0IGl0PyBUaGF0IGJpdHdpc2Ugb3BlcmF0aW9uIG5lZWRzIHRvIGJlIGEgYm9vbGVhbiBvcGVyYXRpb24uIFNvLCB0aGV5J3JlIGVuc3VyaW5nIGAqcndgIGlzIGVpdGhlciAwIG9yIDEsIHdoaWNoIGlzIGNvcnJlY3QuIEkgaGF2ZSB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJgIHRvIG1ha2Ugc3VyZSBJIGFtIGNvcnJlY3QsIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBidWcgZml4LlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgbG9vayBmb3IgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIHdhaXQsIGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBtb3N0IG9mIHRoZSBjaGFuZ2VzIGFyZSBhYm91dCBsb2NraW5nLCBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBjb3JyZWN0aW5nIGEgYml0d2lzZSBsb2dpYyBlcnJvci4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGlzIGEgZ29vZCBzaWduLiBUaGUgYml0d2lzZSBmaXggaXMgdGhlIG1vc3QgaW50ZXJlc3Rpbmc7IGVuc3VyaW5nIHRoZSBjb3JyZWN0IGJvb2xlYW4gcmVzdWx0IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBjb25maXJtIGAqcndgIGlzIGluZGVlZCBhIGBib29sYCBwb2ludGVyIGluIGBsb29rdXBfYWRkcmVzc19pbl9wZ2RfYXR0cmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTo0Mi45MzQ2NTkzMzNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDY3NTk2MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oPTU2Nz1leHRlcm4gcHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oLTU2OC1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50ICpsZXZlbCk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oOjU2OTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaC01NzAtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgKmxldmVsLCBib29sICpueCwgYm9vbCAqcncpO1xcbi0tXFxuYXJjaC94ODYvbW0vZmF1bHQuYz01MTU9c2hvd19mYXVsdF9vb3BzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbmFyY2gveDg2L21tL2ZhdWx0LmMtNTI4LVxcbmFyY2gveDg2L21tL2ZhdWx0LmM6NTI5OlxcdFxcdHB0ZSA9IGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgXFx1MDAyNmxldmVsLCBcXHUwMDI2bngsIFxcdTAwMjZydyk7XFxuYXJjaC94ODYvbW0vZmF1bHQuYy01MzAtXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTY5Mz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZlcmlmeV9yd3gocGdwcm90X3Qgb2xkLCBwZ3Byb3RfdCBuZXcsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTc0MC0gKi9cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjc0MTpwdGVfdCAqbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtNzQyLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50ICpsZXZlbCwgYm9vbCAqbngsIGJvb2wgKnJ3KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz03OTk9cHRlX3QgKmxvb2t1cF9hZGRyZXNzX2luX3BnZChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTgwMy1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjgwNDpcXHRyZXR1cm4gbG9va3VwX2FkZHJlc3NfaW5fcGdkX2F0dHIocGdkLCBhZGRyZXNzLCBsZXZlbCwgXFx1MDAyNm54LCBcXHUwMDI2cncpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtODA1LX1cXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9ODIwPXN0YXRpYyBwdGVfdCAqX2xvb2t1cF9hZGRyZXNzX2NwYShzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MjktXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzo4MzA6XFx0cmV0dXJuIGxvb2t1cF9hZGRyZXNzX2luX3BnZF9hdHRyKHBnZCwgYWRkcmVzcywgbGV2ZWwsIG54LCBydyk7XFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy04MzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOToyOTo0NC41NDE0MjM4NDVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODExNjY5MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHByaW1hcmlseSBjb25jZXJucyBpdHNlbGYgd2l0aCBjb25jdXJyZW5jeSBhbmQgYSBzbmVha3kgbG9naWMgYnVnLiBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgbnhgIGFuZCBgcndgIGFyZSwgYXMgSSBzdXNwZWN0ZWQsIGVzc2VudGlhbGx5IGJvb2xlYW4gcG9pbnRlcnMgKGBib29sICpgKS4gVGhlIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBgKnJ3IFx1MDAyNj0gcGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVztgIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSWYgYCpyd2Agd2FzIHRydWUgKDEpIGFuZCBgX1BBR0VfUldgIGhhZCBpdHMgUlcgYml0IHNldCAoMiksIHRoZSBBTkQgb3BlcmF0aW9uIHdvdWxkIHVuZXhwZWN0ZWRseSBjbGVhciBgKnJ3YCB0byBmYWxzZSAoMCksIGV2ZW4gd2hlbiBpdCBzaG91bGQgaGF2ZSByZW1haW5lZCB0cnVlISBUaGUgcHJvcG9zZWQgZml4LCBgKnJ3IFx1MDAyNj0gISEocGdkX2ZsYWdzKCpwZ2QpIFx1MDAyNiBfUEFHRV9SVyk7YCwgaXMgdGhlIHJpZ2h0IHdheSB0byBjb2VyY2UgdGhlIHJlc3VsdCB0byBlaXRoZXIgMSBvciAwLCByZXNvbHZpbmcgdGhlIGlzc3VlLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwcm9ibGVtLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgY2hhbmdlcyBhcmUgYXJvdW5kIGxvY2tpbmcsIHNwZWNpZmljYWxseSB0byBhZGRyZXNzIGlzc3VlcyBkdXJpbmcgY29uY3VycmVudCBwYWdlIHRhYmxlIGNvbGxhcHNlLiBUaGVzZSBhcmUgZXNzZW50aWFsIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIOKAkyB3aGljaCBhcmUgZXhhY3RseSB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBwZXJmZWN0IGZvciBjYXRjaGluZyB0aG9zZSB1c2UtYWZ0ZXItZnJlZSBhbmQgbG9ja2luZyBpc3N1ZXMsIHRoZXkncmUgdGFpbG9yLW1hZGUgZm9yIGl0LiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIHJlc29sdmVzIGRhdGEgcmFjZXMgZHVyaW5nIHBhZ2UgdGFibGUgY29sbGFwc2UgYnkgYWRkaW5nIG1tYXBfcmVhZF9sb2NrL21tYXBfd3JpdGVfbG9jaywgZml4ZXMgYSBiaXR3aXNlIGxvZ2ljIGJ1ZyB3aGVuIGNoZWNraW5nIHBhZ2UgYXR0cmlidXRlcywgYW5kIHVwZGF0ZXMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uL2ZyZWVpbmcgZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBLQVNBTiBhbmQgc3RhbmRhcmQgbG9ja2luZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3QgZm9yLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBkb2Vzbid0IG5lZWQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzksIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjI5OjUyLjY1ODExODI3MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiBwYWdlIHRhYmxlIGNvbGxhcHNlIChieSBhZGRpbmcgbW1hcF9yZWFkX2xvY2svbW1hcF93cml0ZV9sb2NrIG9uIGluaXRfbW0pLCBmaXhlcyBhIGJpdHdpc2UgbG9naWMgYnVnIHdoZW4gY2hlY2tpbmcgcGFnZSBhdHRyaWJ1dGVzLCBhbmQgdXBkYXRlcyBwYWdlIHRhYmxlIGFsbG9jYXRpb24vZnJlZWluZyBmdW5jdGlvbnMuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgZGF0YSByYWNlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBjb25jdXJyZW5jeS9sb2NraW5nIGRldGVjdG9ycyAobGlrZSBMT0NLREVQKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBsb2dpYyB0aGF0IHdvdWxkIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHBhZ2UgdGFibGUgY29sbGFwc2UgKGJ5IGFkZGluZyBtbWFwX3JlYWRfbG9jay9tbWFwX3dyaXRlX2xvY2sgb24gaW5pdF9tbSksIGZpeGVzIGEgYml0d2lzZSBsb2dpYyBidWcgd2hlbiBjaGVja2luZyBwYWdlIGF0dHJpYnV0ZXMsIGFuZCB1cGRhdGVzIHBhZ2UgdGFibGUgYWxsb2NhdGlvbi9mcmVlaW5nIGZ1bmN0aW9ucy4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBkYXRhIHJhY2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGNvbmN1cnJlbmN5L2xvY2tpbmcgZGV0ZWN0b3JzIChsaWtlIExPQ0tERVApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGxvZ2ljIHRoYXQgd291bGQgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowspt7j[1] Phase: Succeeded StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 09:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 09:30:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2] Phase: Succeeded StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 09:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 09:30:03 +0000 UTC FinishedAt: 2026-08-13 09:30:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowspt7j/series-workflowspt7j-convert-artifact-925904278/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 09:30:13 +0000 UTC FinishedAt: 2026-08-13 09:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 09:30:13 +0000 UTC FinishedAt: 2026-08-13 09:46:41 +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:*d4e442d9-9f3d-4257-b4d5-1e54ce2446e0,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-workflowspt7j/series-workflowspt7j-convert-artifact-925904278/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": "02b211e6-8c06-42e5-b604-04222d3a5a85", "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-workflowspt7j/series-workflowspt7j-build-action-1611357484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 09:30:13 +0000 UTC FinishedAt: 2026-08-13 09:46:31 +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:*d4e442d9-9f3d-4257-b4d5-1e54ce2446e0,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-workflowspt7j/series-workflowspt7j-convert-artifact-925904278/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": "02b211e6-8c06-42e5-b604-04222d3a5a85", "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-workflowspt7j/series-workflowspt7j-build-action-1611357484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 09:46:41 +0000 UTC FinishedAt: 2026-08-13 09:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 09:46:41 +0000 UTC FinishedAt: 2026-08-13 09:46:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 09:46:41 +0000 UTC FinishedAt: 2026-08-13 09:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 09:46:41 +0000 UTC FinishedAt: 2026-08-13 09:46:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowspt7j/series-workflowspt7j-convert-artifact-63920681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 09:46:51 +0000 UTC FinishedAt: 2026-08-13 09:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 09:46:51 +0000 UTC FinishedAt: 2026-08-13 09:48:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*02b211e6-8c06-42e5-b604-04222d3a5a85,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-workflowspt7j/series-workflowspt7j-build-action-1611357484/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-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 09:48:44 +0000 UTC FinishedAt: 2026-08-13 09:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 09:48:44 +0000 UTC FinishedAt: 2026-08-13 09:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 09:48:44 +0000 UTC FinishedAt: 2026-08-13 10:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 09:48:44 +0000 UTC FinishedAt: 2026-08-13 10:05:14 +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:*d4e442d9-9f3d-4257-b4d5-1e54ce2446e0,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-workflowspt7j/series-workflowspt7j-convert-artifact-63920681/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": "3e4562c2-c852-412c-9c2b-7614d7b8c595", "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-workflowspt7j/series-workflowspt7j-build-action-1920376581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 09:48:44 +0000 UTC FinishedAt: 2026-08-13 10:05:04 +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:*d4e442d9-9f3d-4257-b4d5-1e54ce2446e0,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-workflowspt7j/series-workflowspt7j-convert-artifact-63920681/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": "3e4562c2-c852-412c-9c2b-7614d7b8c595", "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-workflowspt7j/series-workflowspt7j-build-action-1920376581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 10:05:14 +0000 UTC FinishedAt: 2026-08-13 10:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 10:05:14 +0000 UTC FinishedAt: 2026-08-13 10:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 10:05:14 +0000 UTC FinishedAt: 2026-08-13 10:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 10:05:14 +0000 UTC FinishedAt: 2026-08-13 10:07: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:*3e4562c2-c852-412c-9c2b-7614d7b8c595,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-workflowspt7j/series-workflowspt7j-build-action-1920376581/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-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},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:*02b211e6-8c06-42e5-b604-04222d3a5a85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e4562c2-c852-412c-9c2b-7614d7b8c595,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-workflowspt7j/series-workflowspt7j-build-action-1611357484/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-workflowspt7j/series-workflowspt7j-build-action-1920376581/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 10:07:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 10:07:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},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-workflowspt7j/series-workflowspt7j-convert-artifact-2193173118/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 10:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 10:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 10:07:29 +0000 UTC FinishedAt: 2026-08-13 10:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 10:07:39 +0000 UTC FinishedAt: 2026-08-13 13:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspt7j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["set_memory_rox","set_memory_ro","set_memory_rw","set_memory_x","set_memory_nx","text_poke","text_poke_copy","text_poke_set"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"7da514d819a0afb148634aac92b3d190f34947c3","config_name":"upstream-apparmor-kasan.config","series_id":"13a0e783-7e1f-45ed-ab7b-bcbeb34da1cf","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 10:07:39 +0000 UTC FinishedAt: 2026-08-13 13:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*02b211e6-8c06-42e5-b604-04222d3a5a85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e4562c2-c852-412c-9c2b-7614d7b8c595,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-workflowspt7j/series-workflowspt7j-build-action-1611357484/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-workflowspt7j/series-workflowspt7j-build-action-1920376581/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-workflowspt7j/series-workflowspt7j-convert-artifact-2193173118/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,}