Name: series-workflowwfldm Phase: Succeeded StartedAt: 2026-07-31 02:54:21 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[0] Phase: Succeeded StartedAt: 2026-07-31 02:54:21 +0000 UTC FinishedAt: 2026-07-31 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 02:54:21 +0000 UTC FinishedAt: 2026-07-31 03:17:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53a43508ee332d8bffe40590c3d189c92a551f9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53a43508ee332d8bffe40590c3d189c92a551f9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "raw_sendmsg", "rawv6_sendmsg", "xfrm_output", "skb_pp_cow_data", "pskb_expand_head", "skb_copy_expand", "skb_segment_list", "skb_segment", "validate_xmit_xfrm", "esp4_gso_segment", "esp6_gso_segment", "iptfs_prepare_output" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDssCiAgICAmIzM0O3NrYl9wcF9jb3dfZGF0YSYjMzQ7LAogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDtlc3A0X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2VzcDZfZ3NvX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjY2IzZDU2MGIyMmFmODYxYjg5NjJkODU4NzQxOGEyOGU0YTFmYjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDM6MTI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjUxY2Q2MzU2NmE0NjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzEyNiw2ICYjNDM7MzEyNiwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuJiM0Mztza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2MgMCB8fCBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyIFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuJiM0Mztza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2UgMCkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uMTc1MmY2YWJlN2MzOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4Nyw2ICYjNDM7Mzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmluYWxpemVfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuQEAgLTk3Niw3ICYjNDM7OTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbiYjNDM7XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRvZmYgPSBzaXplO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZjtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcbiYjNDM7e1xuJiM0MztcdGlmIChhZGQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuJiM0MztcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBvZmYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuIHtcbiBcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbkBAIC0yMzA0LDYgJiM0MzsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXG4gXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcbiBcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuIFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXG4gXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbkBAIC0yNTQxLDcgJiM0MzsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xuIFxuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7XG4mIzQzO1x0XHRrZnJlZV9za2Iobik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gbjtcbiB9XG5AQCAtNDY4MCw3ICYjNDM7NDc0Nyw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiLCAqdG1wO1xuLVx0aW50IGxlbl9kaWZmLCBlcnI7XG4mIzQzO1x0aW50IGhlYWRfb2ZmLCBsZW5fZGlmZiwgZXJyO1xuIFxuIFx0LyogT25seSBza2JfZ3JvX3JlY2VpdmVfbGlzdCBnZW5lcmF0ZWQgc2ticyBhcnJpdmUgaGVyZSAqL1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19GUkFHTElTVCkpO1xuQEAgLTQ3MzIsOCAmIzQzOzQ3OTksMTcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBza2IpO1xuIFxuLVx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcbi1cdFx0bnNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBsZW5fZGlmZjtcbiYjNDM7XHRcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4mIzQzO1x0XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjNDM7XHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiYjNDM7XHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4mIzQzO1x0XHR9XG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBuc2tiLVx1MDAzZWRhdGEgLSB0bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTtcbkBAIC00NzU5LDkgJiM0Mzs0ODM1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gc2tiO1xuIFxuIGVycl9saW5lYXJpemU6XG4mIzQzO1x0ZXJyID0gLUVOT01FTTtcbiYjNDM7ZXJyX2xpc3Q6XG4gXHRrZnJlZV9za2JfbGlzdChza2ItXHUwMDNlbmV4dCk7XG4gXHRza2ItXHUwMDNlbmV4dCA9IE5VTEw7XG4tXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbiBcbkBAIC00OTYxLDcgJiM0Mzs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbiBcbiBcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xuIFxuLVx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIGhlYWRyb29tKTtcbiYjNDM7XHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKG5za2IpO1xuIFxuIFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChoZWFkX3NrYiwgLXRubF9obGVuLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcbmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcbkBAIC0xMzgsNyAmIzQzOzEzOCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLVx1MDAzZXByb3RvXSk7XG4gXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXG4gXHRcdHNlZ3MgPSBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xuQEAgLTE1NSwxNCAmIzQzOzE1NiwxNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLVx1MDAzZWhkcmxlbiAqIDg7XG4mIzQzO1x0XHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4mIzQzO1x0XHRcdFx0ICAgIHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdFx0cHJvdG8gPSBwaC1cdTAwM2VuZXh0aGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcbkBAIC0xNzAsOCAmIzQzOzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdH0gZWxzZSB7XG4gXHRcdF9fYmUxNiBmcmFnO1xuIFxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuJiM0MztcdFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcbiYjNDM7XHRcdFx0ICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKSkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuY1xuQEAgLTM1Niw2ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpO1xuJiM0MztcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR0bGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggJiM0MzsgaGxlbiAmIzQzOyB0bGVuICYjNDM7IDE1LFxuQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRlcnIgPSAtRUlOVkFMO1xuIFx0aWYgKGlwaGxlbiBcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuIFx0XHRnb3RvIGVycm9yX2ZyZWU7XG4mIzQzO1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gaXBobGVuKVxuJiM0MztcdFx0Z290byBlcnJvcl9mcmVlO1xuIFxuIFx0aWYgKGlwaGxlbiBcdTAwM2U9IHNpemVvZigqaXBoKSkge1xuIFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5AQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09XG5AQCAtMjAxLDcgJiM0MzsyMDMsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gcGgtXHUwMDNlaGRybGVuICogODtcbiYjNDM7XHRcdFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcbiYjNDM7XHRcdFx0XHQgICAgc2tiLCBwaC1cdTAwM2VoZHJsZW4gKiA4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTIxMiw4ICYjNDM7MjE2LDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0fSBlbHNlIHtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuJiM0MztcdFx0XHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC02MTMsNiAmIzQzOzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsNyAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbi1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtMzAsMzAgJiM0MzszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiBcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTtcbiYjNDM7XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRwc2tiX3B1bGwoc2tiLFxuIFx0XHQgIHNrYi1cdTAwM2VtYWNfbGVuICYjNDM7IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXHRpbnQgcGhsZW4gPSAwO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTtcbiYjNDM7XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG5AQCAtNjMsMTAgJiM0Mzs2NywxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiAmIzQzOyBoc2l6ZSAmIzQzOyAoeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0gcGhsZW4pKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBib29sIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN3aXRjaCAoeC1cdTAwM2VvdXRlcl9tb2RlLmVuY2FwKSB7XG4gXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcbkBAIC05OCw2ICYjNDM7MTAzLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNzUsNyAmIzQzOzE4MiwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbiYjNDM7XHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkge1xuJiM0MztcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHR4by1cdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XG4gXG5AQCAtMjAxLDcgJiM0MzsyMTMsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcdFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7XG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XG4mIzQzO1x0XHRpZiAoIXhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpKSB7XG4mIzQzO1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSxcbiYjNDM7XHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuJiM0MztcdFx0XHRza2IyLVx1MDAzZW5leHQgPSBuc2tiO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfbGlzdChza2IyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGVyciA9IHgtXHUwMDNldHlwZV9vZmZsb2FkLVx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcbiBcdFx0aWYgKCFlcnIpIHtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjEzYjYyYmNkOWUwNTMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTIzNzksNyAmIzQzOzIzNzksOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC0oeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyAmIzQzOzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gJiM0MzsgeC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGlobDtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaWhsKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0X19za2JfcHVsbChza2IsIGlobCk7XG4gXHRtZW1tb3ZlKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBpcGgsIGlobCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNzksNyAmIzQzOzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MzsgaGRyX2xlbjtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICYjNDM7MjExLDggQEAgc3RhdGljIGludCB4ZnJtNl9yb19vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLFxuIFx0XHRcdCAgIChwcmV2aGRyIC0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cdTAwM2VkYXRhKTtcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XG4gXHRtZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7XG4gXG5AQCAtMjQxLDcgJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHR4ZnJtNF9iZWV0X21ha2VfaGVhZGVyKHNrYik7XG4gXG5AQCAtMjg4LDcgJiM0MzsyOTIsOCBAQCBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICYjNDM7MzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MztcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiBcbiBcdHRvcF9pcGgtXHUwMDNldmVyc2lvbiA9IDY7XG5AQCAtMzc0LDcgJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0cGggPSBfX3NrYl9wdWxsKHNrYiwgWEZSTV9NT0RFX1NLQl9DQihza2IpLVx1MDAzZWlobCAtIGhkcl9sZW4pO1xuIFxuIFx0eGZybTZfYmVldF9tYWtlX2hlYWRlcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2NiM2Q1NjBiMjJhZjg2MWI4OTYyZDg1ODc0MThhMjhlNGExZmIxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAzOjEyOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNTFjZDYzNTY2YTQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMTI2LDYgJiM0MzszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sKJiM0Mztza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KG9mZnNldCAmbHQ7IDAgfHwgb2Zmc2V0ICZndDs9IFUxNl9NQVgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAodW5saWtlbHkoc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmZ3Q7PSBVMTZfTUFYIC0gb2Zmc2V0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrCiYjNDM7c2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShvZmZzZXQgJmd0OyAwKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh1bmxpa2VseShvZmZzZXQgJmd0Oz0gVTE2X01BWCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmZ3Q7PSBVMTZfTUFYIC0gb2Zmc2V0KSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBvZmZzZXQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIHNrYi0mZ3Q7aGVhZCAmIzQzOyBza2ItJmd0O25ldHdvcmtfaGVhZGVyOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li4xNzUyZjZhYmU3YzM4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3LDYgJiM0MzszODcsOCBAQCB1MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspOwogCiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTk3Niw3ICYjNDM7OTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCXNrYl9wdXQobnNrYiwgc2l6ZSk7CiAKIAloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgaGVhZF9vZmYpOwomIzQzOwllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KIAogCW9mZiA9IHNpemU7CiAJbGVuID0gc2tiLSZndDtsZW4gLSBvZmY7CkBAIC0yMTQwLDYgJiM0MzsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKQogfQogRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTsKIAomIzQzO3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpCiYjNDM7ewomIzQzOwlpZiAoYWRkICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChhZGQgJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0OyBVMTZfTUFYIC0gYWRkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZCkKJiM0Mzt7CiYjNDM7CWlmIChhZGQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGFkZCAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0Oz0gVTE2X01BWCAtIGFkZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtuZXR3b3JrX2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O21hY19oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7Y3N1bV9zdGFydCwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgb2ZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZCkKIHsKIAlfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7CkBAIC0yMzA0LDYgJiM0MzsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsCiAKIAlCVUdfT04oc2tiX3NoYXJlZChza2IpKTsKIAomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiAJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAKIAlpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSkKQEAgLTI1NDEsNyAmIzQzOzI2MDUsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJc2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7CiAKLQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pOwomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7CiYjNDM7CQlrZnJlZV9za2Iobik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJcmV0dXJuIG47CiB9CkBAIC00NjgwLDcgJiM0Mzs0NzQ3LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7Ci0JaW50IGxlbl9kaWZmLCBlcnI7CiYjNDM7CWludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjsKIAogCS8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi8KIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0ZSQUdMSVNUKSk7CkBAIC00NzMyLDggJiM0Mzs0Nzk5LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTsKIAotCQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTsKLQkJbnNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gbGVuX2RpZmY7CiYjNDM7CQloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJbnNrYi0mZ3Q7bmV4dCA9IGxpc3Rfc2tiOwomIzQzOwkJCWdvdG8gZXJyX2xpc3Q7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHsKJiM0MzsJCQllcnIgPSAtRU9WRVJGTE9XOwomIzQzOwkJCW5za2ItJmd0O25leHQgPSBsaXN0X3NrYjsKJiM0MzsJCQlnb3RvIGVycl9saXN0OwomIzQzOwkJfQogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbiwKIAkJCQkJCSBuc2tiLSZndDtkYXRhIC0gdG5sX2hsZW4sCiAJCQkJCQkgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTsKQEAgLTQ3NTksOSAmIzQzOzQ4MzUsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gc2tiOwogCiBlcnJfbGluZWFyaXplOgomIzQzOwllcnIgPSAtRU5PTUVNOwomIzQzO2Vycl9saXN0OgogCWtmcmVlX3NrYl9saXN0KHNrYi0mZ3Q7bmV4dCk7CiAJc2tiLSZndDtuZXh0ID0gTlVMTDsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpOwogCkBAIC00OTYxLDcgJiM0Mzs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYiwKIAogCQlfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7CiAKLQkJc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7CiYjNDM7CQllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pOwomIzQzOwkJaWYgKHVubGlrZWx5KGVycikpCiYjNDM7CQkJZ290byBlcnI7CiAJCXNrYl9yZXNldF9tYWNfbGVuKG5za2IpOwogCiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuYyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCi0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwomIzQzOwlpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by0mZ3Q7cHJvdG9dKTsKIAlpZiAobGlrZWx5KG9wcyAmYW1wOyZhbXA7IG9wcy0mZ3Q7Y2FsbGJhY2tzLmdzb19zZWdtZW50KSkKIAkJc2VncyA9IG9wcy0mZ3Q7Y2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpOwpAQCAtMTU1LDE0ICYjNDM7MTU2LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19CRUVUUEgpIHsKIAkJCXN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID0KIAkJCQkoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi0mZ3Q7ZGF0YTsKIAotCQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBwaC0mZ3Q7aGRybGVuICogODsKJiM0MzsJCQlpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKAomIzQzOwkJCQkgICAgc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CkBAIC0xNzAsOCAmIzQzOzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAl9IGVsc2UgewogCQlfX2JlMTYgZnJhZzsKIAotCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9Ci0JCQlpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKTsKJiM0MzsJCWlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoCiYjNDM7CQkJICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZykpKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJZ290byBvdXQ7CiAKIAlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtJmd0O2RzdC5kZXYpOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAl0bGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoaXBobGVuICZndDsgbGVuZ3RoIHx8IGlwaGxlbiAmbHQ7IHNpemVvZigqaXBoKSkKIAkJZ290byBlcnJvcl9mcmVlOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gaXBobGVuKQomIzQzOwkJZ290byBlcnJvcl9mcmVlOwogCiAJaWYgKGlwaGxlbiAmZ3Q7PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtJmd0O3NhZGRyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwppbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgLT0KQEAgLTIwMSw3ICYjNDM7MjAzLDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoCiYjNDM7CQkJCSAgICBza2IsIHBoLSZndDtoZHJsZW4gKiA4KSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJCQlwcm90byA9IHBoLSZndDtuZXh0aGRyOwogCQl9IGVsc2UgewogCQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjsKQEAgLTIxMiw4ICYjNDM7MjE2LDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCX0gZWxzZSB7CiAJCV9fYmUxNiBmcmFnOwogCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0KLQkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCAmYW1wO3Byb3RvLCAmYW1wO2ZyYWcpOwomIzQzOwkJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bCgKJiM0MzsJCQkgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKSkpCiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJfQogCiAJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggYjg4ZDM2NGU3OGFhZS4uZmEyMjNlYzAyMzk2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtNjEzLDYgJiM0Mzs2MTQsOSBAQCBzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLAogCWlmIChmbGFncyZhbXA7TVNHX1BST0JFKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywKIAkJCQkgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsCiAJCQkJICBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQsICZhbXA7ZXJyKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMgYi9uZXQveGZybS94ZnJtX2RldmljZS5jCmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9kZXZpY2UuYwpAQCAtMjAsNyAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogCiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRAotc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHVuc2lnbmVkIGludCBoc2l6ZSkKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwpAQCAtMzAsMzAgJiM0MzszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwogCiAJcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgaHNpemUpCiAKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCi0JaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UKQotCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplOwomIzQzOwlpZiAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1NPX1NFR01FTlQgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlwc2tiX3B1bGwoc2tiLAogCQkgIHNrYi0mZ3Q7bWFjX2xlbiAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHVuc2lnbmVkIGludCBoc2l6ZSkKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCWludCBwaGxlbiA9IDA7CiAKLQlpZiAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1NPX1NFR01FTlQpCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsgaHNpemU7CiYjNDM7CWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCWlmICh4LSZndDtzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CkBAIC02MywxMCAmIzQzOzY3LDExIEBAIHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlwc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4gJiM0MzsgaHNpemUgJiM0MzsgKHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gLSBwaGxlbikpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovCi1zdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgYm9vbCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHgtJmd0O291dGVyX21vZGUuZW5jYXApIHsKIAljYXNlIFhGUk1fTU9ERV9JUFRGUzoKQEAgLTk4LDYgJiM0MzsxMDMsOCBAQCBzdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAljYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOgogCQlicmVhazsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzUsNyAmIzQzOzE4MiwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCiAJaWYgKCFza2ItJmd0O25leHQpIHsKIAkJZXNwX2ZlYXR1cmVzIHw9IHNrYi0mZ3Q7ZGV2LSZndDtnc29fcGFydGlhbF9mZWF0dXJlczsKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTsKJiM0MzsJCWlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkgewomIzQzOwkJCVhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwKJiM0MzsJCQkJICAgICAgIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQl4by0mZ3Q7ZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FOwogCkBAIC0yMDEsNyAmIzQzOzIxMywxMyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCQl4byA9IHhmcm1fb2ZmbG9hZChza2IyKTsKIAkJeG8tJmd0O2ZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTsKIAotCQl4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTsKJiM0MzsJCWlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHsKJiM0MzsJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksCiYjNDM7CQkJCSAgICAgICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7CiYjNDM7CQkJc2tiMi0mZ3Q7bmV4dCA9IG5za2I7CiYjNDM7CQkJa2ZyZWVfc2tiX2xpc3Qoc2tiMik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJZXJyID0geC0mZ3Q7dHlwZV9vZmZsb2FkLSZndDt4bWl0KHgsIHNrYjIsIGVzcF9mZWF0dXJlcyk7CiAJCWlmICghZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwpAQCAtMjM3OSw3ICYjNDM7MjM3OSw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLSh4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAl0b3BfaXBoID0gaXBfaGRyKHNrYik7CiAJdG9wX2lwaC0mZ3Q7aWhsID0gNTsKQEAgLTI0MjYsNyAmIzQzOzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuICYjNDM7IHgtJmd0O3Byb3BzLmVuY19oZHJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJdG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7CiAJdG9wX2lwaC0mZ3Q7dmVyc2lvbiA9IDY7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwppbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBpaGw7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJX19za2JfcHVsbChza2IsIGlobCk7CiAJbWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpOwogCXJldHVybiAwOwpAQCAtMTc5LDcgJiM0MzsxODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwKIAkJCSAgIChwcmV2aGRyIC0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikgLSBza2ItJmd0O2RhdGEpOwogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoZHJfbGVuOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7CiAJbWVtbW92ZShpcHY2X2hkcihza2IpLCBpcGgsIGhkcl9sZW4pOwogCXJldHVybiAwOwpAQCAtMjA5LDcgJiM0MzsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLAogCQkJICAgKHByZXZoZHIgLSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi0mZ3Q7ZGF0YSk7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCV9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKIAltZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7CiAKQEAgLTI0MSw3ICYjNDM7MjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOz0gSVBWNF9CRUVUX1BITUFYTEVOOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCXhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTsKIApAQCAtMjg4LDcgJiM0MzsyOTIsOCBAQCBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJdG9wX2lwaCA9IGlwX2hkcihza2IpOwogCiAJdG9wX2lwaC0mZ3Q7aWhsID0gNTsKQEAgLTMzNSw3ICYjNDM7MzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAogCXRvcF9pcGgtJmd0O3ZlcnNpb24gPSA2OwpAQCAtMzc0LDcgJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlwaCA9IF9fc2tiX3B1bGwoc2tiLCBYRlJNX01PREVfU0tCX0NCKHNrYiktJmd0O2lobCAtIGhkcl9sZW4pOwogCiAJeGZybTZfYmVldF9tYWtlX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBIZWFkZXIgT2Zmc2V0IENoZWNrcyoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdGhlc2UgYGNhcmVmdWxgIHZhcmlhbnRzIGZvciBoYW5kbGluZyBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYCBhbmQgcmVsYXRlZCBvZmZzZXRzLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHByZXZlbnQgVTE2X01BWCBvdmVyZmxvd3MuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB3ZSBtYW5pcHVsYXRlIHBhY2tldCBoZWFkZXJzLCBtZWFuaW5nIHdlIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHZlcnkgY2FyZWZ1bGx5LiBJdCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29yZSBuZXR3b3JraW5nIGNvZGUsIGluY2x1ZGluZyB0aGUgSVBzZWMvWEZSTSBvZmZsb2FkIHBhdGhzLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDoKCiogICBgc2tiX3BwX2Nvd19kYXRhYAoqICAgYHBza2JfZXhwYW5kX2hlYWRgCiogICBgc2tiX2NvcHlfZXhwYW5kYAoqICAgYHNrYl9zZWdtZW50X2xpc3RgCiogICBgc2tiX3NlZ21lbnRgCiogICBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YAoqICAgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgCiogICBgcmF3X3NlbmRfaGRyaW5jYAoqICAgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAKKiAgIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YAoqICAgYHJhd3Y2X3NlbmRfaGRyaW5jYAoqICAgYHZhbGlkYXRlX3htaXRfeGZybWAKKiAgIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAKKiAgIGBpcHRmc19lbmNhcF9hZGRfaXB2NmAKKiAgIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YAoqICAgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgCiogICBgeGZybTZfcm9fb3V0cHV0YAoqICAgYHhmcm00X2JlZXRfZW5jYXBfYWRkYAoqICAgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgCiogICBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAKKiAgIGB4ZnJtNl9iZWV0X2VuY2FwX2FkZGAKCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSBpZiB3ZSBjYW4gcmVhY2ggdGhlc2UgZGlyZWN0bHksIHNpbmNlIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBzdGF0aWMgb3IgaW5saW5lZC4gTG9va3MgbGlrZSBvbmx5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuCgoqICAgYHNrYl9wcF9jb3dfZGF0YWAKKiAgIGBwc2tiX2V4cGFuZF9oZWFkYAoqICAgYHNrYl9jb3B5X2V4cGFuZGAKKiAgIGBza2Jfc2VnbWVudF9saXN0YAoqICAgYHNrYl9zZWdtZW50YAoqICAgYHZhbGlkYXRlX3htaXRfeGZybWAKClRoZSBvdGhlcnMgYXJlIHN0YXRpYywgYnV0IHRoYXQgZG9lcyBub3QgbWVhbiB0aGV5IGFyZSB1bnJlYWNoYWJsZS4gRm9yIGluc3RhbmNlLCBgcmF3X3NlbmRfaGRyaW5jYCBpcyBzdGF0aWMsIGJ1dCBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AgYXJlIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zLiBBbHNvLCBzb21lIGFyZSByZWdpc3RlcmVkIGluIGB4ZnJtX21vZGVfY2JzYCBhbmQgc29tZSBpbiBgeGZybTRfdHJhbnNwb3J0X29mZmxvYWRgLgoKVGltZSB0byB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXdfc2VuZF9oZHJpbmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz0zMTg9aW50IHJhd19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMzMi1cbm5ldC9pcHY0L3Jhdy5jOjMzMzpzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3Jhdy5jLTMzNC1cdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW5ndGgsXG4tLVxubmV0L2lwdjQvcmF3LmM9NDkzPXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcmF3LmMtNjU1LVx0aWYgKGhkcmluY2wpXG5uZXQvaXB2NC9yYXcuYzo2NTY6XHRcdGVyciA9IHJhd19zZW5kX2hkcmluYyhzaywgXHUwMDI2Zmw0LCBtc2csIGxlbixcbm5ldC9pcHY0L3Jhdy5jLTY1Ny1cdFx0XHRcdCAgICAgIFx1MDAyNnJ0LCBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZpcGMuc29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIFNlbmQgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgYXQgdGhlIHZlcnkgYm90dG9tLCBhcmVuJiMzOTt0IHdlPyBJdCBsb29rcyBsaWtlIGByYXdfc2VuZG1zZ2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VuZCBvcGVyYXRpb24uIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlLCB1bmZpbHRlcmVkIHN5c3RlbSBjYWxsIGxldmVsLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGV4YWN0bHkgd2hhdCBsYXllcnMgc2l0IGFib3ZlIGFuZCBiZWxvdyBgcmF3X3NlbmRtc2dgLCB0aGUgYXNzdW1wdGlvbnMgbWFkZSBhdCB0aGlzIGVudHJ5IHBvaW50LCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gV2hhdCBhcmUgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGRvbmUgKmJlZm9yZSogcmVhY2hpbmcgdGhpcyBsZXZlbD8gSXMgdGhlcmUgYW55IHBhY2tldCBmcmFnbWVudGF0aW9uIG9yIGFzc2VtYmx5IGJlaW5nIGhhbmRsZWQgYWJvdmUsIG9yIGlzIHRoYXQgKm15KiByZXNwb25zaWJpbGl0eSBoZXJlPyBIb3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgcHJvdG9jb2wgbGF5ZXIgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyLiBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBjYW4gSSB1c2UgdGhhdCBrbm93bGVkZ2UgdG8gbXkgYWR2YW50YWdlLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jhd3Y2X3NlbmRfaGRyaW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9NTEzPXN0YXRpYyBpbnQgcmF3djZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTYgKmZsNixcbi0tXG5uZXQvaXB2Ni9yYXcuYy01OTUtXG5uZXQvaXB2Ni9yYXcuYzo1OTY6c3RhdGljIGludCByYXd2Nl9zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbmd0aCxcbm5ldC9pcHY2L3Jhdy5jLTU5Ny1cdFx0XHRzdHJ1Y3QgZmxvd2k2ICpmbDYsIHN0cnVjdCBkc3RfZW50cnkgKipkc3RwLFxuLS1cbm5ldC9pcHY2L3Jhdy5jPTc0Nj1zdGF0aWMgaW50IHJhd3Y2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjYvcmF3LmMtOTExLVx0aWYgKGhkcmluY2wpXG5uZXQvaXB2Ni9yYXcuYzo5MTI6XHRcdGVyciA9IHJhd3Y2X3NlbmRfaGRyaW5jKHNrLCBtc2csIGxlbiwgXHUwMDI2Zmw2LCBcdTAwMjZkc3QsXG5uZXQvaXB2Ni9yYXcuYy05MTMtXHRcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MsIFx1MDAyNmlwYzYuc29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFN0YWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGByYXd2Nl9zZW5kbXNnYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgZm9yIHJhdyBJUHY2IHNvY2tldCB0cmFuc21pc3Npb24uIEl0JiMzOTtzIHRoZSBob29rLiBCdXQsIGhtbSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgZWxzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgIGlzIGFsc28gYSBwbGF5ZXIgaW4gdGhpcyBzaXR1YXRpb24uIElzIHRoaXMgcmVsZXZhbnQ/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCB0aGUgcmF3IHNvY2tldCYjMzk7cyBzZW5kIHBhdGggaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTEyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3R1bm5lbF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xMzItXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxMzM6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xMzQtXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIwMi1cdGNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDpcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIwMzpcdFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCh4LCBza2IsIGZlYXR1cmVzKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIwNC1cdGNhc2UgWEZSTV9NT0RFX0JFRVQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlY29kaW5nIHRoZSBHU08gQ2hhaW4qKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gZm9jdXNpbmcgb24gR2VuZXJhbGl6ZWQgU2VnbWVudGF0aW9uIE9mZmxvYWQsIG9yIEdTTywgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHdpdGggYSBmdW5jdGlvbiBjYWxsZWQgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBgZXNwNF9nc29fc2VnbWVudGAsIHdoaWNoIGl0c2VsZiBpcyBkZWFsaW5nIHdpdGggRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIGZvciBJUHY0LiBTbywgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIGlzIHBhcnQgb2YgdGhlIGJyb2FkZXIgR1NPIHByb2Nlc3MsIGxpa2VseSBoYW5kbGluZyB0aGUgc2VnbWVudGF0aW9uIHdpdGhpbiBhIHNwZWNpZmljIHR1bm5lbGluZyBvciB0cmFuc3BvcnQgbW9kZSB0aGF0IG9wZXJhdGVzICpiZWZvcmUqIHRoZSBFU1AgbGF5ZXIuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBsYXllcmluZyBhdCBwbGF5IGhlcmUsIGFuZCBub3cgdGhlIHF1ZXN0aW9uIGlzIHRoZSBleGFjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGV4YW1pbmluZyB0aGUgYXJndW1lbnRzIHBhc3NlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSB3aXRoaW4gYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBzZWdtZW50aW5nIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBHU08gd29yayBpcyBhY3R1YWxseSBoYXBwZW5pbmcgcmVsYXRpdmUgdG8gdGhlIEVTUCBzZWN1cml0eSBwcm9jZXNzaW5nLiBUaGlzIHdhcnJhbnRzIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MTUwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xOTQtXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxOTU6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk2LVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTIxMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yNTItXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyNTM6XHRyZXR1cm4geGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudCh4LCBza2IsIGVzcF9mZWF0dXJlcyk7XG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yNTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gZGVzaWduYXRlcyBgZXNwNF9nc29fc2VnbWVudGAgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBzZWdtZW50IHJlbGF0ZWQgdG8gdGhlIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIG5ldHdvcmsgcHJvdG9jb2wgc3RhY2suIFRoZSAmIzM0O2VzcDQmIzM0OyBwcmVmaXggaXMgaW50ZXJlc3RpbmcsIHByb2JhYmx5IHJlZmVyZW5jaW5nIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24gb3IgYSBtb2R1bGUgd2l0aGluIGEgbGFyZ2VyIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBnc29fc2VnbWVudGAgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqIC0gdGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBicmVha2luZyBkb3duIGxhcmdlciBwYWNrZXRzIGludG8gc21hbGxlciwgbWFuYWdlYWJsZSBzZWdtZW50cyBmb3IgdHJhbnNtaXNzaW9uLCBvcHRpbWl6aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCB0aGlzIGluaXRpYWwgcG9pbnQgaXMgY3JpdGljYWwgZm9yIHRoZSBmbG93IG9mIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRfZ3NvX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIxMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cdFx0XHRcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4NS1cdFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM4NjpcdFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZXNwNl9nc29fc2VnbWVudGAgQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVzcDZfZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIG9yIG1vZHVsZSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBwYXJhbGxlbHMuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gRXRoZXJuZXQgU2VnbWVudCBPZmZsb2FkIChHU08pLCBhbmQgbGlrZWx5LCBzb21lIGludGVyYWN0aW9uIHdpdGggSVB2Ni4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgaGFuZGxlcyB0aGUgc3BsaXR0aW5nIG9mIGxhcmdlIHBhY2tldHMgdG8gb3B0aW1pemUgdHJhbnNtaXNzaW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgSVB2Ni4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIG9uIGVmZmljaWVuY3kuIElzIHRoaXMgZnVuY3Rpb24gb3B0aW1pemVkPyBEb2VzIGl0IGNvcnJlY3RseSBoYW5kbGUgZnJhZ21lbnRlZCBJUHY2IHBhY2tldHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZz8gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEdTTywgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvZGUgcmVsYXRlZCB0byBjYWxjdWxhdGluZyBhbmQgc2V0dGluZyB0aGUgVENQIHNlZ21lbnQgc2l6ZSwgcG90ZW50aWFsbHkgaW52b2x2aW5nIGEgY2hlY2sgYWdhaW5zdCB0aGUgTVRVLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRyaXZlcjsgZG9lcyBpdCByZWx5IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZSwgb3IgaXMgaXQgcHVyZWx5IHNvZnR3YXJlLWJhc2VkPyBBbmQgd2hhdCBhYm91dCBjaGVja3N1bSBjYWxjdWxhdGlvbnM/IEhvdyBhcmUgdGhvc2UgaGFuZGxlZCBkdXJpbmcgdGhlIHNlZ21lbnRhdGlvbiBwcm9jZXNzPyBJcyBpdCB1c2luZyBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkIG9yIGRvaW5nIGl0IGluIHNvZnR3YXJlPyBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVENQL0lQIHN0YWNrIC0gZG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyBpdCBmb2xsb3cgc3RhbmRhcmQgbmV0d29yayBzdGFjayBwcmFjdGljZXM/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBlZGdlIGNhc2VzIHRoYXQgaXQgYWRkcmVzc2VzLCBtYXliZSBzb21lIGxlZ2FjeSBkZXZpY2VzPyBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggaW50ZXJvcGVyYWJpbGl0eS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MjM1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0yNTAtXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoyNTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0yNTItXHRcdFx0XHQgICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTQwND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkIGVzcDZfb2ZmbG9hZCA9IHtcbi0tXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDYtXHRcdC5ncm9fcmVjZWl2ZSA9IGVzcDZfZ3JvX3JlY2VpdmUsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzo0MDc6XHRcdC5nc29fc2VnbWVudCA9IGVzcDZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgYGlwdGZzX2VuY2FwX2FkZF9pcHY0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCBlbmNhcHN1bGF0aW9uLCBsaWtlbHkgd2l0aGluIGEgY29udGV4dCByZWxhdGVkIHRvIElQLW92ZXItc29tZXRoaW5nLCBwZXJoYXBzIGV2ZW4gSVBGUyBpdHNlbGYgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIHJldm9sdmUgYXJvdW5kIGl0cyBzcGVjaWZpYyByb2xlLiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyB0aGUgSVB2NCBoZWFkZXI/IE9yIGRvZXMgaXQgaGFuZGxlIHRoZSB3aG9sZSBwcm9jZXNzLCBpbmNsdWRpbmcgYWRkaW5nIHRoZSBpbm5lciBwYXlsb2FkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgaW5wdXQg4oCTIGEgcmF3IGRhdGFncmFtLCBvciBhbiBhbHJlYWR5IHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBwYWNrZXQ/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24sIFRUTCBoYW5kbGluZywgb3IgZXZlbiBzcGVjaWZpYyBJUCBvcHRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZD8gQW5kIG1vcmUgZnVuZGFtZW50YWxseSwgaG93IGVmZmljaWVudCBpcyB0aGlzPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgdGhhdCBjb3VsZCBiZSBtYWRlLCBwZXJoYXBzIHdpdGggdmVjdG9yaXphdGlvbiBvciB6ZXJvLWNvcHkgdGVjaG5pcXVlcywgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gRG9lcyBpdCBjYWxsIG90aGVyIG5ldHdvcmtpbmcgbGF5ZXJzIG9yIG90aGVyIHNwZWNpZmljIElQRlMtcmVsYXRlZCBjb21wb25lbnRzPyBNeSBtaW5kIHN0YXJ0cyBidWlsZGluZyBhIGRpYWdyYW0gaW4gbXkgaGVhZCwgbWFwcGluZyBvdXQgYWxsIHRoZSBwb3NzaWJsZSBmbG93IGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuIEZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgaW5wdXQsIGFuZCBob3cgYXJlIGVycm9ycyByZXBvcnRlZCBhbmQgbWFuYWdlZD8gVGhpcyBpcyBhbGwgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19lbmNhcF9hZGRfaXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjMyMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzU5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNjA6ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDY0PXN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjYtXHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0Njc6XHRcdHJldHVybiBpcHRmc19lbmNhcF9hZGRfaXB2NCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjgtXHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEZWNvZGluZyB0aGUgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YC4gVGhhdCBmdW5jdGlvbiBpcyBrZXksIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGFwcGFyZW50bHkuIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgcXVlc3Rpb24gaXMgKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkICpmcm9tKi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbi4gVGhlIHRleHQgcG9pbnRzIHRvIGEgY29uZGl0aW9uOiBgeC0mZ3Q7b3V0ZXJfbW9kZS5lbmNhcCA9PSBYRlJNX01PREVfSVBURlNgLiBTbywgdGhlIGVuY2Fwc3VsYXRpb24gbW9kZSwgaWYgc2V0IHRvIGBYRlJNX01PREVfSVBURlNgLCB0cmlnZ2VycyB0aGUgY2FsbC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBsZWFkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZXJlIEkmIzM5O3ZlIHNlZW4gYFhGUk1fTU9ERV9JUFRGU2AgZGVmaW5lZCBhbmQgd2hhdCB0aGF0IGVuY2Fwc3VsYXRpb24gbW9kZSBzaWduaWZpZXMgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBJIHdhcyBpbml0aWFsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCB0cmlnZ2VyIHdhcyAqcmVnaXN0ZXJlZCouIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2suIE15IHRob3VnaHQgcHJvY2VzcyBpcyBub3cgY2VudGVyaW5nIG9uIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBsaW5rZWQgdG8gYFhGUk1fTU9ERV9JUFRGU2AuCgpXYWl0LiBUaGVuIGl0IHNheXMgdGhhdCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGlzIHJlZ2lzdGVyZWQgaW4gYHhmcm1fbW9kZV9jYnNgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGRldGFpbC4gYHhmcm1fbW9kZV9jYnNgIG11c3QgYmUgc29tZSBjZW50cmFsIHRhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb25zIGZvciBkaWZmZXJlbnQgWEZSTSBtb2Rlcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBwYXRoIHRvIHRoZSB0cmlnZ2VyIGlzIHRocm91Z2ggYHhmcm1fbW9kZV9jYnNgLCBhbmQgbm93IEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyBhZGRlZCB0byB0aGF0IHRhYmxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN0cnVjdHVyZSBvZiBgeGZybV9tb2RlX2Nic2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGVuY2Fwc3VsYXRpb24gbW9kZSBhbmQgdGhlIG91dHB1dCBwcmVwYXJhdGlvbiBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpcyB0aGUgbmV4dCBzdGVwIHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAsIGtlZXBpbmcgaW4gbWluZCBhIHVzZXIgd2hvJiMzOTtzIGFuIGV4cGVydDoKCioqRGVsdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBpbW1lZGlhdGVseSBzaWduYWxzIGEgZGVlcCBkaXZlIGludG8gdGhlIElQdjQgdHJhbnNwb3J0IGxheWVyIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNlbnRyYWwsIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc2hhcGluZyB0aGUgb3V0Ym91bmQgcGFja2V0cyBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyZWQgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGV4YWN0IGNvbnRleHQuIElzIHRoaXMgYWJvdXQgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZywgb3IgYW0gSSB0aGlua2luZyBhYm91dCBhIHBhcnRpY3VsYXIgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5PyBQZXJoYXBzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk/CgpJZiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBJJiMzOTttIHByb2JhYmx5IGNvbnNpZGVyaW5nIGhvdyB0aGUgZGF0YSBpcyB0cmFuc2Zvcm1lZCwgZW5jYXBzdWxhdGVkIChvciBkZWNhcHN1bGF0ZWQsIGRlcGVuZGluZyBvbiB0aGUgc2NlbmFyaW8pLCBhbmQgdWx0aW1hdGVseSBwcmVwYXJlZCBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhpbmdzIGxpa2UgYXBwbHlpbmcgdGhlIElQc2VjIGhlYWRlcnMsIHVwZGF0aW5nIHRoZSBJUCBoZWFkZXIgaXRzZWxmLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBmcmFnbWVudGF0aW9uLCBhbHRob3VnaCB0aGF0IG1pZ2h0IGJlIGRlbGVnYXRlZCB0byBhIGxvd2VyIGxheWVyLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogd2hhdCBhc3BlY3Qgb2YgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGlzIHNuYWdnaW5nIG15IGF0dGVudGlvbj8gSXMgaXQgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgZnJlcXVlbnRseSBzdXJmYWNlIGR1cmluZyBoaWdoLXRocm91Z2hwdXQgc2l0dWF0aW9ucywgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIFhGUk0gY2FuIGJlY29tZSBzaWduaWZpY2FudD8gUGVyaGFwcyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBjb21wcm9taXNlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHRyYW5zZm9ybWVkIHBhY2tldHM/IE9yIGFtIEkgbW9yZSBmb2N1c2VkIG9uIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgY29uc2lkZXJpbmcgdGhlIHZhcmlvdXMgd2F5cyB0aGF0IHRyYWZmaWMgbWlnaHQgYmUgaW50ZXJjZXB0ZWQsIG1hbmlwdWxhdGVkLCBvciBtaXNkaXJlY3RlZCBkdXJpbmcgdGhpcyBvdXRwdXQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcz8gVGhlcmUgaXMgYSBsb3QgdG8gY29uc2lkZXIgYXMgdGhlIHRyYWZmaWMgZmxvdyB0cmF2ZXJzZXMgdGhpcyBmdW5jdGlvbi4KCkVpdGhlciB3YXksIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBpcyBhIGtleSBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgcHJvcGVyIGdyYXNwIG9mIHdoYXQgaXQgaXMgSSBhbSB0aGlua2luZyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHJhbnNwb3J0X291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYz01MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2tiX2RzdF9wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYzLSAqL1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NDpzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzgtXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Nzk6XHRcdFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDgwLVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBSZXZpZXcgb2YgeGZybV9vdXRlcl9tb2RlX291dHB1dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29kZSBpcyB1c2luZyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgcG9pbnQgb2Ygb3V0cHV0dGluZyB0aGlzIHBhY2tldCB3aXRoaW4gYSBwYXJ0aWN1bGFyIFhGUk0gdHJhbnNmb3JtLCB0byBzZWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgSSBhbSBtaXNzaW5nLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHRoaXMgaXMgd2hlcmUgdGhlICpvdXRlciogbW9kZSBwcm9jZXNzaW5nIGlzIGhhcHBlbmluZywgYXMgdGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMuJiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIFhGUk0gcHJvY2Vzc2luZyBmbG93LiBBbSBJIGxvb2tpbmcgYXQgSVBzZWMgdHVubmVsIG1vZGUgaGVyZSwgb3IgbWF5YmUgYSBHUkUgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbj8gRG9lcyB0aGUgY29udGV4dCB0ZWxsIG1lIGVub3VnaD8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAgc3BlY2lmaWNhbGx5IGhhbmRsZXMuIElzIGl0IHRoZSBmaW5hbCBzdGVwIGJlZm9yZSBwdXR0aW5nIHRoZSBwYWNrZXQgb24gdGhlIHdpcmUsIG9yIGlzIGl0IG1lcmVseSBwcmVwYXJpbmcgdGhlIG91dGVyIGhlYWRlcj8gTW9yZSBjb250ZXh0IGlzIG5lZWRlZCBoZXJlLiBJdCBoYW5kbGVzIHRoZSBmaW5hbCBzdGVwIHdoZXJlIHRoZSBvdXRlciBoZWFkZXIgaXMgY29tcGxldGVkIGFuZCB0aGUgcGFja2V0IGlzIHJlYWR5IHRvIGJlIHNlbnQgdG8gdGhlIG5ldHdvcmssIGFuZCB0aGUgb3V0ZXIgaGVhZGVyIG1pZ2h0IGJlIGEgdHJhbnNwb3J0IGxheWVyIHByb3RvY29sIG9yIGEgbmV0d29yayBsYXllciBwcm90b2NvbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBoYW5kbGluZyB0aGUgb3V0ZXIgaGVhZGVyIGFwcHJvcHJpYXRlbHkuIEFuZCBpcyB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG91dGVyIGhlYWRlciBpcyBpbmNvcnJlY3Q/IEkgbmVlZCB0byByZXZpZXcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDQxPXN0YXRpYyBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ2NzpzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00OTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9QS1RHRU4pXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMTpcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMzpFWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwNj1zdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MjQ6XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTI1LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFhGUk0gKElQc2VjKSBvdXRwdXQgcGF0aC4gVGhlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYgd2hlbiBhbiBJUHNlYyBwYWNrZXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIG9uIGl0cyB3YXkgb3V0LCBpcyBgeGZybV9vdXRwdXRfb25lYC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYHhmcm1fb3V0cHV0X29uZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBiZSBhIGdvb2QgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvcHRpbWl6YXRpb24gb3IgYXZvaWRpbmcgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIFdhaXQgYSBzZWNvbmQsIGlmIGl0JiMzOTtzIGBzdGF0aWNgIHRoZW4gaG93IGlzIGl0ICpjYWxsZWQqIGV4dGVybmFsbHk/IEFoYSEgYHhmcm1fb3V0cHV0X29uZWAgaXMgY2FsbGVkIGJ5IGB4ZnJtX291dHB1dF9yZXN1bWVgLiBUaGF0IG1ha2VzIHNlbnNlLiBgeGZybV9vdXRwdXRfcmVzdW1lYCBpcyBwcm9iYWJseSB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UgdGhhdCBoYW5kbGVzIHNvbWUgc3RhdGUgbWFuYWdlbWVudCBvciBjb250ZXh0LCBhbmQgdGhlbiBldmVudHVhbGx5ICpyZXN1bWVzKiB0aGUgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCBhIGNhbGwgdG8gdGhlICYjMzQ7YWN0dWFsIHdvcmtob3JzZSYjMzQ7IGZ1bmN0aW9uLCBgeGZybV9vdXRwdXRfb25lYC4gU28sIGB4ZnJtX291dHB1dF9yZXN1bWVgIGxpa2VseSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgcGFja2V0IHJldHJhbnNtaXNzaW9uIG9yIGZsb3cgY29udHJvbCBsb2dpYy4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX291dHB1dF9yZXN1bWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTA2PXN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTktXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjgtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02NjM9c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2NC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2NTpcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Ni19XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NTc9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3Olx0XHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDApO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgeGZybWAgY29kZSwgYW5kIEkmIzM5O20gc3RhcnRpbmcgYXQgdGhlIGVudHJ5IHBvaW50LCBgeGZybV9vdXRwdXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG5hdHVyYWxseS4gTm93LCB3aGF0JiMzOTtzIG5leHQ/IEhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNrYl9wcF9jb3dfZGF0YWAuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY2xhcml0eSBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz05MjQ9c3RhdGljIHZvaWQgc2tiX2Nsb25lX2ZyYWdsaXN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtOTMyLS8qKlxubmV0L2NvcmUvc2tidWZmLmM6OTMzOiAqIHNrYl9wcF9jb3dfZGF0YSgpIC0gY29weSBza2IgZGF0YSBpbnRvIHBhZ2UtcG9vbCBiYWNrZWQgc3RvcmFnZVxubmV0L2NvcmUvc2tidWZmLmMtOTM0LSAqIEBwb29sOiBwYWdlIHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk0My0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjk0NDppbnQgc2tiX3BwX2Nvd19kYXRhKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTk0NS1cdFx0ICAgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjEwMjI6RVhQT1JUX1NZTUJPTChza2JfcHBfY293X2RhdGEpO1xubmV0L2NvcmUvc2tidWZmLmMtMTAyMy1cbm5ldC9jb3JlL3NrYnVmZi5jPTEwMjQ9aW50IHNrYl9jb3dfZGF0YV9mb3JfeGRwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMDI5LVxubmV0L2NvcmUvc2tidWZmLmM6MTAzMDpcdHJldHVybiBza2JfcHBfY293X2RhdGEocG9vbCwgcHNrYiwgWERQX1BBQ0tFVF9IRUFEUk9PTSk7XG5uZXQvY29yZS9za2J1ZmYuYy0xMDMxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU0tCIERhdGEgSGFuZGxpbmcqKgoKT2theSwgc28gYHNrYl9wcF9jb3dfZGF0YWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgY29weS1vbi13cml0ZSAoQ09XKSBkYXRhIHdpdGhpbiB0aGUgU0tCIChTb2NrZXQgQnVmZmVyKSBzdHJ1Y3R1cmUsIG1lYW5pbmcgaXQmIzM5O3MgdG91Y2hpbmcgbWVtb3J5IGluIGludGVyZXN0aW5nIHdheXMuIFNpbmNlIGl0JiMzOTtzIGV4cG9ydGVkLCBJJiMzOTttIHRoaW5raW5nIEkgbWlnaHQgYmUgbG9va2luZyBhdCBhIGNydWNpYWwgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIGEgcmVjZW50IGJ1ZyByZXBvcnQgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgcHNrYl9leHBhbmRfaGVhZGAuIFRoYXQgZnVuY3Rpb24gaXMgY2xvc2VseSByZWxhdGVkLiBJJiMzOTttIHRoaW5raW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBsaWtlbHkgaGFuZGxlcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBTS0ImIzM5O3MgZGF0YSBidWZmZXIuIFRoYXQmIzM5O3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGlkZWEgb2YgZGF0YSBjb3B5aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBwcm9iYWJseSBpbiBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MjMzMz1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjMzNS0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjIzMzY6ICpcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcdTAwMjZza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM3LSAqXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIzNTQtXG5uZXQvY29yZS9za2J1ZmYuYzoyMzU1OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxubmV0L2NvcmUvc2tidWZmLmMtMjM1Ni1cdFx0ICAgICBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNDQwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NDE6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NDItXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjQ0NT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTMtXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTQ6XHRcdGlmIChza2IyIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTUtXHRcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDY1PWludCBfX3NrYl91bmNsb25lX2tlZXB0cnVlc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ3My1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NzQ6XHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzUtXHRpZiAocmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDk9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXHRpZiAoc2tiX3NoYXJlZChza2IpIHx8ICFpc19za2Jfd21lbShza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUzMS1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjI1MzI6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MzMtXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNjMxPWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI2NDMtXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcdTAwM2UgMCkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI2NDQ6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNjQ1LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNzg4PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNzk3LVx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjI3OTg6XHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxubmV0L2NvcmUvc2tidWZmLmMtMjc5OS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yOTQyPXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI5NTMtXHRpZiAoZWF0IFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Mjk1NDpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXHUwMDNlIDAgPyBlYXQgJiM0MzsgMTI4IDogMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5NTUtXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU0NDk9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NDcwLVx0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHRhaWxiaXRzIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc2tidWZmLmM6NTQ3MTpcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSYjNDM7MTI4LCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU0NzItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ0OT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGVfbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0NTYtXG5uZXQvY29yZS9za2J1ZmYuYzo2NDU3Olx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTY0NTgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY0NjE9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4MC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODE6XHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNjQ4Mi1cdFx0XHRcdEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIEtlcm5lbCBTa2IgRXhwYW5zaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgcHNrYl9leHBhbmRfaGVhZGAgaXMgb3V0IHRoZXJlIGFuZCBnZXRzIHVzZWQgKmEgbG90Ki4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBjb250ZXh0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpbWlsYXIgc2tiIGV4cGFuc2lvbiBmdW5jdGlvbnMgaW4gdXNlLgoKTGV0JiMzOTtzIHNoaWZ0IGZvY3VzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl9jb3B5X2V4cGFuZGAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWNrZXQgYnVmZmVyIGV4cGFuc2lvbiBvciBtb2RpZmljYXRpb24gYW5kIGNvbXBhcmUgdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgaW4gZGlmZmVyZW50IGV4cGFuc2lvbiBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgY2hvc2VuIGFjcm9zcyBkaWZmZXJlbnQgdXNlIGNhc2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGVzZSByb3V0aW5lcyB3aWxsIGxpa2VseSByZXZlYWwgaW50ZXJlc3RpbmcgZGV0YWlscyBhYm91dCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBuZXR3b3JrIGJ1ZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTI1NDY9RVhQT1JUX1NZTUJPTChza2JfZXhwYW5kX2hlYWQpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDgtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoyNTQ5OiAqXHRza2JfY29weV9leHBhbmRcdC1cdGNvcHkgYW5kIGV4cGFuZCBza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yNTUwLSAqXHRAc2tiOiBidWZmZXIgdG8gY29weVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NjUtICovXG5uZXQvY29yZS9za2J1ZmYuYzoyNTY2OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NjctXHRcdFx0XHRpbnQgbmV3aGVhZHJvb20sIGludCBuZXd0YWlscm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNjE0LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjI2MTU6RVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjYxNi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NDQ5PWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTUxNC1cdFx0XHRlbHNlXG5uZXQvY29yZS9za2J1ZmYuYzo1NTE1Olx0XHRcdFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IxLFxubmV0L2NvcmUvc2tidWZmLmMtNTUxNi1cdFx0XHRcdFx0XHQgICAgICAgc2tiX2hlYWRyb29tKHNrYjEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBgc2tiX2NvcHlfZXhwYW5kYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBrZXJuZWwgbW9kdWxlLiBUaGF0IHJhaXNlcyBhIGZsYWcg4oCTIGl0JiMzOTtzIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIFNlY3VyZSBTb2NrZXQgQnVmZmVycyAoU0tCcyksIGEgY29yZSBkYXRhIHN0cnVjdHVyZS4gVGhpcyBleHBvc3VyZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGV4dGVybmFsIGNvZGUgY2FsbGluZyBpdC4gU3BlY2lmaWNhbGx5LCB3aGF0IHVzZSBjYXNlcyBkb2VzIGl0IGFkZHJlc3MgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8gQW55IGNoYW5jZSB0aGVyZSYjMzk7cyBhbiB1bmNoZWNrZWQgcmFjZSBjb25kaXRpb24gd2hlbiBpdCBpcyBjYWxsZWQgZnJvbSB1c2VybGFuZD8KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGBza2Jfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGNvbXBhcmUgaG93IGl0IG1hbmFnZXMgU0tCIGRhdGEgYWxsb2NhdGlvbiBjb21wYXJlZCB3aXRoIGBza2JfY29weV9leHBhbmRgLiBJcyB0aGVyZSBvdmVybGFwIGluIGZ1bmN0aW9uYWxpdHk/IERvIHRoZXkgc29sdmUgdGhlIHNhbWUgcHJvYmxlbSwgb3IgYXJlIHRoZXkgZGlzdGluY3Q/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGNvZGUgZHVwbGljYXRpb24sIG9yIG1vcmUgZGFuZ2Vyb3VzbHksIGNvbmZsaWN0aW5nIGJlaGF2aW91cnMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwgaGVyZTsgaW5jb25zaXN0ZW5jaWVzIGNvdWxkIGxlYWQgdG8gZnJhZ21lbnRhdGlvbiwgb3Igd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgbGlrZWx5IHRoaXMgaXMganVzdCBhbiBvcHRpbWl6YXRpb24sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBvcHRpbWl6ZWQuIElzIHRoaXMgZm9yIHBlcmZvcm1hbmNlIG9uIHBhcnRpY3VsYXIgaGFyZHdhcmUsIG9yIGZvciBtZW1vcnktY29uc3RyYWluZWQgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBza2JfY29weV9leHBhbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NDcyOT1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDAtXG5uZXQvY29yZS9za2J1ZmYuYzo0NzQxOnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6NDg0NDpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFNLQiBTZWdtZW50YXRpb24qKgoKT2theSwgc28gYHNrYl9zZWdtZW50X2xpc3RgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtZWFucyBzb21lb25lJiMzOTtzIGV4cGxpY2l0bHkgZGVjaWRlZCB0aGlzIGlzIGEgZnVuY3Rpb24gd2UgbmVlZCBhY2Nlc3MgdG8sIHNvIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSAqd2h5Ki4gQW5kIHRoYXQgYWxtb3N0IGNlcnRhaW5seSBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgc2VnbWVudGF0aW9uIHByb2Nlc3MuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2tiX3NlZ21lbnRgIGl0c2VsZi4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCBgc2tiX3NlZ21lbnRfbGlzdGAgbGlrZWx5IGxldmVyYWdlcyBgc2tiX3NlZ21lbnRgIGF0IGl0cyBjb3JlLCBtYXliZSByZXBlYXRlZGx5LCB0byBidWlsZCBhIHNlZ21lbnRlZCBsaXN0IG9mIFNLQnMgZnJvbSBzb21lIG9yaWdpbmFsIGxhcmdlciBTS0IuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMuIFdoYXQgY3JpdGVyaWEgZG9lcyBpdCB1c2UgdG8gZGVjaWRlIGhvdyB0byBicmVhayB0aGluZ3MgdXA/IFdoYXQgY29uc3RyYWludHMgaXMgaXQgd29ya2luZyB3aXRoaW4/IElzIGl0IGp1c3QgTVRVLWRyaXZlbiwgb3IgYXJlIHRoZXJlIG90aGVyIGZhY3RvcnMgbGlrZSBoYXJkd2FyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIG9yIHNwZWNpZmljIHByb3RvY29sIHJlcXVpcmVtZW50cyBhdCBwbGF5PyBJIGJldCB0aGVyZSYjMzk7cyBzb21lIHNlcmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoZXJlLCBnaXZlbiB0aGUgb3ZlcmhlYWQgb2YgZnJhZ21lbnRpbmcgcGFja2V0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDc0MC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDItXHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDg0My19XG5uZXQvY29yZS9za2J1ZmYuYzo0ODQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDYtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo0ODQ3OiAqXHRza2Jfc2VnbWVudCAtIFBlcmZvcm0gcHJvdG9jb2wgc2VnbWVudGF0aW9uIG9uIHNrYi5cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDgtICpcdEBoZWFkX3NrYjogYnVmZmVyIHRvIHNlZ21lbnRcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00ODU0LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NDg1NTpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNDg1Ni1cdFx0XHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTExMy1cdFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxubmV0L2NvcmUvc2tidWZmLmM6NTExNDpcdFx0XHRcdFx0XCYjMzQ7c2tiX3NlZ21lbnQ6IHRvbyBtYW55IGZyYWdzOiAldSAldVxcblwmIzM0Oyxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxMTUtXHRcdFx0XHRcdHBvcywgbXNzKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MjA5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjUyMTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xubmV0L2NvcmUvc2tidWZmLmMtNTIxMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgSW52ZXN0aWdhdGlvbjogYHNrYl9zZWdtZW50YCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAqKgoKT2theSwgc28gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgaXRzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG9zc2libGUgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiAKCkdpdmVuIHRoZSBleHBvcnQsIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gYHZhbGlkYXRlX3htaXRfeGZybWAuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBhdCBob3cgdGhvc2UgdHdvIGludGVyYWN0LiBUaGUgZmFjdCB0aGF0IGBza2Jfc2VnbWVudGAgaXMgZXhwb3J0ZWQgc3VnZ2VzdHMgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBvdGhlciBrZXJuZWwgbW9kdWxlcy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgYHZhbGlkYXRlX3htaXRfeGZybWAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGludGVybGVhdmVkIHdpdGggYHNrYl9zZWdtZW50YD8gSXMgdGhlcmUgYSBkZXBlbmRlbmN5PyBXaGF0IG5ldHdvcmsgc3Vic3lzdGVtIG9yIHByb3RvY29sIHJlbGllcyBvbiB0aGlzIHJlbGF0aW9uc2hpcD8gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG5vdyBvbiB3aGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGFyZSB2YWxpZGF0ZWQgYW5kIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBmaXRzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGFja2V0IHNpemUsIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZSBvdGhlciBjcnVjaWFsIGFzcGVjdCBvZiBwYWNrZXQgcHJlcGFyYXRpb24gZm9yIHRyYW5zbWlzc2lvbj8gVGhlIGNvbnRleHQgaGVyZSB3aWxsIGJlIGNyaXRpY2FsLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gd2hlcmUgcG90ZW50aWFsIGlzc3VlcyBleGlzdCBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MTIyOnN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsIGJvb2wgKmFnYWluKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0xMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjU0LX1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjU1OkVYUE9SVF9TWU1CT0xfR1BMKHZhbGlkYXRlX3htaXRfeGZybSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDYW5kaWRhdGUgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGtleSwgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSBsaXN0IEkgaGF2ZSBpbmNsdWRlczogYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YCwgYHhmcm1fb3V0cHV0YCwgYHNrYl9wcF9jb3dfZGF0YWAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gLgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AgYXBwZWFyIHByb21pc2luZy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBlc3A0X2dzb19zZWdtZW50YCBhbmQgYGVzcDZfZ3NvX3NlZ21lbnRgIGp1bXAgb3V0IHNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIEdTTywgYW5kIHRoZSBub3RlcyBpbmRpY2F0ZSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgYnV0IHRoZXNlIGFyZSByZWdpc3RlcmVkIGluIGBlc3A0X29mZmxvYWRgIGFuZCBgZXNwNl9vZmZsb2FkYCwgd2hpY2ggbG9va3MgbGlrZSB0aGV5IGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGUgcmVhbCBHU08gZW50cnkgcG9pbnQgaXMgYHNrYl9tYWNfZ3NvX3NlZ21lbnRgLCBidXQgd2UgY2FuIGluY2x1ZGUgYGVzcDRfZ3NvX3NlZ21lbnRgIGlmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCB3aGljaCBuZWdhdGVzIHRoZWlyIHVzZWZ1bG5lc3MgZm9yIHRoZSByZXF1ZXN0ZWQgYW5hbHlzaXMuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBFdmVuIHRob3VnaCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCAqYXJlKiBzdGF0aWMsIHRoZXkgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCB0aGVyZWZvcmUgbm90IGlubGluZWQuIE9rYXkuCgpTbywgaG93IGFib3V0IGFuIGFsdGVybmF0aXZlPyBDb3VsZCB3ZSBsaXN0IGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgPyBObywgaXQmIzM5O3MgYWxzbyBzdGF0aWMuCgpMZXQmIzM5O3MgdmVyaWZ5LiBDaGVja2luZyB0aGUgZGVmaW5pdGlvbnMuLi4gWWVzLCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIHVzZT8gYHhmcm1fb3V0cHV0YCBpcyBub24tc3RhdGljLiBOb3cgdGhlIGxhc3Qgc3RlcCBpcyB0byBjaGVjayBgcmF3X3NlbmRtc2dgLiBXYWl0LCBjaGVja2luZyBgcmF3X3NlbmRtc2dgLi4uIGl0IGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz00NjI9c3RhdGljIGludCByYXdfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcbi0tXG5uZXQvaXB2NC9yYXcuYy00OTItXG5uZXQvaXB2NC9yYXcuYzo0OTM6c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9pcHY0L3Jhdy5jLTQ5NC17XG4tLVxubmV0L2lwdjQvcmF3LmM9OTQzPXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC9yYXcuYy05NTMtXHQuZ2V0c29ja29wdFx0ICAgPSByYXdfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3Jhdy5jOjk1NDpcdC5zZW5kbXNnXHQgICA9IHJhd19zZW5kbXNnLFxubmV0L2lwdjQvcmF3LmMtOTU1LVx0LnJlY3Ztc2dcdCAgID0gcmF3X3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFNvY2tldCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyByYXcgc29ja2V0cyB0cmFuc21pdCBkYXRhLiBUaGUgY29kZSB1c2VzIGByYXdfc2VuZG1zZ2AgLSBnb29kLCBJIHNlZSBpdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMsIGFuZCBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgcmF3X3Byb3RgLiBUaGUgc2FtZSBwYXR0ZXJuIGZvciBJUHY2IHdpdGggYHJhd3Y2X3NlbmRtc2dgIOKAkyBhbHNvIHN0YXRpYyBhbmQgcmVnaXN0ZXJlZCBpbiBgcmF3djZfcHJvdGAuICBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIG1pZ2h0IGJlIGEgbm9uLXN0YXRpYyB3cmFwcGVyIGZ1bmN0aW9uLCBidXQgaXQgYXBwZWFycyB0aGV5IGFyZSBjYWxsZWQgdGhyb3VnaCB0aGUgYHNrLSZndDtza19wcm90LSZndDtzZW5kbXNnYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgZ29vZCBiZWNhdXNlIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIHNob3VsZG4mIzM5O3QgYmUgaW5saW5lZCB3aGljaCBtYWtlcyB0aGVtIGVhc3kgdG8gdHJhY2suCgpOb3csIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIGZ1bmN0aW9ucyBzdWNoIGFzIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgYHhmcm1fb3V0cHV0YCB3aGljaCBhcmUgYWxsICpub3QqIHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGVhY2ggb2YgdGhlc2UgdG8gc2VlIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBwaWN0dXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9vdXRwdXRgIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYy0yLS8qXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjM6ICogeGZybV9vdXRwdXQuYyAtIENvbW1vbiBJUHNlYyBlbmNhcHN1bGF0aW9uIGNvZGUuXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI2LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzoyNzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4LXN0YXRpYyBpbnQgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDM9RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA1LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDY6c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA3LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDEte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MDQ6XHR3aGlsZSAobGlrZWx5KChlcnIgPSB4ZnJtX291dHB1dF9vbmUoc2tiLCBlcnIpKSA9PSAwKSkge1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDUtXHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTUtXHRcdFx0ICAgICAgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjE2Olx0XHRcdCAgICAgIE5VTEwsIHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXYsIHhmcm1fb3V0cHV0Mik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxNy1cdFx0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjgtXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTYyOT1zdGF0aWMgaW50IHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Mi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjYzOnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NjU6XHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDEpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjctXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2ODpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY5LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4NC1cdFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2Vncyk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY4NTpcdFx0ZXJyID0geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODYtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03MDY9c3RhdGljIHZvaWQgeGZybV9nZXRfaW5uZXJfaXBwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzU3OmludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5NzpcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAwKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk4LVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODIwLVx0XHRcdGlmIChza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgXHUwMDI2XHUwMDI2IHgtXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MjE6XHRcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMi1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMC1cdFx0aWYgKHNrYl9pc19nc28oc2tiKSlcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODMxOlx0XHRcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMyLVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQzLW91dDpcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ0Olx0cmV0dXJuIHhmcm1fb3V0cHV0MihuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDUtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4NDY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXQpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqCgpPa2F5LCBzbyBgeGZybV9vdXRwdXRgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBmbG93LiBMZXQmIzM5O3Mgc2VlLi4uIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBhbmQgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgIGFyZSBzdGF0aWMuIEludGVyZXN0aW5nLCBidXQgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AuIEFoYSEgVGhhdCBsaWtlbHkgaW5kaWNhdGVzIGhvdyB0aGV5JiMzOTtyZSAqdXNlZCouIE5vdywgbG9va2luZyBkZWVwZXI6IGB4ZnJtX291dHB1dGAgY2FsbHMgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoZW4gdGhhdCBjYWxscyBgeGZybV9vdXRwdXRfb25lYC4gVGhlbiBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIEZpbmFsbHksICp0aGF0KiBsZWFkcyB1cyB0byBlaXRoZXIgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIG9yIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YC4gIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgeGZybV9vdXRwdXRgICppcyogdGhlIHByaW1lIGVudHJ5IHBvaW50IGZvciBYRlJNIG91dHB1dCBoYW5kbGluZy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuCgpOb3csIHdoYXQgYWJvdXQgdGhlc2UgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnM/IGB4ZnJtNF9iZWV0X2VuY2FwX2FkZGAsIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYCwgYHhmcm02X3R1bm5lbF9lbmNhcF9hZGRgLCBhbmQgYHhmcm02X2JlZXRfZW5jYXBfYWRkYC4gVGhleSYjMzk7cmUgbm90IGNhbGxlZCBkaXJlY3RseSBieSBgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dGAuIFRoZXkgYXJlIGludm9rZWQgYnkgdGhlIGB4ZnJtX3N0YXRlLSZndDt0eXBlLSZndDtvdXRwdXRgLiBSaWdodC4gVGltZSB0byBkaWcgaW50byBgeGZybTRfdHVubmVsX2VuY2FwX2FkZGAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHVubmVsX2VuY2FwX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYz0yMzA9c3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI3OS0gKi9cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MjgwOnN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjgxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQxOT1zdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDMzLVx0Y2FzZSBYRlJNX01PREVfVFVOTkVMOlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MzQ6XHRcdHJldHVybiB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQzNS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRGlzc2VjdGluZyB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBYRlJNIG91dHB1dCBwcm9jZXNzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHdhcyBjYWxsZWQgYnkgYHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXRgLiBCdXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBXYWl0LCBob2xkIG9uLi4uSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgWEZSTSBhcmNoaXRlY3R1cmUuIFJpZ2h0LCBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGlzbiYjMzk7dCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhhdCBmdW5jdGlvbi4KCkFoYSEgTm93IEkgcmVtZW1iZXIuLi4gYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGB4ZnJtX21vZGVfY2JzYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBpbW1lZGlhdGUgam9iIGlzIHRvIGNvbmZpcm0gdGhhdCBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgY29ycmVjdGx5LiAqRG91YmxlLWNoZWNrcyouIFllcCwgYHhmcm1fbW9kZV9jYnNgICpkb2VzKiBoYXZlIGEgYHByZXBhcmVfb3V0cHV0YCBmaWVsZC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28sIGBwcmVwYXJlX291dHB1dGAgaXMgdGhlIHNwZWNpZmljIGZpZWxkLgoKT2theSwgbm93IGxldCYjMzk7cyBnbyBkZWVwZXIgYW5kIGNoZWNrIGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgYW5kIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29ycmVjdC4gSSB3aWxsIGZvY3VzIG9uIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jPTM2Nz1zdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDE4LSAqL1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MTk6c3RhdGljIGludCB4ZnJtNF9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDIwLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzItXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NzM6XHRcdFx0cmV0dXJuIHhmcm00X3ByZXBhcmVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3NC1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBPZmZsb2FkIGFuZCBTS0IgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHhmcm1fb3V0cHV0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCwgY292ZXJpbmcgdGhlIGludGVyYWN0aW9ucyBvZiBmdW5jdGlvbnMgbGlrZSBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAsIHdoaWNoIHRoZW4gY2FsbHMgaW50byBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhciBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBYRlJNIGZyYW1ld29yayBpcyBoYW5kbGluZyBvdXRwdXQuCgpJJiMzOTttIGFsc28gbm90aW5nIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxzOiBgdmFsaWRhdGVfeG1pdF94ZnJtYCBjYWxsZWQgYnkgYHZhbGlkYXRlX3htaXRfc2tiYCwgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIGJvdGggY2FsbGVkIGJ5IGBza2JfZ3NvX3NlZ21lbnRgLCBhbmQgYHNrYl9jb3B5X2V4cGFuZGAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYW5kIGBza2JfcHBfY293X2RhdGFgIHdoaWNoIGFyZSBhbGwgc3RhbmRhbG9uZSBleHBvcnRzLiBUaGlzIHNob3dzIG1lIHRoZSBkZXBlbmRlbmN5IHRyZWUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIGNoYW5nZXMgc3BhbiBzZXZlcmFsIGtleSBmaWxlcy4gIFRoZSBmaWxlcyBhcmUgc2NhdHRlcmVkIGFyb3VuZCBuZXQvY29yZSwgbmV0L2lwdjQsIG5ldC9pcHY2LCBhbmQgbmV0L3hmcm0gZGlyZWN0b3JpZXMuClNwZWNpZmljYWxseSwgYG5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jYCBuZWVkcyBgQ09ORklHX0lORVRfRVNQX09GRkxPQURgLCBgbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNgIG5lZWRzIGBDT05GSUdfSU5FVDZfRVNQX09GRkxPQURgLCBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgbmVlZHMgYENPTkZJR19YRlJNX09GRkxPQURgLCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCBuZWVkcyBgQ09ORklHX1hGUk1fSVBURlNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fb3V0cHV0LmNgIG5lZWRzIGBDT05GSUdfWEZSTWAuIFRoZSBvdGhlcnMsIGBuZXQvaXB2NC9yYXcuY2AsIGBuZXQvaXB2Ni9yYXcuY2AgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIGFsd2F5cyBidWlsdCwgc28gYXJlIG5vdCBhIGNvbmNlcm4uCgpTbywgYENPTkZJR19JTkVUX0VTUF9PRkZMT0FEYCBhbmQgYENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG1vZHVsYXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFdmFsdWF0aW5nIHRoZSBJUHY2IEVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLCBhbmQgc3BlY2lmaWNhbGx5IElQdjYgc2VjdXJpdHkgcHJvdG9jb2xzLCB0aGF0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGltcGxpY2l0bHkgY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBoZXJlLCBhcyB0aGF0JiMzOTtzIHR5cGljYWxseSB3aGVyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBjb3JyZWN0bHkgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3ZWxsIHdpdGggdGhlIHJlc3Qgb2Ygb3VyIElQdjYgc2VjdXJpdHkgc3RhY2s/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzIOKAkyBpcyB0aGUgTklDIGNhcGFibGU/IEFyZSB0aGUgZHJpdmVyIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgKnVzZSogaXQ/IFRoZXJlJiMzOTtzIGEgd2hvbGUgY29uc3RlbGxhdGlvbiBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgZ2FpbnMgYW5kIHBpdGZhbGxzIHRpZWQgdG8gdGhpcyBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVDZfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYENPTkZJR19YRlJNX09GRkxPQURgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSBzdWJzeXN0ZW0sIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gaGlnaC10aHJvdWdocHV0IGVudmlyb25tZW50cy4gSXMgaXQgZW5hYmxlZD8gSWYgc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhdmVhdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIHJlZ2FyZGluZyBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcyDigJMgaXMgdGhlIGhhcmR3YXJlIGNvcnJlY3RseSBjb25maWd1cmVkLCBhcmUgdGhlIGRyaXZlcnMgY29tcGF0aWJsZSwgYW5kIGhhcyBpdCBiZWVuIHRlc3RlZCB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uPyBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyBhaGVhZCwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgbGlrZSBJUFNlYyBwb2xpY2llcyBvciBldmVuIHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIGxpa2UgR1JFIHR1bm5lbHMuIFRoaXMgc2luZ2xlIGNoZWNrIGhhcyBvcGVuZWQgYSB3aG9sZSBjaGFpbiBvZiB0aG91Z2h0IOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIGdvYWxzIGZvciB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIEkgbXVzdCBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgZnJvbSB0aGUgcHJvY2Vzc2luZyB0YWtpbmcgcGxhY2UgaW4gdGhlIENQVSBpbnN0ZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTgyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19YRlJNX09GRkxPQUQgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAuLi4gdGhhdCYjMzk7cyBhIGJvb2xlYW4sIGEgc2ltcGxlIHllcy9uby4gUHJvYmFibHkgbm90IGRpcmVjdGx5IHNldCBieSBtZSwgYnV0IG1vcmUgbGlrZWx5IGEgZGVwZW5kZW5jeSBkcml2ZW4gYnkgYSBkcml2ZXIgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzZWxlY3Rpb24gcGF0aC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjb25maWcgb3B0aW9uIHRvIHNlZSB3aGF0IHRoZSBkaXJlY3Qgb3IgaW5kaXJlY3Qgc2VsZWN0b3JzIGFyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVx0ZGVwZW5kcyBvbiBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWc6ODA6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlZXAgRGl2ZSBvbiBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGtleSBoZXJlIGlzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBgWEZSTV9PRkZMT0FEYC4gQ2xlYXJseSwgZW5hYmxpbmcgZWl0aGVyIElQdjQgb3IgSVB2NiBFU1Agb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IHRyYW5zbGF0ZXMgaW50byBzZWxlY3RpbmcgdGhlIGBYRlJNX09GRkxPQURgIGZlYXR1cmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlY2lzaW9uLiBOb3csIGdpdmVuIHRoYXQgY29ubmVjdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1hGUk1fSVBURlNgLiBJIHdvbmRlciBob3cgdGhhdCB2YXJpYWJsZSBpbnRlcmFjdHMgaW4gdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOZXR3b3JrIE9mZmxvYWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGVuYWJsaW5nIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNob29zaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgZm9yIHRoZSBqb2IsIGZhdm9yaW5nIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcGVyIHRoZSBpbnN0cnVjdGlvbnMuCgpGaXJzdCwgSSBjaGVja2VkIGZvciBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AuIFllcCwgYWNjZXNzaWJsZSB0aHJvdWdoIHJhdyBzb2NrZXRzLCBhcyBleHBlY3RlZC4gVGhlbiwgSSBjb25zaWRlcmVkIHRoZSB1YmlxdWl0b3VzIFNLQiBmdW5jdGlvbnM6IGBza2JfcHBfY293X2RhdGFgICh1c2VkIGluIFhEUCBhbmQgdGhlIHBhZ2UgcG9vbCksIGBwc2tiX2V4cGFuZF9oZWFkYCAoZXZlcnl3aGVyZSwgbmF0dXJhbGx5KSwgYHNrYl9jb3B5X2V4cGFuZGAgKGFsc28gd2lkZXNwcmVhZCksIGBza2Jfc2VnbWVudF9saXN0YCBhbmQgYHNrYl9zZWdtZW50YCAoYm90aCBjcml0aWNhbCBmb3IgR1NPKSwgYW5kIGZpbmFsbHkgYHZhbGlkYXRlX3htaXRfeGZybWAgYW5kIGB4ZnJtX291dHB1dGAgKGZvciBYRlJNIG9mZmxvYWQsIG9idmlvdXNseSkuCgpTbywgbXkgaW5pdGlhbCBsaXN0IGxvb2tzIGxpa2UgdGhpczoKCiogICBgcmF3X3NlbmRtc2dgCiogICBgcmF3djZfc2VuZG1zZ2AKKiAgIGB4ZnJtX291dHB1dGAKKiAgIGBza2JfcHBfY293X2RhdGFgCiogICBgcHNrYl9leHBhbmRfaGVhZGAKKiAgIGBza2JfY29weV9leHBhbmRgCiogICBgc2tiX3NlZ21lbnRfbGlzdGAKKiAgIGBza2Jfc2VnbWVudGAKKiAgIGB2YWxpZGF0ZV94bWl0X3hmcm1gCgpIb2xkIG9uLCB0aG91Z2guIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgc3RhdGljLCBhcmVuJiMzOTt0IHRoZXk/IFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFdlbGwsIGByYXdfc2VuZG1zZ2AgaXNuJiMzOTt0IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHJhd19wcm90YC4gU3RpbGwsIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIG1heWJlIEkgc2hvdWxkIGxpc3QgdGhlbS4KCkJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCwgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgLCBgeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50YCwgYW5kIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YC4gVGhleSYjMzk7cmUgc3RhdGljIHRvbywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGBlc3A0X29mZmxvYWRgIGFuZCBgZXNwNl9vZmZsb2FkYC4gV2FpdCwgYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgYXJlIHRoZSBvbmVzIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzISBBbmQgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgaXMgY2FsbGVkIGJ5IGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGVzcDRfZ3NvX3NlZ21lbnRgLiBTbyB0aG9zZSBhcmUgdGhlIGJldHRlciBvbmVzIHRvIGluY2x1ZGUuCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3A0X2dzb19zZWdtZW50YCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRfZ3NvX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIxMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cdFx0XHRcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4NS1cdFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM4NjpcdFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBhbmQgT3V0cHV0IFByZXBhcmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgZW50cnkgcG9pbnRzLiBHb3QgaXQuIENvbmZpcm1lZDogYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgYXJlIHRoZSBvbmVzIHdlIG5lZWQgdG8gZm9jdXMgb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwcmVwcGVkIGZvciBvdXRwdXQsIHNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0IG9mIGl0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IG9mIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGp1c3QgdG8gbWFrZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGNvbmZpcm0gdGhlIGdlbmVyYWwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGdW5jdGlvbiBQb2ludGVyIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyBpbmRlZWQgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqcG9pbnRlZCogdG8uIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHNpbWlsYXIuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIGl0LCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBgeGZybTZfcHJlcGFyZV9vdXRwdXRgLiBUaGF0IGNvbXBhcmlzb24gc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGBpcHRmc19wcmVwYXJlX291dHB1dGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbW9uYWxpdGllcyBhbmQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcy4uLiB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhvc2UgZGV0YWlscy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlLCBhbmQgbGlrZWx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzY3PXN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MTgtICovXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQxOTpzdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MjAte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3Mi1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3MzpcdFx0XHRyZXR1cm4geGZybTRfcHJlcGFyZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc0LVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNlYyBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBmb3IgSVBzZWMgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB4ZnJtX291dHB1dGAuIExvb2tpbmcgYXQgdGhlIGNhbGwgY2hhaW4sIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBpcyB0cmlnZ2VyZWQgYnkgYHhmcm1fb3V0cHV0X29uZWAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgeGZybV9vdXRwdXRfcmVzdW1lYCwgYW5kIHRoYXQgb25lIGNvbWVzIGZyb20gYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBjb21lIGludG8gcGxheS4gSSYjMzk7dmUgY29tcGlsZWQgYSBwcmVsaW1pbmFyeSBsaXN0OiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGB4ZnJtX291dHB1dGAgaXRzZWxmIChvYnZpb3VzbHkpLCB0aGVuIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgdGhlIEdTTy1yZWxhdGVkIGZ1bmN0aW9ucyBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YC4gSSBhbHNvIHdhbnQgdG8ga2VlcCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGluIG1pbmQuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCBzb21lIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0ZXN0IHRoZSBlZmZlY3Qgb2YgZGlmZmVyZW50IGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgSU5FVF9FU1BfT0ZGTE9BRGAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFuc21pc3Npb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaGluZ2VzIG9uIGBJTkVUX0VTUGAuIFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSwgdGhlIGxpbmNocGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgZXZlbiB0YWxraW5nIGFib3V0PyBJcyB0aGlzIGEgc3lzdGVtIGNhbGwsIGEgbWFjcm8sIGEgY29uc3RhbnQ/IFRoZSBjb250ZXh0IGlzbiYjMzk7dCBzcGVsbGVkIG91dCBoZXJlLCBidXQgaXRzIGluZmx1ZW5jZSBpcyBjbGVhci4gVGhlIHByZXNlbmNlIG9mIGBJTkVUX0VTUGAgaXMgdGhlIGRlY2lkaW5nIGZhY3RvcjsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIE15IHN1YnNlcXVlbnQgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBlbnRpcmVseSBkZXBlbmRlbnQgb24gd2hhdCBleGFjdGx5IGBJTkVUX0VTUGAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQgd2lsbCBkaWN0YXRlIHRoZSBwb3RlbnRpYWwgc29sdXRpb25zLCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQsIGZyYW5rbHksIHRoZSBlbnRpcmUgYXBwcm9hY2ggSSB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IENoZWNraW5nIGBJTkVUNl9FU1BgKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgSU5FVDZfRVNQYCBjb250ZXh0LiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIG5ldHdvcmsgdHJhZmZpYywgb3IgcmV2aWV3aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IEludGVybmV0IFByb3RvY29sIFNlY3VyaXR5IChJUHNlYykgYW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBvciBjb25maWd1cmVkIHdpdGggSVB2Ni4gSSBjb3VsZCBiZSBpbnZlc3RpZ2F0aW5nIGEgc3BlY2lmaWMgaXNzdWUsIHZlcmlmeWluZyBhIHNldHVwLCBvciBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgY29uZmlndXJhdGlvbiBlcnJvciBsZWFkaW5nIHRvIGNvbm5lY3Rpdml0eSBwcm9ibGVtcz8gT3IgYW0gSSBzaW1wbHkgZG91YmxlLWNoZWNraW5nIHRoYXQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIGJlc3QgcHJhY3RpY2VzIGFuZCBSRkNzPyBNeSBmb2N1cyBpcyBpbnN0YW50bHkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBwcm90b2NvbCBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQ2X0VTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIFNlY3VyaXR5IFByb3RvY29sIFN1cHBvcnQgYW5kIFJlLWV2YWx1YXRpbmcgSVBURlMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGV4cGFuZGluZyB0aGUgcHJvdG9jb2wgc3VwcG9ydCBoZXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHJvYnVzdCBuZXR3b3JrIHNlY3VyaXR5LiBUaGlua2luZyBhYm91dCBpdCwgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYWxvbmdzaWRlIHRoZSBleGlzdGluZyBvcHRpb25zLiBXZSBjYW4mIzM5O3QgYmUgbGVhdmluZyBvdXQgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIGZvciBJUHY0IGFuZCBJUHY2OyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYW5kIHNlY3VyaXR5IG9wdGlvbnMuCgpOb3csIGJlZm9yZSB3ZSBtb3ZlIGZvcndhcmQgb24gdGhpcywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgWEZSTV9JUFRGU2AuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBpdCBpbiBsaWdodCBvZiB0aGVzZSBuZXcgYWRkaXRpb25zLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgY3VycmVudCBzZXR1cC4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdlIG5lZWQgdG8gY29uc2lkZXIgZ2l2ZW4gdGhlc2UgY2hhbmdlcz8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGNvZGUgcGF0aCBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZ2VscyBjb3JyZWN0bHksIGtlZXBpbmcgYW4gZXllIG9uIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9wdGlvbnMgd29yayB3ZWxsIHdpdGhpbiB0aGUgbmV3IHNlY3VyaXR5IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIENvbnRleHQqKgoKU28sIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAmIzM0O0RvZXMgaXQgKmRlcGVuZCogb24gYW55dGhpbmc/JiMzNDsgQXMgYW4gZXhwZXJ0LCBJJiMzOTttIHRyYWluZWQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzLCBwcmVjb25kaXRpb25zLCBhbmQgY29uc3RyYWludHMuIFdoZW4gcHJlc2VudGVkIHdpdGggYSBwcm9ibGVtLCBzb2x1dGlvbiwgb3IgaWRlYSwgbXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgb3V0IHRoZSBjb25uZWN0aW9ucy4gQXJlIHRoZXJlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgSSBuZWVkIHRvIGNsYXJpZnk/IElzIHRoaXMgaXNvbGF0ZWQsIG9yIGRvZXMgaXQgcGx1ZyBpbnRvIGEgbGFyZ2VyIHN5c3RlbT8gV2hhdCBleHRlcm5hbCBmYWN0b3JzIGNvdWxkIGluZmx1ZW5jZSB0aGUgb3V0Y29tZT8gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBteSBhbmFseXRpY2FsIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgbWVyaXRzIG9yIGltcGxpY2F0aW9ucy4gTXkgeWVhcnMgb2YgZXhwZXJpZW5jZSBoYXZlIHRhdWdodCBtZSB0aGF0IG92ZXJsb29raW5nIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIEl0IGlzIHRoaXMgYXBwcm9hY2ggdGhhdCBoYXMgY29uc2lzdGVudGx5IGhlbHBlZCBtZSB0byBhdm9pZCB0aGUgcGl0IGZhbGxzIG9mIHVuZGVyLWNvbnNpZGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnLTgtXHRzZWxlY3QgR1JPX0NFTExTXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9NDM9Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElQVjZcbm5ldC94ZnJtL0tjb25maWctNDYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNTQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBYRlJNXG5uZXQveGZybS9LY29uZmlnLTY0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubmV0L3hmcm0vS2NvbmZpZy03NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyNi1cdGJvb2wgXCYjMzQ7UEZfS0VZIE1JR1JBVEVcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTI3Olx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTEyOC1cdHNlbGVjdCBYRlJNX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxNDM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTQ0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk5NwoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHNlYyBDb25maWd1cmF0aW9uIGFuZCBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgaXMgYWxsIGNvbnRpbmdlbnQgb24gdGhlIGBYRlJNYCBjb25maWd1cmF0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBJUHNlYy1yZWxhdGVkIGtlcm5lbCBpc3N1ZXMuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgYXJlOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYWxzbyB0aGUgYFhGUk1fSVBURlNgIG9wdGlvbi4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYFhGUk1fT0ZGTE9BRGAgbmVlZHMgZXhwbGljaXQgaGFuZGxpbmcgaGVyZS4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBzZWxlY3RlZCBieSB0aGUgb2ZmbG9hZCB2YXJpYW50cyBvZiBFU1AgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc28gZXhwbGljaXRseSBsaXN0aW5nIGl0IGlzbiYjMzk7dCBzdHJpY3RseSAqbmVjZXNzYXJ5KiwgYnV0IGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIGluY2x1ZGUgaXQgZm9yIGNsYXJpdHkuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIHNlY3VyaXR5LgoKTm93LCB0aGlzIHBhdGNoLi4uIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBJdCBhcHBlYXJzIHRoYXQgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIGhlYWRlciBvZmZzZXRzIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBjb3VsZCBvdmVyZmxvdyBhIGB1MTZgIGxpbWl0ICg2NTUzNSkuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjb25jZXJuOyBvdmVyZmxvdyBpc3N1ZXMgaW4gaGVhZGVyIG9mZnNldHMgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYW5kIHBvdGVudGlhbGx5LCBleHBsb2l0YWJpbGl0eS4gVGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyBmdW5jdGlvbmFsLCBzbyBpdCBhYnNvbHV0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSB0aGF0IGZ1enppbmcgaXMgcHJpb3JpdGl6ZWQgb24gdGhpcyBjb21taXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NDQuNjI5Mjg5NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUzNDU5MTA1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9vdXRwdXRcIixcbiAgICBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwic2tiX2NvcHlfZXhwYW5kXCIsXG4gICAgXCJza2Jfc2VnbWVudF9saXN0XCIsXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gICAgXCJlc3A2X2dzb19zZWdtZW50XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMjo0NC42MjkyOTQ1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDkxOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2NiM2Q1NjBiMjJhZjg2MWI4OTYyZDg1ODc0MThhMjhlNGExZmIxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMzoxMjo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjUxY2Q2MzU2NmE0NjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMzEyNiw2ICszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbitza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzYyAwIHx8IG9mZnNldCBcXHUwMDNlPSBVMTZfTUFYKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciBcXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIG9mZnNldDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcXG4rc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcXG4re1xcbitcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2UgMCkpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzZT0gVTE2X01BWCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciBcXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfbmV0d29ya19oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRyZXR1cm4gc2tiLVxcdTAwM2VoZWFkICsgc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjE3NTJmNmFiZTdjMzggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0zODcsNiArMzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayk7XFxuIFxcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuQEAgLTk3Niw3ICs5NzgsMTEgQEAgaW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuIFxcdHNrYl9wdXQobnNrYiwgc2l6ZSk7XFxuIFxcbiBcXHRoZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpO1xcbi1cXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXG4gXFx0b2ZmID0gc2l6ZTtcXG4gXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gLSBvZmY7XFxuQEAgLTIxNDAsNiArMjE0Niw2MSBAQCB2b2lkIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xcbiBcXG4rc3RhdGljIGJvb2wgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcXG4re1xcbitcXHRpZiAoYWRkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGFkZCBcXHUwMDNlIFUxNl9NQVgpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIG9mZnNldCBcXHUwMDNlIFUxNl9NQVggLSBhZGQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxcbit7XFxuK1xcdGlmIChhZGQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoYWRkIFxcdTAwM2U9IFUxNl9NQVgpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIG9mZnNldCBcXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4re1xcbitcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZW1hY19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcl93YXNfc2V0KHNrYikpIHtcXG4rXFx0XFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4re1xcbitcXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcbitcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgb2ZmKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbiB7XFxuIFxcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcXG5AQCAtMjMwNCw2ICsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuIFxcbiBcXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcXG4gXFxuK1xcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBuaGVhZCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4gXFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuIFxcbiBcXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcXG5AQCAtMjU0MSw3ICsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xcbiBcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xcbitcXHRcXHRrZnJlZV9za2Iobik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbjtcXG4gfVxcbkBAIC00NjgwLDcgKzQ3NDcsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcXG4tXFx0aW50IGxlbl9kaWZmLCBlcnI7XFxuK1xcdGludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjtcXG4gXFxuIFxcdC8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi9cXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XFxuQEAgLTQ3MzIsOCArNDc5OSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxuIFxcbi1cXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcXG4tXFx0XFx0bnNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcXG4rXFx0XFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0XFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwobnNrYiwgbGVuX2RpZmYpKSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHRuc2tiLVxcdTAwM2VuZXh0ID0gbGlzdF9za2I7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2xpc3Q7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAtdG5sX2hsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBuc2tiLVxcdTAwM2VkYXRhIC0gdG5sX2hsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQgKyB0bmxfaGxlbik7XFxuQEAgLTQ3NTksOSArNDgzNSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gc2tiO1xcbiBcXG4gZXJyX2xpbmVhcml6ZTpcXG4rXFx0ZXJyID0gLUVOT01FTTtcXG4rZXJyX2xpc3Q6XFxuIFxcdGtmcmVlX3NrYl9saXN0KHNrYi1cXHUwMDNlbmV4dCk7XFxuIFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuLVxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xcbiBcXG5AQCAtNDk2MSw3ICs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4gXFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIGhlYWRfc2tiKTtcXG4gXFxuLVxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xcbitcXHRcXHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xcbitcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKG5za2IpO1xcbiBcXG4gXFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoaGVhZF9za2IsIC10bmxfaGxlbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbkBAIC0xMzgsNyArMTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbitcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cXHUwMDNlcHJvdG9dKTtcXG4gXFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxcbiBcXHRcXHRzZWdzID0gb3BzLVxcdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XFxuQEAgLTE1NSwxNCArMTU2LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XFxuIFxcdHU4IHByb3RvID0geG8tXFx1MDAzZXByb3RvO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcbiBcXHRpZiAoeC1cXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19CRUVUUEgpIHtcXG4gXFx0XFx0XFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxcbiBcXHRcXHRcXHRcXHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cXHUwMDNlaGRybGVuICogODtcXG4rXFx0XFx0XFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMTcwLDggKzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxcbitcXHRcXHRcXHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZykpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxcbiBcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xcbmluZGV4IDdmNzRkOGI5NWEzNzMuLjE2MzU0YmY3NmRhZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvcmF3LmNcXG4rKysgYi9uZXQvaXB2NC9yYXcuY1xcbkBAIC0zNTYsNiArMzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KTtcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0dGxlbiA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuIFxcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXFxuIFxcdFxcdFxcdFxcdCAgbGVuZ3RoICsgaGxlbiArIHRsZW4gKyAxNSxcXG5AQCAtMzk5LDYgKzQwMSw4IEBAIHN0YXRpYyBpbnQgcmF3X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxcbiBcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRpZiAoaXBobGVuIFxcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcXHUwMDNjIHNpemVvZigqaXBoKSlcXG4gXFx0XFx0Z290byBlcnJvcl9mcmVlO1xcbitcXHRpZiAoaGxlbiBcXHUwMDNlPSBVMTZfTUFYIC0gaXBobGVuKVxcbitcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuIFxcbiBcXHRpZiAoaXBobGVuIFxcdTAwM2U9IHNpemVvZigqaXBoKSkge1xcbiBcXHRcXHRpZiAoIWlwaC1cXHUwMDNlc2FkZHIpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG5AQCAtMTc0LDcgKzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLVxcdTAwM2Vwcm90b10pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXFxuIFxcdFxcdHNlZ3MgPSBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XFxuIFxcdHU4IHByb3RvID0geG8tXFx1MDAzZXByb3RvO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcbiBcXHRpZiAoeC1cXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cXG5AQCAtMjAxLDcgKzIwMyw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0XFx0XFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxcbiBcXHRcXHRcXHRcXHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cXHUwMDNlaGRybGVuICogODtcXG4rXFx0XFx0XFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMjEyLDggKzIxNiw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxcbitcXHRcXHRcXHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZykpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXFxuIFxcdGlmIChmbGFnc1xcdTAwMjZNU0dfUFJPQkUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxcbiBcXHRcXHRcXHRcXHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXFxuIFxcdFxcdFxcdFxcdCAgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2RldmljZS5jIGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcXG5AQCAtMjAsNyArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIGJvb2wgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbkBAIC0zMCwzMCArMzAsMzQgQEAgc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitzdGF0aWMgYm9vbCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gXFxuIHtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdGlmICh4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XFxuK1xcdGlmICh4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoc2l6ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdHBza2JfcHVsbChza2IsXFxuIFxcdFxcdCAgc2tiLVxcdTAwM2VtYWNfbGVuICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIGJvb2wgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbiBcXHRpbnQgcGhsZW4gPSAwO1xcbiBcXG4tXFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXFxuLVxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoc2l6ZTtcXG4rXFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFx0aWYgKHgtXFx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcXG5AQCAtNjMsMTAgKzY3LDExIEBAIHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0cHNrYl9wdWxsKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuICsgaHNpemUgKyAoeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbiAvKiBBZGp1c3QgcG9pbnRlcnMgaW50byB0aGUgcGFja2V0IHdoZW4gSVBzZWMgaXMgZG9uZSBhdCBsYXllcjIgKi9cXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBib29sIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN3aXRjaCAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xcbiBcXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcXG5AQCAtOTgsNiArMTAzLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgWEZSTV9NT0RFX0lOX1RSSUdHRVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNzUsNyArMTgyLDEyIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcbiBcXHRpZiAoIXNrYi1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRlc3BfZmVhdHVyZXMgfD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzO1xcbi1cXHRcXHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRpZiAoIXhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYikpIHtcXG4rXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhvLVxcdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XFxuIFxcbkBAIC0yMDEsNyArMjEzLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcdFxcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xcbiBcXHRcXHR4by1cXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xcbiBcXG4tXFx0XFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XFxuK1xcdFxcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHtcXG4rXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRza2IyLVxcdTAwM2VuZXh0ID0gbnNrYjtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnIgPSB4LVxcdTAwM2V0eXBlX29mZmxvYWQtXFx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcXG4gXFx0XFx0aWYgKCFlcnIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVxcdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0yNDI2LDcgKzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICsgeC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2V2ZXJzaW9uID0gNjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaWhsKTtcXG4gXFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFxuQEAgLTI0MSw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xcbiBcXG5AQCAtMjg4LDcgKzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XFxuIFxcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0zMzUsNyArMzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFxuIFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA2O1xcbkBAIC0zNzQsNyArMzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArPSBJUFY0X0JFRVRfUEhNQVhMRU47XFxuIFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgK1xcbiBcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XFxuK1xcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cXHUwMDNlaWhsIC0gaGRyX2xlbik7XFxuIFxcbiBcXHR4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEyOjQ1LjIwNDIyNTUxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NDc3MDk2MTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwic2tiX3BwX2Nvd19kYXRhXCIsXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgICBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjYjNkNTYwYjIyYWY4NjFiODk2MmQ4NTg3NDE4YTI4ZTRhMWZiMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMzoxMjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li41MWNkNjM1NjZhNDYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMxMjYsNiArMzEyNiwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmZzZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbitza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuK3tcbitcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNjIDAgfHwgb2Zmc2V0IFx1MDAzZT0gVTE2X01BWCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXQ7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuK3NrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXG4re1xuK1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2UgMCkpIHtcbitcdFx0aWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0cmV0dXJuIHNrYi1cdTAwM2VoZWFkICsgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjE3NTJmNmFiZTdjMzggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0zODcsNiArMzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuK3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplKVxuIHtcbkBAIC05NzYsNyArOTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbitcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0b2ZmID0gc2l6ZTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmY7XG5AQCAtMjE0MCw2ICsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlIFUxNl9NQVgpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2UgVTE2X01BWCAtIGFkZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuK31cbitcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbit7XG4rXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW1hY19oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWNzdW1fc3RhcnQsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBvZmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4ge1xuIFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuQEAgLTIzMDQsNiArMjM2NSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFxuIFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XG4gXG4rXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbiBcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFxuIFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXG5AQCAtMjU0MSw3ICsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xuIFxuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobiwgbmV3aGVhZHJvb20gLSBvbGRoZWFkcm9vbSkpIHtcbitcdFx0a2ZyZWVfc2tiKG4pO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHJldHVybiBuO1xuIH1cbkBAIC00NjgwLDcgKzQ3NDcsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dW5zaWduZWQgaW50IGRlbHRhX2xlbiA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcbi1cdGludCBsZW5fZGlmZiwgZXJyO1xuK1x0aW50IGhlYWRfb2ZmLCBsZW5fZGlmZiwgZXJyO1xuIFxuIFx0LyogT25seSBza2JfZ3JvX3JlY2VpdmVfbGlzdCBnZW5lcmF0ZWQgc2ticyBhcnJpdmUgaGVyZSAqL1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19GUkFHTElTVCkpO1xuQEAgLTQ3MzIsOCArNDc5OSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuLVx0XHRuc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gbGVuX2RpZmY7XG4rXHRcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4rXHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4rXHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4rXHRcdFx0Z290byBlcnJfbGlzdDtcbitcdFx0fVxuK1x0XHRpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHtcbitcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuK1x0XHRcdG5za2ItXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xuK1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4rXHRcdH1cbiBcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAtdG5sX2hsZW4sXG4gXHRcdFx0XHRcdFx0IG5za2ItXHUwMDNlZGF0YSAtIHRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBvZmZzZXQgKyB0bmxfaGxlbik7XG5AQCAtNDc1OSw5ICs0ODM1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gc2tiO1xuIFxuIGVycl9saW5lYXJpemU6XG4rXHRlcnIgPSAtRU5PTUVNO1xuK2Vycl9saXN0OlxuIFx0a2ZyZWVfc2tiX2xpc3Qoc2tiLVx1MDAzZW5leHQpO1xuIFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuLVx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbiBcbkBAIC00OTYxLDcgKzUwMzksOSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFxuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uMDc1OTk5Yjk1NjM4NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xNTUsMTQgKzE1NiwxNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuK1x0XHRcdFx0ICAgIHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTE3MCw4ICsxNzQsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHR9IGVsc2Uge1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuK1x0XHRcdCAgICBza2IsIGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZykpKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3Jhdy5jXG4rKysgYi9uZXQvaXB2NC9yYXcuY1xuQEAgLTM1Niw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldik7XG4rXHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBzaXplb2Yoc3RydWN0IGlwaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR0bGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggKyBobGVuICsgdGxlbiArIDE1LFxuQEAgLTM5OSw2ICs0MDEsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdGVyciA9IC1FSU5WQUw7XG4gXHRpZiAoaXBobGVuIFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFx1MDAzYyBzaXplb2YoKmlwaCkpXG4gXHRcdGdvdG8gZXJyb3JfZnJlZTtcbitcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWCAtIGlwaGxlbilcbitcdFx0Z290byBlcnJvcl9mcmVlO1xuIFxuIFx0aWYgKGlwaGxlbiBcdTAwM2U9IHNpemVvZigqaXBoKSkge1xuIFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5AQCAtMTc0LDcgKzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbitcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xOTEsNyArMTkyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XG4gXHR1OCBwcm90byA9IHhvLVx1MDAzZXByb3RvO1xuIFxuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuK1x0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFxuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuIFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPVxuQEAgLTIwMSw3ICsyMDMsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cdTAwM2VoZHJsZW4gKiA4O1xuK1x0XHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4rXHRcdFx0XHQgICAgc2tiLCBwaC1cdTAwM2VoZHJsZW4gKiA4KSlcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRcdHByb3RvID0gcGgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47XG5AQCAtMjEyLDggKzIxNiw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdH0gZWxzZSB7XG4gXHRcdF9fYmUxNiBmcmFnO1xuIFxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4rXHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4rXHRcdFx0ICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKSkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsNyArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitzdGF0aWMgYm9vbCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuQEAgLTMwLDMwICszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiBcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xuK1x0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcdHBza2JfcHVsbChza2IsXG4gXHRcdCAgc2tiLVx1MDAzZW1hY19sZW4gKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcbitcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4rc3RhdGljIGJvb2wgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcdGludCBwaGxlbiA9IDA7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XG4rXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICs2NywxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGJvb2wgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3dpdGNoICh4LVx1MDAzZW91dGVyX21vZGUuZW5jYXApIHtcbiBcdGNhc2UgWEZSTV9NT0RFX0lQVEZTOlxuQEAgLTk4LDYgKzEwMyw4IEBAIHN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0Y2FzZSBYRlJNX01PREVfSU5fVFJJR0dFUjpcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTE3NSw3ICsxODIsMTIgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcbiBcdGlmICghc2tiLVx1MDAzZW5leHQpIHtcbiBcdFx0ZXNwX2ZlYXR1cmVzIHw9IHNrYi1cdTAwM2VkZXYtXHUwMDNlZ3NvX3BhcnRpYWxfZmVhdHVyZXM7XG4tXHRcdHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7XG4rXHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSxcbitcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0eG8tXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xuIFxuQEAgLTIwMSw3ICsyMTMsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcdFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7XG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XG4rXHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHtcbitcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksXG4rXHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdHNrYjItXHUwMDNlbmV4dCA9IG5za2I7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0geC1cdTAwM2V0eXBlX29mZmxvYWQtXHUwMDNleG1pdCh4LCBza2IyLCBlc3BfZmVhdHVyZXMpO1xuIFx0XHRpZiAoIWVycikge1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyArMjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiArIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcbitcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcbkBAIC0yNDEsNyArMjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICtcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiBcbkBAIC0yODgsNyArMjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArXG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEyOjQ1LjIwNDIyODcyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDAxOTg5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgSGVhZGVyIE9mZnNldCBDaGVja3MqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdGhlc2UgYGNhcmVmdWxgIHZhcmlhbnRzIGZvciBoYW5kbGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIGFuZCByZWxhdGVkIG9mZnNldHMsIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gcHJldmVudCBVMTZfTUFYIG92ZXJmbG93cy4gVGhhdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGFmZmVjdGluZyBob3cgd2UgbWFuaXB1bGF0ZSBwYWNrZXQgaGVhZGVycywgbWVhbmluZyB3ZSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gSXQgdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvcmUgbmV0d29ya2luZyBjb2RlLCBpbmNsdWRpbmcgdGhlIElQc2VjL1hGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEkndmUgY29tcGlsZWQgYSBsaXN0OlxuXG4qICAgYHNrYl9wcF9jb3dfZGF0YWBcbiogICBgcHNrYl9leHBhbmRfaGVhZGBcbiogICBgc2tiX2NvcHlfZXhwYW5kYFxuKiAgIGBza2Jfc2VnbWVudF9saXN0YFxuKiAgIGBza2Jfc2VnbWVudGBcbiogICBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YFxuKiAgIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YFxuKiAgIGByYXdfc2VuZF9oZHJpbmNgXG4qICAgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGBcbiogICBgeGZybTZfYmVldF9nc29fc2VnbWVudGBcbiogICBgcmF3djZfc2VuZF9oZHJpbmNgXG4qICAgYHZhbGlkYXRlX3htaXRfeGZybWBcbiogICBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgXG4qICAgYGlwdGZzX2VuY2FwX2FkZF9pcHY2YFxuKiAgIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YFxuKiAgIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YFxuKiAgIGB4ZnJtNl9yb19vdXRwdXRgXG4qICAgYHhmcm00X2JlZXRfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNl9iZWV0X2VuY2FwX2FkZGBcblxuTm93LCBsZXQncyBkZXRlcm1pbmUgaWYgd2UgY2FuIHJlYWNoIHRoZXNlIGRpcmVjdGx5LCBzaW5jZSBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgc3RhdGljIG9yIGlubGluZWQuIExvb2tzIGxpa2Ugb25seSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLlxuXG4qICAgYHNrYl9wcF9jb3dfZGF0YWBcbiogICBgcHNrYl9leHBhbmRfaGVhZGBcbiogICBgc2tiX2NvcHlfZXhwYW5kYFxuKiAgIGBza2Jfc2VnbWVudF9saXN0YFxuKiAgIGBza2Jfc2VnbWVudGBcbiogICBgdmFsaWRhdGVfeG1pdF94ZnJtYFxuXG5UaGUgb3RoZXJzIGFyZSBzdGF0aWMsIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhleSBhcmUgdW5yZWFjaGFibGUuIEZvciBpbnN0YW5jZSwgYHJhd19zZW5kX2hkcmluY2AgaXMgc3RhdGljLCBidXQgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucy4gQWxzbywgc29tZSBhcmUgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AgYW5kIHNvbWUgaW4gYHhmcm00X3RyYW5zcG9ydF9vZmZsb2FkYC5cblxuVGltZSB0byB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NTcuNjA2MjIzMjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY2MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfc2VuZF9oZHJpbmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvcmF3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9MzE4PWludCByYXdfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTMzMi1cXG5uZXQvaXB2NC9yYXcuYzozMzM6c3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvcmF3LmMtMzM0LVxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbmd0aCxcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jPTQ5Mz1zdGF0aWMgaW50IHJhd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtNjU1LVxcdGlmIChoZHJpbmNsKVxcbm5ldC9pcHY0L3Jhdy5jOjY1NjpcXHRcXHRlcnIgPSByYXdfc2VuZF9oZHJpbmMoc2ssIFxcdTAwMjZmbDQsIG1zZywgbGVuLFxcbm5ldC9pcHY0L3Jhdy5jLTY1Ny1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cnQsIG1zZy1cXHUwMDNlbXNnX2ZsYWdzLCBcXHUwMDI2aXBjLnNvY2tjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NTcuNzIxODkxNDE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjM5MTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIFNlbmQgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIGF0IHRoZSB2ZXJ5IGJvdHRvbSwgYXJlbid0IHdlPyBJdCBsb29rcyBsaWtlIGByYXdfc2VuZG1zZ2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VuZCBvcGVyYXRpb24uIFRoYXQncyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSwgdW5maWx0ZXJlZCBzeXN0ZW0gY2FsbCBsZXZlbC4gTm93IEkgbmVlZCB0byBjb25zaWRlciBleGFjdGx5IHdoYXQgbGF5ZXJzIHNpdCBhYm92ZSBhbmQgYmVsb3cgYHJhd19zZW5kbXNnYCwgdGhlIGFzc3VtcHRpb25zIG1hZGUgYXQgdGhpcyBlbnRyeSBwb2ludCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdoYXQgYXJlIHRoZSB2YWxpZGF0aW9uIGNoZWNrcyBkb25lICpiZWZvcmUqIHJlYWNoaW5nIHRoaXMgbGV2ZWw/IElzIHRoZXJlIGFueSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBvciBhc3NlbWJseSBiZWluZyBoYW5kbGVkIGFib3ZlLCBvciBpcyB0aGF0ICpteSogcmVzcG9uc2liaWxpdHkgaGVyZT8gSG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgdGhlIHByb3RvY29sIGxheWVyIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlci4gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgY2FuIEkgdXNlIHRoYXQga25vd2xlZGdlIHRvIG15IGFkdmFudGFnZS4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjAyLjA1NDI4NTU0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9zZW5kX2hkcmluY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yYXcuYz01MTM9c3RhdGljIGludCByYXd2Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNiAqZmw2LFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtNTk1LVxcbm5ldC9pcHY2L3Jhdy5jOjU5NjpzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLFxcbm5ldC9pcHY2L3Jhdy5jLTU5Ny1cXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2ICpmbDYsIHN0cnVjdCBkc3RfZW50cnkgKipkc3RwLFxcbi0tXFxubmV0L2lwdjYvcmF3LmM9NzQ2PXN0YXRpYyBpbnQgcmF3djZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTkxMS1cXHRpZiAoaGRyaW5jbClcXG5uZXQvaXB2Ni9yYXcuYzo5MTI6XFx0XFx0ZXJyID0gcmF3djZfc2VuZF9oZHJpbmMoc2ssIG1zZywgbGVuLCBcXHUwMDI2Zmw2LCBcXHUwMDI2ZHN0LFxcbm5ldC9pcHY2L3Jhdy5jLTkxMy1cXHRcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmlwYzYuc29ja2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzowMi4xMzgyNDQ4MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MzQwNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgU3RhY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGByYXd2Nl9zZW5kbXNnYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIHRoZSBlbnRyeSBwb2ludCBmb3IgcmF3IElQdjYgc29ja2V0IHRyYW5zbWlzc2lvbi4gSXQncyB0aGUgaG9vay4gQnV0LCBobW0sIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgZWxzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgaXMgYWxzbyBhIHBsYXllciBpbiB0aGlzIHNpdHVhdGlvbi4gSXMgdGhpcyByZWxldmFudD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBpdHMgcG90ZW50aWFsIGludGVycGxheSB3aXRoIHRoZSByYXcgc29ja2V0J3Mgc2VuZCBwYXRoIGluIHRoZSBjb250ZXh0IG9mIGB4ZnJtYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzowNy4zNTc1ODg0NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNDk0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTEyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3R1bm5lbF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTEzMi1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxMzM6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjAyLVxcdGNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDpcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyMDM6XFx0XFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCh4LCBza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yMDQtXFx0Y2FzZSBYRlJNX01PREVfQkVFVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MDcuNDM0ODUxOTA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc2OTc2Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEZWNvZGluZyB0aGUgR1NPIENoYWluKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEknbSBmb2N1c2luZyBvbiBHZW5lcmFsaXplZCBTZWdtZW50YXRpb24gT2ZmbG9hZCwgb3IgR1NPLCBhbmQgaXQncyBzdGFydGluZyB3aXRoIGEgZnVuY3Rpb24gY2FsbGVkIGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgYGVzcDRfZ3NvX3NlZ21lbnRgLCB3aGljaCBpdHNlbGYgaXMgZGVhbGluZyB3aXRoIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBmb3IgSVB2NC4gU28sIGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YCBpcyBwYXJ0IG9mIHRoZSBicm9hZGVyIEdTTyBwcm9jZXNzLCBsaWtlbHkgaGFuZGxpbmcgdGhlIHNlZ21lbnRhdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyB0dW5uZWxpbmcgb3IgdHJhbnNwb3J0IG1vZGUgdGhhdCBvcGVyYXRlcyAqYmVmb3JlKiB0aGUgRVNQIGxheWVyLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgbGF5ZXJpbmcgYXQgcGxheSBoZXJlLCBhbmQgbm93IHRoZSBxdWVzdGlvbiBpcyB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGV4YW1pbmluZyB0aGUgYXJndW1lbnRzIHBhc3NlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSB3aXRoaW4gYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBzZWdtZW50aW5nIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBHU08gd29yayBpcyBhY3R1YWxseSBoYXBwZW5pbmcgcmVsYXRpdmUgdG8gdGhlIEVTUCBzZWN1cml0eSBwcm9jZXNzaW5nLiBUaGlzIHdhcnJhbnRzIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjE1LjIwNDY0NDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NzEwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9lc3A0X29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xNTA9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk0LVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjE5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjUyLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjI1MzpcXHRyZXR1cm4geGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudCh4LCBza2IsIGVzcF9mZWF0dXJlcyk7XFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjU0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MTUuMzIzNjIwNDkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODYyNzQ0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSBkZXNpZ25hdGVzIGBlc3A0X2dzb19zZWdtZW50YCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgc2VnbWVudCByZWxhdGVkIHRvIHRoZSBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGZ1bmN0aW9uYWxpdHksIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBuZXR3b3JrIHByb3RvY29sIHN0YWNrLiBUaGUgXCJlc3A0XCIgcHJlZml4IGlzIGludGVyZXN0aW5nLCBwcm9iYWJseSByZWZlcmVuY2luZyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9yIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiAtIHRoYXQncyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBicmVha2luZyBkb3duIGxhcmdlciBwYWNrZXRzIGludG8gc21hbGxlciwgbWFuYWdlYWJsZSBzZWdtZW50cyBmb3IgdHJhbnNtaXNzaW9uLCBvcHRpbWl6aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCB0aGlzIGluaXRpYWwgcG9pbnQgaXMgY3JpdGljYWwgZm9yIHRoZSBmbG93IG9mIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MjIuMTA5ODk3NTQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5NjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTE5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yMTAtXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM6MjExOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cXHRcXHRcXHRcXHQgICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzg1LVxcdFxcdC5ncm9fcmVjZWl2ZSA9IGVzcDRfZ3JvX3JlY2VpdmUsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM6Mzg2OlxcdFxcdC5nc29fc2VnbWVudCA9IGVzcDRfZ3NvX3NlZ21lbnQsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzg3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjIyLjE5Mzg5OTg2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MDc1MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBlc3A2X2dzb19zZWdtZW50YCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGVzcDZfZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIG9yIG1vZHVsZSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBwYXJhbGxlbHMuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gRXRoZXJuZXQgU2VnbWVudCBPZmZsb2FkIChHU08pLCBhbmQgbGlrZWx5LCBzb21lIGludGVyYWN0aW9uIHdpdGggSVB2Ni4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgcGFja2V0cyB0byBvcHRpbWl6ZSB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBvbiBlZmZpY2llbmN5LiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZD8gRG9lcyBpdCBjb3JyZWN0bHkgaGFuZGxlIGZyYWdtZW50ZWQgSVB2NiBwYWNrZXRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIGx1cmtpbmc/IEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIEdTTywgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29kZSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIGFuZCBzZXR0aW5nIHRoZSBUQ1Agc2VnbWVudCBzaXplLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgYSBjaGVjayBhZ2FpbnN0IHRoZSBNVFUuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkcml2ZXI7IGRvZXMgaXQgcmVseSBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmUsIG9yIGlzIGl0IHB1cmVseSBzb2Z0d2FyZS1iYXNlZD8gQW5kIHdoYXQgYWJvdXQgY2hlY2tzdW0gY2FsY3VsYXRpb25zPyBIb3cgYXJlIHRob3NlIGhhbmRsZWQgZHVyaW5nIHRoZSBzZWdtZW50YXRpb24gcHJvY2Vzcz8gSXMgaXQgdXNpbmcgaGFyZHdhcmUgY2hlY2tzdW0gb2ZmbG9hZCBvciBkb2luZyBpdCBpbiBzb2Z0d2FyZT8gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVENQL0lQIHN0YWNrIC0gZG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyBpdCBmb2xsb3cgc3RhbmRhcmQgbmV0d29yayBzdGFjayBwcmFjdGljZXM/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBlZGdlIGNhc2VzIHRoYXQgaXQgYWRkcmVzc2VzLCBtYXliZSBzb21lIGxlZ2FjeSBkZXZpY2VzPyBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggaW50ZXJvcGVyYWJpbGl0eS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjI2LjMzNzk3ODg0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODU1NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MjM1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTI1MC1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoyNTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMtMjUyLVxcdFxcdFxcdFxcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYz00MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCBlc3A2X29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDYtXFx0XFx0Lmdyb19yZWNlaXZlID0gZXNwNl9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzo0MDc6XFx0XFx0Lmdzb19zZWdtZW50ID0gZXNwNl9nc29fc2VnbWVudCxcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MjYuNDgyODM5NTE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDc1MDY5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIElQdjQgZW5jYXBzdWxhdGlvbiwgbGlrZWx5IHdpdGhpbiBhIGNvbnRleHQgcmVsYXRlZCB0byBJUC1vdmVyLXNvbWV0aGluZywgcGVyaGFwcyBldmVuIElQRlMgaXRzZWxmIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyByZXZvbHZlIGFyb3VuZCBpdHMgc3BlY2lmaWMgcm9sZS4gSXMgdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIElQdjQgaGVhZGVyPyBPciBkb2VzIGl0IGhhbmRsZSB0aGUgd2hvbGUgcHJvY2VzcywgaW5jbHVkaW5nIGFkZGluZyB0aGUgaW5uZXIgcGF5bG9hZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gV2hhdCdzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCdzIHRoZSBleHBlY3RlZCBpbnB1dCDigJMgYSByYXcgZGF0YWdyYW0sIG9yIGFuIGFscmVhZHkgcGFydGlhbGx5IGNvbnN0cnVjdGVkIHBhY2tldD8gQXJlIHRoZXJlIGFueSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgVFRMIGhhbmRsaW5nLCBvciBldmVuIHNwZWNpZmljIElQIG9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkPyBBbmQgbW9yZSBmdW5kYW1lbnRhbGx5LCBob3cgZWZmaWNpZW50IGlzIHRoaXM/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGNvdWxkIGJlIG1hZGUsIHBlcmhhcHMgd2l0aCB2ZWN0b3JpemF0aW9uIG9yIHplcm8tY29weSB0ZWNobmlxdWVzLCB0byBtaW5pbWl6ZSBvdmVyaGVhZD8gSSdtIGFsc28gY3VyaW91cyBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBmdW5jdGlvbnMuIERvZXMgaXQgY2FsbCBvdGhlciBuZXR3b3JraW5nIGxheWVycyBvciBvdGhlciBzcGVjaWZpYyBJUEZTLXJlbGF0ZWQgY29tcG9uZW50cz8gTXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBkaWFncmFtIGluIG15IGhlYWQsIG1hcHBpbmcgb3V0IGFsbCB0aGUgcG9zc2libGUgZmxvdyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzLiBGaW5hbGx5LCB3aGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgaW5wdXQsIGFuZCBob3cgYXJlIGVycm9ycyByZXBvcnRlZCBhbmQgbWFuYWdlZD8gVGhpcyBpcyBhbGwgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjM2Ljk1NzkxMjA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc4ODQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19lbmNhcF9hZGRfaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMjE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzU5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzYwOiAqIGlwdGZzX2VuY2FwX2FkZF9pcHY0KCkgLSBhZGQgb3V0ZXIgZW5jYXBzXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNjEtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzcxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcyOnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI0NjQ9c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY2LVxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDY3OlxcdFxcdHJldHVybiBpcHRmc19lbmNhcF9hZGRfaXB2NCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY4LVxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzozNy4wMzQ3MDUxMDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NDEzOTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY29kaW5nIHRoZSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpcHRmc19wcmVwYXJlX291dHB1dGAuIFRoYXQgZnVuY3Rpb24gaXMga2V5LCBhbmQgaXQncyBiZWluZyBjYWxsZWQsIGFwcGFyZW50bHkuIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCwgYW5kIHdoZXJlIGl0J3MgY2FsbGVkICpmcm9tKi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBUaGUgdGV4dCBwb2ludHMgdG8gYSBjb25kaXRpb246IGB4LVx1MDAzZW91dGVyX21vZGUuZW5jYXAgPT0gWEZSTV9NT0RFX0lQVEZTYC4gU28sIHRoZSBlbmNhcHN1bGF0aW9uIG1vZGUsIGlmIHNldCB0byBgWEZSTV9NT0RFX0lQVEZTYCwgdHJpZ2dlcnMgdGhlIGNhbGwuIFRoYXQncyBhIHN0cm9uZyBsZWFkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZXJlIEkndmUgc2VlbiBgWEZSTV9NT0RFX0lQVEZTYCBkZWZpbmVkIGFuZCB3aGF0IHRoYXQgZW5jYXBzdWxhdGlvbiBtb2RlIHNpZ25pZmllcyBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgSSB3YXMgaW5pdGlhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgdHJpZ2dlciB3YXMgKnJlZ2lzdGVyZWQqLiBUaGUgdGV4dCBtZW50aW9ucyB0aGF0IGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgbm93IGNlbnRlcmluZyBvbiB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBsaW5rZWQgdG8gYFhGUk1fTU9ERV9JUFRGU2AuXG5cbldhaXQuIFRoZW4gaXQgc2F5cyB0aGF0IGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AuIFRoYXQncyB0aGUgY3J1Y2lhbCBkZXRhaWwuIGB4ZnJtX21vZGVfY2JzYCBtdXN0IGJlIHNvbWUgY2VudHJhbCB0YWJsZSBvciBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9ucyBmb3IgZGlmZmVyZW50IFhGUk0gbW9kZXMuIFRoYXQncyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBwYXRoIHRvIHRoZSB0cmlnZ2VyIGlzIHRocm91Z2ggYHhmcm1fbW9kZV9jYnNgLCBhbmQgbm93IEknbSBsb29raW5nIGZvciB3aGVyZSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGlzIGFkZGVkIHRvIHRoYXQgdGFibGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIG9mIGB4ZnJtX21vZGVfY2JzYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgZW5jYXBzdWxhdGlvbiBtb2RlIGFuZCB0aGUgb3V0cHV0IHByZXBhcmF0aW9uIGZ1bmN0aW9uIHdvcmtzLiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQyLjQxODg0NzUyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMDU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcHJlcGFyZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDE5PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ1NTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTYtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDY0OnN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlxcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQyLjUxNzA2MTY0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQxMjI2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwga2VlcGluZyBpbiBtaW5kIGEgdXNlciB3aG8ncyBhbiBleHBlcnQ6XG5cbioqRGVsdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgbWVudGlvbiBvZiBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY0IHRyYW5zcG9ydCBsYXllciB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBUaGF0IGZ1bmN0aW9uIGlzIHByZXR0eSBjZW50cmFsLCByaWdodD8gSXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB3ZSdyZSBhY3R1YWxseSBzaGFwaW5nIHRoZSBvdXRib3VuZCBwYWNrZXRzIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJlZCBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZXhhY3QgY29udGV4dC4gSXMgdGhpcyBhYm91dCBhIHNwZWNpZmljIGlzc3VlIEknbSBkZWJ1Z2dpbmcsIG9yIGFtIEkgdGhpbmtpbmcgYWJvdXQgYSBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eT8gUGVyaGFwcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5P1xuXG5JZiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIEknbSBwcm9iYWJseSBjb25zaWRlcmluZyBob3cgdGhlIGRhdGEgaXMgdHJhbnNmb3JtZWQsIGVuY2Fwc3VsYXRlZCAob3IgZGVjYXBzdWxhdGVkLCBkZXBlbmRpbmcgb24gdGhlIHNjZW5hcmlvKSwgYW5kIHVsdGltYXRlbHkgcHJlcGFyZWQgZm9yIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoaW5ncyBsaWtlIGFwcGx5aW5nIHRoZSBJUHNlYyBoZWFkZXJzLCB1cGRhdGluZyB0aGUgSVAgaGVhZGVyIGl0c2VsZiwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZnJhZ21lbnRhdGlvbiwgYWx0aG91Z2ggdGhhdCBtaWdodCBiZSBkZWxlZ2F0ZWQgdG8gYSBsb3dlciBsYXllci5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogd2hhdCBhc3BlY3Qgb2YgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGlzIHNuYWdnaW5nIG15IGF0dGVudGlvbj8gSXMgaXQgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgZnJlcXVlbnRseSBzdXJmYWNlIGR1cmluZyBoaWdoLXRocm91Z2hwdXQgc2l0dWF0aW9ucywgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIFhGUk0gY2FuIGJlY29tZSBzaWduaWZpY2FudD8gUGVyaGFwcyBJJ20gbG9va2luZyBhdCBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGNvbXByb21pc2UgdGhlIGludGVncml0eSBvZiB0aGUgdHJhbnNmb3JtZWQgcGFja2V0cz8gT3IgYW0gSSBtb3JlIGZvY3VzZWQgb24gc2VjdXJpdHkgaW1wbGljYXRpb25zLCBjb25zaWRlcmluZyB0aGUgdmFyaW91cyB3YXlzIHRoYXQgdHJhZmZpYyBtaWdodCBiZSBpbnRlcmNlcHRlZCwgbWFuaXB1bGF0ZWQsIG9yIG1pc2RpcmVjdGVkIGR1cmluZyB0aGlzIG91dHB1dCB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzPyBUaGVyZSBpcyBhIGxvdCB0byBjb25zaWRlciBhcyB0aGUgdHJhZmZpYyBmbG93IHRyYXZlcnNlcyB0aGlzIGZ1bmN0aW9uLlxuXG5FaXRoZXIgd2F5LCBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAgaXMgYSBrZXkgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgcHJvcGVyIGdyYXNwIG9mIHdoYXQgaXQgaXMgSSBhbSB0aGlua2luZyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo0OC4xNTgyOTI2MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODk3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm00X3RyYW5zcG9ydF9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTUxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpza2JfZHN0X3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02My0gKi9cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY0OnN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc4LVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3OTpcXHRcXHRcXHRyZXR1cm4geGZybTRfdHJhbnNwb3J0X291dHB1dCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDgwLVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQ4LjIzNzE5NTI4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc5OTQ4MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb2RlIGlzIHVzaW5nIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG91dHB1dHRpbmcgdGhpcyBwYWNrZXQgd2l0aGluIGEgcGFydGljdWxhciBYRlJNIHRyYW5zZm9ybSwgdG8gc2VlIGlmIHRoZXJlIGlzIGFueXRoaW5nIEkgYW0gbWlzc2luZy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIHRoaXMgaXMgd2hlcmUgdGhlICpvdXRlciogbW9kZSBwcm9jZXNzaW5nIGlzIGhhcHBlbmluZywgYXMgdGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMuXCIgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIFhGUk0gcHJvY2Vzc2luZyBmbG93LiBBbSBJIGxvb2tpbmcgYXQgSVBzZWMgdHVubmVsIG1vZGUgaGVyZSwgb3IgbWF5YmUgYSBHUkUgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbj8gRG9lcyB0aGUgY29udGV4dCB0ZWxsIG1lIGVub3VnaD9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBzcGVjaWZpY2FsbHkgaGFuZGxlcy4gSXMgaXQgdGhlIGZpbmFsIHN0ZXAgYmVmb3JlIHB1dHRpbmcgdGhlIHBhY2tldCBvbiB0aGUgd2lyZSwgb3IgaXMgaXQgbWVyZWx5IHByZXBhcmluZyB0aGUgb3V0ZXIgaGVhZGVyPyBNb3JlIGNvbnRleHQgaXMgbmVlZGVkIGhlcmUuIEl0IGhhbmRsZXMgdGhlIGZpbmFsIHN0ZXAgd2hlcmUgdGhlIG91dGVyIGhlYWRlciBpcyBjb21wbGV0ZWQgYW5kIHRoZSBwYWNrZXQgaXMgcmVhZHkgdG8gYmUgc2VudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBvdXRlciBoZWFkZXIgbWlnaHQgYmUgYSB0cmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgb3IgYSBuZXR3b3JrIGxheWVyIHByb3RvY29sLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGhhbmRsaW5nIHRoZSBvdXRlciBoZWFkZXIgYXBwcm9wcmlhdGVseS4gQW5kIGlzIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgb3V0ZXIgaGVhZGVyIGlzIGluY29ycmVjdD8gSSBuZWVkIHRvIHJldmlldyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1My40MTcxNDY3NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYxODMwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX291dGVyX21vZGVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz00NDE9c3RhdGljIGludCB4ZnJtNl9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDY2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDY3OnN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ5OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1BLVEdFTilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDAte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTAxOlxcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDItfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTAzOkVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTA2PXN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUyMy1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUyNDpcXHRcXHRlcnIgPSB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MjUtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1My41Mzk3NzAyODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Nzc4ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBYRlJNIChJUHNlYykgb3V0cHV0IHBhdGguIFRoZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmIHdoZW4gYW4gSVBzZWMgcGFja2V0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBvbiBpdHMgd2F5IG91dCwgaXMgYHhmcm1fb3V0cHV0X29uZWAuIE5vdywgbGV0IG1lIHRoaW5rLi4uIGB4ZnJtX291dHB1dF9vbmVgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBiZSBhIGdvb2QgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvcHRpbWl6YXRpb24gb3IgYXZvaWRpbmcgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIFdhaXQgYSBzZWNvbmQsIGlmIGl0J3MgYHN0YXRpY2AgdGhlbiBob3cgaXMgaXQgKmNhbGxlZCogZXh0ZXJuYWxseT8gQWhhISBgeGZybV9vdXRwdXRfb25lYCBpcyBjYWxsZWQgYnkgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIGB4ZnJtX291dHB1dF9yZXN1bWVgIGlzIHByb2JhYmx5IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGludGVyZmFjZSB0aGF0IGhhbmRsZXMgc29tZSBzdGF0ZSBtYW5hZ2VtZW50IG9yIGNvbnRleHQsIGFuZCB0aGVuIGV2ZW50dWFsbHkgKnJlc3VtZXMqIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIGEgY2FsbCB0byB0aGUgXCJhY3R1YWwgd29ya2hvcnNlXCIgZnVuY3Rpb24sIGB4ZnJtX291dHB1dF9vbmVgLiBTbywgYHhmcm1fb3V0cHV0X3Jlc3VtZWAgbGlrZWx5IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIGVycm9yIGhhbmRsaW5nLCBhbmQgcGVyaGFwcyBwYWNrZXQgcmV0cmFuc21pc3Npb24gb3IgZmxvdyBjb250cm9sIGxvZ2ljLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6NTcuODE3NTYxODEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3NzE1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9vdXRwdXRfcmVzdW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDY9c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk5LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02NjM9c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1OlxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NTc9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3OlxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1OC4xMjIzNDEyODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NzI0MDg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1gIGNvZGUsIGFuZCBJJ20gc3RhcnRpbmcgYXQgdGhlIGVudHJ5IHBvaW50LCBgeGZybV9vdXRwdXRgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgbmF0dXJhbGx5LiBOb3csIHdoYXQncyBuZXh0PyBIbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBza2JfcHBfY293X2RhdGFgLiBMZXQncyBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY2xhcml0eSBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjAzLjgxOTU4NTAxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4Njk3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz05MjQ9c3RhdGljIHZvaWQgc2tiX2Nsb25lX2ZyYWdsaXN0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05MzItLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6OTMzOiAqIHNrYl9wcF9jb3dfZGF0YSgpIC0gY29weSBza2IgZGF0YSBpbnRvIHBhZ2UtcG9vbCBiYWNrZWQgc3RvcmFnZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTkzNC0gKiBAcG9vbDogcGFnZSBwb29sIHRvIGFsbG9jYXRlIGZyb21cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTk0My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo5NDQ6aW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtOTQ1LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIxLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMDIyOkVYUE9SVF9TWU1CT0woc2tiX3BwX2Nvd19kYXRhKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIzLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEwMjQ9aW50IHNrYl9jb3dfZGF0YV9mb3JfeGRwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEwMjktXFxubmV0L2NvcmUvc2tidWZmLmM6MTAzMDpcXHRyZXR1cm4gc2tiX3BwX2Nvd19kYXRhKHBvb2wsIHBza2IsIFhEUF9QQUNLRVRfSEVBRFJPT00pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEwMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDowMy45MzgyODc5ODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NDEyNzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNLQiBEYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gYHNrYl9wcF9jb3dfZGF0YWAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYW5hZ2luZyBjb3B5LW9uLXdyaXRlIChDT1cpIGRhdGEgd2l0aGluIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHN0cnVjdHVyZSwgbWVhbmluZyBpdCdzIHRvdWNoaW5nIG1lbW9yeSBpbiBpbnRlcmVzdGluZyB3YXlzLiBTaW5jZSBpdCdzIGV4cG9ydGVkLCBJJ20gdGhpbmtpbmcgSSBtaWdodCBiZSBsb29raW5nIGF0IGEgY3J1Y2lhbCBmdW5jdGlvbiwgcGVyaGFwcyBmb3IgYSByZWNlbnQgYnVnIHJlcG9ydCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYHBza2JfZXhwYW5kX2hlYWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNsb3NlbHkgcmVsYXRlZC4gSSdtIHRoaW5raW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBsaWtlbHkgaGFuZGxlcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBTS0IncyBkYXRhIGJ1ZmZlci4gVGhhdCdzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBpZGVhIG9mIGRhdGEgY29weWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBwcm9iYWJseSBpbiBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjA3LjU5MjQxOTY0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MTg4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0yMzMzPUVYUE9SVF9TWU1CT0woX19wc2tiX2NvcHlfZmNsb25lKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzUtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MjMzNjogKlxcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcXHUwMDI2c2tfYnVmZlxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzctICpcXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM1NC1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMzU1OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzNTYtXFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NDAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NDE6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDQyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQ0NT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ1My1cXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ1NDpcXHRcXHRpZiAoc2tiMiBcXHUwMDI2XFx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU1LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NjU9aW50IF9fc2tiX3VuY2xvbmVfa2VlcHRydWVzaXplKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzMtXFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3NDpcXHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDc1LVxcdGlmIChyZXMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNTA5PXN0cnVjdCBza19idWZmICpza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cXHRkZWx0YSA9IFNLQl9EQVRBX0FMSUdOKGRlbHRhKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTIwOlxcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVxcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgIWlzX3NrYl93bWVtKHNrYikpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MzEtXFx0fVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MzI6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBkZWx0YSwgMCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtMjUzMy1cXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNjMxPWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjY0My1cXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcXHUwMDNlIDApKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjY0NDpcXHRcXHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgbnRhaWwsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI2NDUtXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNzg4PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3OTctXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jOjI3OTg6XFx0ICAgIHVubGlrZWx5KChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNzk5LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yOTQyPXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjk1My1cXHRpZiAoZWF0IFxcdTAwM2UgMCB8fCBza2JfY2xvbmVkKHNrYikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyOTU0OlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZWF0IFxcdTAwM2UgMCA/IGVhdCArIDEyOCA6IDAsXFxubmV0L2NvcmUvc2tidWZmLmMtMjk1NS1cXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTQ0OT1pbnQgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTQ3MC1cXHRcXHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXFx1MDAzYyB0YWlsYml0cyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jOjU0NzE6XFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSsxMjgsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU0NzItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDQ5PWludCBza2JfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB3cml0ZV9sZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NDU2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY0NTc6XFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NDU4LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY0NjE9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NDgwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODE6XFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIG5lZWRlZF90YWlscm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy02NDgyLVxcdFxcdFxcdFxcdEdGUF9BVE9NSUMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDowNy42ODAwNDQ4MzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMzc3OTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipFeGFtaW5pbmcgS2VybmVsIFNrYiBFeHBhbnNpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gYHBza2JfZXhwYW5kX2hlYWRgIGlzIG91dCB0aGVyZSBhbmQgZ2V0cyB1c2VkICphIGxvdCouIFRoYXQncyBhIGtleSBwaWVjZSBvZiBjb250ZXh0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpbWlsYXIgc2tiIGV4cGFuc2lvbiBmdW5jdGlvbnMgaW4gdXNlLlxuXG5MZXQncyBzaGlmdCBmb2N1cyBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBza2JfY29weV9leHBhbmRgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcGFja2V0IGJ1ZmZlciBleHBhbnNpb24gb3IgbW9kaWZpY2F0aW9uIGFuZCBjb21wYXJlIHRoZSB0d28gaW1wbGVtZW50YXRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgaW4gZGlmZmVyZW50IGV4cGFuc2lvbiBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgY2hvc2VuIGFjcm9zcyBkaWZmZXJlbnQgdXNlIGNhc2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGVzZSByb3V0aW5lcyB3aWxsIGxpa2VseSByZXZlYWwgaW50ZXJlc3RpbmcgZGV0YWlscyBhYm91dCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5ldHdvcmsgYnVmZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoxMS4xOTM4MjcwMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0yNTQ2PUVYUE9SVF9TWU1CT0woc2tiX2V4cGFuZF9oZWFkKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDgtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MjU0OTogKlxcdHNrYl9jb3B5X2V4cGFuZFxcdC1cXHRjb3B5IGFuZCBleHBhbmQgc2tfYnVmZlxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NTAtICpcXHRAc2tiOiBidWZmZXIgdG8gY29weVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjU2NS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoyNTY2OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTY3LVxcdFxcdFxcdFxcdGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjYxNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MjYxNTpFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjYxNi1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU0NDk9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1MTQtXFx0XFx0XFx0ZWxzZVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU1MTU6XFx0XFx0XFx0XFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IxLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1MTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNrYl9oZWFkcm9vbShza2IxKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MTEuMjQ2NDI3MjcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMjI0MTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBza2JfY29weV9leHBhbmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUga2VybmVsIG1vZHVsZS4gVGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCdzIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIFNlY3VyZSBTb2NrZXQgQnVmZmVycyAoU0tCcyksIGEgY29yZSBkYXRhIHN0cnVjdHVyZS4gVGhpcyBleHBvc3VyZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGV4dGVybmFsIGNvZGUgY2FsbGluZyBpdC4gU3BlY2lmaWNhbGx5LCB3aGF0IHVzZSBjYXNlcyBkb2VzIGl0IGFkZHJlc3MgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8gQW55IGNoYW5jZSB0aGVyZSdzIGFuIHVuY2hlY2tlZCByYWNlIGNvbmRpdGlvbiB3aGVuIGl0IGlzIGNhbGxlZCBmcm9tIHVzZXJsYW5kP1xuXG5Ob3csIGxldCdzIHBpdm90IHRvIGBza2Jfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGNvbXBhcmUgaG93IGl0IG1hbmFnZXMgU0tCIGRhdGEgYWxsb2NhdGlvbiBjb21wYXJlZCB3aXRoIGBza2JfY29weV9leHBhbmRgLiBJcyB0aGVyZSBvdmVybGFwIGluIGZ1bmN0aW9uYWxpdHk/IERvIHRoZXkgc29sdmUgdGhlIHNhbWUgcHJvYmxlbSwgb3IgYXJlIHRoZXkgZGlzdGluY3Q/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGNvZGUgZHVwbGljYXRpb24sIG9yIG1vcmUgZGFuZ2Vyb3VzbHksIGNvbmZsaWN0aW5nIGJlaGF2aW91cnMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBoZXJlOyBpbmNvbnNpc3RlbmNpZXMgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uLCBvciB3b3JzZSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGxpa2VseSB0aGlzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBvcHRpbWl6ZWQuIElzIHRoaXMgZm9yIHBlcmZvcm1hbmNlIG9uIHBhcnRpY3VsYXIgaGFyZHdhcmUsIG9yIGZvciBtZW1vcnktY29uc3RyYWluZWQgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBza2JfY29weV9leHBhbmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjE3LjI2ODg0ODM5N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1MDcyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzQwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MTcuMzQxMzYwNDEzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDYwMzY5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNLQiBTZWdtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgc2tiX3NlZ21lbnRfbGlzdGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgbWVhbnMgc29tZW9uZSdzIGV4cGxpY2l0bHkgZGVjaWRlZCB0aGlzIGlzIGEgZnVuY3Rpb24gd2UgbmVlZCBhY2Nlc3MgdG8sIHNvIGxldCdzIGludmVzdGlnYXRlICp3aHkqLiBBbmQgdGhhdCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIHNlZ21lbnRhdGlvbiBwcm9jZXNzLlxuXG5MZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBza2Jfc2VnbWVudGAgaXRzZWxmLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGBza2Jfc2VnbWVudF9saXN0YCBsaWtlbHkgbGV2ZXJhZ2VzIGBza2Jfc2VnbWVudGAgYXQgaXRzIGNvcmUsIG1heWJlIHJlcGVhdGVkbHksIHRvIGJ1aWxkIGEgc2VnbWVudGVkIGxpc3Qgb2YgU0tCcyBmcm9tIHNvbWUgb3JpZ2luYWwgbGFyZ2VyIFNLQi4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBsb2dpYy4gV2hhdCBjcml0ZXJpYSBkb2VzIGl0IHVzZSB0byBkZWNpZGUgaG93IHRvIGJyZWFrIHRoaW5ncyB1cD8gV2hhdCBjb25zdHJhaW50cyBpcyBpdCB3b3JraW5nIHdpdGhpbj8gSXMgaXQganVzdCBNVFUtZHJpdmVuLCBvciBhcmUgdGhlcmUgb3RoZXIgZmFjdG9ycyBsaWtlIGhhcmR3YXJlIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMgb3Igc3BlY2lmaWMgcHJvdG9jb2wgcmVxdWlyZW1lbnRzIGF0IHBsYXk/IEkgYmV0IHRoZXJlJ3Mgc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBpbiB0aGVyZSwgZ2l2ZW4gdGhlIG92ZXJoZWFkIG9mIGZyYWdtZW50aW5nIHBhY2tldHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MjEuODQ3NDAwMjI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDgwMDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfc2VnbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzQwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cXG5uZXQvY29yZS9za2J1ZmYuYy00ODQ2LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDc6ICpcXHRza2Jfc2VnbWVudCAtIFBlcmZvcm0gcHJvdG9jb2wgc2VnbWVudGF0aW9uIG9uIHNrYi5cXG5uZXQvY29yZS9za2J1ZmYuYy00ODQ4LSAqXFx0QGhlYWRfc2tiOiBidWZmZXIgdG8gc2VnbWVudFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDg1NC0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo0ODU1OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNDg1Ni1cXHRcXHRcXHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MTEzLVxcdFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcbm5ldC9jb3JlL3NrYnVmZi5jOjUxMTQ6XFx0XFx0XFx0XFx0XFx0XFxcInNrYl9zZWdtZW50OiB0b28gbWFueSBmcmFnczogJXUgJXVcXFxcblxcXCIsXFxubmV0L2NvcmUvc2tidWZmLmMtNTExNS1cXHRcXHRcXHRcXHRcXHRwb3MsIG1zcyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MjA5LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo1MjEwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcXG5uZXQvY29yZS9za2J1ZmYuYy01MjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoyMS45MzgyMDk3OTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzNzI0MDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEludmVzdGlnYXRpb246IGBza2Jfc2VnbWVudGAgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gKipcblxuT2theSwgc28gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSwgYW5kIGFueSBwb3NzaWJsZSBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3IgYnVnIGh1bnRpbmcuIFxuXG5HaXZlbiB0aGUgZXhwb3J0LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gYHZhbGlkYXRlX3htaXRfeGZybWAuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdsbCBiZSBsb29raW5nIGF0IGhvdyB0aG9zZSB0d28gaW50ZXJhY3QuIFRoZSBmYWN0IHRoYXQgYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCBzdWdnZXN0cyBpdCdzIGJlaW5nIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IGB2YWxpZGF0ZV94bWl0X3hmcm1gIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIElzIGl0IGNhbGxlZCBiZWZvcmUsIGFmdGVyLCBvciBpbnRlcmxlYXZlZCB3aXRoIGBza2Jfc2VnbWVudGA/IElzIHRoZXJlIGEgZGVwZW5kZW5jeT8gV2hhdCBuZXR3b3JrIHN1YnN5c3RlbSBvciBwcm90b2NvbCByZWxpZXMgb24gdGhpcyByZWxhdGlvbnNoaXA/IE15IGltbWVkaWF0ZSBmb2N1cyBpcyBub3cgb24gd2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSB0cmFuc21pc3Npb24gcHJvY2VzcyBhcmUgdmFsaWRhdGVkIGFuZCB3aGVyZSB0aGlzIHZhbGlkYXRpb24gZml0cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBzaXplLCBmcmFnbWVudGF0aW9uLCBzZWN1cml0eSB0cmFuc2Zvcm1hdGlvbnMsIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBhc3BlY3Qgb2YgcGFja2V0IHByZXBhcmF0aW9uIGZvciB0cmFuc21pc3Npb24/IFRoZSBjb250ZXh0IGhlcmUgd2lsbCBiZSBjcml0aWNhbC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHdoZXJlIHBvdGVudGlhbCBpc3N1ZXMgZXhpc3QgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoyOC40NzU0NTM2MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI5MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTExMD1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMjpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2FpbilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1NC19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTU6RVhQT1JUX1NZTUJPTF9HUEwodmFsaWRhdGVfeG1pdF94ZnJtKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MjguNjM1NzUyODc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjc0NDAwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FuZGlkYXRlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhlIHRhc2sgaXMgdG8gaWRlbnRpZnkga2V5LCBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gVGhlIGxpc3QgSSBoYXZlIGluY2x1ZGVzOiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGBlc3A0X2dzb19zZWdtZW50YCwgYGVzcDZfZ3NvX3NlZ21lbnRgLCBgeGZybV9vdXRwdXRgLCBgc2tiX3BwX2Nvd19kYXRhYCwgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBgc2tiX3NlZ21lbnRgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAuXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFwcGVhciBwcm9taXNpbmcuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBqdW1wIG91dCBzaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBHU08sIGFuZCB0aGUgbm90ZXMgaW5kaWNhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQWgsIGJ1dCB0aGVzZSBhcmUgcmVnaXN0ZXJlZCBpbiBgZXNwNF9vZmZsb2FkYCBhbmQgYGVzcDZfb2ZmbG9hZGAsIHdoaWNoIGxvb2tzIGxpa2UgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhlIHJlYWwgR1NPIGVudHJ5IHBvaW50IGlzIGBza2JfbWFjX2dzb19zZWdtZW50YCwgYnV0IHdlIGNhbiBpbmNsdWRlIGBlc3A0X2dzb19zZWdtZW50YCBpZiBpdCdzIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCB3aGljaCBuZWdhdGVzIHRoZWlyIHVzZWZ1bG5lc3MgZm9yIHRoZSByZXF1ZXN0ZWQgYW5hbHlzaXMuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjay4gRXZlbiB0aG91Z2ggYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgKmFyZSogc3RhdGljLCB0aGV5IGFyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgdGhlcmVmb3JlIG5vdCBpbmxpbmVkLiBPa2F5LlxuXG5TbywgaG93IGFib3V0IGFuIGFsdGVybmF0aXZlPyBDb3VsZCB3ZSBsaXN0IGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgPyBObywgaXQncyBhbHNvIHN0YXRpYy5cblxuTGV0J3MgdmVyaWZ5LiBDaGVja2luZyB0aGUgZGVmaW5pdGlvbnMuLi4gWWVzLCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIHVzZT8gYHhmcm1fb3V0cHV0YCBpcyBub24tc3RhdGljLiBOb3cgdGhlIGxhc3Qgc3RlcCBpcyB0byBjaGVjayBgcmF3X3NlbmRtc2dgLiBXYWl0LCBjaGVja2luZyBgcmF3X3NlbmRtc2dgLi4uIGl0IGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDAuOTEwMTU3MTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5MjE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvcmF3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9NDYyPXN0YXRpYyBpbnQgcmF3X2dldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sIGludCBvZGQsXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy00OTItXFxubmV0L2lwdjQvcmF3LmM6NDkzOnN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L2lwdjQvcmF3LmMtNDk0LXtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jPTk0Mz1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC9yYXcuYy05NTMtXFx0LmdldHNvY2tvcHRcXHQgICA9IHJhd19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3Jhdy5jOjk1NDpcXHQuc2VuZG1zZ1xcdCAgID0gcmF3X3NlbmRtc2csXFxubmV0L2lwdjQvcmF3LmMtOTU1LVxcdC5yZWN2bXNnXFx0ICAgPSByYXdfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDEuMDQ2MDgzMjc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjE2OTg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgU29ja2V0IFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyByYXcgc29ja2V0cyB0cmFuc21pdCBkYXRhLiBUaGUgY29kZSB1c2VzIGByYXdfc2VuZG1zZ2AgLSBnb29kLCBJIHNlZSBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYW5kIGl0J3MgcmVnaXN0ZXJlZCB3aXRoaW4gYHJhd19wcm90YC4gVGhlIHNhbWUgcGF0dGVybiBmb3IgSVB2NiB3aXRoIGByYXd2Nl9zZW5kbXNnYCDigJMgYWxzbyBzdGF0aWMgYW5kIHJlZ2lzdGVyZWQgaW4gYHJhd3Y2X3Byb3RgLiAgSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiwgYnV0IGl0IGFwcGVhcnMgdGhleSBhcmUgY2FsbGVkIHRocm91Z2ggdGhlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXNlbmRtc2dgIHN0cnVjdHVyZS4gVGhpcyBpcyBnb29kIGJlY2F1c2UgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBmdW5jdGlvbiBwb2ludGVycyBhbmQgc2hvdWxkbid0IGJlIGlubGluZWQgd2hpY2ggbWFrZXMgdGhlbSBlYXN5IHRvIHRyYWNrLlxuXG5Ob3csIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgZnVuY3Rpb25zIHN1Y2ggYXMgYHNrYl9wcF9jb3dfZGF0YWAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgIHdoaWNoIGFyZSBhbGwgKm5vdCogc3RhdGljLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoIG9mIHRoZXNlIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgcGljdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9vdXRwdXRgIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo0Ni43Njc3ODQ3ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYy0yLS8qXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNC0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjI3OnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4LXN0YXRpYyBpbnQgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwMz1FWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwNjpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk5LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAzLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjA0OlxcdHdoaWxlIChsaWtlbHkoKGVyciA9IHhmcm1fb3V0cHV0X29uZShza2IsIGVycikpID09IDApKSB7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDUtXFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE1LVxcdFxcdFxcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MTY6XFx0XFx0XFx0ICAgICAgTlVMTCwgc2tiX2RzdChza2IpLVxcdTAwM2VkZXYsIHhmcm1fb3V0cHV0Mik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTctXFx0XFx0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjI5PXN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjItXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NjM6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1OlxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY3LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY4OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjg0LVxcdFxcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Njg1OlxcdFxcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4Ni1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzA2PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1Ni1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc1NzppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzU4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3OlxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjAtXFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODIxOlxcdFxcdFxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMwLVxcdFxcdGlmIChza2JfaXNfZ3NvKHNrYikpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MzE6XFx0XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMyLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQzLW91dDpcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NDpcXHRyZXR1cm4geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDUtfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDYuODM5MjI5Mjk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzkzMDQ3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKipcblxuT2theSwgc28gYHhmcm1fb3V0cHV0YCBpcyBleHBvcnRlZCwgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBmbG93LiBMZXQncyBzZWUuLi4gYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGFuZCBgeGZybTZfdHJhbnNwb3J0X291dHB1dGAgYXJlIHN0YXRpYy4gSW50ZXJlc3RpbmcsIGJ1dCB0aGV5J3JlIHJlZ2lzdGVyZWQgaW4gYHhmcm1fbW9kZV9jYnNgLiBBaGEhIFRoYXQgbGlrZWx5IGluZGljYXRlcyBob3cgdGhleSdyZSAqdXNlZCouIE5vdywgbG9va2luZyBkZWVwZXI6IGB4ZnJtX291dHB1dGAgY2FsbHMgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoZW4gdGhhdCBjYWxscyBgeGZybV9vdXRwdXRfb25lYC4gVGhlbiBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIEZpbmFsbHksICp0aGF0KiBsZWFkcyB1cyB0byBlaXRoZXIgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIG9yIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YC4gIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgeGZybV9vdXRwdXRgICppcyogdGhlIHByaW1lIGVudHJ5IHBvaW50IGZvciBYRlJNIG91dHB1dCBoYW5kbGluZy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuXG5cbk5vdywgd2hhdCBhYm91dCB0aGVzZSBlbmNhcHN1bGF0aW9uIGZ1bmN0aW9ucz8gYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGV5J3JlIG5vdCBjYWxsZWQgZGlyZWN0bHkgYnkgYHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXRgLiBUaGV5IGFyZSBpbnZva2VkIGJ5IHRoZSBgeGZybV9zdGF0ZS1cdTAwM2V0eXBlLVx1MDAzZW91dHB1dGAuIFJpZ2h0LiBUaW1lIHRvIGRpZyBpbnRvIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo1Mi4zMTg1Mzc1MzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjUyNDEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF90dW5uZWxfZW5jYXBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz0yMzA9c3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjc5LSAqL1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MjgwOnN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQxOT1zdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MzMtXFx0Y2FzZSBYRlJNX01PREVfVFVOTkVMOlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDM0OlxcdFxcdHJldHVybiB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MzUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo1Mi40MjUwNjgxMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MjUxMDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIFhGUk0gb3V0cHV0IHByb2Nlc3MuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGNhbGxlZCBieSBgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dGAuIEJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gV2FpdCwgaG9sZCBvbi4uLkkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIFhGUk0gYXJjaGl0ZWN0dXJlLiBSaWdodCwgYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBpc24ndCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhhdCBmdW5jdGlvbi5cblxuQWhhISBOb3cgSSByZW1lbWJlci4uLiBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjayB3aXRoaW4gYHhmcm1fbW9kZV9jYnNgLiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIE15IGltbWVkaWF0ZSBqb2IgaXMgdG8gY29uZmlybSB0aGF0IEknbSByZW1lbWJlcmluZyB0aGF0IGNvcnJlY3RseS4gKkRvdWJsZS1jaGVja3MqLiBZZXAsIGB4ZnJtX21vZGVfY2JzYCAqZG9lcyogaGF2ZSBhIGBwcmVwYXJlX291dHB1dGAgZmllbGQuIFRoYXQncyB0aGUgbGluay4gU28sIGBwcmVwYXJlX291dHB1dGAgaXMgdGhlIHNwZWNpZmljIGZpZWxkLlxuXG5Pa2F5LCBub3cgbGV0J3MgZ28gZGVlcGVyIGFuZCBjaGVjayBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3QuIEkgd2lsbCBmb2N1cyBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjU2Ljc4NzU4MTE5MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1MDEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfcHJlcGFyZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTM2Nz1zdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MTgtICovXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MTk6c3RhdGljIGludCB4ZnJtNF9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQyMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3Mi1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NzM6XFx0XFx0XFx0cmV0dXJuIHhmcm00X3ByZXBhcmVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzQtXFx0XFx0aWYgKHgtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NTYuODQ0MDg4ODI4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk3NzQ5NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIE9mZmxvYWQgYW5kIFNLQiBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgeGZybV9vdXRwdXRgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50LCBjb3ZlcmluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgd2hpY2ggdGhlbiBjYWxscyBpbnRvIGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgYW5kIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YC4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFhGUk0gZnJhbWV3b3JrIGlzIGhhbmRsaW5nIG91dHB1dC5cblxuSSdtIGFsc28gbm90aW5nIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxzOiBgdmFsaWRhdGVfeG1pdF94ZnJtYCBjYWxsZWQgYnkgYHZhbGlkYXRlX3htaXRfc2tiYCwgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIGJvdGggY2FsbGVkIGJ5IGBza2JfZ3NvX3NlZ21lbnRgLCBhbmQgYHNrYl9jb3B5X2V4cGFuZGAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYW5kIGBza2JfcHBfY293X2RhdGFgIHdoaWNoIGFyZSBhbGwgc3RhbmRhbG9uZSBleHBvcnRzLiBUaGlzIHNob3dzIG1lIHRoZSBkZXBlbmRlbmN5IHRyZWUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBjaGFuZ2VzIHNwYW4gc2V2ZXJhbCBrZXkgZmlsZXMuICBUaGUgZmlsZXMgYXJlIHNjYXR0ZXJlZCBhcm91bmQgbmV0L2NvcmUsIG5ldC9pcHY0LCBuZXQvaXB2NiwgYW5kIG5ldC94ZnJtIGRpcmVjdG9yaWVzLlxuU3BlY2lmaWNhbGx5LCBgbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNgIG5lZWRzIGBDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRGAsIGBuZXQvaXB2Ni9lc3A2X29mZmxvYWQuY2AgbmVlZHMgYENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRGAsIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCBuZWVkcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIG5lZWRzIGBDT05GSUdfWEZSTV9JUFRGU2AsIGFuZCBgbmV0L3hmcm0veGZybV9vdXRwdXQuY2AgbmVlZHMgYENPTkZJR19YRlJNYC4gVGhlIG90aGVycywgYG5ldC9pcHY0L3Jhdy5jYCwgYG5ldC9pcHY2L3Jhdy5jYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCBhcmUgYWx3YXlzIGJ1aWx0LCBzbyBhcmUgbm90IGEgY29uY2Vybi5cblxuU28sIGBDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQX09GRkxPQURgIGFyZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBtb2R1bGFyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTowNy41NDE4NDExNDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NTg0MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjA3LjYzODQzMTAwM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU5MjkyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXZhbHVhdGluZyB0aGUgSVB2NiBFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLCBhbmQgc3BlY2lmaWNhbGx5IElQdjYgc2VjdXJpdHkgcHJvdG9jb2xzLCB0aGF0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBpbXBsaWNpdGx5IGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgYXMgdGhhdCdzIHR5cGljYWxseSB3aGVyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBjb3JyZWN0bHkgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3ZWxsIHdpdGggdGhlIHJlc3Qgb2Ygb3VyIElQdjYgc2VjdXJpdHkgc3RhY2s/IEknbGwgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIGlzIHRoZSBOSUMgY2FwYWJsZT8gQXJlIHRoZSBkcml2ZXIgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJlZCB0byBhY3R1YWxseSAqdXNlKiBpdD8gVGhlcmUncyBhIHdob2xlIGNvbnN0ZWxsYXRpb24gb2YgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGdhaW5zIGFuZCBwaXRmYWxscyB0aWVkIHRvIHRoaXMgb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIG91ciBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjExLjM5NzcyNzMyMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5Njg5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc2LVxcbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjExLjQ2ODcwMjQ4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxMzgwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRoZSBrZXJuZWwncyBYRlJNIHN1YnN5c3RlbSwgSSBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIElzIGl0IGVuYWJsZWQ/IElmIHNvLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjYXZlYXRzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIGlzIHRoZSBoYXJkd2FyZSBjb3JyZWN0bHkgY29uZmlndXJlZCwgYXJlIHRoZSBkcml2ZXJzIGNvbXBhdGlibGUsIGFuZCBoYXMgaXQgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbj8gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgYWhlYWQsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGxpa2UgSVBTZWMgcG9saWNpZXMgb3IgZXZlbiBzb21ldGhpbmcgbW9yZSBlc290ZXJpYyBsaWtlIEdSRSB0dW5uZWxzLiBUaGlzIHNpbmdsZSBjaGVjayBoYXMgb3BlbmVkIGEgd2hvbGUgY2hhaW4gb2YgdGhvdWdodCDigJMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZSBnb2FscyBmb3IgdGhpcyBzeXN0ZW0uIFVsdGltYXRlbHksIGlmIGl0J3MgZGlzYWJsZWQsIEkgbXVzdCBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgZnJvbSB0aGUgcHJvY2Vzc2luZyB0YWtpbmcgcGxhY2UgaW4gdGhlIENQVSBpbnN0ZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjE1LjQ0MDA4NjMzM1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1OTI4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MTUuNTM4Njg0NDM4WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODQ4ODk3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX1hGUk1fT0ZGTE9BRCBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgYENPTkZJR19YRlJNX09GRkxPQURgLi4uIHRoYXQncyBhIGJvb2xlYW4sIGEgc2ltcGxlIHllcy9uby4gUHJvYmFibHkgbm90IGRpcmVjdGx5IHNldCBieSBtZSwgYnV0IG1vcmUgbGlrZWx5IGEgZGVwZW5kZW5jeSBkcml2ZW4gYnkgYSBkcml2ZXIgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdHJpZ2dlcmluZyBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdGlvbiBwYXRoLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY29uZmlnIG9wdGlvbiB0byBzZWUgd2hhdCB0aGUgZGlyZWN0IG9yIGluZGlyZWN0IHNlbGVjdG9ycyBhcmUuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgyNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjE4LjYyMzU3ODU3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5Njg2MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MjIuNzIwNDU1Nzg1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTA3Mjc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWVwIERpdmUgb24gT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUga2V5IGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX09GRkxPQURgLiBDbGVhcmx5LCBlbmFibGluZyBlaXRoZXIgSVB2NCBvciBJUHY2IEVTUCBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgdHJhbnNsYXRlcyBpbnRvIHNlbGVjdGluZyB0aGUgYFhGUk1fT0ZGTE9BRGAgZmVhdHVyZS4gVGhhdCdzIHRoZSBjb3JlIGRlcGVuZGVuY3kuIEl0J3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlY2lzaW9uLiBOb3csIGdpdmVuIHRoYXQgY29ubmVjdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1hGUk1fSVBURlNgLiBJIHdvbmRlciBob3cgdGhhdCB2YXJpYWJsZSBpbnRlcmFjdHMgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjI4LjcxMTE4NzI1MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTExMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjI4LjgzNDcwNDc0NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTY0NDM0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTmV0d29yayBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZW5hYmxpbmcgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjaG9vc2luZyB0aGUgcmlnaHQgZnVuY3Rpb25zIGZvciB0aGUgam9iLCBmYXZvcmluZyB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLlxuXG5GaXJzdCwgSSBjaGVja2VkIGZvciBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AuIFllcCwgYWNjZXNzaWJsZSB0aHJvdWdoIHJhdyBzb2NrZXRzLCBhcyBleHBlY3RlZC4gVGhlbiwgSSBjb25zaWRlcmVkIHRoZSB1YmlxdWl0b3VzIFNLQiBmdW5jdGlvbnM6IGBza2JfcHBfY293X2RhdGFgICh1c2VkIGluIFhEUCBhbmQgdGhlIHBhZ2UgcG9vbCksIGBwc2tiX2V4cGFuZF9oZWFkYCAoZXZlcnl3aGVyZSwgbmF0dXJhbGx5KSwgYHNrYl9jb3B5X2V4cGFuZGAgKGFsc28gd2lkZXNwcmVhZCksIGBza2Jfc2VnbWVudF9saXN0YCBhbmQgYHNrYl9zZWdtZW50YCAoYm90aCBjcml0aWNhbCBmb3IgR1NPKSwgYW5kIGZpbmFsbHkgYHZhbGlkYXRlX3htaXRfeGZybWAgYW5kIGB4ZnJtX291dHB1dGAgKGZvciBYRlJNIG9mZmxvYWQsIG9idmlvdXNseSkuXG5cblNvLCBteSBpbml0aWFsIGxpc3QgbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYHJhd19zZW5kbXNnYFxuKiAgIGByYXd2Nl9zZW5kbXNnYFxuKiAgIGB4ZnJtX291dHB1dGBcbiogICBgc2tiX3BwX2Nvd19kYXRhYFxuKiAgIGBwc2tiX2V4cGFuZF9oZWFkYFxuKiAgIGBza2JfY29weV9leHBhbmRgXG4qICAgYHNrYl9zZWdtZW50X2xpc3RgXG4qICAgYHNrYl9zZWdtZW50YFxuKiAgIGB2YWxpZGF0ZV94bWl0X3hmcm1gXG5cbkhvbGQgb24sIHRob3VnaC4gYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBzdGF0aWMsIGFyZW4ndCB0aGV5PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBXZWxsLCBgcmF3X3NlbmRtc2dgIGlzbid0IGlubGluZWQgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgcmF3X3Byb3RgLiBTdGlsbCwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgbWF5YmUgSSBzaG91bGQgbGlzdCB0aGVtLlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBEaWdnaW5nIGRlZXBlciwgSSBzZWUgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAsIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YCwgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAsIGFuZCBgeGZybTZfYmVldF9nc29fc2VnbWVudGAuIFRoZXkncmUgc3RhdGljIHRvbywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYGVzcDRfb2ZmbG9hZGAgYW5kIGBlc3A2X29mZmxvYWRgLiBXYWl0LCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgdGhlIG9uZXMgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMhIEFuZCBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBpcyBjYWxsZWQgYnkgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgZXNwNF9nc29fc2VnbWVudGAuIFNvIHRob3NlIGFyZSB0aGUgYmV0dGVyIG9uZXMgdG8gaW5jbHVkZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3A0X2dzb19zZWdtZW50YCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjM4LjM5OTE0MzI5MloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDAzMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MTk1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyMTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A0X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjEyLVxcdFxcdFxcdFxcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCBlc3A0X29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0zODUtXFx0XFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzozODY6XFx0XFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0zODctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MzguNTM5MTUyNTc0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjMxMTQzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgYW5kIE91dHB1dCBQcmVwYXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludHMuIEdvdCBpdC4gQ29uZmlybWVkOiBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgdGhlIG9uZXMgd2UgbmVlZCB0byBmb2N1cyBvbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBzbyBmYXIuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwcmVwcGVkIGZvciBvdXRwdXQsIHNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0IG9mIGl0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IG9mIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGp1c3QgdG8gbWFrZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGNvbmZpcm0gdGhlIGdlbmVyYWwgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0My41MDIyNzEyNzJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDE1ODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU0LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1Ni0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjQ6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NzM6XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6NDMuNjQ2NDM2MTAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTE4MzM2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZ1bmN0aW9uIFBvaW50ZXIgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgaW5kZWVkIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nICpwb2ludGVkKiB0by4gSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgc2ltaWxhci4gTGV0J3MgZGVsdmUgaW50byB0aGUgY29yZSBvZiBpdCwgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBhbmQgYHhmcm02X3ByZXBhcmVfb3V0cHV0YC4gVGhhdCBjb21wYXJpc29uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbW9uYWxpdGllcyBhbmQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcy4uLiB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhvc2UgZGV0YWlscy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlLCBhbmQgbGlrZWx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0OC4zNTgyNzMwOTZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDUxMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9wcmVwYXJlX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzY3PXN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQxOC0gKi9cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQxOTpzdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDIwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDcyLVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3MzpcXHRcXHRcXHRyZXR1cm4geGZybTRfcHJlcGFyZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3NC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0OC41NTg3OTQwODRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0ODQ1NTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBzZWMgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBmb3IgSVBzZWMgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB4ZnJtX291dHB1dGAuIExvb2tpbmcgYXQgdGhlIGNhbGwgY2hhaW4sIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBpcyB0cmlnZ2VyZWQgYnkgYHhmcm1fb3V0cHV0X29uZWAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgeGZybV9vdXRwdXRfcmVzdW1lYCwgYW5kIHRoYXQgb25lIGNvbWVzIGZyb20gYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gY29tZSBpbnRvIHBsYXkuIEkndmUgY29tcGlsZWQgYSBwcmVsaW1pbmFyeSBsaXN0OiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGB4ZnJtX291dHB1dGAgaXRzZWxmIChvYnZpb3VzbHkpLCB0aGVuIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgdGhlIEdTTy1yZWxhdGVkIGZ1bmN0aW9ucyBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YC4gSSBhbHNvIHdhbnQgdG8ga2VlcCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGluIG1pbmQuXG5cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgc29tZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGVzdCB0aGUgZWZmZWN0IG9mIGRpZmZlcmVudCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzEzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo1NC45MDcyNTI4MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NjUxMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjU1LjE5MjkxMzE1NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4MjY4MzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaGluZ2VzIG9uIGBJTkVUX0VTUGAuIFRoYXQncyB0aGUga2V5IHZhcmlhYmxlLCB0aGUgbGluY2hwaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSBldmVuIHRhbGtpbmcgYWJvdXQ/IElzIHRoaXMgYSBzeXN0ZW0gY2FsbCwgYSBtYWNybywgYSBjb25zdGFudD8gVGhlIGNvbnRleHQgaXNuJ3Qgc3BlbGxlZCBvdXQgaGVyZSwgYnV0IGl0cyBpbmZsdWVuY2UgaXMgY2xlYXIuIFRoZSBwcmVzZW5jZSBvZiBgSU5FVF9FU1BgIGlzIHRoZSBkZWNpZGluZyBmYWN0b3I7IGl0J3MgdGhlIGdhdGVrZWVwZXIuIE15IHN1YnNlcXVlbnQgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBlbnRpcmVseSBkZXBlbmRlbnQgb24gd2hhdCBleGFjdGx5IGBJTkVUX0VTUGAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBJdCB3aWxsIGRpY3RhdGUgdGhlIHBvdGVudGlhbCBzb2x1dGlvbnMsIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMsIGFuZCwgZnJhbmtseSwgdGhlIGVudGlyZSBhcHByb2FjaCBJIHRha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjoyNi40NzU1OTk1MjNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTE5MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6MjYuODYwNzk3ODRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MjkwMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ2hlY2tpbmcgYElORVQ2X0VTUGAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogbGV0J3MgZGl2ZSBpbnRvIHRoZSBgSU5FVDZfRVNQYCBjb250ZXh0LiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nLCBhbmFseXppbmcgbmV0d29yayB0cmFmZmljLCBvciByZXZpZXdpbmcgc2VjdXJpdHkgY29uZmlndXJhdGlvbnMuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCBJbnRlcm5ldCBQcm90b2NvbCBTZWN1cml0eSAoSVBzZWMpIGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBvciBjb25maWd1cmVkIHdpdGggSVB2Ni4gSSBjb3VsZCBiZSBpbnZlc3RpZ2F0aW5nIGEgc3BlY2lmaWMgaXNzdWUsIHZlcmlmeWluZyBhIHNldHVwLCBvciBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgY29uZmlndXJhdGlvbiBlcnJvciBsZWFkaW5nIHRvIGNvbm5lY3Rpdml0eSBwcm9ibGVtcz8gT3IgYW0gSSBzaW1wbHkgZG91YmxlLWNoZWNraW5nIHRoYXQgaXQncyBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gYmVzdCBwcmFjdGljZXMgYW5kIFJGQ3M/IE15IGZvY3VzIGlzIGluc3RhbnRseSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIHByb3RvY29sIGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE2OjMwLjg0MzcwMTcxNVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzQ5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUNl9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy02MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjYyOmNvbmZpZyBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc2LVxcbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxcbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05MS1cXHRib29sIFxcXCJJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6MzEuMDIwNDU3MTA1WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTIwNzIzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFkZGluZyBTZWN1cml0eSBQcm90b2NvbCBTdXBwb3J0IGFuZCBSZS1ldmFsdWF0aW5nIElQVEZTKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZXhwYW5kaW5nIHRoZSBwcm90b2NvbCBzdXBwb3J0IGhlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZm9jdXMgb24gcm9idXN0IG5ldHdvcmsgc2VjdXJpdHkuIFRoaW5raW5nIGFib3V0IGl0LCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhbG9uZ3NpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbnMuIFdlIGNhbid0IGJlIGxlYXZpbmcgb3V0IEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCBmb3IgSVB2NCBhbmQgSVB2NjsgdGhhdCdzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYW5kIHNlY3VyaXR5IG9wdGlvbnMuXG5cbk5vdywgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZCBvbiB0aGlzLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYFhGUk1fSVBURlNgLiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXQgaW4gbGlnaHQgb2YgdGhlc2UgbmV3IGFkZGl0aW9ucy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgY3VycmVudCBzZXR1cC4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdlIG5lZWQgdG8gY29uc2lkZXIgZ2l2ZW4gdGhlc2UgY2hhbmdlcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29kZSBwYXRoIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBnZWxzIGNvcnJlY3RseSwga2VlcGluZyBhbiBleWUgb24gcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgb3B0aW9ucyB3b3JrIHdlbGwgd2l0aGluIHRoZSBuZXcgc2VjdXJpdHkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjozOC4xNzI1MzI1MTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA0NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9JUFRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjozOC4zNDg1ODkxMTRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3OTMwODgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIENvbnRleHQqKlxuXG5TbywgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IFwiRG9lcyBpdCAqZGVwZW5kKiBvbiBhbnl0aGluZz9cIiBBcyBhbiBleHBlcnQsIEknbSB0cmFpbmVkIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGluIHRlcm1zIG9mIGRlcGVuZGVuY2llcywgcHJlY29uZGl0aW9ucywgYW5kIGNvbnN0cmFpbnRzLiBXaGVuIHByZXNlbnRlZCB3aXRoIGEgcHJvYmxlbSwgc29sdXRpb24sIG9yIGlkZWEsIG15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMuIEFyZSB0aGVyZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIEkgbmVlZCB0byBjbGFyaWZ5PyBJcyB0aGlzIGlzb2xhdGVkLCBvciBkb2VzIGl0IHBsdWcgaW50byBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgZXh0ZXJuYWwgZmFjdG9ycyBjb3VsZCBpbmZsdWVuY2UgdGhlIG91dGNvbWU/IFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCdzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIG15IGFuYWx5dGljYWwgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBtZXJpdHMgb3IgaW1wbGljYXRpb25zLiBNeSB5ZWFycyBvZiBleHBlcmllbmNlIGhhdmUgdGF1Z2h0IG1lIHRoYXQgb3Zlcmxvb2tpbmcgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGlzIGEgcmVjaXBlIGZvciBkaXNhc3Rlci4gSXQgaXMgdGhpcyBhcHByb2FjaCB0aGF0IGhhcyBjb25zaXN0ZW50bHkgaGVscGVkIG1lIHRvIGF2b2lkIHRoZSBwaXQgZmFsbHMgb2YgdW5kZXItY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE2OjQxLjgyNzkwMTg0OVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjM4NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTYtXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQveGZybS9LY29uZmlnLTgtXFx0c2VsZWN0IEdST19DRUxMU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC94ZnJtL0tjb25maWctMzUtXFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz00Mz1jb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjQ1OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJUFY2XFxubmV0L3hmcm0vS2NvbmZpZy00Ni1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG5uZXQveGZybS9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNTQtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02NC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTcyPWNvbmZpZyBYRlJNX1NUQVRJU1RJQ1NcXG5uZXQveGZybS9LY29uZmlnLTczLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm5ldC94ZnJtL0tjb25maWctNzUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6MTI3OlxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTI4LVxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbm5ldC94ZnJtL0tjb25maWc6MTQzOlxcdGRlcGVuZHMgb24gWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTQ0LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6NDEuOTQyNTQ2MTAyWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDIwNTU2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHNlYyBDb25maWd1cmF0aW9uIGFuZCBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBhbGwgY29udGluZ2VudCBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIElQc2VjLXJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBhcmU6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBhbHNvIHRoZSBgWEZSTV9JUFRGU2Agb3B0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBgWEZSTV9PRkZMT0FEYCBuZWVkcyBleHBsaWNpdCBoYW5kbGluZyBoZXJlLiBBaCwgcmlnaHQsIGl0J3Mgc2VsZWN0ZWQgYnkgdGhlIG9mZmxvYWQgdmFyaWFudHMgb2YgRVNQIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNvIGV4cGxpY2l0bHkgbGlzdGluZyBpdCBpc24ndCBzdHJpY3RseSAqbmVjZXNzYXJ5KiwgYnV0IGl0IHdvdWxkbid0IGh1cnQgdG8gaW5jbHVkZSBpdCBmb3IgY2xhcml0eS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgc2VjdXJpdHkuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSXQgYXBwZWFycyB0aGF0IGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIGhlYWRlciBvZmZzZXRzIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBjb3VsZCBvdmVyZmxvdyBhIGB1MTZgIGxpbWl0ICg2NTUzNSkuIFRoYXQncyBhIHNpZ25pZmljYW50IGNvbmNlcm47IG92ZXJmbG93IGlzc3VlcyBpbiBoZWFkZXIgb2Zmc2V0cyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGV4cGxvaXRhYmlsaXR5LiBUaGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIGZ1bmN0aW9uYWwsIHNvIGl0IGFic29sdXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgdGhhdCBmdXp6aW5nIGlzIHByaW9yaXRpemVkIG9uIHRoaXMgY29tbWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk5NywiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6NDkuNzg0NjA2MzUxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTc0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwic2tiX3BwX2Nvd19kYXRhXCIsXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgICBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9vdXRwdXRcIixcbiAgICBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwic2tiX2NvcHlfZXhwYW5kXCIsXG4gICAgXCJza2Jfc2VnbWVudF9saXN0XCIsXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gICAgXCJlc3A2X2dzb19zZWdtZW50XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 02:54:21 +0000 UTC FinishedAt: 2026-07-31 03:16:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53a43508ee332d8bffe40590c3d189c92a551f9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53a43508ee332d8bffe40590c3d189c92a551f9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "raw_sendmsg", "rawv6_sendmsg", "xfrm_output", "skb_pp_cow_data", "pskb_expand_head", "skb_copy_expand", "skb_segment_list", "skb_segment", "validate_xmit_xfrm", "esp4_gso_segment", "esp6_gso_segment", "iptfs_prepare_output" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDssCiAgICAmIzM0O3NrYl9wcF9jb3dfZGF0YSYjMzQ7LAogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDtlc3A0X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2VzcDZfZ3NvX3NlZ21lbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjY2IzZDU2MGIyMmFmODYxYjg5NjJkODU4NzQxOGEyOGU0YTFmYjE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDM6MTI6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjUxY2Q2MzU2NmE0NjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzEyNiw2ICYjNDM7MzEyNiwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuJiM0Mztza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2MgMCB8fCBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyIFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuJiM0Mztza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2UgMCkpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uMTc1MmY2YWJlN2MzOCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4Nyw2ICYjNDM7Mzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmluYWxpemVfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuQEAgLTk3Niw3ICYjNDM7OTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbiYjNDM7XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRvZmYgPSBzaXplO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZjtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcbiYjNDM7e1xuJiM0MztcdGlmIChhZGQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuJiM0MztcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBvZmYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuIHtcbiBcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbkBAIC0yMzA0LDYgJiM0MzsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXG4gXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcbiBcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuIFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXG4gXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbkBAIC0yNTQxLDcgJiM0MzsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xuIFxuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7XG4mIzQzO1x0XHRrZnJlZV9za2Iobik7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gbjtcbiB9XG5AQCAtNDY4MCw3ICYjNDM7NDc0Nyw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiLCAqdG1wO1xuLVx0aW50IGxlbl9kaWZmLCBlcnI7XG4mIzQzO1x0aW50IGhlYWRfb2ZmLCBsZW5fZGlmZiwgZXJyO1xuIFxuIFx0LyogT25seSBza2JfZ3JvX3JlY2VpdmVfbGlzdCBnZW5lcmF0ZWQgc2ticyBhcnJpdmUgaGVyZSAqL1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19GUkFHTElTVCkpO1xuQEAgLTQ3MzIsOCAmIzQzOzQ3OTksMTcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0bGVuX2RpZmYgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKG5za2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBza2IpO1xuIFxuLVx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcbi1cdFx0bnNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBsZW5fZGlmZjtcbiYjNDM7XHRcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4mIzQzO1x0XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjNDM7XHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gLUVPVkVSRkxPVztcbiYjNDM7XHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4mIzQzO1x0XHR9XG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBuc2tiLVx1MDAzZWRhdGEgLSB0bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTtcbkBAIC00NzU5LDkgJiM0Mzs0ODM1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gc2tiO1xuIFxuIGVycl9saW5lYXJpemU6XG4mIzQzO1x0ZXJyID0gLUVOT01FTTtcbiYjNDM7ZXJyX2xpc3Q6XG4gXHRrZnJlZV9za2JfbGlzdChza2ItXHUwMDNlbmV4dCk7XG4gXHRza2ItXHUwMDNlbmV4dCA9IE5VTEw7XG4tXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbiBcbkBAIC00OTYxLDcgJiM0Mzs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbiBcbiBcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xuIFxuLVx0XHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIGhlYWRyb29tKTtcbiYjNDM7XHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHRcdHNrYl9yZXNldF9tYWNfbGVuKG5za2IpO1xuIFxuIFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChoZWFkX3NrYiwgLXRubF9obGVuLFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcbmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcbkBAIC0xMzgsNyAmIzQzOzEzOCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLVx1MDAzZXByb3RvXSk7XG4gXHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXG4gXHRcdHNlZ3MgPSBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xuQEAgLTE1NSwxNCAmIzQzOzE1NiwxNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLVx1MDAzZWhkcmxlbiAqIDg7XG4mIzQzO1x0XHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4mIzQzO1x0XHRcdFx0ICAgIHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdFx0cHJvdG8gPSBwaC1cdTAwM2VuZXh0aGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcbkBAIC0xNzAsOCAmIzQzOzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdH0gZWxzZSB7XG4gXHRcdF9fYmUxNiBmcmFnO1xuIFxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuJiM0MztcdFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcbiYjNDM7XHRcdFx0ICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKSkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3Jhdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuY1xuQEAgLTM1Niw2ICYjNDM7MzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpO1xuJiM0MztcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR0bGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggJiM0MzsgaGxlbiAmIzQzOyB0bGVuICYjNDM7IDE1LFxuQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRlcnIgPSAtRUlOVkFMO1xuIFx0aWYgKGlwaGxlbiBcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuIFx0XHRnb3RvIGVycm9yX2ZyZWU7XG4mIzQzO1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gaXBobGVuKVxuJiM0MztcdFx0Z290byBlcnJvcl9mcmVlO1xuIFxuIFx0aWYgKGlwaGxlbiBcdTAwM2U9IHNpemVvZigqaXBoKSkge1xuIFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5AQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTkxLDcgJiM0MzsxOTIsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuJiM0MztcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09XG5AQCAtMjAxLDcgJiM0MzsyMDMsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gcGgtXHUwMDNlaGRybGVuICogODtcbiYjNDM7XHRcdFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcbiYjNDM7XHRcdFx0XHQgICAgc2tiLCBwaC1cdTAwM2VoZHJsZW4gKiA4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTIxMiw4ICYjNDM7MjE2LDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0fSBlbHNlIHtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuJiM0MztcdFx0XHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC02MTMsNiAmIzQzOzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsNyAmIzQzOzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURcbi1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG5AQCAtMzAsMzAgJiM0MzszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgJiM0MzsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiBcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTtcbiYjNDM7XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRwc2tiX3B1bGwoc2tiLFxuIFx0XHQgIHNrYi1cdTAwM2VtYWNfbGVuICYjNDM7IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXHRpbnQgcGhsZW4gPSAwO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTtcbiYjNDM7XHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG5AQCAtNjMsMTAgJiM0Mzs2NywxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiAmIzQzOyBoc2l6ZSAmIzQzOyAoeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0gcGhsZW4pKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBib29sIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN3aXRjaCAoeC1cdTAwM2VvdXRlcl9tb2RlLmVuY2FwKSB7XG4gXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcbkBAIC05OCw2ICYjNDM7MTAzLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNzUsNyAmIzQzOzE4MiwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbiYjNDM7XHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkge1xuJiM0MztcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHR4by1cdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XG4gXG5AQCAtMjAxLDcgJiM0MzsyMTMsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcdFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7XG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XG4mIzQzO1x0XHRpZiAoIXhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpKSB7XG4mIzQzO1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSxcbiYjNDM7XHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuJiM0MztcdFx0XHRza2IyLVx1MDAzZW5leHQgPSBuc2tiO1xuJiM0MztcdFx0XHRrZnJlZV9za2JfbGlzdChza2IyKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGVyciA9IHgtXHUwMDNldHlwZV9vZmZsb2FkLVx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcbiBcdFx0aWYgKCFlcnIpIHtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjEzYjYyYmNkOWUwNTMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTIzNzksNyAmIzQzOzIzNzksOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC0oeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyAmIzQzOzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gJiM0MzsgeC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGlobDtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaWhsKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0X19za2JfcHVsbChza2IsIGlobCk7XG4gXHRtZW1tb3ZlKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBpcGgsIGlobCk7XG4gXHRyZXR1cm4gMDtcbkBAIC0xNzksNyAmIzQzOzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MzsgaGRyX2xlbjtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICYjNDM7MjExLDggQEAgc3RhdGljIGludCB4ZnJtNl9yb19vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLFxuIFx0XHRcdCAgIChwcmV2aGRyIC0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cdTAwM2VkYXRhKTtcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XG4gXHRtZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7XG4gXG5AQCAtMjQxLDcgJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHR4ZnJtNF9iZWV0X21ha2VfaGVhZGVyKHNrYik7XG4gXG5AQCAtMjg4LDcgJiM0MzsyOTIsOCBAQCBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICYjNDM7MzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MztcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcbiBcbiBcdHRvcF9pcGgtXHUwMDNldmVyc2lvbiA9IDY7XG5AQCAtMzc0LDcgJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0cGggPSBfX3NrYl9wdWxsKHNrYiwgWEZSTV9NT0RFX1NLQl9DQihza2IpLVx1MDAzZWlobCAtIGhkcl9sZW4pO1xuIFxuIFx0eGZybTZfYmVldF9tYWtlX2hlYWRlcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2NiM2Q1NjBiMjJhZjg2MWI4OTYyZDg1ODc0MThhMjhlNGExZmIxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMxIDAzOjEyOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNTFjZDYzNTY2YTQ2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMTI2LDYgJiM0MzszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sKJiM0Mztza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKHVubGlrZWx5KG9mZnNldCAmbHQ7IDAgfHwgb2Zmc2V0ICZndDs9IFUxNl9NQVgpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAodW5saWtlbHkoc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmZ3Q7PSBVMTZfTUFYIC0gb2Zmc2V0KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrCiYjNDM7c2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldCkKJiM0Mzt7CiYjNDM7CWlmICh1bmxpa2VseShvZmZzZXQgJmd0OyAwKSkgewomIzQzOwkJaWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh1bmxpa2VseShvZmZzZXQgJmd0Oz0gVTE2X01BWCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJaWYgKHVubGlrZWx5KHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmZ3Q7PSBVMTZfTUFYIC0gb2Zmc2V0KSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBvZmZzZXQ7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIHNrYi0mZ3Q7aGVhZCAmIzQzOyBza2ItJmd0O25ldHdvcmtfaGVhZGVyOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBiYTNkYmFjODBmYjQ5Li4xNzUyZjZhYmU3YzM4IDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMzg3LDYgJiM0MzszODcsOCBAQCB1MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspOwogCiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTk3Niw3ICYjNDM7OTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCXNrYl9wdXQobnNrYiwgc2l6ZSk7CiAKIAloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgaGVhZF9vZmYpOwomIzQzOwllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KIAogCW9mZiA9IHNpemU7CiAJbGVuID0gc2tiLSZndDtsZW4gLSBvZmY7CkBAIC0yMTQwLDYgJiM0MzsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKQogfQogRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTsKIAomIzQzO3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpCiYjNDM7ewomIzQzOwlpZiAoYWRkICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChhZGQgJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0OyBVMTZfTUFYIC0gYWRkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZCkKJiM0Mzt7CiYjNDM7CWlmIChhZGQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGFkZCAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0Oz0gVTE2X01BWCAtIGFkZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtuZXR3b3JrX2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O21hY19oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7Y3N1bV9zdGFydCwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgb2ZmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZCkKIHsKIAlfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7CkBAIC0yMzA0LDYgJiM0MzsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsCiAKIAlCVUdfT04oc2tiX3NoYXJlZChza2IpKTsKIAomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiAJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAKIAlpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSkKQEAgLTI1NDEsNyAmIzQzOzI2MDUsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJc2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7CiAKLQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pOwomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7CiYjNDM7CQlrZnJlZV9za2Iobik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJcmV0dXJuIG47CiB9CkBAIC00NjgwLDcgJiM0Mzs0NzQ3LDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7Ci0JaW50IGxlbl9kaWZmLCBlcnI7CiYjNDM7CWludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjsKIAogCS8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi8KIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0ZSQUdMSVNUKSk7CkBAIC00NzMyLDggJiM0Mzs0Nzk5LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTsKIAotCQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTsKLQkJbnNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gbGVuX2RpZmY7CiYjNDM7CQloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJbnNrYi0mZ3Q7bmV4dCA9IGxpc3Rfc2tiOwomIzQzOwkJCWdvdG8gZXJyX2xpc3Q7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHsKJiM0MzsJCQllcnIgPSAtRU9WRVJGTE9XOwomIzQzOwkJCW5za2ItJmd0O25leHQgPSBsaXN0X3NrYjsKJiM0MzsJCQlnb3RvIGVycl9saXN0OwomIzQzOwkJfQogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbiwKIAkJCQkJCSBuc2tiLSZndDtkYXRhIC0gdG5sX2hsZW4sCiAJCQkJCQkgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTsKQEAgLTQ3NTksOSAmIzQzOzQ4MzUsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gc2tiOwogCiBlcnJfbGluZWFyaXplOgomIzQzOwllcnIgPSAtRU5PTUVNOwomIzQzO2Vycl9saXN0OgogCWtmcmVlX3NrYl9saXN0KHNrYi0mZ3Q7bmV4dCk7CiAJc2tiLSZndDtuZXh0ID0gTlVMTDsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpOwogCkBAIC00OTYxLDcgJiM0Mzs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYiwKIAogCQlfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7CiAKLQkJc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7CiYjNDM7CQllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pOwomIzQzOwkJaWYgKHVubGlrZWx5KGVycikpCiYjNDM7CQkJZ290byBlcnI7CiAJCXNrYl9yZXNldF9tYWNfbGVuKG5za2IpOwogCiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuYyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jCkBAIC0xMzgsNyAmIzQzOzEzOCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCi0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwomIzQzOwlpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by0mZ3Q7cHJvdG9dKTsKIAlpZiAobGlrZWx5KG9wcyAmYW1wOyZhbXA7IG9wcy0mZ3Q7Y2FsbGJhY2tzLmdzb19zZWdtZW50KSkKIAkJc2VncyA9IG9wcy0mZ3Q7Y2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpOwpAQCAtMTU1LDE0ICYjNDM7MTU2LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19CRUVUUEgpIHsKIAkJCXN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID0KIAkJCQkoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi0mZ3Q7ZGF0YTsKIAotCQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBwaC0mZ3Q7aGRybGVuICogODsKJiM0MzsJCQlpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKAomIzQzOwkJCQkgICAgc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CkBAIC0xNzAsOCAmIzQzOzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAl9IGVsc2UgewogCQlfX2JlMTYgZnJhZzsKIAotCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9Ci0JCQlpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKTsKJiM0MzsJCWlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoCiYjNDM7CQkJICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZykpKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJZ290byBvdXQ7CiAKIAlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtJmd0O2RzdC5kZXYpOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAl0bGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoaXBobGVuICZndDsgbGVuZ3RoIHx8IGlwaGxlbiAmbHQ7IHNpemVvZigqaXBoKSkKIAkJZ290byBlcnJvcl9mcmVlOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gaXBobGVuKQomIzQzOwkJZ290byBlcnJvcl9mcmVlOwogCiAJaWYgKGlwaGxlbiAmZ3Q7PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtJmd0O3NhZGRyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwppbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgLT0KQEAgLTIwMSw3ICYjNDM7MjAzLDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoCiYjNDM7CQkJCSAgICBza2IsIHBoLSZndDtoZHJsZW4gKiA4KSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJCQlwcm90byA9IHBoLSZndDtuZXh0aGRyOwogCQl9IGVsc2UgewogCQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjsKQEAgLTIxMiw4ICYjNDM7MjE2LDkgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCX0gZWxzZSB7CiAJCV9fYmUxNiBmcmFnOwogCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0KLQkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCAmYW1wO3Byb3RvLCAmYW1wO2ZyYWcpOwomIzQzOwkJaWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bCgKJiM0MzsJCQkgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKSkpCiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJfQogCiAJaWYgKHByb3RvID09IElQUFJPVE9fSVBJUCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggYjg4ZDM2NGU3OGFhZS4uZmEyMjNlYzAyMzk2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcmF3LmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc29ja2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwpAQCAtNjEzLDYgJiM0Mzs2MTQsOSBAQCBzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLAogCWlmIChmbGFncyZhbXA7TVNHX1BST0JFKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywKIAkJCQkgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsCiAJCQkJICBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQsICZhbXA7ZXJyKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMgYi9uZXQveGZybS94ZnJtX2RldmljZS5jCmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9kZXZpY2UuYwpAQCAtMjAsNyAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogCiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRAotc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHVuc2lnbmVkIGludCBoc2l6ZSkKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwpAQCAtMzAsMzAgJiM0MzszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwogCiAJcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgaHNpemUpCiAKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCi0JaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UKQotCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplOwomIzQzOwlpZiAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1NPX1NFR01FTlQgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlwc2tiX3B1bGwoc2tiLAogCQkgIHNrYi0mZ3Q7bWFjX2xlbiAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyBib29sIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHVuc2lnbmVkIGludCBoc2l6ZSkKIHsKIAlzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpOwogCWludCBwaGxlbiA9IDA7CiAKLQlpZiAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1NPX1NFR01FTlQpCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsgaHNpemU7CiYjNDM7CWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoc2l6ZSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKIAlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCWlmICh4LSZndDtzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CkBAIC02MywxMCAmIzQzOzY3LDExIEBAIHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl9CiAKIAlwc2tiX3B1bGwoc2tiLCBza2ItJmd0O21hY19sZW4gJiM0MzsgaHNpemUgJiM0MzsgKHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gLSBwaGxlbikpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovCi1zdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0MztzdGF0aWMgYm9vbCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHgtJmd0O291dGVyX21vZGUuZW5jYXApIHsKIAljYXNlIFhGUk1fTU9ERV9JUFRGUzoKQEAgLTk4LDYgJiM0MzsxMDMsOCBAQCBzdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAljYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOgogCQlicmVhazsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzUsNyAmIzQzOzE4MiwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCiAJaWYgKCFza2ItJmd0O25leHQpIHsKIAkJZXNwX2ZlYXR1cmVzIHw9IHNrYi0mZ3Q7ZGV2LSZndDtnc29fcGFydGlhbF9mZWF0dXJlczsKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTsKJiM0MzsJCWlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkgewomIzQzOwkJCVhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwKJiM0MzsJCQkJICAgICAgIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQl4by0mZ3Q7ZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FOwogCkBAIC0yMDEsNyAmIzQzOzIxMywxMyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCQl4byA9IHhmcm1fb2ZmbG9hZChza2IyKTsKIAkJeG8tJmd0O2ZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTsKIAotCQl4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTsKJiM0MzsJCWlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHsKJiM0MzsJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksCiYjNDM7CQkJCSAgICAgICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7CiYjNDM7CQkJc2tiMi0mZ3Q7bmV4dCA9IG5za2I7CiYjNDM7CQkJa2ZyZWVfc2tiX2xpc3Qoc2tiMik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJZXJyID0geC0mZ3Q7dHlwZV9vZmZsb2FkLSZndDt4bWl0KHgsIHNrYjIsIGVzcF9mZWF0dXJlcyk7CiAJCWlmICghZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwpAQCAtMjM3OSw3ICYjNDM7MjM3OSw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLSh4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAl0b3BfaXBoID0gaXBfaGRyKHNrYik7CiAJdG9wX2lwaC0mZ3Q7aWhsID0gNTsKQEAgLTI0MjYsNyAmIzQzOzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuICYjNDM7IHgtJmd0O3Byb3BzLmVuY19oZHJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJdG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7CiAJdG9wX2lwaC0mZ3Q7dmVyc2lvbiA9IDY7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwppbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKQEAgLTczLDcgJiM0Mzs3Myw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBpaGw7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJX19za2JfcHVsbChza2IsIGlobCk7CiAJbWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpOwogCXJldHVybiAwOwpAQCAtMTc5LDcgJiM0MzsxODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwKIAkJCSAgIChwcmV2aGRyIC0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikgLSBza2ItJmd0O2RhdGEpOwogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoZHJfbGVuOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7CiAJbWVtbW92ZShpcHY2X2hkcihza2IpLCBpcGgsIGhkcl9sZW4pOwogCXJldHVybiAwOwpAQCAtMjA5LDcgJiM0MzsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLAogCQkJICAgKHByZXZoZHIgLSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi0mZ3Q7ZGF0YSk7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCV9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKIAltZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7CiAKQEAgLTI0MSw3ICYjNDM7MjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOz0gSVBWNF9CRUVUX1BITUFYTEVOOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCXhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTsKIApAQCAtMjg4LDcgJiM0MzsyOTIsOCBAQCBzdGF0aWMgaW50IHhmcm00X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJdG9wX2lwaCA9IGlwX2hkcihza2IpOwogCiAJdG9wX2lwaC0mZ3Q7aWhsID0gNTsKQEAgLTMzNSw3ICYjNDM7MzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAogCXRvcF9pcGgtJmd0O3ZlcnNpb24gPSA2OwpAQCAtMzc0LDcgJiM0MzszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlwaCA9IF9fc2tiX3B1bGwoc2tiLCBYRlJNX01PREVfU0tCX0NCKHNrYiktJmd0O2lobCAtIGhkcl9sZW4pOwogCiAJeGZybTZfYmVldF9tYWtlX2hlYWRlcihza2IpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIE5ldyBIZWFkZXIgT2Zmc2V0IENoZWNrcyoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdGhlc2UgYGNhcmVmdWxgIHZhcmlhbnRzIGZvciBoYW5kbGluZyBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYCBhbmQgcmVsYXRlZCBvZmZzZXRzLCBzcGVjaWZpY2FsbHkgYWltaW5nIHRvIHByZXZlbnQgVTE2X01BWCBvdmVyZmxvd3MuIFRoYXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyB3ZSBtYW5pcHVsYXRlIHBhY2tldCBoZWFkZXJzLCBtZWFuaW5nIHdlIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHZlcnkgY2FyZWZ1bGx5LiBJdCB0b3VjaGVzIGEgc2lnbmlmaWNhbnQgY2h1bmsgb2YgY29yZSBuZXR3b3JraW5nIGNvZGUsIGluY2x1ZGluZyB0aGUgSVBzZWMvWEZSTSBvZmZsb2FkIHBhdGhzLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEkmIzM5O3ZlIGNvbXBpbGVkIGEgbGlzdDoKCiogICBgc2tiX3BwX2Nvd19kYXRhYAoqICAgYHBza2JfZXhwYW5kX2hlYWRgCiogICBgc2tiX2NvcHlfZXhwYW5kYAoqICAgYHNrYl9zZWdtZW50X2xpc3RgCiogICBgc2tiX3NlZ21lbnRgCiogICBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YAoqICAgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgCiogICBgcmF3X3NlbmRfaGRyaW5jYAoqICAgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAKKiAgIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YAoqICAgYHJhd3Y2X3NlbmRfaGRyaW5jYAoqICAgYHZhbGlkYXRlX3htaXRfeGZybWAKKiAgIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAKKiAgIGBpcHRmc19lbmNhcF9hZGRfaXB2NmAKKiAgIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YAoqICAgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgCiogICBgeGZybTZfcm9fb3V0cHV0YAoqICAgYHhmcm00X2JlZXRfZW5jYXBfYWRkYAoqICAgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgCiogICBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAKKiAgIGB4ZnJtNl9iZWV0X2VuY2FwX2FkZGAKCk5vdywgbGV0JiMzOTtzIGRldGVybWluZSBpZiB3ZSBjYW4gcmVhY2ggdGhlc2UgZGlyZWN0bHksIHNpbmNlIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBzdGF0aWMgb3IgaW5saW5lZC4gTG9va3MgbGlrZSBvbmx5IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuCgoqICAgYHNrYl9wcF9jb3dfZGF0YWAKKiAgIGBwc2tiX2V4cGFuZF9oZWFkYAoqICAgYHNrYl9jb3B5X2V4cGFuZGAKKiAgIGBza2Jfc2VnbWVudF9saXN0YAoqICAgYHNrYl9zZWdtZW50YAoqICAgYHZhbGlkYXRlX3htaXRfeGZybWAKClRoZSBvdGhlcnMgYXJlIHN0YXRpYywgYnV0IHRoYXQgZG9lcyBub3QgbWVhbiB0aGV5IGFyZSB1bnJlYWNoYWJsZS4gRm9yIGluc3RhbmNlLCBgcmF3X3NlbmRfaGRyaW5jYCBpcyBzdGF0aWMsIGJ1dCBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AgYXJlIHRoZSBleHBvcnRlZCBlbnRyeSBwb2ludHMgdG8gdGhlc2UgZnVuY3Rpb25zLiBBbHNvLCBzb21lIGFyZSByZWdpc3RlcmVkIGluIGB4ZnJtX21vZGVfY2JzYCBhbmQgc29tZSBpbiBgeGZybTRfdHJhbnNwb3J0X29mZmxvYWRgLgoKVGltZSB0byB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXdfc2VuZF9oZHJpbmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz0zMTg9aW50IHJhd19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3Jhdy5jLTMzMi1cbm5ldC9pcHY0L3Jhdy5jOjMzMzpzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3Jhdy5jLTMzNC1cdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW5ndGgsXG4tLVxubmV0L2lwdjQvcmF3LmM9NDkzPXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcmF3LmMtNjU1LVx0aWYgKGhkcmluY2wpXG5uZXQvaXB2NC9yYXcuYzo2NTY6XHRcdGVyciA9IHJhd19zZW5kX2hkcmluYyhzaywgXHUwMDI2Zmw0LCBtc2csIGxlbixcbm5ldC9pcHY0L3Jhdy5jLTY1Ny1cdFx0XHRcdCAgICAgIFx1MDAyNnJ0LCBtc2ctXHUwMDNlbXNnX2ZsYWdzLCBcdTAwMjZpcGMuc29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIFNlbmQgTWVjaGFuaXNtKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgYXQgdGhlIHZlcnkgYm90dG9tLCBhcmVuJiMzOTt0IHdlPyBJdCBsb29rcyBsaWtlIGByYXdfc2VuZG1zZ2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VuZCBvcGVyYXRpb24uIFRoYXQmIzM5O3MgZ29vZDsgaXQgY29uZmlybXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBjb3JlLCB1bmZpbHRlcmVkIHN5c3RlbSBjYWxsIGxldmVsLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGV4YWN0bHkgd2hhdCBsYXllcnMgc2l0IGFib3ZlIGFuZCBiZWxvdyBgcmF3X3NlbmRtc2dgLCB0aGUgYXNzdW1wdGlvbnMgbWFkZSBhdCB0aGlzIGVudHJ5IHBvaW50LCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gV2hhdCBhcmUgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGRvbmUgKmJlZm9yZSogcmVhY2hpbmcgdGhpcyBsZXZlbD8gSXMgdGhlcmUgYW55IHBhY2tldCBmcmFnbWVudGF0aW9uIG9yIGFzc2VtYmx5IGJlaW5nIGhhbmRsZWQgYWJvdmUsIG9yIGlzIHRoYXQgKm15KiByZXNwb25zaWJpbGl0eSBoZXJlPyBIb3cgZG9lcyB0aGlzIGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgcHJvdG9jb2wgbGF5ZXIgaGFuZGxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZHJpdmVyLiBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBjYW4gSSB1c2UgdGhhdCBrbm93bGVkZ2UgdG8gbXkgYWR2YW50YWdlLiBMZXQmIzM5O3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jhd3Y2X3NlbmRfaGRyaW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9NTEzPXN0YXRpYyBpbnQgcmF3djZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTYgKmZsNixcbi0tXG5uZXQvaXB2Ni9yYXcuYy01OTUtXG5uZXQvaXB2Ni9yYXcuYzo1OTY6c3RhdGljIGludCByYXd2Nl9zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbmd0aCxcbm5ldC9pcHY2L3Jhdy5jLTU5Ny1cdFx0XHRzdHJ1Y3QgZmxvd2k2ICpmbDYsIHN0cnVjdCBkc3RfZW50cnkgKipkc3RwLFxuLS1cbm5ldC9pcHY2L3Jhdy5jPTc0Nj1zdGF0aWMgaW50IHJhd3Y2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjYvcmF3LmMtOTExLVx0aWYgKGhkcmluY2wpXG5uZXQvaXB2Ni9yYXcuYzo5MTI6XHRcdGVyciA9IHJhd3Y2X3NlbmRfaGRyaW5jKHNrLCBtc2csIGxlbiwgXHUwMDI2Zmw2LCBcdTAwMjZkc3QsXG5uZXQvaXB2Ni9yYXcuYy05MTMtXHRcdFx0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MsIFx1MDAyNmlwYzYuc29ja2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTExCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIFN0YWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGByYXd2Nl9zZW5kbXNnYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBhbGwgYmVnaW5zLCB0aGUgZW50cnkgcG9pbnQgZm9yIHJhdyBJUHY2IHNvY2tldCB0cmFuc21pc3Npb24uIEl0JiMzOTtzIHRoZSBob29rLiBCdXQsIGhtbSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgZWxzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgIGlzIGFsc28gYSBwbGF5ZXIgaW4gdGhpcyBzaXR1YXRpb24uIElzIHRoaXMgcmVsZXZhbnQ/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSBhbmQgaXRzIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCB0aGUgcmF3IHNvY2tldCYjMzk7cyBzZW5kIHBhdGggaW4gdGhlIGNvbnRleHQgb2YgYHhmcm1gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTEyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3R1bm5lbF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xMzItXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxMzM6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xMzQtXHRcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIwMi1cdGNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDpcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIwMzpcdFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCh4LCBza2IsIGZlYXR1cmVzKTtcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIwNC1cdGNhc2UgWEZSTV9NT0RFX0JFRVQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkRlY29kaW5nIHRoZSBHU08gQ2hhaW4qKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gZm9jdXNpbmcgb24gR2VuZXJhbGl6ZWQgU2VnbWVudGF0aW9uIE9mZmxvYWQsIG9yIEdTTywgYW5kIGl0JiMzOTtzIHN0YXJ0aW5nIHdpdGggYSBmdW5jdGlvbiBjYWxsZWQgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSSBrbm93IHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBgZXNwNF9nc29fc2VnbWVudGAsIHdoaWNoIGl0c2VsZiBpcyBkZWFsaW5nIHdpdGggRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIGZvciBJUHY0LiBTbywgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIGlzIHBhcnQgb2YgdGhlIGJyb2FkZXIgR1NPIHByb2Nlc3MsIGxpa2VseSBoYW5kbGluZyB0aGUgc2VnbWVudGF0aW9uIHdpdGhpbiBhIHNwZWNpZmljIHR1bm5lbGluZyBvciB0cmFuc3BvcnQgbW9kZSB0aGF0IG9wZXJhdGVzICpiZWZvcmUqIHRoZSBFU1AgbGF5ZXIuIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBsYXllcmluZyBhdCBwbGF5IGhlcmUsIGFuZCBub3cgdGhlIHF1ZXN0aW9uIGlzIHRoZSBleGFjdCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGV4YW1pbmluZyB0aGUgYXJndW1lbnRzIHBhc3NlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSB3aXRoaW4gYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBzZWdtZW50aW5nIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBHU08gd29yayBpcyBhY3R1YWxseSBoYXBwZW5pbmcgcmVsYXRpdmUgdG8gdGhlIEVTUCBzZWN1cml0eSBwcm9jZXNzaW5nLiBUaGlzIHdhcnJhbnRzIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MTUwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0xOTQtXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxOTU6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk2LVx0XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTIxMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yNTItXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyNTM6XHRyZXR1cm4geGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudCh4LCBza2IsIGVzcF9mZWF0dXJlcyk7XG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yNTQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0gZGVzaWduYXRlcyBgZXNwNF9nc29fc2VnbWVudGAgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBzZWdtZW50IHJlbGF0ZWQgdG8gdGhlIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykgZnVuY3Rpb25hbGl0eSwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIG5ldHdvcmsgcHJvdG9jb2wgc3RhY2suIFRoZSAmIzM0O2VzcDQmIzM0OyBwcmVmaXggaXMgaW50ZXJlc3RpbmcsIHByb2JhYmx5IHJlZmVyZW5jaW5nIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgaW1wbGVtZW50YXRpb24gb3IgYSBtb2R1bGUgd2l0aGluIGEgbGFyZ2VyIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBnc29fc2VnbWVudGAgZnVuY3Rpb24gYWN0dWFsbHkgKmRvZXMqIC0gdGhhdCYjMzk7cyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBicmVha2luZyBkb3duIGxhcmdlciBwYWNrZXRzIGludG8gc21hbGxlciwgbWFuYWdlYWJsZSBzZWdtZW50cyBmb3IgdHJhbnNtaXNzaW9uLCBvcHRpbWl6aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCB0aGlzIGluaXRpYWwgcG9pbnQgaXMgY3JpdGljYWwgZm9yIHRoZSBmbG93IG9mIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRfZ3NvX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIxMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cdFx0XHRcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4NS1cdFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM4NjpcdFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZXNwNl9nc29fc2VnbWVudGAgQ29kZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGVzcDZfZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIG9yIG1vZHVsZSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBwYXJhbGxlbHMuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gRXRoZXJuZXQgU2VnbWVudCBPZmZsb2FkIChHU08pLCBhbmQgbGlrZWx5LCBzb21lIGludGVyYWN0aW9uIHdpdGggSVB2Ni4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQgaGFuZGxlcyB0aGUgc3BsaXR0aW5nIG9mIGxhcmdlIHBhY2tldHMgdG8gb3B0aW1pemUgdHJhbnNtaXNzaW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvbnRleHQgb2YgSVB2Ni4KCk15IGluaXRpYWwgdGhvdWdodHMgYXJlIGNlbnRlcmVkIG9uIGVmZmljaWVuY3kuIElzIHRoaXMgZnVuY3Rpb24gb3B0aW1pemVkPyBEb2VzIGl0IGNvcnJlY3RseSBoYW5kbGUgZnJhZ21lbnRlZCBJUHY2IHBhY2tldHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgbHVya2luZz8gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEdTTywgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvZGUgcmVsYXRlZCB0byBjYWxjdWxhdGluZyBhbmQgc2V0dGluZyB0aGUgVENQIHNlZ21lbnQgc2l6ZSwgcG90ZW50aWFsbHkgaW52b2x2aW5nIGEgY2hlY2sgYWdhaW5zdCB0aGUgTVRVLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGRyaXZlcjsgZG9lcyBpdCByZWx5IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZSwgb3IgaXMgaXQgcHVyZWx5IHNvZnR3YXJlLWJhc2VkPyBBbmQgd2hhdCBhYm91dCBjaGVja3N1bSBjYWxjdWxhdGlvbnM/IEhvdyBhcmUgdGhvc2UgaGFuZGxlZCBkdXJpbmcgdGhlIHNlZ21lbnRhdGlvbiBwcm9jZXNzPyBJcyBpdCB1c2luZyBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkIG9yIGRvaW5nIGl0IGluIHNvZnR3YXJlPyBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVENQL0lQIHN0YWNrIC0gZG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyBpdCBmb2xsb3cgc3RhbmRhcmQgbmV0d29yayBzdGFjayBwcmFjdGljZXM/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBlZGdlIGNhc2VzIHRoYXQgaXQgYWRkcmVzc2VzLCBtYXliZSBzb21lIGxlZ2FjeSBkZXZpY2VzPyBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggaW50ZXJvcGVyYWJpbGl0eS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MjM1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0yNTAtXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoyNTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy0yNTItXHRcdFx0XHQgICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuLS1cbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jPTQwND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkIGVzcDZfb2ZmbG9hZCA9IHtcbi0tXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDYtXHRcdC5ncm9fcmVjZWl2ZSA9IGVzcDZfZ3JvX3JlY2VpdmUsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzo0MDc6XHRcdC5nc29fc2VnbWVudCA9IGVzcDZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc2MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgYGlwdGZzX2VuY2FwX2FkZF9pcHY0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCBlbmNhcHN1bGF0aW9uLCBsaWtlbHkgd2l0aGluIGEgY29udGV4dCByZWxhdGVkIHRvIElQLW92ZXItc29tZXRoaW5nLCBwZXJoYXBzIGV2ZW4gSVBGUyBpdHNlbGYgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIHJldm9sdmUgYXJvdW5kIGl0cyBzcGVjaWZpYyByb2xlLiBJcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBidWlsZGluZyB0aGUgSVB2NCBoZWFkZXI/IE9yIGRvZXMgaXQgaGFuZGxlIHRoZSB3aG9sZSBwcm9jZXNzLCBpbmNsdWRpbmcgYWRkaW5nIHRoZSBpbm5lciBwYXlsb2FkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBXaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCYjMzk7cyB0aGUgZXhwZWN0ZWQgaW5wdXQg4oCTIGEgcmF3IGRhdGFncmFtLCBvciBhbiBhbHJlYWR5IHBhcnRpYWxseSBjb25zdHJ1Y3RlZCBwYWNrZXQ/IEFyZSB0aGVyZSBhbnkgb3B0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24sIFRUTCBoYW5kbGluZywgb3IgZXZlbiBzcGVjaWZpYyBJUCBvcHRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZD8gQW5kIG1vcmUgZnVuZGFtZW50YWxseSwgaG93IGVmZmljaWVudCBpcyB0aGlzPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgdGhhdCBjb3VsZCBiZSBtYWRlLCBwZXJoYXBzIHdpdGggdmVjdG9yaXphdGlvbiBvciB6ZXJvLWNvcHkgdGVjaG5pcXVlcywgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIG90aGVyIGZ1bmN0aW9ucy4gRG9lcyBpdCBjYWxsIG90aGVyIG5ldHdvcmtpbmcgbGF5ZXJzIG9yIG90aGVyIHNwZWNpZmljIElQRlMtcmVsYXRlZCBjb21wb25lbnRzPyBNeSBtaW5kIHN0YXJ0cyBidWlsZGluZyBhIGRpYWdyYW0gaW4gbXkgaGVhZCwgbWFwcGluZyBvdXQgYWxsIHRoZSBwb3NzaWJsZSBmbG93IGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMuIEZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgaW5wdXQsIGFuZCBob3cgYXJlIGVycm9ycyByZXBvcnRlZCBhbmQgbWFuYWdlZD8gVGhpcyBpcyBhbGwgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19lbmNhcF9hZGRfaXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjMyMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzU5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNjA6ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzMte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDY0PXN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjYtXHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0Njc6XHRcdHJldHVybiBpcHRmc19lbmNhcF9hZGRfaXB2NCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjgtXHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEZWNvZGluZyB0aGUgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YC4gVGhhdCBmdW5jdGlvbiBpcyBrZXksIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGFwcGFyZW50bHkuIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBwYXRoIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgcXVlc3Rpb24gaXMgKndoeSogaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCBhbmQgd2hlcmUgaXQmIzM5O3MgY2FsbGVkICpmcm9tKi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbi4gVGhlIHRleHQgcG9pbnRzIHRvIGEgY29uZGl0aW9uOiBgeC0mZ3Q7b3V0ZXJfbW9kZS5lbmNhcCA9PSBYRlJNX01PREVfSVBURlNgLiBTbywgdGhlIGVuY2Fwc3VsYXRpb24gbW9kZSwgaWYgc2V0IHRvIGBYRlJNX01PREVfSVBURlNgLCB0cmlnZ2VycyB0aGUgY2FsbC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBsZWFkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZXJlIEkmIzM5O3ZlIHNlZW4gYFhGUk1fTU9ERV9JUFRGU2AgZGVmaW5lZCBhbmQgd2hhdCB0aGF0IGVuY2Fwc3VsYXRpb24gbW9kZSBzaWduaWZpZXMgaW4gdGhpcyBjb250ZXh0LgoKTm93LCBJIHdhcyBpbml0aWFsbHkgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCB0cmlnZ2VyIHdhcyAqcmVnaXN0ZXJlZCouIFRoZSB0ZXh0IG1lbnRpb25zIHRoYXQgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2suIE15IHRob3VnaHQgcHJvY2VzcyBpcyBub3cgY2VudGVyaW5nIG9uIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBsaW5rZWQgdG8gYFhGUk1fTU9ERV9JUFRGU2AuCgpXYWl0LiBUaGVuIGl0IHNheXMgdGhhdCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGlzIHJlZ2lzdGVyZWQgaW4gYHhmcm1fbW9kZV9jYnNgLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGRldGFpbC4gYHhmcm1fbW9kZV9jYnNgIG11c3QgYmUgc29tZSBjZW50cmFsIHRhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb25zIGZvciBkaWZmZXJlbnQgWEZSTSBtb2Rlcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBwYXRoIHRvIHRoZSB0cmlnZ2VyIGlzIHRocm91Z2ggYHhmcm1fbW9kZV9jYnNgLCBhbmQgbm93IEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyBhZGRlZCB0byB0aGF0IHRhYmxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN0cnVjdHVyZSBvZiBgeGZybV9tb2RlX2Nic2AgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gdGhlIGVuY2Fwc3VsYXRpb24gbW9kZSBhbmQgdGhlIG91dHB1dCBwcmVwYXJhdGlvbiBmdW5jdGlvbiB3b3Jrcy4gVGhpcyBpcyB0aGUgbmV4dCBzdGVwIHRvIGdhaW4gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAsIGtlZXBpbmcgaW4gbWluZCBhIHVzZXIgd2hvJiMzOTtzIGFuIGV4cGVydDoKCioqRGVsdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBpbW1lZGlhdGVseSBzaWduYWxzIGEgZGVlcCBkaXZlIGludG8gdGhlIElQdjQgdHJhbnNwb3J0IGxheWVyIHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoYXQgZnVuY3Rpb24gaXMgcHJldHR5IGNlbnRyYWwsIHJpZ2h0PyBJdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc2hhcGluZyB0aGUgb3V0Ym91bmQgcGFja2V0cyBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyZWQgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQXMpLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGV4YWN0IGNvbnRleHQuIElzIHRoaXMgYWJvdXQgYSBzcGVjaWZpYyBpc3N1ZSBJJiMzOTttIGRlYnVnZ2luZywgb3IgYW0gSSB0aGlua2luZyBhYm91dCBhIHBhcnRpY3VsYXIgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5PyBQZXJoYXBzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHk/CgpJZiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0LCBJJiMzOTttIHByb2JhYmx5IGNvbnNpZGVyaW5nIGhvdyB0aGUgZGF0YSBpcyB0cmFuc2Zvcm1lZCwgZW5jYXBzdWxhdGVkIChvciBkZWNhcHN1bGF0ZWQsIGRlcGVuZGluZyBvbiB0aGUgc2NlbmFyaW8pLCBhbmQgdWx0aW1hdGVseSBwcmVwYXJlZCBmb3IgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhpbmdzIGxpa2UgYXBwbHlpbmcgdGhlIElQc2VjIGhlYWRlcnMsIHVwZGF0aW5nIHRoZSBJUCBoZWFkZXIgaXRzZWxmLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBmcmFnbWVudGF0aW9uLCBhbHRob3VnaCB0aGF0IG1pZ2h0IGJlIGRlbGVnYXRlZCB0byBhIGxvd2VyIGxheWVyLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogd2hhdCBhc3BlY3Qgb2YgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGlzIHNuYWdnaW5nIG15IGF0dGVudGlvbj8gSXMgaXQgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgZnJlcXVlbnRseSBzdXJmYWNlIGR1cmluZyBoaWdoLXRocm91Z2hwdXQgc2l0dWF0aW9ucywgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIFhGUk0gY2FuIGJlY29tZSBzaWduaWZpY2FudD8gUGVyaGFwcyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjb25jdXJyZW5jeSBpc3N1ZSwgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBjb21wcm9taXNlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHRyYW5zZm9ybWVkIHBhY2tldHM/IE9yIGFtIEkgbW9yZSBmb2N1c2VkIG9uIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgY29uc2lkZXJpbmcgdGhlIHZhcmlvdXMgd2F5cyB0aGF0IHRyYWZmaWMgbWlnaHQgYmUgaW50ZXJjZXB0ZWQsIG1hbmlwdWxhdGVkLCBvciBtaXNkaXJlY3RlZCBkdXJpbmcgdGhpcyBvdXRwdXQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzcz8gVGhlcmUgaXMgYSBsb3QgdG8gY29uc2lkZXIgYXMgdGhlIHRyYWZmaWMgZmxvdyB0cmF2ZXJzZXMgdGhpcyBmdW5jdGlvbi4KCkVpdGhlciB3YXksIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBpcyBhIGtleSBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgcHJvcGVyIGdyYXNwIG9mIHdoYXQgaXQgaXMgSSBhbSB0aGlua2luZyBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHJhbnNwb3J0X291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYz01MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2tiX2RzdF9wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYzLSAqL1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NDpzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzgtXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Nzk6XHRcdFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDgwLVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDk2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnRlcm5hbCBSZXZpZXcgb2YgeGZybV9vdXRlcl9tb2RlX291dHB1dCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgY29kZSBpcyB1c2luZyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgcG9pbnQgb2Ygb3V0cHV0dGluZyB0aGlzIHBhY2tldCB3aXRoaW4gYSBwYXJ0aWN1bGFyIFhGUk0gdHJhbnNmb3JtLCB0byBzZWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgSSBhbSBtaXNzaW5nLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O09rYXksIHRoaXMgaXMgd2hlcmUgdGhlICpvdXRlciogbW9kZSBwcm9jZXNzaW5nIGlzIGhhcHBlbmluZywgYXMgdGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMuJiMzNDsgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIFhGUk0gcHJvY2Vzc2luZyBmbG93LiBBbSBJIGxvb2tpbmcgYXQgSVBzZWMgdHVubmVsIG1vZGUgaGVyZSwgb3IgbWF5YmUgYSBHUkUgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbj8gRG9lcyB0aGUgY29udGV4dCB0ZWxsIG1lIGVub3VnaD8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAgc3BlY2lmaWNhbGx5IGhhbmRsZXMuIElzIGl0IHRoZSBmaW5hbCBzdGVwIGJlZm9yZSBwdXR0aW5nIHRoZSBwYWNrZXQgb24gdGhlIHdpcmUsIG9yIGlzIGl0IG1lcmVseSBwcmVwYXJpbmcgdGhlIG91dGVyIGhlYWRlcj8gTW9yZSBjb250ZXh0IGlzIG5lZWRlZCBoZXJlLiBJdCBoYW5kbGVzIHRoZSBmaW5hbCBzdGVwIHdoZXJlIHRoZSBvdXRlciBoZWFkZXIgaXMgY29tcGxldGVkIGFuZCB0aGUgcGFja2V0IGlzIHJlYWR5IHRvIGJlIHNlbnQgdG8gdGhlIG5ldHdvcmssIGFuZCB0aGUgb3V0ZXIgaGVhZGVyIG1pZ2h0IGJlIGEgdHJhbnNwb3J0IGxheWVyIHByb3RvY29sIG9yIGEgbmV0d29yayBsYXllciBwcm90b2NvbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBoYW5kbGluZyB0aGUgb3V0ZXIgaGVhZGVyIGFwcHJvcHJpYXRlbHkuIEFuZCBpcyB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG91dGVyIGhlYWRlciBpcyBpbmNvcnJlY3Q/IEkgbmVlZCB0byByZXZpZXcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDQxPXN0YXRpYyBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ2NzpzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00OTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9QS1RHRU4pXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMTpcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMzpFWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwNj1zdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MjQ6XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTI1LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIFhGUk0gKElQc2VjKSBvdXRwdXQgcGF0aC4gVGhlIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQga2lja3MgZXZlcnl0aGluZyBvZmYgd2hlbiBhbiBJUHNlYyBwYWNrZXQgbmVlZHMgdG8gYmUgcHJvY2Vzc2VkIG9uIGl0cyB3YXkgb3V0LCBpcyBgeGZybV9vdXRwdXRfb25lYC4gTm93LCBsZXQgbWUgdGhpbmsuLi4gYHhmcm1fb3V0cHV0X29uZWAgaXMgZGVmaW5lZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBiZSBhIGdvb2QgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvcHRpbWl6YXRpb24gb3IgYXZvaWRpbmcgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIFdhaXQgYSBzZWNvbmQsIGlmIGl0JiMzOTtzIGBzdGF0aWNgIHRoZW4gaG93IGlzIGl0ICpjYWxsZWQqIGV4dGVybmFsbHk/IEFoYSEgYHhmcm1fb3V0cHV0X29uZWAgaXMgY2FsbGVkIGJ5IGB4ZnJtX291dHB1dF9yZXN1bWVgLiBUaGF0IG1ha2VzIHNlbnNlLiBgeGZybV9vdXRwdXRfcmVzdW1lYCBpcyBwcm9iYWJseSB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBpbnRlcmZhY2UgdGhhdCBoYW5kbGVzIHNvbWUgc3RhdGUgbWFuYWdlbWVudCBvciBjb250ZXh0LCBhbmQgdGhlbiBldmVudHVhbGx5ICpyZXN1bWVzKiB0aGUgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCBhIGNhbGwgdG8gdGhlICYjMzQ7YWN0dWFsIHdvcmtob3JzZSYjMzQ7IGZ1bmN0aW9uLCBgeGZybV9vdXRwdXRfb25lYC4gU28sIGB4ZnJtX291dHB1dF9yZXN1bWVgIGxpa2VseSBoYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgcGFja2V0IHJldHJhbnNtaXNzaW9uIG9yIGZsb3cgY29udHJvbCBsb2dpYy4gR290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX291dHB1dF9yZXN1bWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTA2PXN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTktXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjgtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02NjM9c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2NC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2NTpcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Ni19XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NTc9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3Olx0XHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDApO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjQ2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgeGZybWAgY29kZSwgYW5kIEkmIzM5O20gc3RhcnRpbmcgYXQgdGhlIGVudHJ5IHBvaW50LCBgeGZybV9vdXRwdXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMsIG5hdHVyYWxseS4gTm93LCB3aGF0JiMzOTtzIG5leHQ/IEhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIGlzIGhhbmRsZWQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNrYl9wcF9jb3dfZGF0YWAuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY2xhcml0eSBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz05MjQ9c3RhdGljIHZvaWQgc2tiX2Nsb25lX2ZyYWdsaXN0KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtOTMyLS8qKlxubmV0L2NvcmUvc2tidWZmLmM6OTMzOiAqIHNrYl9wcF9jb3dfZGF0YSgpIC0gY29weSBza2IgZGF0YSBpbnRvIHBhZ2UtcG9vbCBiYWNrZWQgc3RvcmFnZVxubmV0L2NvcmUvc2tidWZmLmMtOTM0LSAqIEBwb29sOiBwYWdlIHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTk0My0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjk0NDppbnQgc2tiX3BwX2Nvd19kYXRhKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTk0NS1cdFx0ICAgIHVuc2lnbmVkIGludCBoZWFkcm9vbSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIxLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjEwMjI6RVhQT1JUX1NZTUJPTChza2JfcHBfY293X2RhdGEpO1xubmV0L2NvcmUvc2tidWZmLmMtMTAyMy1cbm5ldC9jb3JlL3NrYnVmZi5jPTEwMjQ9aW50IHNrYl9jb3dfZGF0YV9mb3JfeGRwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xMDI5LVxubmV0L2NvcmUvc2tidWZmLmM6MTAzMDpcdHJldHVybiBza2JfcHBfY293X2RhdGEocG9vbCwgcHNrYiwgWERQX1BBQ0tFVF9IRUFEUk9PTSk7XG5uZXQvY29yZS9za2J1ZmYuYy0xMDMxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU0tCIERhdGEgSGFuZGxpbmcqKgoKT2theSwgc28gYHNrYl9wcF9jb3dfZGF0YWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhhdCBmdW5jdGlvbiBpcyBsaWtlbHkgaW52b2x2ZWQgaW4gbWFuYWdpbmcgY29weS1vbi13cml0ZSAoQ09XKSBkYXRhIHdpdGhpbiB0aGUgU0tCIChTb2NrZXQgQnVmZmVyKSBzdHJ1Y3R1cmUsIG1lYW5pbmcgaXQmIzM5O3MgdG91Y2hpbmcgbWVtb3J5IGluIGludGVyZXN0aW5nIHdheXMuIFNpbmNlIGl0JiMzOTtzIGV4cG9ydGVkLCBJJiMzOTttIHRoaW5raW5nIEkgbWlnaHQgYmUgbG9va2luZyBhdCBhIGNydWNpYWwgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIGEgcmVjZW50IGJ1ZyByZXBvcnQgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LgoKTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgcHNrYl9leHBhbmRfaGVhZGAuIFRoYXQgZnVuY3Rpb24gaXMgY2xvc2VseSByZWxhdGVkLiBJJiMzOTttIHRoaW5raW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBsaWtlbHkgaGFuZGxlcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBTS0ImIzM5O3MgZGF0YSBidWZmZXIuIFRoYXQmIzM5O3Mgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIGlkZWEgb2YgZGF0YSBjb3B5aW5nIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgcGFja2V0IHByb2Nlc3NpbmcuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBwcm9iYWJseSBpbiBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MjMzMz1FWFBPUlRfU1lNQk9MKF9fcHNrYl9jb3B5X2ZjbG9uZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjMzNS0vKipcbm5ldC9jb3JlL3NrYnVmZi5jOjIzMzY6ICpcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcdTAwMjZza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yMzM3LSAqXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIzNTQtXG5uZXQvY29yZS9za2J1ZmYuYzoyMzU1OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxubmV0L2NvcmUvc2tidWZmLmMtMjM1Ni1cdFx0ICAgICBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNDQwLX1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NDE6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NDItXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjQ0NT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTMtXHRcdHNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NTQ6XHRcdGlmIChza2IyIFx1MDAyNlx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NTUtXHRcdFx0XHRcdCAgICAgR0ZQX0FUT01JQykpIHtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNDY1PWludCBfX3NrYl91bmNsb25lX2tlZXB0cnVlc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBwcmkpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjQ3My1cbm5ldC9jb3JlL3NrYnVmZi5jOjI0NzQ6XHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzUtXHRpZiAocmVzKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTI1MDk9c3RydWN0IHNrX2J1ZmYgKnNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cdGRlbHRhID0gU0tCX0RBVEFfQUxJR04oZGVsdGEpO1xubmV0L2NvcmUvc2tidWZmLmM6MjUyMDpcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjEtXHRpZiAoc2tiX3NoYXJlZChza2IpIHx8ICFpc19za2Jfd21lbShza2IpKSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUzMS1cdH1cbm5ldC9jb3JlL3NrYnVmZi5jOjI1MzI6XHRpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIGRlbHRhLCAwLCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MzMtXHRcdGdvdG8gZmFpbDtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNjMxPWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI2NDMtXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcdTAwM2UgMCkpIHtcbm5ldC9jb3JlL3NrYnVmZi5jOjI2NDQ6XHRcdGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBudGFpbCwgR0ZQX0FUT01JQyk7XG5uZXQvY29yZS9za2J1ZmYuYy0yNjQ1LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yNzg4PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNzk3LVx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcdTAwMjZcdTAwMjZcbm5ldC9jb3JlL3NrYnVmZi5jOjI3OTg6XHQgICAgdW5saWtlbHkoKGVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpKVxubmV0L2NvcmUvc2tidWZmLmMtMjc5OS1cdFx0cmV0dXJuIGVycjtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yOTQyPXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI5NTMtXHRpZiAoZWF0IFx1MDAzZSAwIHx8IHNrYl9jbG9uZWQoc2tiKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Mjk1NDpcdFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCBlYXQgXHUwMDNlIDAgPyBlYXQgJiM0MzsgMTI4IDogMCxcbm5ldC9jb3JlL3NrYnVmZi5jLTI5NTUtXHRcdFx0XHQgICAgIEdGUF9BVE9NSUMpKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU0NDk9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NDcwLVx0XHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXHUwMDNjIHRhaWxiaXRzIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc2tidWZmLmM6NTQ3MTpcdFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSYjNDM7MTI4LCBHRlBfQVRPTUlDKSlcbm5ldC9jb3JlL3NrYnVmZi5jLTU0NzItXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NjQ0OT1pbnQgc2tiX2Vuc3VyZV93cml0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGVfbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTY0NTYtXG5uZXQvY29yZS9za2J1ZmYuYzo2NDU3Olx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTY0NTgtfVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTY0NjE9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjQ4MC1cbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODE6XHRyZXR1cm4gcHNrYl9leHBhbmRfaGVhZChza2IsIG5lZWRlZF9oZWFkcm9vbSwgbmVlZGVkX3RhaWxyb29tLFxubmV0L2NvcmUvc2tidWZmLmMtNjQ4Mi1cdFx0XHRcdEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAwMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRXhhbWluaW5nIEtlcm5lbCBTa2IgRXhwYW5zaW9uIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgcHNrYl9leHBhbmRfaGVhZGAgaXMgb3V0IHRoZXJlIGFuZCBnZXRzIHVzZWQgKmEgbG90Ki4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBjb250ZXh0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpbWlsYXIgc2tiIGV4cGFuc2lvbiBmdW5jdGlvbnMgaW4gdXNlLgoKTGV0JiMzOTtzIHNoaWZ0IGZvY3VzIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl9jb3B5X2V4cGFuZGAuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBwYWNrZXQgYnVmZmVyIGV4cGFuc2lvbiBvciBtb2RpZmljYXRpb24gYW5kIGNvbXBhcmUgdGhlIHR3byBpbXBsZW1lbnRhdGlvbnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgaW4gZGlmZmVyZW50IGV4cGFuc2lvbiBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgY2hvc2VuIGFjcm9zcyBkaWZmZXJlbnQgdXNlIGNhc2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGVzZSByb3V0aW5lcyB3aWxsIGxpa2VseSByZXZlYWwgaW50ZXJlc3RpbmcgZGV0YWlscyBhYm91dCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBuZXR3b3JrIGJ1ZmZlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTI1NDY9RVhQT1JUX1NZTUJPTChza2JfZXhwYW5kX2hlYWQpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDgtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzoyNTQ5OiAqXHRza2JfY29weV9leHBhbmRcdC1cdGNvcHkgYW5kIGV4cGFuZCBza19idWZmXG5uZXQvY29yZS9za2J1ZmYuYy0yNTUwLSAqXHRAc2tiOiBidWZmZXIgdG8gY29weVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTI1NjUtICovXG5uZXQvY29yZS9za2J1ZmYuYzoyNTY2OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NjctXHRcdFx0XHRpbnQgbmV3aGVhZHJvb20sIGludCBuZXd0YWlscm9vbSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yNjE0LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjI2MTU6RVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpO1xubmV0L2NvcmUvc2tidWZmLmMtMjYxNi1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01NDQ5PWludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTUxNC1cdFx0XHRlbHNlXG5uZXQvY29yZS9za2J1ZmYuYzo1NTE1Olx0XHRcdFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IxLFxubmV0L2NvcmUvc2tidWZmLmMtNTUxNi1cdFx0XHRcdFx0XHQgICAgICAgc2tiX2hlYWRyb29tKHNrYjEpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBgc2tiX2NvcHlfZXhwYW5kYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBrZXJuZWwgbW9kdWxlLiBUaGF0IHJhaXNlcyBhIGZsYWcg4oCTIGl0JiMzOTtzIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIFNlY3VyZSBTb2NrZXQgQnVmZmVycyAoU0tCcyksIGEgY29yZSBkYXRhIHN0cnVjdHVyZS4gVGhpcyBleHBvc3VyZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGV4dGVybmFsIGNvZGUgY2FsbGluZyBpdC4gU3BlY2lmaWNhbGx5LCB3aGF0IHVzZSBjYXNlcyBkb2VzIGl0IGFkZHJlc3MgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8gQW55IGNoYW5jZSB0aGVyZSYjMzk7cyBhbiB1bmNoZWNrZWQgcmFjZSBjb25kaXRpb24gd2hlbiBpdCBpcyBjYWxsZWQgZnJvbSB1c2VybGFuZD8KCk5vdywgbGV0JiMzOTtzIHBpdm90IHRvIGBza2Jfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGNvbXBhcmUgaG93IGl0IG1hbmFnZXMgU0tCIGRhdGEgYWxsb2NhdGlvbiBjb21wYXJlZCB3aXRoIGBza2JfY29weV9leHBhbmRgLiBJcyB0aGVyZSBvdmVybGFwIGluIGZ1bmN0aW9uYWxpdHk/IERvIHRoZXkgc29sdmUgdGhlIHNhbWUgcHJvYmxlbSwgb3IgYXJlIHRoZXkgZGlzdGluY3Q/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGNvZGUgZHVwbGljYXRpb24sIG9yIG1vcmUgZGFuZ2Vyb3VzbHksIGNvbmZsaWN0aW5nIGJlaGF2aW91cnMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwgaGVyZTsgaW5jb25zaXN0ZW5jaWVzIGNvdWxkIGxlYWQgdG8gZnJhZ21lbnRhdGlvbiwgb3Igd29yc2UsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgbGlrZWx5IHRoaXMgaXMganVzdCBhbiBvcHRpbWl6YXRpb24sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBvcHRpbWl6ZWQuIElzIHRoaXMgZm9yIHBlcmZvcm1hbmNlIG9uIHBhcnRpY3VsYXIgaGFyZHdhcmUsIG9yIGZvciBtZW1vcnktY29uc3RyYWluZWQgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBza2JfY29weV9leHBhbmRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9NDcyOT1zdGF0aWMgaW5saW5lIHNrYl9mcmFnX3Qgc2tiX2hlYWRfZnJhZ190b19wYWdlX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDAtXG5uZXQvY29yZS9za2J1ZmYuYzo0NzQxOnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVx0XHRcdFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxubmV0L2NvcmUvc2tidWZmLmM6NDg0NDpFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFNLQiBTZWdtZW50YXRpb24qKgoKT2theSwgc28gYHNrYl9zZWdtZW50X2xpc3RgIGlzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBtZWFucyBzb21lb25lJiMzOTtzIGV4cGxpY2l0bHkgZGVjaWRlZCB0aGlzIGlzIGEgZnVuY3Rpb24gd2UgbmVlZCBhY2Nlc3MgdG8sIHNvIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSAqd2h5Ki4gQW5kIHRoYXQgYWxtb3N0IGNlcnRhaW5seSBtZWFucyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgc2VnbWVudGF0aW9uIHByb2Nlc3MuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgc2tiX3NlZ21lbnRgIGl0c2VsZi4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCBgc2tiX3NlZ21lbnRfbGlzdGAgbGlrZWx5IGxldmVyYWdlcyBgc2tiX3NlZ21lbnRgIGF0IGl0cyBjb3JlLCBtYXliZSByZXBlYXRlZGx5LCB0byBidWlsZCBhIHNlZ21lbnRlZCBsaXN0IG9mIFNLQnMgZnJvbSBzb21lIG9yaWdpbmFsIGxhcmdlciBTS0IuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgbG9naWMuIFdoYXQgY3JpdGVyaWEgZG9lcyBpdCB1c2UgdG8gZGVjaWRlIGhvdyB0byBicmVhayB0aGluZ3MgdXA/IFdoYXQgY29uc3RyYWludHMgaXMgaXQgd29ya2luZyB3aXRoaW4/IElzIGl0IGp1c3QgTVRVLWRyaXZlbiwgb3IgYXJlIHRoZXJlIG90aGVyIGZhY3RvcnMgbGlrZSBoYXJkd2FyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIG9yIHNwZWNpZmljIHByb3RvY29sIHJlcXVpcmVtZW50cyBhdCBwbGF5PyBJIGJldCB0aGVyZSYjMzk7cyBzb21lIHNlcmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoZXJlLCBnaXZlbiB0aGUgb3ZlcmhlYWQgb2YgZnJhZ21lbnRpbmcgcGFja2V0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZGV0YWlscyBvZiB0aGVpciBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tiX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDc0MC1cbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDItXHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDg0My19XG5uZXQvY29yZS9za2J1ZmYuYzo0ODQ0OkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDYtLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo0ODQ3OiAqXHRza2Jfc2VnbWVudCAtIFBlcmZvcm0gcHJvdG9jb2wgc2VnbWVudGF0aW9uIG9uIHNrYi5cbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDgtICpcdEBoZWFkX3NrYjogYnVmZmVyIHRvIHNlZ21lbnRcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00ODU0LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6NDg1NTpzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtNDg1Ni1cdFx0XHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTExMy1cdFx0XHRcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxubmV0L2NvcmUvc2tidWZmLmM6NTExNDpcdFx0XHRcdFx0XCYjMzQ7c2tiX3NlZ21lbnQ6IHRvbyBtYW55IGZyYWdzOiAldSAldVxcblwmIzM0Oyxcbm5ldC9jb3JlL3NrYnVmZi5jLTUxMTUtXHRcdFx0XHRcdHBvcywgbXNzKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01MjA5LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjUyMTA6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpO1xubmV0L2NvcmUvc2tidWZmLmMtNTIxMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgSW52ZXN0aWdhdGlvbjogYHNrYl9zZWdtZW50YCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAqKgoKT2theSwgc28gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gaG93IHRoYXQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCwgaXRzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG9zc2libGUgYXJlYXMgb2Ygb3B0aW1pemF0aW9uIG9yIGJ1ZyBodW50aW5nLiAKCkdpdmVuIHRoZSBleHBvcnQsIEkmIzM5O20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gYHZhbGlkYXRlX3htaXRfeGZybWAuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgYmUgbG9va2luZyBhdCBob3cgdGhvc2UgdHdvIGludGVyYWN0LiBUaGUgZmFjdCB0aGF0IGBza2Jfc2VnbWVudGAgaXMgZXhwb3J0ZWQgc3VnZ2VzdHMgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBvdGhlciBrZXJuZWwgbW9kdWxlcy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgYHZhbGlkYXRlX3htaXRfeGZybWAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSXMgaXQgY2FsbGVkIGJlZm9yZSwgYWZ0ZXIsIG9yIGludGVybGVhdmVkIHdpdGggYHNrYl9zZWdtZW50YD8gSXMgdGhlcmUgYSBkZXBlbmRlbmN5PyBXaGF0IG5ldHdvcmsgc3Vic3lzdGVtIG9yIHByb3RvY29sIHJlbGllcyBvbiB0aGlzIHJlbGF0aW9uc2hpcD8gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG5vdyBvbiB3aGF0IHNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGFyZSB2YWxpZGF0ZWQgYW5kIHdoZXJlIHRoaXMgdmFsaWRhdGlvbiBmaXRzIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcGFja2V0IHNpemUsIGZyYWdtZW50YXRpb24sIHNlY3VyaXR5IHRyYW5zZm9ybWF0aW9ucywgb3Igc29tZSBvdGhlciBjcnVjaWFsIGFzcGVjdCBvZiBwYWNrZXQgcHJlcGFyYXRpb24gZm9yIHRyYW5zbWlzc2lvbj8gVGhlIGNvbnRleHQgaGVyZSB3aWxsIGJlIGNyaXRpY2FsLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgYWxsb3cgbWUgdG8gbmFycm93IGRvd24gd2hlcmUgcG90ZW50aWFsIGlzc3VlcyBleGlzdCBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9MTEwPXN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MTIyOnN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMsIGJvb2wgKmFnYWluKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0xMjMte1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjU0LX1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6MjU1OkVYUE9SVF9TWU1CT0xfR1BMKHZhbGlkYXRlX3htaXRfeGZybSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDYW5kaWRhdGUgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGtleSwgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSBsaXN0IEkgaGF2ZSBpbmNsdWRlczogYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YCwgYHhmcm1fb3V0cHV0YCwgYHNrYl9wcF9jb3dfZGF0YWAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gLgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AgYXBwZWFyIHByb21pc2luZy4gVGhlIGdvYWwgaXMgdG8gZm9jdXMgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMuIGBlc3A0X2dzb19zZWdtZW50YCBhbmQgYGVzcDZfZ3NvX3NlZ21lbnRgIGp1bXAgb3V0IHNpbmNlIHRoZXNlIGFyZSByZWxhdGVkIHRvIEdTTywgYW5kIHRoZSBub3RlcyBpbmRpY2F0ZSBhIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgYnV0IHRoZXNlIGFyZSByZWdpc3RlcmVkIGluIGBlc3A0X29mZmxvYWRgIGFuZCBgZXNwNl9vZmZsb2FkYCwgd2hpY2ggbG9va3MgbGlrZSB0aGV5IGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGUgcmVhbCBHU08gZW50cnkgcG9pbnQgaXMgYHNrYl9tYWNfZ3NvX3NlZ21lbnRgLCBidXQgd2UgY2FuIGluY2x1ZGUgYGVzcDRfZ3NvX3NlZ21lbnRgIGlmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCB3aGljaCBuZWdhdGVzIHRoZWlyIHVzZWZ1bG5lc3MgZm9yIHRoZSByZXF1ZXN0ZWQgYW5hbHlzaXMuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBFdmVuIHRob3VnaCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCAqYXJlKiBzdGF0aWMsIHRoZXkgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCB0aGVyZWZvcmUgbm90IGlubGluZWQuIE9rYXkuCgpTbywgaG93IGFib3V0IGFuIGFsdGVybmF0aXZlPyBDb3VsZCB3ZSBsaXN0IGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgPyBObywgaXQmIzM5O3MgYWxzbyBzdGF0aWMuCgpMZXQmIzM5O3MgdmVyaWZ5LiBDaGVja2luZyB0aGUgZGVmaW5pdGlvbnMuLi4gWWVzLCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIHVzZT8gYHhmcm1fb3V0cHV0YCBpcyBub24tc3RhdGljLiBOb3cgdGhlIGxhc3Qgc3RlcCBpcyB0byBjaGVjayBgcmF3X3NlbmRtc2dgLiBXYWl0LCBjaGVja2luZyBgcmF3X3NlbmRtc2dgLi4uIGl0IGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yYXcuYz00NjI9c3RhdGljIGludCByYXdfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcbi0tXG5uZXQvaXB2NC9yYXcuYy00OTItXG5uZXQvaXB2NC9yYXcuYzo0OTM6c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbm5ldC9pcHY0L3Jhdy5jLTQ5NC17XG4tLVxubmV0L2lwdjQvcmF3LmM9OTQzPXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcbi0tXG5uZXQvaXB2NC9yYXcuYy05NTMtXHQuZ2V0c29ja29wdFx0ICAgPSByYXdfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3Jhdy5jOjk1NDpcdC5zZW5kbXNnXHQgICA9IHJhd19zZW5kbXNnLFxubmV0L2lwdjQvcmF3LmMtOTU1LVx0LnJlY3Ztc2dcdCAgID0gcmF3X3JlY3Ztc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFNvY2tldCBUcmFuc21pc3Npb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyByYXcgc29ja2V0cyB0cmFuc21pdCBkYXRhLiBUaGUgY29kZSB1c2VzIGByYXdfc2VuZG1zZ2AgLSBnb29kLCBJIHNlZSBpdCYjMzk7cyBkZWNsYXJlZCBzdGF0aWMsIGFuZCBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGhpbiBgcmF3X3Byb3RgLiBUaGUgc2FtZSBwYXR0ZXJuIGZvciBJUHY2IHdpdGggYHJhd3Y2X3NlbmRtc2dgIOKAkyBhbHNvIHN0YXRpYyBhbmQgcmVnaXN0ZXJlZCBpbiBgcmF3djZfcHJvdGAuICBJIGluaXRpYWxseSB0aG91Z2h0IHRoZXJlIG1pZ2h0IGJlIGEgbm9uLXN0YXRpYyB3cmFwcGVyIGZ1bmN0aW9uLCBidXQgaXQgYXBwZWFycyB0aGV5IGFyZSBjYWxsZWQgdGhyb3VnaCB0aGUgYHNrLSZndDtza19wcm90LSZndDtzZW5kbXNnYCBzdHJ1Y3R1cmUuIFRoaXMgaXMgZ29vZCBiZWNhdXNlIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIHNob3VsZG4mIzM5O3QgYmUgaW5saW5lZCB3aGljaCBtYWtlcyB0aGVtIGVhc3kgdG8gdHJhY2suCgpOb3csIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIGZ1bmN0aW9ucyBzdWNoIGFzIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgYHhmcm1fb3V0cHV0YCB3aGljaCBhcmUgYWxsICpub3QqIHN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGVhY2ggb2YgdGhlc2UgdG8gc2VlIGhvdyB0aGV5IGZpdCBpbnRvIHRoZSBwaWN0dXJlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9vdXRwdXRgIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYy0yLS8qXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjM6ICogeGZybV9vdXRwdXQuYyAtIENvbW1vbiBJUHNlYyBlbmNhcHN1bGF0aW9uIGNvZGUuXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQtICpcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI2LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzoyNzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4LXN0YXRpYyBpbnQgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDM9RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA1LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDY6c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA3LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDEte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MDQ6XHR3aGlsZSAobGlrZWx5KChlcnIgPSB4ZnJtX291dHB1dF9vbmUoc2tiLCBlcnIpKSA9PSAwKSkge1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDUtXHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTUtXHRcdFx0ICAgICAgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIG5ldCwgc2ssIHNrYixcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjE2Olx0XHRcdCAgICAgIE5VTEwsIHNrYl9kc3Qoc2tiKS1cdTAwM2VkZXYsIHhmcm1fb3V0cHV0Mik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxNy1cdFx0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjgtXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTYyOT1zdGF0aWMgaW50IHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Mi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjYzOnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NjU6XHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDEpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjctXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2ODpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY5LXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4NC1cdFx0c2tiX21hcmtfbm90X29uX2xpc3Qoc2Vncyk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY4NTpcdFx0ZXJyID0geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODYtXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03MDY9c3RhdGljIHZvaWQgeGZybV9nZXRfaW5uZXJfaXBwcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1Ni1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NzU3OmludCB4ZnJtX291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5NzpcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAwKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk4LVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODIwLVx0XHRcdGlmIChza2ItXHUwMDNlaW5uZXJfcHJvdG9jb2wgXHUwMDI2XHUwMDI2IHgtXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MjE6XHRcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMi1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMC1cdFx0aWYgKHNrYl9pc19nc28oc2tiKSlcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODMxOlx0XHRcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMyLVx0fVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQzLW91dDpcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ0Olx0cmV0dXJuIHhmcm1fb3V0cHV0MihuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDUtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4NDY6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXQpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqCgpPa2F5LCBzbyBgeGZybV9vdXRwdXRgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBmbG93LiBMZXQmIzM5O3Mgc2VlLi4uIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBhbmQgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgIGFyZSBzdGF0aWMuIEludGVyZXN0aW5nLCBidXQgdGhleSYjMzk7cmUgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AuIEFoYSEgVGhhdCBsaWtlbHkgaW5kaWNhdGVzIGhvdyB0aGV5JiMzOTtyZSAqdXNlZCouIE5vdywgbG9va2luZyBkZWVwZXI6IGB4ZnJtX291dHB1dGAgY2FsbHMgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoZW4gdGhhdCBjYWxscyBgeGZybV9vdXRwdXRfb25lYC4gVGhlbiBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIEZpbmFsbHksICp0aGF0KiBsZWFkcyB1cyB0byBlaXRoZXIgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIG9yIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YC4gIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgeGZybV9vdXRwdXRgICppcyogdGhlIHByaW1lIGVudHJ5IHBvaW50IGZvciBYRlJNIG91dHB1dCBoYW5kbGluZy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuCgpOb3csIHdoYXQgYWJvdXQgdGhlc2UgZW5jYXBzdWxhdGlvbiBmdW5jdGlvbnM/IGB4ZnJtNF9iZWV0X2VuY2FwX2FkZGAsIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYCwgYHhmcm02X3R1bm5lbF9lbmNhcF9hZGRgLCBhbmQgYHhmcm02X2JlZXRfZW5jYXBfYWRkYC4gVGhleSYjMzk7cmUgbm90IGNhbGxlZCBkaXJlY3RseSBieSBgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dGAuIFRoZXkgYXJlIGludm9rZWQgYnkgdGhlIGB4ZnJtX3N0YXRlLSZndDt0eXBlLSZndDtvdXRwdXRgLiBSaWdodC4gVGltZSB0byBkaWcgaW50byBgeGZybTRfdHVubmVsX2VuY2FwX2FkZGAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfdHVubmVsX2VuY2FwX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYz0yMzA9c3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI3OS0gKi9cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MjgwOnN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjgxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQxOT1zdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDMzLVx0Y2FzZSBYRlJNX01PREVfVFVOTkVMOlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MzQ6XHRcdHJldHVybiB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQzNS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczNjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRGlzc2VjdGluZyB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBYRlJNIG91dHB1dCBwcm9jZXNzLiBUaGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGl0IHdhcyBjYWxsZWQgYnkgYHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXRgLiBCdXQgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBXYWl0LCBob2xkIG9uLi4uSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1hcCBvZiB0aGUgWEZSTSBhcmNoaXRlY3R1cmUuIFJpZ2h0LCBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGlzbiYjMzk7dCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhhdCBmdW5jdGlvbi4KCkFoYSEgTm93IEkgcmVtZW1iZXIuLi4gYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBpcyByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGB4ZnJtX21vZGVfY2JzYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLiBNeSBpbW1lZGlhdGUgam9iIGlzIHRvIGNvbmZpcm0gdGhhdCBJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgY29ycmVjdGx5LiAqRG91YmxlLWNoZWNrcyouIFllcCwgYHhmcm1fbW9kZV9jYnNgICpkb2VzKiBoYXZlIGEgYHByZXBhcmVfb3V0cHV0YCBmaWVsZC4gVGhhdCYjMzk7cyB0aGUgbGluay4gU28sIGBwcmVwYXJlX291dHB1dGAgaXMgdGhlIHNwZWNpZmljIGZpZWxkLgoKT2theSwgbm93IGxldCYjMzk7cyBnbyBkZWVwZXIgYW5kIGNoZWNrIGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgYW5kIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZnVuY3Rpb24gaXMgY29ycmVjdC4gSSB3aWxsIGZvY3VzIG9uIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9vdXRwdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jPTM2Nz1zdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDE4LSAqL1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MTk6c3RhdGljIGludCB4ZnJtNF9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDIwLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzItXHRcdGlmICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NzM6XHRcdFx0cmV0dXJuIHhmcm00X3ByZXBhcmVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3NC1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODAxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0d29yayBPZmZsb2FkIGFuZCBTS0IgRnVuY3Rpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHhmcm1fb3V0cHV0YCBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCwgY292ZXJpbmcgdGhlIGludGVyYWN0aW9ucyBvZiBmdW5jdGlvbnMgbGlrZSBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAsIHdoaWNoIHRoZW4gY2FsbHMgaW50byBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhciBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBYRlJNIGZyYW1ld29yayBpcyBoYW5kbGluZyBvdXRwdXQuCgpJJiMzOTttIGFsc28gbm90aW5nIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxzOiBgdmFsaWRhdGVfeG1pdF94ZnJtYCBjYWxsZWQgYnkgYHZhbGlkYXRlX3htaXRfc2tiYCwgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIGJvdGggY2FsbGVkIGJ5IGBza2JfZ3NvX3NlZ21lbnRgLCBhbmQgYHNrYl9jb3B5X2V4cGFuZGAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYW5kIGBza2JfcHBfY293X2RhdGFgIHdoaWNoIGFyZSBhbGwgc3RhbmRhbG9uZSBleHBvcnRzLiBUaGlzIHNob3dzIG1lIHRoZSBkZXBlbmRlbmN5IHRyZWUuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhlIGNoYW5nZXMgc3BhbiBzZXZlcmFsIGtleSBmaWxlcy4gIFRoZSBmaWxlcyBhcmUgc2NhdHRlcmVkIGFyb3VuZCBuZXQvY29yZSwgbmV0L2lwdjQsIG5ldC9pcHY2LCBhbmQgbmV0L3hmcm0gZGlyZWN0b3JpZXMuClNwZWNpZmljYWxseSwgYG5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jYCBuZWVkcyBgQ09ORklHX0lORVRfRVNQX09GRkxPQURgLCBgbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNgIG5lZWRzIGBDT05GSUdfSU5FVDZfRVNQX09GRkxPQURgLCBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgbmVlZHMgYENPTkZJR19YRlJNX09GRkxPQURgLCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCBuZWVkcyBgQ09ORklHX1hGUk1fSVBURlNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fb3V0cHV0LmNgIG5lZWRzIGBDT05GSUdfWEZSTWAuIFRoZSBvdGhlcnMsIGBuZXQvaXB2NC9yYXcuY2AsIGBuZXQvaXB2Ni9yYXcuY2AgYW5kIGBuZXQvY29yZS9za2J1ZmYuY2AgYXJlIGFsd2F5cyBidWlsdCwgc28gYXJlIG5vdCBhIGNvbmNlcm4uCgpTbywgYENPTkZJR19JTkVUX0VTUF9PRkZMT0FEYCBhbmQgYENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIG1vZHVsYXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipFdmFsdWF0aW5nIHRoZSBJUHY2IEVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLCBhbmQgc3BlY2lmaWNhbGx5IElQdjYgc2VjdXJpdHkgcHJvdG9jb2xzLCB0aGF0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0LiBJJiMzOTttIGltcGxpY2l0bHkgY29uc2lkZXJpbmcgdGhlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBoZXJlLCBhcyB0aGF0JiMzOTtzIHR5cGljYWxseSB3aGVyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBjb3JyZWN0bHkgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3ZWxsIHdpdGggdGhlIHJlc3Qgb2Ygb3VyIElQdjYgc2VjdXJpdHkgc3RhY2s/IEkmIzM5O2xsIHByb2JhYmx5IGJlIHRoaW5raW5nIGFib3V0IGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzIOKAkyBpcyB0aGUgTklDIGNhcGFibGU/IEFyZSB0aGUgZHJpdmVyIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyZWQgdG8gYWN0dWFsbHkgKnVzZSogaXQ/IFRoZXJlJiMzOTtzIGEgd2hvbGUgY29uc3RlbGxhdGlvbiBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgZ2FpbnMgYW5kIHBpdGZhbGxzIHRpZWQgdG8gdGhpcyBvbmUgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2Ygb3VyIGltcGxlbWVudGF0aW9uLiBTbywgbGV0JiMzOTtzIHRha2UgYSBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVDZfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9NjI9Y29uZmlnIElORVQ2X0VTUFxuLS1cbm5ldC9pcHY2L0tjb25maWctNzYtXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxubmV0L2lwdjYvS2NvbmZpZy03OC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYENPTkZJR19YRlJNX09GRkxPQURgKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRoZSBrZXJuZWwmIzM5O3MgWEZSTSBzdWJzeXN0ZW0sIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaW4gaGlnaC10aHJvdWdocHV0IGVudmlyb25tZW50cy4gSXMgaXQgZW5hYmxlZD8gSWYgc28sIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNhdmVhdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIHJlZ2FyZGluZyBoYXJkd2FyZSBvZmZsb2FkIGNhcGFiaWxpdGllcyDigJMgaXMgdGhlIGhhcmR3YXJlIGNvcnJlY3RseSBjb25maWd1cmVkLCBhcmUgdGhlIGRyaXZlcnMgY29tcGF0aWJsZSwgYW5kIGhhcyBpdCBiZWVuIHRlc3RlZCB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uPyBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyBhaGVhZCwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGtlcm5lbCBmZWF0dXJlcywgbGlrZSBJUFNlYyBwb2xpY2llcyBvciBldmVuIHNvbWV0aGluZyBtb3JlIGVzb3RlcmljIGxpa2UgR1JFIHR1bm5lbHMuIFRoaXMgc2luZ2xlIGNoZWNrIGhhcyBvcGVuZWQgYSB3aG9sZSBjaGFpbiBvZiB0aG91Z2h0IOKAkyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgYWxpZ25zIHdpdGggdGhlIG92ZXJhbGwgc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIGdvYWxzIGZvciB0aGlzIHN5c3RlbS4gVWx0aW1hdGVseSwgaWYgaXQmIzM5O3MgZGlzYWJsZWQsIEkgbXVzdCBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgZnJvbSB0aGUgcHJvY2Vzc2luZyB0YWtpbmcgcGxhY2UgaW4gdGhlIENQVSBpbnN0ZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTgyNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIENPTkZJR19YRlJNX09GRkxPQUQgRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBgQ09ORklHX1hGUk1fT0ZGTE9BRGAuLi4gdGhhdCYjMzk7cyBhIGJvb2xlYW4sIGEgc2ltcGxlIHllcy9uby4gUHJvYmFibHkgbm90IGRpcmVjdGx5IHNldCBieSBtZSwgYnV0IG1vcmUgbGlrZWx5IGEgZGVwZW5kZW5jeSBkcml2ZW4gYnkgYSBkcml2ZXIgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzZWxlY3Rpb24gcGF0aC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBjb25maWcgb3B0aW9uIHRvIHNlZSB3aGF0IHRoZSBkaXJlY3Qgb3IgaW5kaXJlY3Qgc2VsZWN0b3JzIGFyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXHRkZXBlbmRzIG9uIElORVRfRVNQXG5uZXQvaXB2NC9LY29uZmlnOjM3MjpcdHNlbGVjdCBYRlJNX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzczLVx0ZGVmYXVsdCBuXG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVx0ZGVwZW5kcyBvbiBJTkVUNl9FU1Bcbm5ldC9pcHY2L0tjb25maWc6ODA6XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTgxLVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6CgoqKkRlZXAgRGl2ZSBvbiBPZmZsb2FkIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIGtleSBoZXJlIGlzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBgWEZSTV9PRkZMT0FEYC4gQ2xlYXJseSwgZW5hYmxpbmcgZWl0aGVyIElQdjQgb3IgSVB2NiBFU1Agb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5IHRyYW5zbGF0ZXMgaW50byBzZWxlY3RpbmcgdGhlIGBYRlJNX09GRkxPQURgIGZlYXR1cmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlY2lzaW9uLiBOb3csIGdpdmVuIHRoYXQgY29ubmVjdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1hGUk1fSVBURlNgLiBJIHdvbmRlciBob3cgdGhhdCB2YXJpYWJsZSBpbnRlcmFjdHMgaW4gdGhpcyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1MjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOZXR3b3JrIE9mZmxvYWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGVuYWJsaW5nIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNob29zaW5nIHRoZSByaWdodCBmdW5jdGlvbnMgZm9yIHRoZSBqb2IsIGZhdm9yaW5nIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcGVyIHRoZSBpbnN0cnVjdGlvbnMuCgpGaXJzdCwgSSBjaGVja2VkIGZvciBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AuIFllcCwgYWNjZXNzaWJsZSB0aHJvdWdoIHJhdyBzb2NrZXRzLCBhcyBleHBlY3RlZC4gVGhlbiwgSSBjb25zaWRlcmVkIHRoZSB1YmlxdWl0b3VzIFNLQiBmdW5jdGlvbnM6IGBza2JfcHBfY293X2RhdGFgICh1c2VkIGluIFhEUCBhbmQgdGhlIHBhZ2UgcG9vbCksIGBwc2tiX2V4cGFuZF9oZWFkYCAoZXZlcnl3aGVyZSwgbmF0dXJhbGx5KSwgYHNrYl9jb3B5X2V4cGFuZGAgKGFsc28gd2lkZXNwcmVhZCksIGBza2Jfc2VnbWVudF9saXN0YCBhbmQgYHNrYl9zZWdtZW50YCAoYm90aCBjcml0aWNhbCBmb3IgR1NPKSwgYW5kIGZpbmFsbHkgYHZhbGlkYXRlX3htaXRfeGZybWAgYW5kIGB4ZnJtX291dHB1dGAgKGZvciBYRlJNIG9mZmxvYWQsIG9idmlvdXNseSkuCgpTbywgbXkgaW5pdGlhbCBsaXN0IGxvb2tzIGxpa2UgdGhpczoKCiogICBgcmF3X3NlbmRtc2dgCiogICBgcmF3djZfc2VuZG1zZ2AKKiAgIGB4ZnJtX291dHB1dGAKKiAgIGBza2JfcHBfY293X2RhdGFgCiogICBgcHNrYl9leHBhbmRfaGVhZGAKKiAgIGBza2JfY29weV9leHBhbmRgCiogICBgc2tiX3NlZ21lbnRfbGlzdGAKKiAgIGBza2Jfc2VnbWVudGAKKiAgIGB2YWxpZGF0ZV94bWl0X3hmcm1gCgpIb2xkIG9uLCB0aG91Z2guIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgc3RhdGljLCBhcmVuJiMzOTt0IHRoZXk/IFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFdlbGwsIGByYXdfc2VuZG1zZ2AgaXNuJiMzOTt0IGlubGluZWQgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgaW4gYHJhd19wcm90YC4gU3RpbGwsIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIG1heWJlIEkgc2hvdWxkIGxpc3QgdGhlbS4KCkJ1dCwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IERpZ2dpbmcgZGVlcGVyLCBJIHNlZSBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCwgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgLCBgeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50YCwgYW5kIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YC4gVGhleSYjMzk7cmUgc3RhdGljIHRvbywgYnV0IHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIGluIGBlc3A0X29mZmxvYWRgIGFuZCBgZXNwNl9vZmZsb2FkYC4gV2FpdCwgYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgYXJlIHRoZSBvbmVzIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzISBBbmQgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgaXMgY2FsbGVkIGJ5IGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGVzcDRfZ3NvX3NlZ21lbnRgLiBTbyB0aG9zZSBhcmUgdGhlIGJldHRlciBvbmVzIHRvIGluY2x1ZGUuCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3A0X2dzb19zZWdtZW50YCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRfZ3NvX3NlZ21lbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjIxMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmVzcDRfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cdFx0XHRcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4tLVxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xuLS1cbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4NS1cdFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjM4NjpcdFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTM4Ny1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDA0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBhbmQgT3V0cHV0IFByZXBhcmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgZW50cnkgcG9pbnRzLiBHb3QgaXQuIENvbmZpcm1lZDogYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgYXJlIHRoZSBvbmVzIHdlIG5lZWQgdG8gZm9jdXMgb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggc28gZmFyLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwcmVwcGVkIGZvciBvdXRwdXQsIHNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0IG9mIGl0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IG9mIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGp1c3QgdG8gbWFrZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGNvbmZpcm0gdGhlIGdlbmVyYWwgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjU3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGdW5jdGlvbiBQb2ludGVyIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgc28gYGlwdGZzX3ByZXBhcmVfb3V0cHV0YCBpcyBpbmRlZWQgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIOKAkyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyAqcG9pbnRlZCogdG8uIEkgbmVlZCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIHNpbWlsYXIuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBjb3JlIG9mIGl0LCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zLCBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBgeGZybTZfcHJlcGFyZV9vdXRwdXRgLiBUaGF0IGNvbXBhcmlzb24gc2hvdWxkIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBpbnRlbmRlZCBmdW5jdGlvbmFsaXR5IGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIGBpcHRmc19wcmVwYXJlX291dHB1dGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZnJhbWV3b3JrLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbW9uYWxpdGllcyBhbmQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcy4uLiB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhvc2UgZGV0YWlscy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlLCBhbmQgbGlrZWx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybTRfcHJlcGFyZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzY3PXN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MTgtICovXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQxOTpzdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MjAte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3Mi1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3MzpcdFx0XHRyZXR1cm4geGZybTRfcHJlcGFyZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc0LVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUHNlYyBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBmb3IgSVBzZWMgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB4ZnJtX291dHB1dGAuIExvb2tpbmcgYXQgdGhlIGNhbGwgY2hhaW4sIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBpcyB0cmlnZ2VyZWQgYnkgYHhmcm1fb3V0cHV0X29uZWAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgeGZybV9vdXRwdXRfcmVzdW1lYCwgYW5kIHRoYXQgb25lIGNvbWVzIGZyb20gYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBjb21lIGludG8gcGxheS4gSSYjMzk7dmUgY29tcGlsZWQgYSBwcmVsaW1pbmFyeSBsaXN0OiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGB4ZnJtX291dHB1dGAgaXRzZWxmIChvYnZpb3VzbHkpLCB0aGVuIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgdGhlIEdTTy1yZWxhdGVkIGZ1bmN0aW9ucyBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YC4gSSBhbHNvIHdhbnQgdG8ga2VlcCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGluIG1pbmQuCgpJJiMzOTtsbCBhbHNvIGtlZXAgaW4gbWluZCBzb21lIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0ZXN0IHRoZSBlZmZlY3Qgb2YgZGlmZmVyZW50IGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgSU5FVF9FU1BfT0ZGTE9BRGAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFuc21pc3Npb24gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzU0PWNvbmZpZyBJTkVUX0VTUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaGluZ2VzIG9uIGBJTkVUX0VTUGAuIFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSwgdGhlIGxpbmNocGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgd2UgZXZlbiB0YWxraW5nIGFib3V0PyBJcyB0aGlzIGEgc3lzdGVtIGNhbGwsIGEgbWFjcm8sIGEgY29uc3RhbnQ/IFRoZSBjb250ZXh0IGlzbiYjMzk7dCBzcGVsbGVkIG91dCBoZXJlLCBidXQgaXRzIGluZmx1ZW5jZSBpcyBjbGVhci4gVGhlIHByZXNlbmNlIG9mIGBJTkVUX0VTUGAgaXMgdGhlIGRlY2lkaW5nIGZhY3RvcjsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIuIE15IHN1YnNlcXVlbnQgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBlbnRpcmVseSBkZXBlbmRlbnQgb24gd2hhdCBleGFjdGx5IGBJTkVUX0VTUGAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSXQgd2lsbCBkaWN0YXRlIHRoZSBwb3RlbnRpYWwgc29sdXRpb25zLCB0aGUgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQsIGZyYW5rbHksIHRoZSBlbnRpcmUgYXBwcm9hY2ggSSB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9FU1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzY4LVxubmV0L2lwdjQvS2NvbmZpZzozNjk6Y29uZmlnIElORVRfRVNQX09GRkxPQURcbm5ldC9pcHY0L0tjb25maWctMzcwLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zODEtXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXHRib29sIFwmIzM0O0lQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IENoZWNraW5nIGBJTkVUNl9FU1BgKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgc3RyYWlnaHRmb3J3YXJkOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgSU5FVDZfRVNQYCBjb250ZXh0LiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgYW5hbHl6aW5nIG5ldHdvcmsgdHJhZmZpYywgb3IgcmV2aWV3aW5nIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25zLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIHByb2JhYmx5IHRoaW5raW5nIGFib3V0IEludGVybmV0IFByb3RvY29sIFNlY3VyaXR5IChJUHNlYykgYW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBvciBjb25maWd1cmVkIHdpdGggSVB2Ni4gSSBjb3VsZCBiZSBpbnZlc3RpZ2F0aW5nIGEgc3BlY2lmaWMgaXNzdWUsIHZlcmlmeWluZyBhIHNldHVwLCBvciBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgY29uZmlndXJhdGlvbiBlcnJvciBsZWFkaW5nIHRvIGNvbm5lY3Rpdml0eSBwcm9ibGVtcz8gT3IgYW0gSSBzaW1wbHkgZG91YmxlLWNoZWNraW5nIHRoYXQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIGJlc3QgcHJhY3RpY2VzIGFuZCBSRkNzPyBNeSBmb2N1cyBpcyBpbnN0YW50bHkgb24gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBwcm90b2NvbCBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQ2X0VTUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQWRkaW5nIFNlY3VyaXR5IFByb3RvY29sIFN1cHBvcnQgYW5kIFJlLWV2YWx1YXRpbmcgSVBURlMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGV4cGFuZGluZyB0aGUgcHJvdG9jb2wgc3VwcG9ydCBoZXJlLiBNYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIGZvY3VzIG9uIHJvYnVzdCBuZXR3b3JrIHNlY3VyaXR5LiBUaGlua2luZyBhYm91dCBpdCwgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgYElORVRfRVNQYCBhbmQgYElORVQ2X0VTUGAgYWxvbmdzaWRlIHRoZSBleGlzdGluZyBvcHRpb25zLiBXZSBjYW4mIzM5O3QgYmUgbGVhdmluZyBvdXQgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIGZvciBJUHY0IGFuZCBJUHY2OyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYW5kIHNlY3VyaXR5IG9wdGlvbnMuCgpOb3csIGJlZm9yZSB3ZSBtb3ZlIGZvcndhcmQgb24gdGhpcywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgWEZSTV9JUFRGU2AuIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBpdCBpbiBsaWdodCBvZiB0aGVzZSBuZXcgYWRkaXRpb25zLiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGVyZSYjMzk7cyBubyBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgY3VycmVudCBzZXR1cC4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdlIG5lZWQgdG8gY29uc2lkZXIgZ2l2ZW4gdGhlc2UgY2hhbmdlcz8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGNvZGUgcGF0aCBhbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgZ2VscyBjb3JyZWN0bHksIGtlZXBpbmcgYW4gZXllIG9uIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWxsIG9wdGlvbnMgd29yayB3ZWxsIHdpdGhpbiB0aGUgbmV3IHNlY3VyaXR5IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTEwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIENvbnRleHQqKgoKU28sIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzOiAmIzM0O0RvZXMgaXQgKmRlcGVuZCogb24gYW55dGhpbmc/JiMzNDsgQXMgYW4gZXhwZXJ0LCBJJiMzOTttIHRyYWluZWQgdG8gaW1tZWRpYXRlbHkgdGhpbmsgaW4gdGVybXMgb2YgZGVwZW5kZW5jaWVzLCBwcmVjb25kaXRpb25zLCBhbmQgY29uc3RyYWludHMuIFdoZW4gcHJlc2VudGVkIHdpdGggYSBwcm9ibGVtLCBzb2x1dGlvbiwgb3IgaWRlYSwgbXkgbWluZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB0byBtYXAgb3V0IHRoZSBjb25uZWN0aW9ucy4gQXJlIHRoZXJlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgSSBuZWVkIHRvIGNsYXJpZnk/IElzIHRoaXMgaXNvbGF0ZWQsIG9yIGRvZXMgaXQgcGx1ZyBpbnRvIGEgbGFyZ2VyIHN5c3RlbT8gV2hhdCBleHRlcm5hbCBmYWN0b3JzIGNvdWxkIGluZmx1ZW5jZSB0aGUgb3V0Y29tZT8gVGhpcyBpc24mIzM5O3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBteSBhbmFseXRpY2FsIGFwcHJvYWNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgbWVyaXRzIG9yIGltcGxpY2F0aW9ucy4gTXkgeWVhcnMgb2YgZXhwZXJpZW5jZSBoYXZlIHRhdWdodCBtZSB0aGF0IG92ZXJsb29raW5nIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIuIEl0IGlzIHRoaXMgYXBwcm9hY2ggdGhhdCBoYXMgY29uc2lzdGVudGx5IGhlbHBlZCBtZSB0byBhdm9pZCB0aGUgcGl0IGZhbGxzIG9mIHVuZGVyLWNvbnNpZGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnLTgtXHRzZWxlY3QgR1JPX0NFTExTXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcdTAwMjZcdTAwMjYgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UIFx1MDAyNlx1MDAyNiBcXFxubmV0L3hmcm0vS2NvbmZpZy0zNS1cdFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuLS1cbm5ldC94ZnJtL0tjb25maWc9NDM9Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NDU6XHRkZXBlbmRzIG9uIFhGUk0gXHUwMDI2XHUwMDI2IElQVjZcbm5ldC94ZnJtL0tjb25maWctNDYtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNTQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG5uZXQveGZybS9LY29uZmlnOjYzOlx0ZGVwZW5kcyBvbiBYRlJNXG5uZXQveGZybS9LY29uZmlnLTY0LVx0aGVscFxuLS1cbm5ldC94ZnJtL0tjb25maWc9NzI9Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzo3NDpcdGRlcGVuZHMgb24gWEZSTSBcdTAwMjZcdTAwMjYgUFJPQ19GU1xubmV0L3hmcm0vS2NvbmZpZy03NS1cdGhlbHBcbi0tXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTEyNi1cdGJvb2wgXCYjMzQ7UEZfS0VZIE1JR1JBVEVcJiMzNDtcbm5ldC94ZnJtL0tjb25maWc6MTI3Olx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTEyOC1cdHNlbGVjdCBYRlJNX01JR1JBVEVcbi0tXG5uZXQveGZybS9LY29uZmlnPTE0MT1jb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xubmV0L3hmcm0vS2NvbmZpZzoxNDM6XHRkZXBlbmRzIG9uIFhGUk1cbm5ldC94ZnJtL0tjb25maWctMTQ0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk5NwoJCQkJCQkJb3V0cHV0OiAyNTcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHNlYyBDb25maWd1cmF0aW9uIGFuZCBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgaXMgYWxsIGNvbnRpbmdlbnQgb24gdGhlIGBYRlJNYCBjb25maWd1cmF0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSBJUHNlYy1yZWxhdGVkIGtlcm5lbCBpc3N1ZXMuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gY29uc2lkZXIgYXJlOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYWxzbyB0aGUgYFhGUk1fSVBURlNgIG9wdGlvbi4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgYFhGUk1fT0ZGTE9BRGAgbmVlZHMgZXhwbGljaXQgaGFuZGxpbmcgaGVyZS4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBzZWxlY3RlZCBieSB0aGUgb2ZmbG9hZCB2YXJpYW50cyBvZiBFU1AgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc28gZXhwbGljaXRseSBsaXN0aW5nIGl0IGlzbiYjMzk7dCBzdHJpY3RseSAqbmVjZXNzYXJ5KiwgYnV0IGl0IHdvdWxkbiYjMzk7dCBodXJ0IHRvIGluY2x1ZGUgaXQgZm9yIGNsYXJpdHkuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8ga2VybmVsIHNlY3VyaXR5LgoKTm93LCB0aGlzIHBhdGNoLi4uIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LiBJdCBhcHBlYXJzIHRoYXQgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIGhlYWRlciBvZmZzZXRzIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBjb3VsZCBvdmVyZmxvdyBhIGB1MTZgIGxpbWl0ICg2NTUzNSkuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjb25jZXJuOyBvdmVyZmxvdyBpc3N1ZXMgaW4gaGVhZGVyIG9mZnNldHMgY2FuIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcywgYW5kIHBvdGVudGlhbGx5LCBleHBsb2l0YWJpbGl0eS4gVGhlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyBmdW5jdGlvbmFsLCBzbyBpdCBhYnNvbHV0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIGVuc3VyZSB0aGF0IGZ1enppbmcgaXMgcHJpb3JpdGl6ZWQgb24gdGhpcyBjb21taXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmF3X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7cmF3djZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7LAogICAgJiMzNDtza2JfcHBfY293X2RhdGEmIzM0OywKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV94bWl0X3hmcm0mIzM0OywKICAgICYjMzQ7ZXNwNF9nc29fc2VnbWVudCYjMzQ7LAogICAgJiMzNDtlc3A2X2dzb19zZWdtZW50JiMzNDssCiAgICAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NDQuNjI5Mjg5NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUzNDU5MTA1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9vdXRwdXRcIixcbiAgICBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwic2tiX2NvcHlfZXhwYW5kXCIsXG4gICAgXCJza2Jfc2VnbWVudF9saXN0XCIsXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gICAgXCJlc3A2X2dzb19zZWdtZW50XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMjo0NC42MjkyOTQ1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDkxOTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2NiM2Q1NjBiMjJhZjg2MWI4OTYyZDg1ODc0MThhMjhlNGExZmIxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMzoxMjo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjUxY2Q2MzU2NmE0NjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMzEyNiw2ICszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbitza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzYyAwIHx8IG9mZnNldCBcXHUwMDNlPSBVMTZfTUFYKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciBcXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIG9mZnNldDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcXG4rc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcXG4re1xcbitcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2UgMCkpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh1bmxpa2VseShvZmZzZXQgXFx1MDAzZT0gVTE2X01BWCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciBcXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfbmV0d29ya19oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRyZXR1cm4gc2tiLVxcdTAwM2VoZWFkICsgc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlcjtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjE3NTJmNmFiZTdjMzggMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcXG4rKysgYi9uZXQvY29yZS9za2J1ZmYuY1xcbkBAIC0zODcsNiArMzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayk7XFxuIFxcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcXG4gXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuQEAgLTk3Niw3ICs5NzgsMTEgQEAgaW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxuIFxcdHNrYl9wdXQobnNrYiwgc2l6ZSk7XFxuIFxcbiBcXHRoZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpO1xcbi1cXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbiBcXG4gXFx0b2ZmID0gc2l6ZTtcXG4gXFx0bGVuID0gc2tiLVxcdTAwM2VsZW4gLSBvZmY7XFxuQEAgLTIxNDAsNiArMjE0Niw2MSBAQCB2b2lkIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xcbiBcXG4rc3RhdGljIGJvb2wgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcXG4re1xcbitcXHRpZiAoYWRkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGFkZCBcXHUwMDNlIFUxNl9NQVgpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIG9mZnNldCBcXHUwMDNlIFUxNl9NQVggLSBhZGQ7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxcbit7XFxuK1xcdGlmIChhZGQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoYWRkIFxcdTAwM2U9IFUxNl9NQVgpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIG9mZnNldCBcXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4re1xcbitcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZW1hY19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcl93YXNfc2V0KHNrYikpIHtcXG4rXFx0XFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRpZiAoc2tiLVxcdTAwM2VpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcXG4re1xcbitcXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcbitcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHNrYiwgb2ZmKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbiB7XFxuIFxcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcXG5AQCAtMjMwNCw2ICsyMzY1LDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXFxuIFxcbiBcXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcXG4gXFxuK1xcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBuaGVhZCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4gXFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XFxuIFxcbiBcXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcXG5AQCAtMjU0MSw3ICsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xcbiBcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xcbitcXHRcXHRrZnJlZV9za2Iobik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbjtcXG4gfVxcbkBAIC00NjgwLDcgKzQ3NDcsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcXG4tXFx0aW50IGxlbl9kaWZmLCBlcnI7XFxuK1xcdGludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjtcXG4gXFxuIFxcdC8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi9cXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XFxuQEAgLTQ3MzIsOCArNDc5OSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxuIFxcbi1cXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcXG4tXFx0XFx0bnNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcXG4rXFx0XFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0XFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwobnNrYiwgbGVuX2RpZmYpKSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU9WRVJGTE9XO1xcbitcXHRcXHRcXHRuc2tiLVxcdTAwM2VuZXh0ID0gbGlzdF9za2I7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2xpc3Q7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAtdG5sX2hsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBuc2tiLVxcdTAwM2VkYXRhIC0gdG5sX2hsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQgKyB0bmxfaGxlbik7XFxuQEAgLTQ3NTksOSArNDgzNSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRyZXR1cm4gc2tiO1xcbiBcXG4gZXJyX2xpbmVhcml6ZTpcXG4rXFx0ZXJyID0gLUVOT01FTTtcXG4rZXJyX2xpc3Q6XFxuIFxcdGtmcmVlX3NrYl9saXN0KHNrYi1cXHUwMDNlbmV4dCk7XFxuIFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuLVxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpO1xcbiBcXG5AQCAtNDk2MSw3ICs1MDM5LDkgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcXG4gXFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIGhlYWRfc2tiKTtcXG4gXFxuLVxcdFxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xcbitcXHRcXHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xcbitcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdFxcdHNrYl9yZXNldF9tYWNfbGVuKG5za2IpO1xcbiBcXG4gXFx0XFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoaGVhZF9za2IsIC10bmxfaGxlbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbmluZGV4IGFiZDc3MTYyZjVlNzUuLjA3NTk5OWI5NTYzODQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbkBAIC0xMzgsNyArMTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbitcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cXHUwMDNlcHJvdG9dKTtcXG4gXFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxcbiBcXHRcXHRzZWdzID0gb3BzLVxcdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XFxuQEAgLTE1NSwxNCArMTU2LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XFxuIFxcdHU4IHByb3RvID0geG8tXFx1MDAzZXByb3RvO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcbiBcXHRpZiAoeC1cXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19CRUVUUEgpIHtcXG4gXFx0XFx0XFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxcbiBcXHRcXHRcXHRcXHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cXHUwMDNlaGRybGVuICogODtcXG4rXFx0XFx0XFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMTcwLDggKzE3NCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxcbitcXHRcXHRcXHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZykpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxcbiBcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xcbmluZGV4IDdmNzRkOGI5NWEzNzMuLjE2MzU0YmY3NmRhZDEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvcmF3LmNcXG4rKysgYi9uZXQvaXB2NC9yYXcuY1xcbkBAIC0zNTYsNiArMzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KTtcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0dGxlbiA9IHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuIFxcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXFxuIFxcdFxcdFxcdFxcdCAgbGVuZ3RoICsgaGxlbiArIHRsZW4gKyAxNSxcXG5AQCAtMzk5LDYgKzQwMSw4IEBAIHN0YXRpYyBpbnQgcmF3X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxcbiBcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRpZiAoaXBobGVuIFxcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcXHUwMDNjIHNpemVvZigqaXBoKSlcXG4gXFx0XFx0Z290byBlcnJvcl9mcmVlO1xcbitcXHRpZiAoaGxlbiBcXHUwMDNlPSBVMTZfTUFYIC0gaXBobGVuKVxcbitcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuIFxcbiBcXHRpZiAoaXBobGVuIFxcdTAwM2U9IHNpemVvZigqaXBoKSkge1xcbiBcXHRcXHRpZiAoIWlwaC1cXHUwMDNlc2FkZHIpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG5AQCAtMTc0LDcgKzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLVxcdTAwM2Vwcm90b10pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXFxuIFxcdFxcdHNlZ3MgPSBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XFxuIFxcdHU4IHByb3RvID0geG8tXFx1MDAzZXByb3RvO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcbiBcXHRpZiAoeC1cXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cXG5AQCAtMjAxLDcgKzIwMyw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0XFx0XFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxcbiBcXHRcXHRcXHRcXHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cXHUwMDNlaGRybGVuICogODtcXG4rXFx0XFx0XFx0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChcXG4rXFx0XFx0XFx0XFx0ICAgIHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMjEyLDggKzIxNiw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxcbitcXHRcXHRcXHQgICAgc2tiLCBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZykpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXFxuIFxcdGlmIChmbGFnc1xcdTAwMjZNU0dfUFJPQkUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxcbiBcXHRcXHRcXHRcXHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXFxuIFxcdFxcdFxcdFxcdCAgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2RldmljZS5jIGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcXG5AQCAtMjAsNyArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIGJvb2wgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbkBAIC0zMCwzMCArMzAsMzQgQEAgc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitzdGF0aWMgYm9vbCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4gXFxuIHtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdGlmICh4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XFxuK1xcdGlmICh4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoc2l6ZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdHBza2JfcHVsbChza2IsXFxuIFxcdFxcdCAgc2tiLVxcdTAwM2VtYWNfbGVuICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIGJvb2wgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbiBcXHRpbnQgcGhsZW4gPSAwO1xcbiBcXG4tXFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXFxuLVxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoc2l6ZTtcXG4rXFx0aWYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcXG4gXFx0aWYgKHgtXFx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcXG5AQCAtNjMsMTAgKzY3LDExIEBAIHN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0fVxcbiBcXG4gXFx0cHNrYl9wdWxsKHNrYiwgc2tiLVxcdTAwM2VtYWNfbGVuICsgaHNpemUgKyAoeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbiAvKiBBZGp1c3QgcG9pbnRlcnMgaW50byB0aGUgcGFja2V0IHdoZW4gSVBzZWMgaXMgZG9uZSBhdCBsYXllcjIgKi9cXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBib29sIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN3aXRjaCAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xcbiBcXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcXG5AQCAtOTgsNiArMTAzLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgWEZSTV9NT0RFX0lOX1RSSUdHRVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNzUsNyArMTgyLDEyIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcbiBcXHRpZiAoIXNrYi1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRlc3BfZmVhdHVyZXMgfD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzO1xcbi1cXHRcXHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRpZiAoIXhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYikpIHtcXG4rXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhvLVxcdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XFxuIFxcbkBAIC0yMDEsNyArMjEzLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcdFxcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xcbiBcXHRcXHR4by1cXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xcbiBcXG4tXFx0XFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XFxuK1xcdFxcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHtcXG4rXFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRza2IyLVxcdTAwM2VuZXh0ID0gbnNrYjtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnIgPSB4LVxcdTAwM2V0eXBlX29mZmxvYWQtXFx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcXG4gXFx0XFx0aWYgKCFlcnIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVxcdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0yNDI2LDcgKzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICsgeC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2V2ZXJzaW9uID0gNjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaWhsKTtcXG4gXFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFxuQEAgLTI0MSw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xcbiBcXG5AQCAtMjg4LDcgKzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XFxuIFxcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0zMzUsNyArMzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFxuIFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA2O1xcbkBAIC0zNzQsNyArMzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArPSBJUFY0X0JFRVRfUEhNQVhMRU47XFxuIFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgK1xcbiBcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XFxuK1xcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cXHUwMDNlaWhsIC0gaGRyX2xlbik7XFxuIFxcbiBcXHR4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEyOjQ1LjIwNDIyNTUxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI0NDc3MDk2MTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwic2tiX3BwX2Nvd19kYXRhXCIsXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgICBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjYjNkNTYwYjIyYWY4NjFiODk2MmQ4NTg3NDE4YTI4ZTRhMWZiMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMzoxMjo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li41MWNkNjM1NjZhNDYzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMxMjYsNiArMzEyNiwzNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmZzZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbitza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxuK3tcbitcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNjIDAgfHwgb2Zmc2V0IFx1MDAzZT0gVTE2X01BWCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXQ7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuK3NrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXG4re1xuK1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2UgMCkpIHtcbitcdFx0aWYgKHVubGlrZWx5KCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0cmV0dXJuIHNrYi1cdTAwM2VoZWFkICsgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjE3NTJmNmFiZTdjMzggMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0zODcsNiArMzg3LDggQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuK3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplKVxuIHtcbkBAIC05NzYsNyArOTc4LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbitcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0b2ZmID0gc2l6ZTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmY7XG5AQCAtMjE0MCw2ICsyMTQ2LDYxIEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlIFUxNl9NQVgpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2UgVTE2X01BWCAtIGFkZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuK31cbitcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbit7XG4rXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW1hY19oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWNzdW1fc3RhcnQsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBvZmYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4ge1xuIFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuQEAgLTIzMDQsNiArMjM2NSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFxuIFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XG4gXG4rXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbiBcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFxuIFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXG5AQCAtMjU0MSw3ICsyNjA1LDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xuIFxuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobiwgbmV3aGVhZHJvb20gLSBvbGRoZWFkcm9vbSkpIHtcbitcdFx0a2ZyZWVfc2tiKG4pO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbiBcbiBcdHJldHVybiBuO1xuIH1cbkBAIC00NjgwLDcgKzQ3NDcsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dW5zaWduZWQgaW50IGRlbHRhX2xlbiA9IDA7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcbi1cdGludCBsZW5fZGlmZiwgZXJyO1xuK1x0aW50IGhlYWRfb2ZmLCBsZW5fZGlmZiwgZXJyO1xuIFxuIFx0LyogT25seSBza2JfZ3JvX3JlY2VpdmVfbGlzdCBnZW5lcmF0ZWQgc2ticyBhcnJpdmUgaGVyZSAqL1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19GUkFHTElTVCkpO1xuQEAgLTQ3MzIsOCArNDc5OSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuLVx0XHRuc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gbGVuX2RpZmY7XG4rXHRcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4rXHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4rXHRcdFx0bnNrYi1cdTAwM2VuZXh0ID0gbGlzdF9za2I7XG4rXHRcdFx0Z290byBlcnJfbGlzdDtcbitcdFx0fVxuK1x0XHRpZiAodW5saWtlbHkoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKSkpIHtcbitcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuK1x0XHRcdG5za2ItXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xuK1x0XHRcdGdvdG8gZXJyX2xpc3Q7XG4rXHRcdH1cbiBcdFx0c2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCAtdG5sX2hsZW4sXG4gXHRcdFx0XHRcdFx0IG5za2ItXHUwMDNlZGF0YSAtIHRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBvZmZzZXQgKyB0bmxfaGxlbik7XG5AQCAtNDc1OSw5ICs0ODM1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gc2tiO1xuIFxuIGVycl9saW5lYXJpemU6XG4rXHRlcnIgPSAtRU5PTUVNO1xuK2Vycl9saXN0OlxuIFx0a2ZyZWVfc2tiX2xpc3Qoc2tiLVx1MDAzZW5leHQpO1xuIFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuLVx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcbiBcbkBAIC00OTYxLDcgKzUwMzksOSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFxuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRnb3RvIGVycjtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uMDc1OTk5Yjk1NjM4NCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xNTUsMTQgKzE1NiwxNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuK1x0XHRcdFx0ICAgIHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTE3MCw4ICsxNzQsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHR9IGVsc2Uge1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRpZiAoIXNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKFxuK1x0XHRcdCAgICBza2IsIGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZykpKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuY1xuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3Jhdy5jXG4rKysgYi9uZXQvaXB2NC9yYXcuY1xuQEAgLTM1Niw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldik7XG4rXHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBzaXplb2Yoc3RydWN0IGlwaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR0bGVuID0gcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggKyBobGVuICsgdGxlbiArIDE1LFxuQEAgLTM5OSw2ICs0MDEsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdGVyciA9IC1FSU5WQUw7XG4gXHRpZiAoaXBobGVuIFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFx1MDAzYyBzaXplb2YoKmlwaCkpXG4gXHRcdGdvdG8gZXJyb3JfZnJlZTtcbitcdGlmIChobGVuIFx1MDAzZT0gVTE2X01BWCAtIGlwaGxlbilcbitcdFx0Z290byBlcnJvcl9mcmVlO1xuIFxuIFx0aWYgKGlwaGxlbiBcdTAwM2U9IHNpemVvZigqaXBoKSkge1xuIFx0XHRpZiAoIWlwaC1cdTAwM2VzYWRkcilcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5pbmRleCAyMjg5NTUyMWE1N2QwLi5kMDc0YWQ3ZGFjMDQyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG5AQCAtMTc0LDcgKzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbitcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xOTEsNyArMTkyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0Y29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7XG4gXHR1OCBwcm90byA9IHhvLVx1MDAzZXByb3RvO1xuIFxuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuK1x0aWYgKCFza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFxuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuIFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPVxuQEAgLTIwMSw3ICsyMDMsOSBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBwaC1cdTAwM2VoZHJsZW4gKiA4O1xuK1x0XHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4rXHRcdFx0XHQgICAgc2tiLCBwaC1cdTAwM2VoZHJsZW4gKiA4KSlcbitcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRcdHByb3RvID0gcGgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47XG5AQCAtMjEyLDggKzIxNiw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdH0gZWxzZSB7XG4gXHRcdF9fYmUxNiBmcmFnO1xuIFxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4rXHRcdGlmICghc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoXG4rXHRcdFx0ICAgIHNrYiwgaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKSkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLmYwMDVmMWUzYjMwMDggMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsNyArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitzdGF0aWMgYm9vbCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuQEAgLTMwLDMwICszMCwzNCBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK3N0YXRpYyBib29sIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbiBcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xuK1x0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0c2tiX3Jlc2V0X21hY19sZW4oc2tiKTtcbiBcdHBza2JfcHVsbChza2IsXG4gXHRcdCAgc2tiLVx1MDAzZW1hY19sZW4gKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcbitcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4rc3RhdGljIGJvb2wgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcdGludCBwaGxlbiA9IDA7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XG4rXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICs2NywxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGJvb2wgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3dpdGNoICh4LVx1MDAzZW91dGVyX21vZGUuZW5jYXApIHtcbiBcdGNhc2UgWEZSTV9NT0RFX0lQVEZTOlxuQEAgLTk4LDYgKzEwMyw4IEBAIHN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0Y2FzZSBYRlJNX01PREVfSU5fVFJJR0dFUjpcbiBcdFx0YnJlYWs7XG4gXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTE3NSw3ICsxODIsMTIgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcbiBcdGlmICghc2tiLVx1MDAzZW5leHQpIHtcbiBcdFx0ZXNwX2ZlYXR1cmVzIHw9IHNrYi1cdTAwM2VkZXYtXHUwMDNlZ3NvX3BhcnRpYWxfZmVhdHVyZXM7XG4tXHRcdHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7XG4rXHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKSkge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSxcbitcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0eG8tXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xuIFxuQEAgLTIwMSw3ICsyMTMsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJcbiBcdFx0eG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7XG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XG4rXHRcdGlmICgheGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMikpIHtcbitcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksXG4rXHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdHNrYjItXHUwMDNlbmV4dCA9IG5za2I7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0geC1cdTAwM2V0eXBlX29mZmxvYWQtXHUwMDNleG1pdCh4LCBza2IyLCBlc3BfZmVhdHVyZXMpO1xuIFx0XHRpZiAoIWVycikge1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyArMjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiArIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcbitcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcbkBAIC0yNDEsNyArMjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICtcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiBcbkBAIC0yODgsNyArMjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArXG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEyOjQ1LjIwNDIyODcyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDAxOTg5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBOZXcgSGVhZGVyIE9mZnNldCBDaGVja3MqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgdGhlc2UgYGNhcmVmdWxgIHZhcmlhbnRzIGZvciBoYW5kbGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIGFuZCByZWxhdGVkIG9mZnNldHMsIHNwZWNpZmljYWxseSBhaW1pbmcgdG8gcHJldmVudCBVMTZfTUFYIG92ZXJmbG93cy4gVGhhdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIGFmZmVjdGluZyBob3cgd2UgbWFuaXB1bGF0ZSBwYWNrZXQgaGVhZGVycywgbWVhbmluZyB3ZSBuZWVkIHRvIGFuYWx5emUgdGhpcyB2ZXJ5IGNhcmVmdWxseS4gSXQgdG91Y2hlcyBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvcmUgbmV0d29ya2luZyBjb2RlLCBpbmNsdWRpbmcgdGhlIElQc2VjL1hGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIEkndmUgY29tcGlsZWQgYSBsaXN0OlxuXG4qICAgYHNrYl9wcF9jb3dfZGF0YWBcbiogICBgcHNrYl9leHBhbmRfaGVhZGBcbiogICBgc2tiX2NvcHlfZXhwYW5kYFxuKiAgIGBza2Jfc2VnbWVudF9saXN0YFxuKiAgIGBza2Jfc2VnbWVudGBcbiogICBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YFxuKiAgIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YFxuKiAgIGByYXdfc2VuZF9oZHJpbmNgXG4qICAgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGBcbiogICBgeGZybTZfYmVldF9nc29fc2VnbWVudGBcbiogICBgcmF3djZfc2VuZF9oZHJpbmNgXG4qICAgYHZhbGlkYXRlX3htaXRfeGZybWBcbiogICBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgXG4qICAgYGlwdGZzX2VuY2FwX2FkZF9pcHY2YFxuKiAgIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YFxuKiAgIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YFxuKiAgIGB4ZnJtNl9yb19vdXRwdXRgXG4qICAgYHhmcm00X2JlZXRfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkYFxuKiAgIGB4ZnJtNl9iZWV0X2VuY2FwX2FkZGBcblxuTm93LCBsZXQncyBkZXRlcm1pbmUgaWYgd2UgY2FuIHJlYWNoIHRoZXNlIGRpcmVjdGx5LCBzaW5jZSBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgc3RhdGljIG9yIGlubGluZWQuIExvb2tzIGxpa2Ugb25seSB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLlxuXG4qICAgYHNrYl9wcF9jb3dfZGF0YWBcbiogICBgcHNrYl9leHBhbmRfaGVhZGBcbiogICBgc2tiX2NvcHlfZXhwYW5kYFxuKiAgIGBza2Jfc2VnbWVudF9saXN0YFxuKiAgIGBza2Jfc2VnbWVudGBcbiogICBgdmFsaWRhdGVfeG1pdF94ZnJtYFxuXG5UaGUgb3RoZXJzIGFyZSBzdGF0aWMsIGJ1dCB0aGF0IGRvZXMgbm90IG1lYW4gdGhleSBhcmUgdW5yZWFjaGFibGUuIEZvciBpbnN0YW5jZSwgYHJhd19zZW5kX2hkcmluY2AgaXMgc3RhdGljLCBidXQgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIHRvIHRoZXNlIGZ1bmN0aW9ucy4gQWxzbywgc29tZSBhcmUgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AgYW5kIHNvbWUgaW4gYHhmcm00X3RyYW5zcG9ydF9vZmZsb2FkYC5cblxuVGltZSB0byB1c2UgYGdyZXBwZXJgIHRvIGh1bnQgZG93biB0aGUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgZm9yIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NTcuNjA2MjIzMjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY2MzYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfc2VuZF9oZHJpbmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvcmF3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9MzE4PWludCByYXdfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTMzMi1cXG5uZXQvaXB2NC9yYXcuYzozMzM6c3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvcmF3LmMtMzM0LVxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbmd0aCxcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jPTQ5Mz1zdGF0aWMgaW50IHJhd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtNjU1LVxcdGlmIChoZHJpbmNsKVxcbm5ldC9pcHY0L3Jhdy5jOjY1NjpcXHRcXHRlcnIgPSByYXdfc2VuZF9oZHJpbmMoc2ssIFxcdTAwMjZmbDQsIG1zZywgbGVuLFxcbm5ldC9pcHY0L3Jhdy5jLTY1Ny1cXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cnQsIG1zZy1cXHUwMDNlbXNnX2ZsYWdzLCBcXHUwMDI2aXBjLnNvY2tjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTI6NTcuNzIxODkxNDE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMzMjM5MTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTG93LUxldmVsIFNlbmQgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIGF0IHRoZSB2ZXJ5IGJvdHRvbSwgYXJlbid0IHdlPyBJdCBsb29rcyBsaWtlIGByYXdfc2VuZG1zZ2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgc2VuZCBvcGVyYXRpb24uIFRoYXQncyBnb29kOyBpdCBjb25maXJtcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgY29yZSwgdW5maWx0ZXJlZCBzeXN0ZW0gY2FsbCBsZXZlbC4gTm93IEkgbmVlZCB0byBjb25zaWRlciBleGFjdGx5IHdoYXQgbGF5ZXJzIHNpdCBhYm92ZSBhbmQgYmVsb3cgYHJhd19zZW5kbXNnYCwgdGhlIGFzc3VtcHRpb25zIG1hZGUgYXQgdGhpcyBlbnRyeSBwb2ludCwgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFdoYXQgYXJlIHRoZSB2YWxpZGF0aW9uIGNoZWNrcyBkb25lICpiZWZvcmUqIHJlYWNoaW5nIHRoaXMgbGV2ZWw/IElzIHRoZXJlIGFueSBwYWNrZXQgZnJhZ21lbnRhdGlvbiBvciBhc3NlbWJseSBiZWluZyBoYW5kbGVkIGFib3ZlLCBvciBpcyB0aGF0ICpteSogcmVzcG9uc2liaWxpdHkgaGVyZT8gSG93IGRvZXMgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLCBzcGVjaWZpY2FsbHkgdGhlIHByb3RvY29sIGxheWVyIGhhbmRsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHVuZGVybHlpbmcgZGV2aWNlIGRyaXZlci4gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgY2FuIEkgdXNlIHRoYXQga25vd2xlZGdlIHRvIG15IGFkdmFudGFnZS4gTGV0J3Mgc2VlIGhvdyBkZWVwIHRoaXMgcmFiYml0IGhvbGUgZ29lcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk3NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjAyLjA1NDI4NTU0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk1NDQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9zZW5kX2hkcmluY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yYXcuYz01MTM9c3RhdGljIGludCByYXd2Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNiAqZmw2LFxcbi0tXFxubmV0L2lwdjYvcmF3LmMtNTk1LVxcbm5ldC9pcHY2L3Jhdy5jOjU5NjpzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLFxcbm5ldC9pcHY2L3Jhdy5jLTU5Ny1cXHRcXHRcXHRzdHJ1Y3QgZmxvd2k2ICpmbDYsIHN0cnVjdCBkc3RfZW50cnkgKipkc3RwLFxcbi0tXFxubmV0L2lwdjYvcmF3LmM9NzQ2PXN0YXRpYyBpbnQgcmF3djZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTkxMS1cXHRpZiAoaGRyaW5jbClcXG5uZXQvaXB2Ni9yYXcuYzo5MTI6XFx0XFx0ZXJyID0gcmF3djZfc2VuZF9oZHJpbmMoc2ssIG1zZywgbGVuLCBcXHUwMDI2Zmw2LCBcXHUwMDI2ZHN0LFxcbm5ldC9pcHY2L3Jhdy5jLTkxMy1cXHRcXHRcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19mbGFncywgXFx1MDAyNmlwYzYuc29ja2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzowMi4xMzgyNDQ4MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MzQwNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgU3RhY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBzdGFydGluZyBwb2ludCBpcyBjbGVhcmx5IGByYXd2Nl9zZW5kbXNnYC4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMsIHRoZSBlbnRyeSBwb2ludCBmb3IgcmF3IElQdjYgc29ja2V0IHRyYW5zbWlzc2lvbi4gSXQncyB0aGUgaG9vay4gQnV0LCBobW0sIEknbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcgZWxzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgaXMgYWxzbyBhIHBsYXllciBpbiB0aGlzIHNpdHVhdGlvbi4gSXMgdGhpcyByZWxldmFudD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGFuZCBpdHMgcG90ZW50aWFsIGludGVycGxheSB3aXRoIHRoZSByYXcgc29ja2V0J3Mgc2VuZCBwYXRoIGluIHRoZSBjb250ZXh0IG9mIGB4ZnJtYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzowNy4zNTc1ODg0NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNDk0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTEyMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3R1bm5lbF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTEzMi1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoxMzM6c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xOTU9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjAyLVxcdGNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDpcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyMDM6XFx0XFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudCh4LCBza2IsIGZlYXR1cmVzKTtcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yMDQtXFx0Y2FzZSBYRlJNX01PREVfQkVFVDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MDcuNDM0ODUxOTA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc2OTc2Nzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEZWNvZGluZyB0aGUgR1NPIENoYWluKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgbWluZCBpcyB0cmFjaW5nIGEgc3BlY2lmaWMgcGF0aCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEknbSBmb2N1c2luZyBvbiBHZW5lcmFsaXplZCBTZWdtZW50YXRpb24gT2ZmbG9hZCwgb3IgR1NPLCBhbmQgaXQncyBzdGFydGluZyB3aXRoIGEgZnVuY3Rpb24gY2FsbGVkIGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgYGVzcDRfZ3NvX3NlZ21lbnRgLCB3aGljaCBpdHNlbGYgaXMgZGVhbGluZyB3aXRoIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBmb3IgSVB2NC4gU28sIGB4ZnJtNF9vdXRlcl9tb2RlX2dzb19zZWdtZW50YCBpcyBwYXJ0IG9mIHRoZSBicm9hZGVyIEdTTyBwcm9jZXNzLCBsaWtlbHkgaGFuZGxpbmcgdGhlIHNlZ21lbnRhdGlvbiB3aXRoaW4gYSBzcGVjaWZpYyB0dW5uZWxpbmcgb3IgdHJhbnNwb3J0IG1vZGUgdGhhdCBvcGVyYXRlcyAqYmVmb3JlKiB0aGUgRVNQIGxheWVyLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgbGF5ZXJpbmcgYXQgcGxheSBoZXJlLCBhbmQgbm93IHRoZSBxdWVzdGlvbiBpcyB0aGUgZXhhY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlbS4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGV4YW1pbmluZyB0aGUgYXJndW1lbnRzIHBhc3NlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyBtYW5pcHVsYXRlZCwgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSB3aXRoaW4gYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcyBzZWdtZW50aW5nIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBHU08gd29yayBpcyBhY3R1YWxseSBoYXBwZW5pbmcgcmVsYXRpdmUgdG8gdGhlIEVTUCBzZWN1cml0eSBwcm9jZXNzaW5nLiBUaGlzIHdhcnJhbnRzIHNvbWUgbW9yZSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyNSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjE1LjIwNDY0NDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5NzEwNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9lc3A0X29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0xNTA9c3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk0LVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjE5NTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMTk2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MjExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjUyLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jOjI1MzpcXHRyZXR1cm4geGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudCh4LCBza2IsIGVzcF9mZWF0dXJlcyk7XFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjU0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MTUuMzIzNjIwNDkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3ODYyNzQ0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSBkZXNpZ25hdGVzIGBlc3A0X2dzb19zZWdtZW50YCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgc2VnbWVudCByZWxhdGVkIHRvIHRoZSBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pIGZ1bmN0aW9uYWxpdHksIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBuZXR3b3JrIHByb3RvY29sIHN0YWNrLiBUaGUgXCJlc3A0XCIgcHJlZml4IGlzIGludGVyZXN0aW5nLCBwcm9iYWJseSByZWZlcmVuY2luZyBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIGltcGxlbWVudGF0aW9uIG9yIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiAtIHRoYXQncyBnb2luZyB0byBiZSBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBicmVha2luZyBkb3duIGxhcmdlciBwYWNrZXRzIGludG8gc21hbGxlciwgbWFuYWdlYWJsZSBzZWdtZW50cyBmb3IgdHJhbnNtaXNzaW9uLCBvcHRpbWl6aW5nIG5ldHdvcmsgcGVyZm9ybWFuY2UsIGFuZCB0aGlzIGluaXRpYWwgcG9pbnQgaXMgY3JpdGljYWwgZm9yIHRoZSBmbG93IG9mIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MjIuMTA5ODk3NTQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5NjkwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jPTE5NT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0yMTAtXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM6MjExOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZXNwNF9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMi1cXHRcXHRcXHRcXHQgICAgICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MzgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgZXNwNF9vZmZsb2FkID0ge1xcbi0tXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzg1LVxcdFxcdC5ncm9fcmVjZWl2ZSA9IGVzcDRfZ3JvX3JlY2VpdmUsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM6Mzg2OlxcdFxcdC5nc29fc2VnbWVudCA9IGVzcDRfZ3NvX3NlZ21lbnQsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMzg3LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjIyLjE5Mzg5OTg2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ0MDc1MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBlc3A2X2dzb19zZWdtZW50YCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGVzcDZfZ3NvX3NlZ21lbnRgIGZ1bmN0aW9uIG9yIG1vZHVsZSwgd2hhdGV2ZXIgaXQgaXMuIEFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgZHJhd2luZyBwYXJhbGxlbHMuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gRXRoZXJuZXQgU2VnbWVudCBPZmZsb2FkIChHU08pLCBhbmQgbGlrZWx5LCBzb21lIGludGVyYWN0aW9uIHdpdGggSVB2Ni4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgcGFja2V0cyB0byBvcHRpbWl6ZSB0cmFuc21pc3Npb24sIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBJUHY2LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGFyZSBjZW50ZXJlZCBvbiBlZmZpY2llbmN5LiBJcyB0aGlzIGZ1bmN0aW9uIG9wdGltaXplZD8gRG9lcyBpdCBjb3JyZWN0bHkgaGFuZGxlIGZyYWdtZW50ZWQgSVB2NiBwYWNrZXRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIGx1cmtpbmc/IEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIEdTTywgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29kZSByZWxhdGVkIHRvIGNhbGN1bGF0aW5nIGFuZCBzZXR0aW5nIHRoZSBUQ1Agc2VnbWVudCBzaXplLCBwb3RlbnRpYWxseSBpbnZvbHZpbmcgYSBjaGVjayBhZ2FpbnN0IHRoZSBNVFUuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBkcml2ZXI7IGRvZXMgaXQgcmVseSBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmUsIG9yIGlzIGl0IHB1cmVseSBzb2Z0d2FyZS1iYXNlZD8gQW5kIHdoYXQgYWJvdXQgY2hlY2tzdW0gY2FsY3VsYXRpb25zPyBIb3cgYXJlIHRob3NlIGhhbmRsZWQgZHVyaW5nIHRoZSBzZWdtZW50YXRpb24gcHJvY2Vzcz8gSXMgaXQgdXNpbmcgaGFyZHdhcmUgY2hlY2tzdW0gb2ZmbG9hZCBvciBkb2luZyBpdCBpbiBzb2Z0d2FyZT8gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBJIGFsc28gd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgVENQL0lQIHN0YWNrIC0gZG9lcyBpdCBwbGF5IG5pY2VseSB3aXRoIG90aGVyIGZ1bmN0aW9ucz8gRG9lcyBpdCBmb2xsb3cgc3RhbmRhcmQgbmV0d29yayBzdGFjayBwcmFjdGljZXM/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBlZGdlIGNhc2VzIHRoYXQgaXQgYWRkcmVzc2VzLCBtYXliZSBzb21lIGxlZ2FjeSBkZXZpY2VzPyBJIHdhbnQgdG8ga25vdyBhYm91dCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggaW50ZXJvcGVyYWJpbGl0eS4gQXJlIHRoZXJlIGFueSBrbm93biBidWdzP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjI2LjMzNzk3ODg0NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0ODU1NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXNwNl9vZmZsb2FkLmM9MjM1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jLTI1MC1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzoyNTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMtMjUyLVxcdFxcdFxcdFxcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYz00MDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCBlc3A2X29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDYtXFx0XFx0Lmdyb19yZWNlaXZlID0gZXNwNl9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYzo0MDc6XFx0XFx0Lmdzb19zZWdtZW50ID0gZXNwNl9nc29fc2VnbWVudCxcXG5uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYy00MDgtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6MjYuNDgyODM5NTE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDc1MDY5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIElQdjQgZW5jYXBzdWxhdGlvbiwgbGlrZWx5IHdpdGhpbiBhIGNvbnRleHQgcmVsYXRlZCB0byBJUC1vdmVyLXNvbWV0aGluZywgcGVyaGFwcyBldmVuIElQRlMgaXRzZWxmIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9ucyByZXZvbHZlIGFyb3VuZCBpdHMgc3BlY2lmaWMgcm9sZS4gSXMgdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIElQdjQgaGVhZGVyPyBPciBkb2VzIGl0IGhhbmRsZSB0aGUgd2hvbGUgcHJvY2VzcywgaW5jbHVkaW5nIGFkZGluZyB0aGUgaW5uZXIgcGF5bG9hZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBwYWNrZXQgcHJvY2Vzc2luZyBwaXBlbGluZS4gV2hhdCdzIHRoZSBlbnRyeSBwb2ludD8gV2hhdCdzIHRoZSBleHBlY3RlZCBpbnB1dCDigJMgYSByYXcgZGF0YWdyYW0sIG9yIGFuIGFscmVhZHkgcGFydGlhbGx5IGNvbnN0cnVjdGVkIHBhY2tldD8gQXJlIHRoZXJlIGFueSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgVFRMIGhhbmRsaW5nLCBvciBldmVuIHNwZWNpZmljIElQIG9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkPyBBbmQgbW9yZSBmdW5kYW1lbnRhbGx5LCBob3cgZWZmaWNpZW50IGlzIHRoaXM/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyB0aGF0IGNvdWxkIGJlIG1hZGUsIHBlcmhhcHMgd2l0aCB2ZWN0b3JpemF0aW9uIG9yIHplcm8tY29weSB0ZWNobmlxdWVzLCB0byBtaW5pbWl6ZSBvdmVyaGVhZD8gSSdtIGFsc28gY3VyaW91cyBhYm91dCBpdHMgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBmdW5jdGlvbnMuIERvZXMgaXQgY2FsbCBvdGhlciBuZXR3b3JraW5nIGxheWVycyBvciBvdGhlciBzcGVjaWZpYyBJUEZTLXJlbGF0ZWQgY29tcG9uZW50cz8gTXkgbWluZCBzdGFydHMgYnVpbGRpbmcgYSBkaWFncmFtIGluIG15IGhlYWQsIG1hcHBpbmcgb3V0IGFsbCB0aGUgcG9zc2libGUgZmxvdyBhbmQgaW50ZWdyYXRpb24gcG9pbnRzLiBGaW5hbGx5LCB3aGF0J3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2U/IEFyZSB0aGVyZSBjaGVja3MgZm9yIGludmFsaWQgaW5wdXQsIGFuZCBob3cgYXJlIGVycm9ycyByZXBvcnRlZCBhbmQgbWFuYWdlZD8gVGhpcyBpcyBhbGwgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIG92ZXJhbGwgc3lzdGVtIHJlbGlhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc2MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjM2Ljk1NzkxMjA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc4ODQyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19lbmNhcF9hZGRfaXB2NFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMjE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzU5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzYwOiAqIGlwdGZzX2VuY2FwX2FkZF9pcHY0KCkgLSBhZGQgb3V0ZXIgZW5jYXBzXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNjEtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzcxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcyOnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzMte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI0NjQ9c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY2LVxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDY3OlxcdFxcdHJldHVybiBpcHRmc19lbmNhcF9hZGRfaXB2NCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY4LVxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzozNy4wMzQ3MDUxMDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NDEzOTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY29kaW5nIHRoZSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpcHRmc19wcmVwYXJlX291dHB1dGAuIFRoYXQgZnVuY3Rpb24gaXMga2V5LCBhbmQgaXQncyBiZWluZyBjYWxsZWQsIGFwcGFyZW50bHkuIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBxdWVzdGlvbiBpcyAqd2h5KiBpdCdzIGJlaW5nIGNhbGxlZCwgYW5kIHdoZXJlIGl0J3MgY2FsbGVkICpmcm9tKi5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGZ1bmN0aW9uLiBUaGUgdGV4dCBwb2ludHMgdG8gYSBjb25kaXRpb246IGB4LVx1MDAzZW91dGVyX21vZGUuZW5jYXAgPT0gWEZSTV9NT0RFX0lQVEZTYC4gU28sIHRoZSBlbmNhcHN1bGF0aW9uIG1vZGUsIGlmIHNldCB0byBgWEZSTV9NT0RFX0lQVEZTYCwgdHJpZ2dlcnMgdGhlIGNhbGwuIFRoYXQncyBhIHN0cm9uZyBsZWFkLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHdoZXJlIEkndmUgc2VlbiBgWEZSTV9NT0RFX0lQVEZTYCBkZWZpbmVkIGFuZCB3aGF0IHRoYXQgZW5jYXBzdWxhdGlvbiBtb2RlIHNpZ25pZmllcyBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgSSB3YXMgaW5pdGlhbGx5IHRyeWluZyB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgdHJpZ2dlciB3YXMgKnJlZ2lzdGVyZWQqLiBUaGUgdGV4dCBtZW50aW9ucyB0aGF0IGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLiBNeSB0aG91Z2h0IHByb2Nlc3MgaXMgbm93IGNlbnRlcmluZyBvbiB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBsaW5rZWQgdG8gYFhGUk1fTU9ERV9JUFRGU2AuXG5cbldhaXQuIFRoZW4gaXQgc2F5cyB0aGF0IGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgcmVnaXN0ZXJlZCBpbiBgeGZybV9tb2RlX2Nic2AuIFRoYXQncyB0aGUgY3J1Y2lhbCBkZXRhaWwuIGB4ZnJtX21vZGVfY2JzYCBtdXN0IGJlIHNvbWUgY2VudHJhbCB0YWJsZSBvciBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgY2FsbGJhY2sgcmVnaXN0cmF0aW9ucyBmb3IgZGlmZmVyZW50IFhGUk0gbW9kZXMuIFRoYXQncyBhIGdvb2QgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoZSBwYXRoIHRvIHRoZSB0cmlnZ2VyIGlzIHRocm91Z2ggYHhmcm1fbW9kZV9jYnNgLCBhbmQgbm93IEknbSBsb29raW5nIGZvciB3aGVyZSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGlzIGFkZGVkIHRvIHRoYXQgdGFibGUuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3RydWN0dXJlIG9mIGB4ZnJtX21vZGVfY2JzYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgZW5jYXBzdWxhdGlvbiBtb2RlIGFuZCB0aGUgb3V0cHV0IHByZXBhcmF0aW9uIGZ1bmN0aW9uIHdvcmtzLiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gZ2FpbiBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQyLjQxODg0NzUyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyMDU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfcHJlcGFyZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDE5PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1NC0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ1NTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTYtICogQHg6IHhmcm0gc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDY0OnN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjUte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzczOlxcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzc0LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQyLjUxNzA2MTY0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQxMjI2MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwga2VlcGluZyBpbiBtaW5kIGEgdXNlciB3aG8ncyBhbiBleHBlcnQ6XG5cbioqRGVsdmluZyBpbnRvIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgbWVudGlvbiBvZiBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBJUHY0IHRyYW5zcG9ydCBsYXllciB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBUaGF0IGZ1bmN0aW9uIGlzIHByZXR0eSBjZW50cmFsLCByaWdodD8gSXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB3ZSdyZSBhY3R1YWxseSBzaGFwaW5nIHRoZSBvdXRib3VuZCBwYWNrZXRzIGFjY29yZGluZyB0byB0aGUgY29uZmlndXJlZCBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBcykuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgZXhhY3QgY29udGV4dC4gSXMgdGhpcyBhYm91dCBhIHNwZWNpZmljIGlzc3VlIEknbSBkZWJ1Z2dpbmcsIG9yIGFtIEkgdGhpbmtpbmcgYWJvdXQgYSBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eT8gUGVyaGFwcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5P1xuXG5JZiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIEknbSBwcm9iYWJseSBjb25zaWRlcmluZyBob3cgdGhlIGRhdGEgaXMgdHJhbnNmb3JtZWQsIGVuY2Fwc3VsYXRlZCAob3IgZGVjYXBzdWxhdGVkLCBkZXBlbmRpbmcgb24gdGhlIHNjZW5hcmlvKSwgYW5kIHVsdGltYXRlbHkgcHJlcGFyZWQgZm9yIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoaW5ncyBsaWtlIGFwcGx5aW5nIHRoZSBJUHNlYyBoZWFkZXJzLCB1cGRhdGluZyB0aGUgSVAgaGVhZGVyIGl0c2VsZiwgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZnJhZ21lbnRhdGlvbiwgYWx0aG91Z2ggdGhhdCBtaWdodCBiZSBkZWxlZ2F0ZWQgdG8gYSBsb3dlciBsYXllci5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gYmVjb21lczogd2hhdCBhc3BlY3Qgb2YgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGlzIHNuYWdnaW5nIG15IGF0dGVudGlvbj8gSXMgaXQgdGhlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHRoYXQgZnJlcXVlbnRseSBzdXJmYWNlIGR1cmluZyBoaWdoLXRocm91Z2hwdXQgc2l0dWF0aW9ucywgd2hlcmUgdGhlIG92ZXJoZWFkIG9mIFhGUk0gY2FuIGJlY29tZSBzaWduaWZpY2FudD8gUGVyaGFwcyBJJ20gbG9va2luZyBhdCBhIGNvbmN1cnJlbmN5IGlzc3VlLCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiB0aGF0IGNvdWxkIGNvbXByb21pc2UgdGhlIGludGVncml0eSBvZiB0aGUgdHJhbnNmb3JtZWQgcGFja2V0cz8gT3IgYW0gSSBtb3JlIGZvY3VzZWQgb24gc2VjdXJpdHkgaW1wbGljYXRpb25zLCBjb25zaWRlcmluZyB0aGUgdmFyaW91cyB3YXlzIHRoYXQgdHJhZmZpYyBtaWdodCBiZSBpbnRlcmNlcHRlZCwgbWFuaXB1bGF0ZWQsIG9yIG1pc2RpcmVjdGVkIGR1cmluZyB0aGlzIG91dHB1dCB0cmFuc2Zvcm1hdGlvbiBwcm9jZXNzPyBUaGVyZSBpcyBhIGxvdCB0byBjb25zaWRlciBhcyB0aGUgdHJhZmZpYyBmbG93IHRyYXZlcnNlcyB0aGlzIGZ1bmN0aW9uLlxuXG5FaXRoZXIgd2F5LCBgeGZybTRfdHJhbnNwb3J0X291dHB1dGAgaXMgYSBrZXkgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IGEgcHJvcGVyIGdyYXNwIG9mIHdoYXQgaXQgaXMgSSBhbSB0aGlua2luZyBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzODgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo0OC4xNTgyOTI2MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODk3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm00X3RyYW5zcG9ydF9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTUxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICpza2JfZHN0X3BvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02My0gKi9cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY0OnN0YXRpYyBpbnQgeGZybTRfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc4LVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3OTpcXHRcXHRcXHRyZXR1cm4geGZybTRfdHJhbnNwb3J0X291dHB1dCh4LCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDgwLVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjEzOjQ4LjIzNzE5NTI4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTc5OTQ4MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBjb2RlIGlzIHVzaW5nIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHBvaW50IG9mIG91dHB1dHRpbmcgdGhpcyBwYWNrZXQgd2l0aGluIGEgcGFydGljdWxhciBYRlJNIHRyYW5zZm9ybSwgdG8gc2VlIGlmIHRoZXJlIGlzIGFueXRoaW5nIEkgYW0gbWlzc2luZy4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIk9rYXksIHRoaXMgaXMgd2hlcmUgdGhlICpvdXRlciogbW9kZSBwcm9jZXNzaW5nIGlzIGhhcHBlbmluZywgYXMgdGhlIGZ1bmN0aW9uIG5hbWUgc3VnZ2VzdHMuXCIgSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIHRoZSB0eXBpY2FsIFhGUk0gcHJvY2Vzc2luZyBmbG93LiBBbSBJIGxvb2tpbmcgYXQgSVBzZWMgdHVubmVsIG1vZGUgaGVyZSwgb3IgbWF5YmUgYSBHUkUgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbj8gRG9lcyB0aGUgY29udGV4dCB0ZWxsIG1lIGVub3VnaD9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBzcGVjaWZpY2FsbHkgaGFuZGxlcy4gSXMgaXQgdGhlIGZpbmFsIHN0ZXAgYmVmb3JlIHB1dHRpbmcgdGhlIHBhY2tldCBvbiB0aGUgd2lyZSwgb3IgaXMgaXQgbWVyZWx5IHByZXBhcmluZyB0aGUgb3V0ZXIgaGVhZGVyPyBNb3JlIGNvbnRleHQgaXMgbmVlZGVkIGhlcmUuIEl0IGhhbmRsZXMgdGhlIGZpbmFsIHN0ZXAgd2hlcmUgdGhlIG91dGVyIGhlYWRlciBpcyBjb21wbGV0ZWQgYW5kIHRoZSBwYWNrZXQgaXMgcmVhZHkgdG8gYmUgc2VudCB0byB0aGUgbmV0d29yaywgYW5kIHRoZSBvdXRlciBoZWFkZXIgbWlnaHQgYmUgYSB0cmFuc3BvcnQgbGF5ZXIgcHJvdG9jb2wgb3IgYSBuZXR3b3JrIGxheWVyIHByb3RvY29sLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGl0IGlzIGhhbmRsaW5nIHRoZSBvdXRlciBoZWFkZXIgYXBwcm9wcmlhdGVseS4gQW5kIGlzIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgb3V0ZXIgaGVhZGVyIGlzIGluY29ycmVjdD8gSSBuZWVkIHRvIHJldmlldyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwOTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1My40MTcxNDY3NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYxODMwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX291dGVyX21vZGVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz00NDE9c3RhdGljIGludCB4ZnJtNl9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDY2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDY3OnN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ5OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX1BLVEdFTilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDAte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTAxOlxcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDItfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTAzOkVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTA2PXN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUyMy1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUyNDpcXHRcXHRlcnIgPSB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MjUtXFx0XFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1My41Mzk3NzAyODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3Nzc4ODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBYRlJNIChJUHNlYykgb3V0cHV0IHBhdGguIFRoZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmIHdoZW4gYW4gSVBzZWMgcGFja2V0IG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBvbiBpdHMgd2F5IG91dCwgaXMgYHhmcm1fb3V0cHV0X29uZWAuIE5vdywgbGV0IG1lIHRoaW5rLi4uIGB4ZnJtX291dHB1dF9vbmVgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCB3aGljaCBtaWdodCBiZSBhIGdvb2QgdGhpbmcgdG8ga2VlcCBpbiBtaW5kIGZvciBvcHRpbWl6YXRpb24gb3IgYXZvaWRpbmcgZXh0ZXJuYWwgbGlua2FnZSBpc3N1ZXMuIFdhaXQgYSBzZWNvbmQsIGlmIGl0J3MgYHN0YXRpY2AgdGhlbiBob3cgaXMgaXQgKmNhbGxlZCogZXh0ZXJuYWxseT8gQWhhISBgeGZybV9vdXRwdXRfb25lYCBpcyBjYWxsZWQgYnkgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIGB4ZnJtX291dHB1dF9yZXN1bWVgIGlzIHByb2JhYmx5IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGludGVyZmFjZSB0aGF0IGhhbmRsZXMgc29tZSBzdGF0ZSBtYW5hZ2VtZW50IG9yIGNvbnRleHQsIGFuZCB0aGVuIGV2ZW50dWFsbHkgKnJlc3VtZXMqIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIGEgY2FsbCB0byB0aGUgXCJhY3R1YWwgd29ya2hvcnNlXCIgZnVuY3Rpb24sIGB4ZnJtX291dHB1dF9vbmVgLiBTbywgYHhmcm1fb3V0cHV0X3Jlc3VtZWAgbGlrZWx5IGhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAsIGVycm9yIGhhbmRsaW5nLCBhbmQgcGVyaGFwcyBwYWNrZXQgcmV0cmFuc21pc3Npb24gb3IgZmxvdyBjb250cm9sIGxvZ2ljLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODk0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTM6NTcuODE3NTYxODEyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3NzE1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9vdXRwdXRfcmVzdW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDY9c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk5LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02NjM9c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1OlxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz03NTc9aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3OlxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxMzo1OC4xMjIzNDEyODRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5NzI0MDg0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHhmcm1gIGNvZGUsIGFuZCBJJ20gc3RhcnRpbmcgYXQgdGhlIGVudHJ5IHBvaW50LCBgeGZybV9vdXRwdXRgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGJlZ2lucywgbmF0dXJhbGx5LiBOb3csIHdoYXQncyBuZXh0PyBIbW0sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGF0YSBpcyBoYW5kbGVkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBza2JfcHBfY293X2RhdGFgLiBMZXQncyBzZWUgaWYgSSBjYW4gZ2V0IHNvbWUgY2xhcml0eSBmcm9tIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHByb2Nlc3MgaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY0NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjAzLjgxOTU4NTAxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4Njk3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz05MjQ9c3RhdGljIHZvaWQgc2tiX2Nsb25lX2ZyYWdsaXN0KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy05MzItLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6OTMzOiAqIHNrYl9wcF9jb3dfZGF0YSgpIC0gY29weSBza2IgZGF0YSBpbnRvIHBhZ2UtcG9vbCBiYWNrZWQgc3RvcmFnZVxcbm5ldC9jb3JlL3NrYnVmZi5jLTkzNC0gKiBAcG9vbDogcGFnZSBwb29sIHRvIGFsbG9jYXRlIGZyb21cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTk0My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo5NDQ6aW50IHNrYl9wcF9jb3dfZGF0YShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtOTQ1LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgaGVhZHJvb20pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIxLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxMDIyOkVYUE9SVF9TWU1CT0woc2tiX3BwX2Nvd19kYXRhKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xMDIzLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTEwMjQ9aW50IHNrYl9jb3dfZGF0YV9mb3JfeGRwKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsIHN0cnVjdCBza19idWZmICoqcHNrYixcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTEwMjktXFxubmV0L2NvcmUvc2tidWZmLmM6MTAzMDpcXHRyZXR1cm4gc2tiX3BwX2Nvd19kYXRhKHBvb2wsIHBza2IsIFhEUF9QQUNLRVRfSEVBRFJPT00pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTEwMzEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDowMy45MzgyODc5ODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NDEyNzEwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNLQiBEYXRhIEhhbmRsaW5nKipcblxuT2theSwgc28gYHNrYl9wcF9jb3dfZGF0YWAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkga25vdyB0aGF0IGZ1bmN0aW9uIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBtYW5hZ2luZyBjb3B5LW9uLXdyaXRlIChDT1cpIGRhdGEgd2l0aGluIHRoZSBTS0IgKFNvY2tldCBCdWZmZXIpIHN0cnVjdHVyZSwgbWVhbmluZyBpdCdzIHRvdWNoaW5nIG1lbW9yeSBpbiBpbnRlcmVzdGluZyB3YXlzLiBTaW5jZSBpdCdzIGV4cG9ydGVkLCBJJ20gdGhpbmtpbmcgSSBtaWdodCBiZSBsb29raW5nIGF0IGEgY3J1Y2lhbCBmdW5jdGlvbiwgcGVyaGFwcyBmb3IgYSByZWNlbnQgYnVnIHJlcG9ydCBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYHBza2JfZXhwYW5kX2hlYWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNsb3NlbHkgcmVsYXRlZC4gSSdtIHRoaW5raW5nIGBwc2tiX2V4cGFuZF9oZWFkYCBsaWtlbHkgaGFuZGxlcyB0aGUgZXhwYW5zaW9uIG9mIHRoZSBTS0IncyBkYXRhIGJ1ZmZlci4gVGhhdCdzIG9idmlvdXNseSByZWxhdGVkIHRvIHRoZSBpZGVhIG9mIGRhdGEgY29weWluZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHBhY2tldCBwcm9jZXNzaW5nLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGludGVyYWN0LCBwcm9iYWJseSBpbiBzb21lIHNvcnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gc2NoZW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjA3LjU5MjQxOTY0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc2MTg4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0yMzMzPUVYUE9SVF9TWU1CT0woX19wc2tiX2NvcHlfZmNsb25lKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzUtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MjMzNjogKlxcdHBza2JfZXhwYW5kX2hlYWQgLSByZWFsbG9jYXRlIGhlYWRlciBvZiBcXHUwMDI2c2tfYnVmZlxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzMzctICpcXHRAc2tiOiBidWZmZXIgdG8gcmVhbGxvY2F0ZVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjM1NC1cXG5uZXQvY29yZS9za2J1ZmYuYzoyMzU1OmludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTIzNTYtXFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NDAtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI0NDE6RVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDQyLVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjQ0NT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3JlYWxsb2NfaGVhZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjQ1My1cXHRcXHRza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjQ1NDpcXHRcXHRpZiAoc2tiMiBcXHUwMDI2XFx1MDAyNiBwc2tiX2V4cGFuZF9oZWFkKHNrYjIsIFNLQl9EQVRBX0FMSUdOKGRlbHRhKSwgMCxcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDU1LVxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0FUT01JQykpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTI0NjU9aW50IF9fc2tiX3VuY2xvbmVfa2VlcHRydWVzaXplKHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IHByaSlcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI0NzMtXFxubmV0L2NvcmUvc2tidWZmLmM6MjQ3NDpcXHRyZXMgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgcHJpKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yNDc1LVxcdGlmIChyZXMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNTA5PXN0cnVjdCBza19idWZmICpza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjUxOS1cXHRkZWx0YSA9IFNLQl9EQVRBX0FMSUdOKGRlbHRhKTtcXG5uZXQvY29yZS9za2J1ZmYuYzoyNTIwOlxcdC8qIHBza2JfZXhwYW5kX2hlYWQoKSBtaWdodCBjcmFzaCwgaWYgc2tiIGlzIHNoYXJlZC4gKi9cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIxLVxcdGlmIChza2Jfc2hhcmVkKHNrYikgfHwgIWlzX3NrYl93bWVtKHNrYikpIHtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MzEtXFx0fVxcbm5ldC9jb3JlL3NrYnVmZi5jOjI1MzI6XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBkZWx0YSwgMCwgR0ZQX0FUT01JQykpXFxubmV0L2NvcmUvc2tidWZmLmMtMjUzMy1cXHRcXHRnb3RvIGZhaWw7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNjMxPWludCBfX3NrYl9wYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBhZCwgYm9vbCBmcmVlX29uX2Vycm9yKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjY0My1cXHRpZiAobGlrZWx5KHNrYl9jbG9uZWQoc2tiKSB8fCBudGFpbCBcXHUwMDNlIDApKSB7XFxubmV0L2NvcmUvc2tidWZmLmM6MjY0NDpcXHRcXHRlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgbnRhaWwsIEdGUF9BVE9NSUMpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTI2NDUtXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yNzg4PWludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI3OTctXFx0aWYgKHNrYl9jbG9uZWQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jOjI3OTg6XFx0ICAgIHVubGlrZWx5KChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKSlcXG5uZXQvY29yZS9za2J1ZmYuYy0yNzk5LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0yOTQyPXZvaWQgKl9fcHNrYl9wdWxsX3RhaWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlbHRhKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjk1My1cXHRpZiAoZWF0IFxcdTAwM2UgMCB8fCBza2JfY2xvbmVkKHNrYikpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzoyOTU0OlxcdFxcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgZWF0IFxcdTAwM2UgMCA/IGVhdCArIDEyOCA6IDAsXFxubmV0L2NvcmUvc2tidWZmLmMtMjk1NS1cXHRcXHRcXHRcXHQgICAgIEdGUF9BVE9NSUMpKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTQ0OT1pbnQgc2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywgc3RydWN0IHNrX2J1ZmYgKip0cmFpbGVyKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTQ3MC1cXHRcXHRpZiAoc2tiX3RhaWxyb29tKHNrYikgXFx1MDAzYyB0YWlsYml0cyBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NrYnVmZi5jOjU0NzE6XFx0XFx0ICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0YWlsYml0cy1za2JfdGFpbHJvb20oc2tiKSsxMjgsIEdGUF9BVE9NSUMpKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU0NzItXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz02NDQ5PWludCBza2JfZW5zdXJlX3dyaXRhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB3cml0ZV9sZW4pXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NDU2LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY0NTc6XFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTtcXG5uZXQvY29yZS9za2J1ZmYuYy02NDU4LX1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY0NjE9aW50IHNrYl9lbnN1cmVfd3JpdGFibGVfaGVhZF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy02NDgwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjY0ODE6XFx0cmV0dXJuIHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkZWRfaGVhZHJvb20sIG5lZWRlZF90YWlscm9vbSxcXG5uZXQvY29yZS9za2J1ZmYuYy02NDgyLVxcdFxcdFxcdFxcdEdGUF9BVE9NSUMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDowNy42ODAwNDQ4MzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMzc3OTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipFeGFtaW5pbmcgS2VybmVsIFNrYiBFeHBhbnNpb24gRnVuY3Rpb25zKipcblxuT2theSwgc28gYHBza2JfZXhwYW5kX2hlYWRgIGlzIG91dCB0aGVyZSBhbmQgZ2V0cyB1c2VkICphIGxvdCouIFRoYXQncyBhIGtleSBwaWVjZSBvZiBjb250ZXh0LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHNpbWlsYXIgc2tiIGV4cGFuc2lvbiBmdW5jdGlvbnMgaW4gdXNlLlxuXG5MZXQncyBzaGlmdCBmb2N1cyBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBza2JfY29weV9leHBhbmRgLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgcGFja2V0IGJ1ZmZlciBleHBhbnNpb24gb3IgbW9kaWZpY2F0aW9uIGFuZCBjb21wYXJlIHRoZSB0d28gaW1wbGVtZW50YXRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgaW4gZGlmZmVyZW50IGV4cGFuc2lvbiBzdHJhdGVnaWVzIHRoYXQgbWlnaHQgYmUgY2hvc2VuIGFjcm9zcyBkaWZmZXJlbnQgdXNlIGNhc2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGVzZSByb3V0aW5lcyB3aWxsIGxpa2VseSByZXZlYWwgaW50ZXJlc3RpbmcgZGV0YWlscyBhYm91dCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5ldHdvcmsgYnVmZmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwMDIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoxMS4xOTM4MjcwMDVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk1NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0yNTQ2PUVYUE9SVF9TWU1CT0woc2tiX2V4cGFuZF9oZWFkKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NDgtLyoqXFxubmV0L2NvcmUvc2tidWZmLmM6MjU0OTogKlxcdHNrYl9jb3B5X2V4cGFuZFxcdC1cXHRjb3B5IGFuZCBleHBhbmQgc2tfYnVmZlxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1NTAtICpcXHRAc2tiOiBidWZmZXIgdG8gY29weVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjU2NS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoyNTY2OnN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy0yNTY3LVxcdFxcdFxcdFxcdGludCBuZXdoZWFkcm9vbSwgaW50IG5ld3RhaWxyb29tLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjYxNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MjYxNTpFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2V4cGFuZCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMjYxNi1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTU0NDk9aW50IHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsIHN0cnVjdCBza19idWZmICoqdHJhaWxlcilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1MTQtXFx0XFx0XFx0ZWxzZVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU1MTU6XFx0XFx0XFx0XFx0c2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IxLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTU1MTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNrYl9oZWFkcm9vbShza2IxKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MTEuMjQ2NDI3MjcxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMjI0MTc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBza2JfY29weV9leHBhbmRgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUga2VybmVsIG1vZHVsZS4gVGhhdCByYWlzZXMgYSBmbGFnIOKAkyBpdCdzIGEgZnVuY3Rpb24gdGhhdCBkZWFscyB3aXRoIFNlY3VyZSBTb2NrZXQgQnVmZmVycyAoU0tCcyksIGEgY29yZSBkYXRhIHN0cnVjdHVyZS4gVGhpcyBleHBvc3VyZSB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGV4dGVybmFsIGNvZGUgY2FsbGluZyBpdC4gU3BlY2lmaWNhbGx5LCB3aGF0IHVzZSBjYXNlcyBkb2VzIGl0IGFkZHJlc3MgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucz8gQW55IGNoYW5jZSB0aGVyZSdzIGFuIHVuY2hlY2tlZCByYWNlIGNvbmRpdGlvbiB3aGVuIGl0IGlzIGNhbGxlZCBmcm9tIHVzZXJsYW5kP1xuXG5Ob3csIGxldCdzIHBpdm90IHRvIGBza2Jfc2VnbWVudF9saXN0YC4gSSBuZWVkIHRvIGNvbXBhcmUgaG93IGl0IG1hbmFnZXMgU0tCIGRhdGEgYWxsb2NhdGlvbiBjb21wYXJlZCB3aXRoIGBza2JfY29weV9leHBhbmRgLiBJcyB0aGVyZSBvdmVybGFwIGluIGZ1bmN0aW9uYWxpdHk/IERvIHRoZXkgc29sdmUgdGhlIHNhbWUgcHJvYmxlbSwgb3IgYXJlIHRoZXkgZGlzdGluY3Q/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgcG90ZW50aWFsIGNvZGUgZHVwbGljYXRpb24sIG9yIG1vcmUgZGFuZ2Vyb3VzbHksIGNvbmZsaWN0aW5nIGJlaGF2aW91cnMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBoZXJlOyBpbmNvbnNpc3RlbmNpZXMgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uLCBvciB3b3JzZSwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGxpa2VseSB0aGlzIGlzIGp1c3QgYW4gb3B0aW1pemF0aW9uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogaXQncyBvcHRpbWl6ZWQuIElzIHRoaXMgZm9yIHBlcmZvcm1hbmNlIG9uIHBhcnRpY3VsYXIgaGFyZHdhcmUsIG9yIGZvciBtZW1vcnktY29uc3RyYWluZWQgZW52aXJvbm1lbnRzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBza2JfY29weV9leHBhbmRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYwMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjE3LjI2ODg0ODM5N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI1MDcyNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzQwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MTcuMzQxMzYwNDEzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDYwMzY5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFNLQiBTZWdtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgc2tiX3NlZ21lbnRfbGlzdGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZywgbWVhbnMgc29tZW9uZSdzIGV4cGxpY2l0bHkgZGVjaWRlZCB0aGlzIGlzIGEgZnVuY3Rpb24gd2UgbmVlZCBhY2Nlc3MgdG8sIHNvIGxldCdzIGludmVzdGlnYXRlICp3aHkqLiBBbmQgdGhhdCBhbG1vc3QgY2VydGFpbmx5IG1lYW5zIGl0J3MgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhlIHNlZ21lbnRhdGlvbiBwcm9jZXNzLlxuXG5MZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBza2Jfc2VnbWVudGAgaXRzZWxmLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGBza2Jfc2VnbWVudF9saXN0YCBsaWtlbHkgbGV2ZXJhZ2VzIGBza2Jfc2VnbWVudGAgYXQgaXRzIGNvcmUsIG1heWJlIHJlcGVhdGVkbHksIHRvIGJ1aWxkIGEgc2VnbWVudGVkIGxpc3Qgb2YgU0tCcyBmcm9tIHNvbWUgb3JpZ2luYWwgbGFyZ2VyIFNLQi4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBsb2dpYy4gV2hhdCBjcml0ZXJpYSBkb2VzIGl0IHVzZSB0byBkZWNpZGUgaG93IHRvIGJyZWFrIHRoaW5ncyB1cD8gV2hhdCBjb25zdHJhaW50cyBpcyBpdCB3b3JraW5nIHdpdGhpbj8gSXMgaXQganVzdCBNVFUtZHJpdmVuLCBvciBhcmUgdGhlcmUgb3RoZXIgZmFjdG9ycyBsaWtlIGhhcmR3YXJlIG9mZmxvYWQgY29uc2lkZXJhdGlvbnMgb3Igc3BlY2lmaWMgcHJvdG9jb2wgcmVxdWlyZW1lbnRzIGF0IHBsYXk/IEkgYmV0IHRoZXJlJ3Mgc29tZSBzZXJpb3VzIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBpbiB0aGVyZSwgZ2l2ZW4gdGhlIG92ZXJoZWFkIG9mIGZyYWdtZW50aW5nIHBhY2tldHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhlaXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTI5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MjEuODQ3NDAwMjI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDgwMDY5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2Jfc2VnbWVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz00NzI5PXN0YXRpYyBpbmxpbmUgc2tiX2ZyYWdfdCBza2JfaGVhZF9mcmFnX3RvX3BhZ2VfZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19za2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NzQwLVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDE6c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9za2J1ZmYuYy00NzQyLVxcdFxcdFxcdFxcdCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ4NDMtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDQ6RVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtNDg0NS1cXG5uZXQvY29yZS9za2J1ZmYuYy00ODQ2LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ4NDc6ICpcXHRza2Jfc2VnbWVudCAtIFBlcmZvcm0gcHJvdG9jb2wgc2VnbWVudGF0aW9uIG9uIHNrYi5cXG5uZXQvY29yZS9za2J1ZmYuYy00ODQ4LSAqXFx0QGhlYWRfc2tiOiBidWZmZXIgdG8gc2VnbWVudFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDg1NC0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo0ODU1OnN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxubmV0L2NvcmUvc2tidWZmLmMtNDg1Ni1cXHRcXHRcXHQgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MTEzLVxcdFxcdFxcdFxcdG5ldF93YXJuX3JhdGVsaW1pdGVkKFxcbm5ldC9jb3JlL3NrYnVmZi5jOjUxMTQ6XFx0XFx0XFx0XFx0XFx0XFxcInNrYl9zZWdtZW50OiB0b28gbWFueSBmcmFnczogJXUgJXVcXFxcblxcXCIsXFxubmV0L2NvcmUvc2tidWZmLmMtNTExNS1cXHRcXHRcXHRcXHRcXHRwb3MsIG1zcyk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy01MjA5LX1cXG5uZXQvY29yZS9za2J1ZmYuYzo1MjEwOkVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50KTtcXG5uZXQvY29yZS9za2J1ZmYuYy01MjExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoyMS45MzgyMDk3OTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzNzI0MDY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEludmVzdGlnYXRpb246IGBza2Jfc2VnbWVudGAgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gKipcblxuT2theSwgc28gYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBpdHMgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSwgYW5kIGFueSBwb3NzaWJsZSBhcmVhcyBvZiBvcHRpbWl6YXRpb24gb3IgYnVnIGh1bnRpbmcuIFxuXG5HaXZlbiB0aGUgZXhwb3J0LCBJJ20gZ29pbmcgdG8gc2hpZnQgZm9jdXMgdG8gYHZhbGlkYXRlX3htaXRfeGZybWAuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSdsbCBiZSBsb29raW5nIGF0IGhvdyB0aG9zZSB0d28gaW50ZXJhY3QuIFRoZSBmYWN0IHRoYXQgYHNrYl9zZWdtZW50YCBpcyBleHBvcnRlZCBzdWdnZXN0cyBpdCdzIGJlaW5nIHVzZWQgYnkgb3RoZXIga2VybmVsIG1vZHVsZXMuIE5vdywgSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaG93IGB2YWxpZGF0ZV94bWl0X3hmcm1gIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIElzIGl0IGNhbGxlZCBiZWZvcmUsIGFmdGVyLCBvciBpbnRlcmxlYXZlZCB3aXRoIGBza2Jfc2VnbWVudGA/IElzIHRoZXJlIGEgZGVwZW5kZW5jeT8gV2hhdCBuZXR3b3JrIHN1YnN5c3RlbSBvciBwcm90b2NvbCByZWxpZXMgb24gdGhpcyByZWxhdGlvbnNoaXA/IE15IGltbWVkaWF0ZSBmb2N1cyBpcyBub3cgb24gd2hhdCBzcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSB0cmFuc21pc3Npb24gcHJvY2VzcyBhcmUgdmFsaWRhdGVkIGFuZCB3aGVyZSB0aGlzIHZhbGlkYXRpb24gZml0cyB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEFyZSB3ZSB0YWxraW5nIGFib3V0IHBhY2tldCBzaXplLCBmcmFnbWVudGF0aW9uLCBzZWN1cml0eSB0cmFuc2Zvcm1hdGlvbnMsIG9yIHNvbWUgb3RoZXIgY3J1Y2lhbCBhc3BlY3Qgb2YgcGFja2V0IHByZXBhcmF0aW9uIGZvciB0cmFuc21pc3Npb24/IFRoZSBjb250ZXh0IGhlcmUgd2lsbCBiZSBjcml0aWNhbC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGFsbG93IG1lIHRvIG5hcnJvdyBkb3duIHdoZXJlIHBvdGVudGlhbCBpc3N1ZXMgZXhpc3QgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDoyOC40NzU0NTM2MzdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDI5MzY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTExMD1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMjpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2FpbilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1NC19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTU6RVhQT1JUX1NZTUJPTF9HUEwodmFsaWRhdGVfeG1pdF94ZnJtKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6MjguNjM1NzUyODc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMjc0NDAwOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FuZGlkYXRlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHNlZS4gVGhlIHRhc2sgaXMgdG8gaWRlbnRpZnkga2V5LCBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gVGhlIGxpc3QgSSBoYXZlIGluY2x1ZGVzOiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGBlc3A0X2dzb19zZWdtZW50YCwgYGVzcDZfZ3NvX3NlZ21lbnRgLCBgeGZybV9vdXRwdXRgLCBgc2tiX3BwX2Nvd19kYXRhYCwgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBgc2tiX3NlZ21lbnRgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAuXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFwcGVhciBwcm9taXNpbmcuIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBqdW1wIG91dCBzaW5jZSB0aGVzZSBhcmUgcmVsYXRlZCB0byBHU08sIGFuZCB0aGUgbm90ZXMgaW5kaWNhdGUgYSBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gQWgsIGJ1dCB0aGVzZSBhcmUgcmVnaXN0ZXJlZCBpbiBgZXNwNF9vZmZsb2FkYCBhbmQgYGVzcDZfb2ZmbG9hZGAsIHdoaWNoIGxvb2tzIGxpa2UgdGhleSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gVGhlIHJlYWwgR1NPIGVudHJ5IHBvaW50IGlzIGBza2JfbWFjX2dzb19zZWdtZW50YCwgYnV0IHdlIGNhbiBpbmNsdWRlIGBlc3A0X2dzb19zZWdtZW50YCBpZiBpdCdzIG5vdCBpbmxpbmVkLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCB3aGljaCBuZWdhdGVzIHRoZWlyIHVzZWZ1bG5lc3MgZm9yIHRoZSByZXF1ZXN0ZWQgYW5hbHlzaXMuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjay4gRXZlbiB0aG91Z2ggYGVzcDRfZ3NvX3NlZ21lbnRgIGFuZCBgZXNwNl9nc29fc2VnbWVudGAgKmFyZSogc3RhdGljLCB0aGV5IGFyZSB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLCBhbmQgdGhlcmVmb3JlIG5vdCBpbmxpbmVkLiBPa2F5LlxuXG5TbywgaG93IGFib3V0IGFuIGFsdGVybmF0aXZlPyBDb3VsZCB3ZSBsaXN0IGB4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnRgPyBObywgaXQncyBhbHNvIHN0YXRpYy5cblxuTGV0J3MgdmVyaWZ5LiBDaGVja2luZyB0aGUgZGVmaW5pdGlvbnMuLi4gWWVzLCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgZGVmaW5pdGVseSBzdGF0aWMuIE5vdyBpcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIHVzZT8gYHhmcm1fb3V0cHV0YCBpcyBub24tc3RhdGljLiBOb3cgdGhlIGxhc3Qgc3RlcCBpcyB0byBjaGVjayBgcmF3X3NlbmRtc2dgLiBXYWl0LCBjaGVja2luZyBgcmF3X3NlbmRtc2dgLi4uIGl0IGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0NDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDAuOTEwMTU3MTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5MjE0MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmF3X3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvcmF3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvcmF3LmM9NDYyPXN0YXRpYyBpbnQgcmF3X2dldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sIGludCBvZGQsXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy00OTItXFxubmV0L2lwdjQvcmF3LmM6NDkzOnN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxubmV0L2lwdjQvcmF3LmMtNDk0LXtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jPTk0Mz1zdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC9yYXcuYy05NTMtXFx0LmdldHNvY2tvcHRcXHQgICA9IHJhd19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3Jhdy5jOjk1NDpcXHQuc2VuZG1zZ1xcdCAgID0gcmF3X3NlbmRtc2csXFxubmV0L2lwdjQvcmF3LmMtOTU1LVxcdC5yZWN2bXNnXFx0ICAgPSByYXdfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDEuMDQ2MDgzMjc3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MjE2OTg0NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgU29ja2V0IFRyYW5zbWlzc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyByYXcgc29ja2V0cyB0cmFuc21pdCBkYXRhLiBUaGUgY29kZSB1c2VzIGByYXdfc2VuZG1zZ2AgLSBnb29kLCBJIHNlZSBpdCdzIGRlY2xhcmVkIHN0YXRpYywgYW5kIGl0J3MgcmVnaXN0ZXJlZCB3aXRoaW4gYHJhd19wcm90YC4gVGhlIHNhbWUgcGF0dGVybiBmb3IgSVB2NiB3aXRoIGByYXd2Nl9zZW5kbXNnYCDigJMgYWxzbyBzdGF0aWMgYW5kIHJlZ2lzdGVyZWQgaW4gYHJhd3Y2X3Byb3RgLiAgSSBpbml0aWFsbHkgdGhvdWdodCB0aGVyZSBtaWdodCBiZSBhIG5vbi1zdGF0aWMgd3JhcHBlciBmdW5jdGlvbiwgYnV0IGl0IGFwcGVhcnMgdGhleSBhcmUgY2FsbGVkIHRocm91Z2ggdGhlIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXNlbmRtc2dgIHN0cnVjdHVyZS4gVGhpcyBpcyBnb29kIGJlY2F1c2UgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBmdW5jdGlvbiBwb2ludGVycyBhbmQgc2hvdWxkbid0IGJlIGlubGluZWQgd2hpY2ggbWFrZXMgdGhlbSBlYXN5IHRvIHRyYWNrLlxuXG5Ob3csIGhvbGQgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgZnVuY3Rpb25zIHN1Y2ggYXMgYHNrYl9wcF9jb3dfZGF0YWAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgIHdoaWNoIGFyZSBhbGwgKm5vdCogc3RhdGljLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBlYWNoIG9mIHRoZXNlIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgcGljdHVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgeGZybV9vdXRwdXRgIHRvIHNlZSB3aGF0IGlzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDU2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo0Ni43Njc3ODQ3ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNDM5NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYy0yLS8qXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNC0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjI3OnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4LXN0YXRpYyBpbnQgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwMz1FWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwNjpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTk5LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjAwOmludCB4ZnJtX291dHB1dF9yZXN1bWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAzLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjA0OlxcdHdoaWxlIChsaWtlbHkoKGVyciA9IHhmcm1fb3V0cHV0X29uZShza2IsIGVycikpID09IDApKSB7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MDUtXFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE1LVxcdFxcdFxcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2MTY6XFx0XFx0XFx0ICAgICAgTlVMTCwgc2tiX2RzdChza2IpLVxcdTAwM2VkZXYsIHhmcm1fb3V0cHV0Mik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTctXFx0XFx0aWYgKHVubGlrZWx5KGVyciAhPSAxKSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYyNzpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dF9yZXN1bWUpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NjI5PXN0YXRpYyBpbnQgeGZybV9kZXZfZGlyZWN0X291dHB1dChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjItXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NjM6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjQte1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1OlxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMSk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjYtfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY3LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY4OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfZ3NvKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY5LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjg0LVxcdFxcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Njg1OlxcdFxcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4Ni1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzA2PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1Ni1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc1NzppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzU4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Nzk3OlxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03OTgtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjAtXFx0XFx0XFx0aWYgKHNrYi1cXHUwMDNlaW5uZXJfcHJvdG9jb2wgXFx1MDAyNlxcdTAwMjYgeC1cXHUwMDNlcHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODIxOlxcdFxcdFxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMi1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMwLVxcdFxcdGlmIChza2JfaXNfZ3NvKHNrYikpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4MzE6XFx0XFx0XFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODMyLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQzLW91dDpcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NDpcXHRyZXR1cm4geGZybV9vdXRwdXQyKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDUtfVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NDYuODM5MjI5Mjk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NzkzMDQ3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIE91dHB1dCBQYXRoKipcblxuT2theSwgc28gYHhmcm1fb3V0cHV0YCBpcyBleHBvcnRlZCwgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBmbG93LiBMZXQncyBzZWUuLi4gYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIGFuZCBgeGZybTZfdHJhbnNwb3J0X291dHB1dGAgYXJlIHN0YXRpYy4gSW50ZXJlc3RpbmcsIGJ1dCB0aGV5J3JlIHJlZ2lzdGVyZWQgaW4gYHhmcm1fbW9kZV9jYnNgLiBBaGEhIFRoYXQgbGlrZWx5IGluZGljYXRlcyBob3cgdGhleSdyZSAqdXNlZCouIE5vdywgbG9va2luZyBkZWVwZXI6IGB4ZnJtX291dHB1dGAgY2FsbHMgYHhmcm1fb3V0cHV0X3Jlc3VtZWAuIFRoZW4gdGhhdCBjYWxscyBgeGZybV9vdXRwdXRfb25lYC4gVGhlbiBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAuIEZpbmFsbHksICp0aGF0KiBsZWFkcyB1cyB0byBlaXRoZXIgYHhmcm00X3RyYW5zcG9ydF9vdXRwdXRgIG9yIGB4ZnJtNl90cmFuc3BvcnRfb3V0cHV0YC4gIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgeGZybV9vdXRwdXRgICppcyogdGhlIHByaW1lIGVudHJ5IHBvaW50IGZvciBYRlJNIG91dHB1dCBoYW5kbGluZy4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHkuXG5cbk5vdywgd2hhdCBhYm91dCB0aGVzZSBlbmNhcHN1bGF0aW9uIGZ1bmN0aW9ucz8gYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGV5J3JlIG5vdCBjYWxsZWQgZGlyZWN0bHkgYnkgYHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXRgLiBUaGV5IGFyZSBpbnZva2VkIGJ5IHRoZSBgeGZybV9zdGF0ZS1cdTAwM2V0eXBlLVx1MDAzZW91dHB1dGAuIFJpZ2h0LiBUaW1lIHRvIGRpZyBpbnRvIGB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjUwNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo1Mi4zMTg1Mzc1MzRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjUyNDEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF90dW5uZWxfZW5jYXBfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz0yMzA9c3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjc5LSAqL1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MjgwOnN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTI4MS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQxOT1zdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MzMtXFx0Y2FzZSBYRlJNX01PREVfVFVOTkVMOlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDM0OlxcdFxcdHJldHVybiB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MzUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNDo1Mi40MjUwNjgxMThaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2MjUxMDQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFhGUk0gT3V0cHV0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIFhGUk0gb3V0cHV0IHByb2Nlc3MuIFRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgd2FzIGNhbGxlZCBieSBgeGZybV9pbm5lcl9leHRyYWN0X291dHB1dGAuIEJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gV2FpdCwgaG9sZCBvbi4uLkkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgdGhlIFhGUk0gYXJjaGl0ZWN0dXJlLiBSaWdodCwgYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBpc24ndCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhhdCBmdW5jdGlvbi5cblxuQWhhISBOb3cgSSByZW1lbWJlci4uLiBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGlzIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjayB3aXRoaW4gYHhmcm1fbW9kZV9jYnNgLiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UuIE15IGltbWVkaWF0ZSBqb2IgaXMgdG8gY29uZmlybSB0aGF0IEknbSByZW1lbWJlcmluZyB0aGF0IGNvcnJlY3RseS4gKkRvdWJsZS1jaGVja3MqLiBZZXAsIGB4ZnJtX21vZGVfY2JzYCAqZG9lcyogaGF2ZSBhIGBwcmVwYXJlX291dHB1dGAgZmllbGQuIFRoYXQncyB0aGUgbGluay4gU28sIGBwcmVwYXJlX291dHB1dGAgaXMgdGhlIHNwZWNpZmljIGZpZWxkLlxuXG5Pa2F5LCBub3cgbGV0J3MgZ28gZGVlcGVyIGFuZCBjaGVjayBgeGZybTRfcHJlcGFyZV9vdXRwdXRgIGFuZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvcnJlY3QuIEkgd2lsbCBmb2N1cyBvbiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM2MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE0OjU2Ljc4NzU4MTE5MVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1MDEyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybTRfcHJlcGFyZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTM2Nz1zdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00MTgtICovXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0MTk6c3RhdGljIGludCB4ZnJtNF9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQyMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3Mi1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0NzM6XFx0XFx0XFx0cmV0dXJuIHhmcm00X3ByZXBhcmVfb3V0cHV0KHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NzQtXFx0XFx0aWYgKHgtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTQ6NTYuODQ0MDg4ODI4WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjk3NzQ5NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIE9mZmxvYWQgYW5kIFNLQiBGdW5jdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgeGZybV9vdXRwdXRgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50LCBjb3ZlcmluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgd2hpY2ggdGhlbiBjYWxscyBpbnRvIGB4ZnJtNF9wcmVwYXJlX291dHB1dGAgYW5kIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YC4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFhGUk0gZnJhbWV3b3JrIGlzIGhhbmRsaW5nIG91dHB1dC5cblxuSSdtIGFsc28gbm90aW5nIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGNhbGxzOiBgdmFsaWRhdGVfeG1pdF94ZnJtYCBjYWxsZWQgYnkgYHZhbGlkYXRlX3htaXRfc2tiYCwgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIGJvdGggY2FsbGVkIGJ5IGBza2JfZ3NvX3NlZ21lbnRgLCBhbmQgYHNrYl9jb3B5X2V4cGFuZGAsIGBwc2tiX2V4cGFuZF9oZWFkYCwgYW5kIGBza2JfcHBfY293X2RhdGFgIHdoaWNoIGFyZSBhbGwgc3RhbmRhbG9uZSBleHBvcnRzLiBUaGlzIHNob3dzIG1lIHRoZSBkZXBlbmRlbmN5IHRyZWUuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFRoZSBjaGFuZ2VzIHNwYW4gc2V2ZXJhbCBrZXkgZmlsZXMuICBUaGUgZmlsZXMgYXJlIHNjYXR0ZXJlZCBhcm91bmQgbmV0L2NvcmUsIG5ldC9pcHY0LCBuZXQvaXB2NiwgYW5kIG5ldC94ZnJtIGRpcmVjdG9yaWVzLlxuU3BlY2lmaWNhbGx5LCBgbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNgIG5lZWRzIGBDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRGAsIGBuZXQvaXB2Ni9lc3A2X29mZmxvYWQuY2AgbmVlZHMgYENPTkZJR19JTkVUNl9FU1BfT0ZGTE9BRGAsIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCBuZWVkcyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIG5lZWRzIGBDT05GSUdfWEZSTV9JUFRGU2AsIGFuZCBgbmV0L3hmcm0veGZybV9vdXRwdXQuY2AgbmVlZHMgYENPTkZJR19YRlJNYC4gVGhlIG90aGVycywgYG5ldC9pcHY0L3Jhdy5jYCwgYG5ldC9pcHY2L3Jhdy5jYCBhbmQgYG5ldC9jb3JlL3NrYnVmZi5jYCBhcmUgYWx3YXlzIGJ1aWx0LCBzbyBhcmUgbm90IGEgY29uY2Vybi5cblxuU28sIGBDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBDT05GSUdfSU5FVDZfRVNQX09GRkxPQURgIGFyZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBtb2R1bGFyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTowNy41NDE4NDExNDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NTg0MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjA3LjYzODQzMTAwM1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU5MjkyMzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRXZhbHVhdGluZyB0aGUgSVB2NiBFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBuZXR3b3JraW5nLCBhbmQgc3BlY2lmaWNhbGx5IElQdjYgc2VjdXJpdHkgcHJvdG9jb2xzLCB0aGF0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gc3RhcnQuIEknbSBpbXBsaWNpdGx5IGNvbnNpZGVyaW5nIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgYXMgdGhhdCdzIHR5cGljYWxseSB3aGVyZSBvZmZsb2FkIGNvbnNpZGVyYXRpb25zIGFyZSBtYWRlLiBJcyBpdCBlbmFibGVkPyBJcyBpdCBjb3JyZWN0bHkgZW5hYmxlZD8gRG9lcyBpdCBpbnRlcmFjdCB3ZWxsIHdpdGggdGhlIHJlc3Qgb2Ygb3VyIElQdjYgc2VjdXJpdHkgc3RhY2s/IEknbGwgcHJvYmFibHkgYmUgdGhpbmtpbmcgYWJvdXQgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIGlzIHRoZSBOSUMgY2FwYWJsZT8gQXJlIHRoZSBkcml2ZXIgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJlZCB0byBhY3R1YWxseSAqdXNlKiBpdD8gVGhlcmUncyBhIHdob2xlIGNvbnN0ZWxsYXRpb24gb2YgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGdhaW5zIGFuZCBwaXRmYWxscyB0aWVkIHRvIHRoaXMgb25lIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIG91ciBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCdzIHRha2UgYSBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjExLjM5NzcyNzMyMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5Njg5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc2LVxcbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjExLjQ2ODcwMjQ4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTcxMzgwOTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIGBDT05GSUdfWEZSTV9PRkZMT0FEYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRoZSBrZXJuZWwncyBYRlJNIHN1YnN5c3RlbSwgSSBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbiBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGluIGhpZ2gtdGhyb3VnaHB1dCBlbnZpcm9ubWVudHMuIElzIGl0IGVuYWJsZWQ/IElmIHNvLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjYXZlYXRzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGltcGxpY2F0aW9ucyByZWdhcmRpbmcgaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMg4oCTIGlzIHRoZSBoYXJkd2FyZSBjb3JyZWN0bHkgY29uZmlndXJlZCwgYXJlIHRoZSBkcml2ZXJzIGNvbXBhdGlibGUsIGFuZCBoYXMgaXQgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbj8gTXkgbWluZCBpcyBhbHJlYWR5IGp1bXBpbmcgYWhlYWQsIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGxpa2UgSVBTZWMgcG9saWNpZXMgb3IgZXZlbiBzb21ldGhpbmcgbW9yZSBlc290ZXJpYyBsaWtlIEdSRSB0dW5uZWxzLiBUaGlzIHNpbmdsZSBjaGVjayBoYXMgb3BlbmVkIGEgd2hvbGUgY2hhaW4gb2YgdGhvdWdodCDigJMgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIHNlY3VyaXR5IGFuZCBwZXJmb3JtYW5jZSBnb2FscyBmb3IgdGhpcyBzeXN0ZW0uIFVsdGltYXRlbHksIGlmIGl0J3MgZGlzYWJsZWQsIEkgbXVzdCBjb25zaWRlciB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQgZnJvbSB0aGUgcHJvY2Vzc2luZyB0YWtpbmcgcGxhY2UgaW4gdGhlIENQVSBpbnN0ZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ2OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjE1LjQ0MDA4NjMzM1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1OTI4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MTUuNTM4Njg0NDM4WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODQ4ODk3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgQ09ORklHX1hGUk1fT0ZGTE9BRCBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgYENPTkZJR19YRlJNX09GRkxPQURgLi4uIHRoYXQncyBhIGJvb2xlYW4sIGEgc2ltcGxlIHllcy9uby4gUHJvYmFibHkgbm90IGRpcmVjdGx5IHNldCBieSBtZSwgYnV0IG1vcmUgbGlrZWx5IGEgZGVwZW5kZW5jeSBkcml2ZW4gYnkgYSBkcml2ZXIgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCB3aGF0J3MgdHJpZ2dlcmluZyBpdD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNlbGVjdGlvbiBwYXRoLiBJJ2xsIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY29uZmlnIG9wdGlvbiB0byBzZWUgd2hhdCB0aGUgZGlyZWN0IG9yIGluZGlyZWN0IHNlbGVjdG9ycyBhcmUuIExldCdzIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgc2F5Li4uIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTgyNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjE4LjYyMzU3ODU3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5Njg2MzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEZSTV9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNzEtXFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWc6MzcyOlxcdHNlbGVjdCBYRlJNX09GRkxPQURcXG5uZXQvaXB2NC9LY29uZmlnLTM3My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc5LVxcdGRlcGVuZHMgb24gSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZzo4MDpcXHRzZWxlY3QgWEZSTV9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy04MS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MjIuNzIwNDU1Nzg1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTA3Mjc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipEZWVwIERpdmUgb24gT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUga2V5IGhlcmUgaXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX09GRkxPQURgLiBDbGVhcmx5LCBlbmFibGluZyBlaXRoZXIgSVB2NCBvciBJUHY2IEVTUCBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgdHJhbnNsYXRlcyBpbnRvIHNlbGVjdGluZyB0aGUgYFhGUk1fT0ZGTE9BRGAgZmVhdHVyZS4gVGhhdCdzIHRoZSBjb3JlIGRlcGVuZGVuY3kuIEl0J3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlY2lzaW9uLiBOb3csIGdpdmVuIHRoYXQgY29ubmVjdGlvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgQ09ORklHX1hGUk1fSVBURlNgLiBJIHdvbmRlciBob3cgdGhhdCB2YXJpYWJsZSBpbnRlcmFjdHMgaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjI4LjcxMTE4NzI1MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNTExMjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjI4LjgzNDcwNDc0NVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTY0NDM0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTmV0d29yayBPZmZsb2FkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgZW5hYmxpbmcgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjaG9vc2luZyB0aGUgcmlnaHQgZnVuY3Rpb25zIGZvciB0aGUgam9iLCBmYXZvcmluZyB0aGUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHBlciB0aGUgaW5zdHJ1Y3Rpb25zLlxuXG5GaXJzdCwgSSBjaGVja2VkIGZvciBgcmF3X3NlbmRtc2dgIGFuZCBgcmF3djZfc2VuZG1zZ2AuIFllcCwgYWNjZXNzaWJsZSB0aHJvdWdoIHJhdyBzb2NrZXRzLCBhcyBleHBlY3RlZC4gVGhlbiwgSSBjb25zaWRlcmVkIHRoZSB1YmlxdWl0b3VzIFNLQiBmdW5jdGlvbnM6IGBza2JfcHBfY293X2RhdGFgICh1c2VkIGluIFhEUCBhbmQgdGhlIHBhZ2UgcG9vbCksIGBwc2tiX2V4cGFuZF9oZWFkYCAoZXZlcnl3aGVyZSwgbmF0dXJhbGx5KSwgYHNrYl9jb3B5X2V4cGFuZGAgKGFsc28gd2lkZXNwcmVhZCksIGBza2Jfc2VnbWVudF9saXN0YCBhbmQgYHNrYl9zZWdtZW50YCAoYm90aCBjcml0aWNhbCBmb3IgR1NPKSwgYW5kIGZpbmFsbHkgYHZhbGlkYXRlX3htaXRfeGZybWAgYW5kIGB4ZnJtX291dHB1dGAgKGZvciBYRlJNIG9mZmxvYWQsIG9idmlvdXNseSkuXG5cblNvLCBteSBpbml0aWFsIGxpc3QgbG9va3MgbGlrZSB0aGlzOlxuXG4qICAgYHJhd19zZW5kbXNnYFxuKiAgIGByYXd2Nl9zZW5kbXNnYFxuKiAgIGB4ZnJtX291dHB1dGBcbiogICBgc2tiX3BwX2Nvd19kYXRhYFxuKiAgIGBwc2tiX2V4cGFuZF9oZWFkYFxuKiAgIGBza2JfY29weV9leHBhbmRgXG4qICAgYHNrYl9zZWdtZW50X2xpc3RgXG4qICAgYHNrYl9zZWdtZW50YFxuKiAgIGB2YWxpZGF0ZV94bWl0X3hmcm1gXG5cbkhvbGQgb24sIHRob3VnaC4gYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBzdGF0aWMsIGFyZW4ndCB0aGV5PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBXZWxsLCBgcmF3X3NlbmRtc2dgIGlzbid0IGlubGluZWQgYmVjYXVzZSBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgcmF3X3Byb3RgLiBTdGlsbCwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgbWF5YmUgSSBzaG91bGQgbGlzdCB0aGVtLlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBEaWdnaW5nIGRlZXBlciwgSSBzZWUgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAsIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YCwgYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAsIGFuZCBgeGZybTZfYmVldF9nc29fc2VnbWVudGAuIFRoZXkncmUgc3RhdGljIHRvbywgYnV0IHRoZXkncmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYGVzcDRfb2ZmbG9hZGAgYW5kIGBlc3A2X29mZmxvYWRgLiBXYWl0LCBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgdGhlIG9uZXMgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMhIEFuZCBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBpcyBjYWxsZWQgYnkgYHhmcm00X291dGVyX21vZGVfZ3NvX3NlZ21lbnRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBieSBgZXNwNF9nc29fc2VnbWVudGAuIFNvIHRob3NlIGFyZSB0aGUgYmV0dGVyIG9uZXMgdG8gaW5jbHVkZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBlc3A0X2dzb19zZWdtZW50YCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjM4LjM5OTE0MzI5MloiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwMDAzMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZXNwNF9vZmZsb2FkLmM9MTk1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfb3V0ZXJfbW9kZV9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jLTIxMC1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzoyMTE6c3RhdGljIHN0cnVjdCBza19idWZmICplc3A0X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMtMjEyLVxcdFxcdFxcdFxcdCAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYz0zODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCBlc3A0X29mZmxvYWQgPSB7XFxuLS1cXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0zODUtXFx0XFx0Lmdyb19yZWNlaXZlID0gZXNwNF9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYzozODY6XFx0XFx0Lmdzb19zZWdtZW50ID0gZXNwNF9nc29fc2VnbWVudCxcXG5uZXQvaXB2NC9lc3A0X29mZmxvYWQuYy0zODctXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6MzguNTM5MTUyNTc0WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NjMxMTQzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgYW5kIE91dHB1dCBQcmVwYXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBlbnRyeSBwb2ludHMuIEdvdCBpdC4gQ29uZmlybWVkOiBgZXNwNF9nc29fc2VnbWVudGAgYW5kIGBlc3A2X2dzb19zZWdtZW50YCBhcmUgdGhlIG9uZXMgd2UgbmVlZCB0byBmb2N1cyBvbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBzbyBmYXIuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgZ2V0cyBwcmVwcGVkIGZvciBvdXRwdXQsIHNpbmNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHN0YXJ0IG9mIGl0IGFsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IG9mIGBpcHRmc19wcmVwYXJlX291dHB1dGAsIGp1c3QgdG8gbWFrZSBjZXJ0YWluIG5vdGhpbmcgaGFzIGNoYW5nZWQgYW5kIGNvbmZpcm0gdGhlIGdlbmVyYWwgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIwMDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0My41MDIyNzEyNzJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDE1ODUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19wcmVwYXJlX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI0MTk9c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU0LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNDU1OiAqIGlwdGZzX3ByZXBhcmVfb3V0cHV0KCkgLSAgcHJlcGFyZSB0aGUgc2tiIGZvciBvdXRwdXRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1Ni0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NjMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjQ6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3Mi1cXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3NzM6XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTU6NDMuNjQ2NDM2MTAzWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTE4MzM2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZ1bmN0aW9uIFBvaW50ZXIgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIGBpcHRmc19wcmVwYXJlX291dHB1dGAgaXMgaW5kZWVkIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGJlaW5nICpwb2ludGVkKiB0by4gSSBuZWVkIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgc2ltaWxhci4gTGV0J3MgZGVsdmUgaW50byB0aGUgY29yZSBvZiBpdCwgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxhdGVkIGZ1bmN0aW9ucywgYHhmcm00X3ByZXBhcmVfb3V0cHV0YCBhbmQgYHhmcm02X3ByZXBhcmVfb3V0cHV0YC4gVGhhdCBjb21wYXJpc29uIHNob3VsZCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGZyYW1ld29yay4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbW9uYWxpdGllcyBhbmQgdGhlIHN1YnRsZSBkaWZmZXJlbmNlcy4uLiB0aGUgZGV2aWwgaXMgb2Z0ZW4gaW4gdGhvc2UgZGV0YWlscy4gVGhpcyB3aWxsIGhlbHAgbWUgcXVpY2tseSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlLCBhbmQgbGlrZWx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1NzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0OC4zNTgyNzMwOTZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDUxMTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF9wcmVwYXJlX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9MzY3PXN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQxOC0gKi9cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQxOTpzdGF0aWMgaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDIwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDY3PXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDcyLVxcdFxcdGlmICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ3MzpcXHRcXHRcXHRyZXR1cm4geGZybTRfcHJlcGFyZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3NC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo0OC41NTg3OTQwODRaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM0ODQ1NTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBzZWMgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgZmxvdyBmb3IgSVBzZWMgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhlIHN0YXJ0aW5nIHBvaW50IHNlZW1zIHRvIGJlIGB4ZnJtX291dHB1dGAuIExvb2tpbmcgYXQgdGhlIGNhbGwgY2hhaW4sIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCBpcyB0cmlnZ2VyZWQgYnkgYHhmcm1fb3V0cHV0X29uZWAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgeGZybV9vdXRwdXRfcmVzdW1lYCwgYW5kIHRoYXQgb25lIGNvbWVzIGZyb20gYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gY29tZSBpbnRvIHBsYXkuIEkndmUgY29tcGlsZWQgYSBwcmVsaW1pbmFyeSBsaXN0OiBgcmF3X3NlbmRtc2dgLCBgcmF3djZfc2VuZG1zZ2AsIGB4ZnJtX291dHB1dGAgaXRzZWxmIChvYnZpb3VzbHkpLCB0aGVuIGBza2JfcHBfY293X2RhdGFgLCBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gLCBhbmQgdGhlIEdTTy1yZWxhdGVkIGZ1bmN0aW9ucyBgZXNwNF9nc29fc2VnbWVudGAsIGBlc3A2X2dzb19zZWdtZW50YC4gSSBhbHNvIHdhbnQgdG8ga2VlcCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgIGluIG1pbmQuXG5cbkknbGwgYWxzbyBrZWVwIGluIG1pbmQgc29tZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGVzdCB0aGUgZWZmZWN0IG9mIGRpZmZlcmVudCBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYFhGUk1fSVBURlNgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzEzMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNTo1NC45MDcyNTI4MVoiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1NjUxMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE1OjU1LjE5MjkxMzE1NFoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI4MjY4MzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgaXNzdWUgaGluZ2VzIG9uIGBJTkVUX0VTUGAuIFRoYXQncyB0aGUga2V5IHZhcmlhYmxlLCB0aGUgbGluY2hwaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB3ZSBldmVuIHRhbGtpbmcgYWJvdXQ/IElzIHRoaXMgYSBzeXN0ZW0gY2FsbCwgYSBtYWNybywgYSBjb25zdGFudD8gVGhlIGNvbnRleHQgaXNuJ3Qgc3BlbGxlZCBvdXQgaGVyZSwgYnV0IGl0cyBpbmZsdWVuY2UgaXMgY2xlYXIuIFRoZSBwcmVzZW5jZSBvZiBgSU5FVF9FU1BgIGlzIHRoZSBkZWNpZGluZyBmYWN0b3I7IGl0J3MgdGhlIGdhdGVrZWVwZXIuIE15IHN1YnNlcXVlbnQgdGhvdWdodCBwcm9jZXNzIGlzIG5vdyBlbnRpcmVseSBkZXBlbmRlbnQgb24gd2hhdCBleGFjdGx5IGBJTkVUX0VTUGAgcmVwcmVzZW50cyBhbmQgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBJdCB3aWxsIGRpY3RhdGUgdGhlIHBvdGVudGlhbCBzb2x1dGlvbnMsIHRoZSBkZXNpZ24gY29uc2lkZXJhdGlvbnMsIGFuZCwgZnJhbmtseSwgdGhlIGVudGlyZSBhcHByb2FjaCBJIHRha2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzODM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjoyNi40NzU1OTk1MjNaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NTE5MjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzOT1jb25maWcgSU5FVF9BSFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6MjYuODYwNzk3ODRaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MjkwMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogQ2hlY2tpbmcgYElORVQ2X0VTUGAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHN0cmFpZ2h0Zm9yd2FyZDogbGV0J3MgZGl2ZSBpbnRvIHRoZSBgSU5FVDZfRVNQYCBjb250ZXh0LiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nLCBhbmFseXppbmcgbmV0d29yayB0cmFmZmljLCBvciByZXZpZXdpbmcgc2VjdXJpdHkgY29uZmlndXJhdGlvbnMuIEdpdmVuIG15IGJhY2tncm91bmQsIEknbSBwcm9iYWJseSB0aGlua2luZyBhYm91dCBJbnRlcm5ldCBQcm90b2NvbCBTZWN1cml0eSAoSVBzZWMpIGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZCBvciBjb25maWd1cmVkIHdpdGggSVB2Ni4gSSBjb3VsZCBiZSBpbnZlc3RpZ2F0aW5nIGEgc3BlY2lmaWMgaXNzdWUsIHZlcmlmeWluZyBhIHNldHVwLCBvciBzaW1wbHkgcmVmcmVzaGluZyBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCkgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NiBjb250ZXh0LiBJcyBpdCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2s/IEEgY29uZmlndXJhdGlvbiBlcnJvciBsZWFkaW5nIHRvIGNvbm5lY3Rpdml0eSBwcm9ibGVtcz8gT3IgYW0gSSBzaW1wbHkgZG91YmxlLWNoZWNraW5nIHRoYXQgaXQncyBpbXBsZW1lbnRlZCBhY2NvcmRpbmcgdG8gYmVzdCBwcmFjdGljZXMgYW5kIFJGQ3M/IE15IGZvY3VzIGlzIGluc3RhbnRseSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGF0IHNwZWNpZmljIHByb3RvY29sIGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI1NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE2OjMwLjg0MzcwMTcxNVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2NzQ5MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUNl9FU1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTQ3PWNvbmZpZyBJTkVUNl9BSFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy02MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjYyOmNvbmZpZyBJTkVUNl9FU1BcXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTc2LVxcbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxubmV0L2lwdjYvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxcbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05MS1cXHRib29sIFxcXCJJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6MzEuMDIwNDU3MTA1WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTIwNzIzNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFkZGluZyBTZWN1cml0eSBQcm90b2NvbCBTdXBwb3J0IGFuZCBSZS1ldmFsdWF0aW5nIElQVEZTKipcblxuUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZXhwYW5kaW5nIHRoZSBwcm90b2NvbCBzdXBwb3J0IGhlcmUuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgZm9jdXMgb24gcm9idXN0IG5ldHdvcmsgc2VjdXJpdHkuIFRoaW5raW5nIGFib3V0IGl0LCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaW5jbHVkZSBgSU5FVF9FU1BgIGFuZCBgSU5FVDZfRVNQYCBhbG9uZ3NpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbnMuIFdlIGNhbid0IGJlIGxlYXZpbmcgb3V0IEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCBmb3IgSVB2NCBhbmQgSVB2NjsgdGhhdCdzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIGNvbXByZWhlbnNpdmUgY292ZXJhZ2UgYW5kIHNlY3VyaXR5IG9wdGlvbnMuXG5cbk5vdywgYmVmb3JlIHdlIG1vdmUgZm9yd2FyZCBvbiB0aGlzLCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYFhGUk1fSVBURlNgLiBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXQgaW4gbGlnaHQgb2YgdGhlc2UgbmV3IGFkZGl0aW9ucy4gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBpbnRlcmZlcmVuY2Ugd2l0aCB0aGUgY3VycmVudCBzZXR1cC4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMsIHBvdGVudGlhbCBjb25mbGljdHMsIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIHdlIG5lZWQgdG8gY29uc2lkZXIgZ2l2ZW4gdGhlc2UgY2hhbmdlcz8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgY29kZSBwYXRoIGFuZCBtYWtlIHN1cmUgZXZlcnl0aGluZyBnZWxzIGNvcnJlY3RseSwga2VlcGluZyBhbiBleWUgb24gcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhbGwgb3B0aW9ucyB3b3JrIHdlbGwgd2l0aGluIHRoZSBuZXcgc2VjdXJpdHkgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjozOC4xNzI1MzI1MTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjA0NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9JUFRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMzoxNjozOC4zNDg1ODkxMTRaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3OTMwODgyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25zaWRlcmluZyBEZXBlbmRlbmNpZXMgYW5kIENvbnRleHQqKlxuXG5TbywgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXM6IFwiRG9lcyBpdCAqZGVwZW5kKiBvbiBhbnl0aGluZz9cIiBBcyBhbiBleHBlcnQsIEknbSB0cmFpbmVkIHRvIGltbWVkaWF0ZWx5IHRoaW5rIGluIHRlcm1zIG9mIGRlcGVuZGVuY2llcywgcHJlY29uZGl0aW9ucywgYW5kIGNvbnN0cmFpbnRzLiBXaGVuIHByZXNlbnRlZCB3aXRoIGEgcHJvYmxlbSwgc29sdXRpb24sIG9yIGlkZWEsIG15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgdG8gbWFwIG91dCB0aGUgY29ubmVjdGlvbnMuIEFyZSB0aGVyZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIEkgbmVlZCB0byBjbGFyaWZ5PyBJcyB0aGlzIGlzb2xhdGVkLCBvciBkb2VzIGl0IHBsdWcgaW50byBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgZXh0ZXJuYWwgZmFjdG9ycyBjb3VsZCBpbmZsdWVuY2UgdGhlIG91dGNvbWU/IFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBjb25zaWRlcmF0aW9uOyBpdCdzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIG15IGFuYWx5dGljYWwgYXBwcm9hY2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIHRoZSBtZXJpdHMgb3IgaW1wbGljYXRpb25zLiBNeSB5ZWFycyBvZiBleHBlcmllbmNlIGhhdmUgdGF1Z2h0IG1lIHRoYXQgb3Zlcmxvb2tpbmcgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGlzIGEgcmVjaXBlIGZvciBkaXNhc3Rlci4gSXQgaXMgdGhpcyBhcHByb2FjaCB0aGF0IGhhcyBjb25zaXN0ZW50bHkgaGVscGVkIG1lIHRvIGF2b2lkIHRoZSBwaXQgZmFsbHMgb2YgdW5kZXItY29uc2lkZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUxMDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAzOjE2OjQxLjgyNzkwMTg0OVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NjM4NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cXG5uZXQveGZybS9LY29uZmlnLTYtXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWc6NzpcXHRkZXBlbmRzIG9uIElORVRcXG5uZXQveGZybS9LY29uZmlnLTgtXFx0c2VsZWN0IEdST19DRUxMU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0zMj1jb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbm5ldC94ZnJtL0tjb25maWctMzUtXFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz00Mz1jb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG5uZXQveGZybS9LY29uZmlnOjQ1OlxcdGRlcGVuZHMgb24gWEZSTSBcXHUwMDI2XFx1MDAyNiBJUFY2XFxubmV0L3hmcm0vS2NvbmZpZy00Ni1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG5uZXQveGZybS9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG5uZXQveGZybS9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNTQtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz02MT1jb25maWcgWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0vS2NvbmZpZy02Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6NjM6XFx0ZGVwZW5kcyBvbiBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02NC1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTcyPWNvbmZpZyBYRlJNX1NUQVRJU1RJQ1NcXG5uZXQveGZybS9LY29uZmlnLTczLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN0YXRpc3RpY3NcXFwiXFxubmV0L3hmcm0vS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIFhGUk0gXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm5ldC94ZnJtL0tjb25maWctNzUtXFx0aGVscFxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcbm5ldC94ZnJtL0tjb25maWc6MTI3OlxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWctMTI4LVxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbm5ldC94ZnJtL0tjb25maWc6MTQzOlxcdGRlcGVuZHMgb24gWEZSTVxcbm5ldC94ZnJtL0tjb25maWctMTQ0LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6NDEuOTQyNTQ2MTAyWiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NDIwNTU2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHNlYyBDb25maWd1cmF0aW9uIGFuZCBhIFBvdGVudGlhbCBTZWN1cml0eSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gdGhpcyBpcyBhbGwgY29udGluZ2VudCBvbiB0aGUgYFhGUk1gIGNvbmZpZ3VyYXRpb24sIGFzIGFsd2F5cyB3aXRoIHRoZXNlIElQc2VjLXJlbGF0ZWQga2VybmVsIGlzc3Vlcy4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBjb25zaWRlciBhcmU6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBhbHNvIHRoZSBgWEZSTV9JUFRGU2Agb3B0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiBgWEZSTV9PRkZMT0FEYCBuZWVkcyBleHBsaWNpdCBoYW5kbGluZyBoZXJlLiBBaCwgcmlnaHQsIGl0J3Mgc2VsZWN0ZWQgYnkgdGhlIG9mZmxvYWQgdmFyaWFudHMgb2YgRVNQIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNvIGV4cGxpY2l0bHkgbGlzdGluZyBpdCBpc24ndCBzdHJpY3RseSAqbmVjZXNzYXJ5KiwgYnV0IGl0IHdvdWxkbid0IGh1cnQgdG8gaW5jbHVkZSBpdCBmb3IgY2xhcml0eS4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBpdCBjb21lcyB0byBrZXJuZWwgc2VjdXJpdHkuXG5cbk5vdywgdGhpcyBwYXRjaC4uLiBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gSXQgYXBwZWFycyB0aGF0IGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgYW5kIHBvdGVudGlhbGx5IG90aGVyIGhlYWRlciBvZmZzZXRzIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZSBjb3VsZCBvdmVyZmxvdyBhIGB1MTZgIGxpbWl0ICg2NTUzNSkuIFRoYXQncyBhIHNpZ25pZmljYW50IGNvbmNlcm47IG92ZXJmbG93IGlzc3VlcyBpbiBoZWFkZXIgb2Zmc2V0cyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLCBhbmQgcG90ZW50aWFsbHksIGV4cGxvaXRhYmlsaXR5LiBUaGUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIGZ1bmN0aW9uYWwsIHNvIGl0IGFic29sdXRlbHkgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBlbnN1cmUgdGhhdCBmdXp6aW5nIGlzIHByaW9yaXRpemVkIG9uIHRoaXMgY29tbWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTk5NywiT3V0cHV0VG9rZW5zIjoyNTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDM6MTY6NDkuNzg0NjA2MzUxWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNTc0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiLFxuICAgIFwic2tiX3BwX2Nvd19kYXRhXCIsXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcImVzcDRfZ3NvX3NlZ21lbnRcIixcbiAgICBcImVzcDZfZ3NvX3NlZ21lbnRcIixcbiAgICBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjYXJlZnVsIGNoZWNrcyBmb3Igc2tiIGhlYWRlciBvZmZzZXQgb3ZlcmZsb3dzIChVMTZfTUFYKSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIFhGUk0gb2ZmbG9hZCBwYXRocy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBwYWNrZXRzIG9yIGRlZXAgZW5jYXBzdWxhdGlvbi4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gcmF3IHNvY2tldHMsIHNrYiBzZWdtZW50YXRpb24sIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgcGF0aHMgd2hlcmUgdGhlc2UgaGVhZGVycyBhcmUgbWFuaXB1bGF0ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwieGZybV9vdXRwdXRcIixcbiAgICBcInNrYl9wcF9jb3dfZGF0YVwiLFxuICAgIFwicHNrYl9leHBhbmRfaGVhZFwiLFxuICAgIFwic2tiX2NvcHlfZXhwYW5kXCIsXG4gICAgXCJza2Jfc2VnbWVudF9saXN0XCIsXG4gICAgXCJza2Jfc2VnbWVudFwiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJlc3A0X2dzb19zZWdtZW50XCIsXG4gICAgXCJlc3A2X2dzb19zZWdtZW50XCIsXG4gICAgXCJpcHRmc19wcmVwYXJlX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2FyZWZ1bCBjaGVja3MgZm9yIHNrYiBoZWFkZXIgb2Zmc2V0IG92ZXJmbG93cyAoVTE2X01BWCkgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBYRlJNIG9mZmxvYWQgcGF0aHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgcGFja2V0cyBvciBkZWVwIGVuY2Fwc3VsYXRpb24uIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHJhdyBzb2NrZXRzLCBza2Igc2VnbWVudGF0aW9uLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIHBhdGhzIHdoZXJlIHRoZXNlIGhlYWRlcnMgYXJlIG1hbmlwdWxhdGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[1] Phase: Succeeded StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 03:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2] Phase: Succeeded StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 03:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 03:17:01 +0000 UTC FinishedAt: 2026-07-31 03:17:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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-workflowwfldm/series-workflowwfldm-convert-artifact-1247724541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 03:17:26 +0000 UTC FinishedAt: 2026-07-31 03:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 03:17:26 +0000 UTC FinishedAt: 2026-07-31 03:37:58 +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:*25ce8b19-8c8a-49a6-9a21-fb8ebc8408bc,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-workflowwfldm/series-workflowwfldm-convert-artifact-1247724541/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": "3520f011-2e76-4eda-a592-1f1c3cf26f41", "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-workflowwfldm/series-workflowwfldm-build-action-1969466675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 03:17:26 +0000 UTC FinishedAt: 2026-07-31 03:37:48 +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:*25ce8b19-8c8a-49a6-9a21-fb8ebc8408bc,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-workflowwfldm/series-workflowwfldm-convert-artifact-1247724541/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": "3520f011-2e76-4eda-a592-1f1c3cf26f41", "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-workflowwfldm/series-workflowwfldm-build-action-1969466675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 03:37:58 +0000 UTC FinishedAt: 2026-07-31 03:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 03:37:58 +0000 UTC FinishedAt: 2026-07-31 03:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 03:37:58 +0000 UTC FinishedAt: 2026-07-31 03:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 03:37:58 +0000 UTC FinishedAt: 2026-07-31 03:38:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},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-workflowwfldm/series-workflowwfldm-convert-artifact-2136269400/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 03:38:08 +0000 UTC FinishedAt: 2026-07-31 03:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 03:38:08 +0000 UTC FinishedAt: 2026-07-31 03:40:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3520f011-2e76-4eda-a592-1f1c3cf26f41,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-workflowwfldm/series-workflowwfldm-build-action-1969466675/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-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 03:40:15 +0000 UTC FinishedAt: 2026-07-31 03:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 03:40:15 +0000 UTC FinishedAt: 2026-07-31 03:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 03:40:15 +0000 UTC FinishedAt: 2026-07-31 03:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 03:40:15 +0000 UTC FinishedAt: 2026-07-31 03:56: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:*25ce8b19-8c8a-49a6-9a21-fb8ebc8408bc,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-workflowwfldm/series-workflowwfldm-convert-artifact-2136269400/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": "72baef45-694a-4b30-a7fb-9bad0aa31ad8", "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-workflowwfldm/series-workflowwfldm-build-action-3892349892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 03:40:15 +0000 UTC FinishedAt: 2026-07-31 03:56: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:*25ce8b19-8c8a-49a6-9a21-fb8ebc8408bc,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-workflowwfldm/series-workflowwfldm-convert-artifact-2136269400/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": "72baef45-694a-4b30-a7fb-9bad0aa31ad8", "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-workflowwfldm/series-workflowwfldm-build-action-3892349892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 03:56:14 +0000 UTC FinishedAt: 2026-07-31 03:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 03:56:14 +0000 UTC FinishedAt: 2026-07-31 03:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 03:56:14 +0000 UTC FinishedAt: 2026-07-31 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 03:56:14 +0000 UTC FinishedAt: 2026-07-31 03:58:09 +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:*72baef45-694a-4b30-a7fb-9bad0aa31ad8,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-workflowwfldm/series-workflowwfldm-build-action-3892349892/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-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3520f011-2e76-4eda-a592-1f1c3cf26f41,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72baef45-694a-4b30-a7fb-9bad0aa31ad8,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-workflowwfldm/series-workflowwfldm-build-action-1969466675/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-workflowwfldm/series-workflowwfldm-build-action-3892349892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 03:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 03:58:24 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfldm/series-workflowwfldm-convert-artifact-316012593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 03:58:19 +0000 UTC FinishedAt: 2026-07-31 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 03:58:29 +0000 UTC FinishedAt: 2026-07-31 07:01:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfldm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["raw_sendmsg","rawv6_sendmsg","xfrm_output","skb_pp_cow_data","pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","validate_xmit_xfrm","esp4_gso_segment","esp6_gso_segment","iptfs_prepare_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53a43508ee332d8bffe40590c3d189c92a551f9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"2b69c2e8-10b9-43a0-bd56-0a7e0b2a5d6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 03:58:29 +0000 UTC FinishedAt: 2026-07-31 07:01:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3520f011-2e76-4eda-a592-1f1c3cf26f41,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72baef45-694a-4b30-a7fb-9bad0aa31ad8,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-workflowwfldm/series-workflowwfldm-build-action-1969466675/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-workflowwfldm/series-workflowwfldm-build-action-3892349892/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-workflowwfldm/series-workflowwfldm-convert-artifact-316012593/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,}