Name: series-workflowzvrlh Phase: Succeeded StartedAt: 2026-08-19 09:44:16 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[0] Phase: Succeeded StartedAt: 2026-08-19 09:44:16 +0000 UTC FinishedAt: 2026-08-19 10:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 09:44:16 +0000 UTC FinishedAt: 2026-08-19 10:46:28 +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": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "9df92a6d-3016-48df-9471-d73e2965e760" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_gro_receive", "tcp4_gro_receive" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt0Y3A0X2dyb19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7YCkgYmVmb3JlIGFueSBHUk8gcHJvdG9jb2wgaGFuZGxlcnMgYXJlIGludm9rZWQuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb25kaXRpb25hbCBjaGVja3MgKGUuZy4sIGBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0YCkgZG8gbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB0aGUgYHNrYi1cdTAwM2VjYmAgY29udHJvbCBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBmb3IgaW50ZXJuYWwga2VybmVsIHN0YXRlIHRyYWNraW5nIGR1cmluZyB0aGUgTkFQSSBwb2xsaW5nIHBoYXNlIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBlbGltaW5hdGluZyBhbnkgaW5mby1sZWFrIHJpc2tzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIEdSTyBtZXJnaW5nIGxvZ2ljIGZvciBHU08gcGFja2V0czsgYW55IHJlZ3Jlc3Npb25zIGhlcmUgd291bGQgbGVhZCB0byBza2IgbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgYWxyZWFkeSBjb21wcmVoZW5zaXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbnN1bXB0aW9uIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBsb2dpYyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgZnJhZ2xpc3QgR1JPIGFuZCBHU08gc2ticy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6NDQ6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuYyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmNcbmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5AQCAtMzMyLDYgJiM0MzszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gcC1cdTAwM2VpcF9zdW1tZWQ7XG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2Vjc3VtX2xldmVsICE9IHAtXHUwMDNlY3N1bV9sZXZlbDtcbiBcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgXHUwMDNlPSA2NDtcbiYjNDM7XHRcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3Q7XG4gXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXG4gXHRcdGlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmVfbGlzdChwLCBza2IpKVxuQEAgLTM5NSwxMiAmIzQzOzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlpZiwgc2RpZjtcbiBcbi1cdGlmIChsaWtlbHkoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuJiM0MztcdFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXG4mIzQzO1x0XHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbiYjNDM7XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovXG4mIzQzO1x0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbiYjNDM7XHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuJiM0MztcbiYjNDM7XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xuJiM0MztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQxMCw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0ICAgICAgIGlwaC1cdTAwM2VkYWRkciwgbnRvaHModGgtXHUwMDNlZGVzdCksXG4gXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4mIzQzO1x0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbiBcdGlmIChzaylcbiBcdFx0c29ja19nZW5fcHV0KHNrKTtcbiB9XG5AQCAtNDMwLDcgJiM0Mzs0MzksOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCF0aClcbiBcdFx0Z290byBmbHVzaDtcbiBcbi1cdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuJiM0MztcdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpXG4mIzQzO1x0XHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcbiBcbiBcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG5pbmRleCBmMmE2NTljZDYxODNjLi5lZWMzNzc4ODU1ZWI4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbkBAIC0yNiw3ICYjNDM7MjYsMTggQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHAgPSB0Y3BfZ3JvX2xvb2t1cChoZWFkLCB0aCk7XG4gXHRpZiAocCkge1xuLVx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4mIzQzO1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbiYjNDM7XHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xuJiM0MztcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbiYjNDM7XHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxuJiM0MztcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBcdTAwMjZoZHItXHUwMDNlc2FkZHIsIHRoLVx1MDAzZXNvdXJjZSxcbiBcdFx0XHRcdFx0XHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdFx0aWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4mIzQzO1x0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbiBcdGlmIChzaylcbiBcdFx0c29ja19nZW5fcHV0KHNrKTtcbiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3RjcDRfZ3JvX3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBmcmFnbGlzdCBHUk8gYW5kIEdTTyBza2JzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2ODhlOTQxOWUxZmUwMTQzMTNjZDYxZDE4ZTM4YWMwOGVkMmU2MzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDo0NDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jCmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuYwpAQCAtMzMyLDYgJiM0MzszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWZsdXNoIHw9IHNrYi0mZ3Q7aXBfc3VtbWVkICE9IHAtJmd0O2lwX3N1bW1lZDsKIAkJZmx1c2ggfD0gc2tiLSZndDtjc3VtX2xldmVsICE9IHAtJmd0O2NzdW1fbGV2ZWw7CiAJCWZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtjb3VudCAmZ3Q7PSA2NDsKJiM0MzsJCWZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdDsKIAkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCQlpZiAoZmx1c2ggfHwgc2tiX2dyb19yZWNlaXZlX2xpc3QocCwgc2tiKSkKQEAgLTM5NSwxMiAmIzQzOzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWlmLCBzZGlmOwogCi0JaWYgKGxpa2VseSghKHNrYi0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19GUkFHTElTVCkpKQotCQlyZXR1cm47Ci0KIAlwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpOwogCWlmIChwKSB7Ci0JCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJLyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovCiYjNDM7CQlpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0KSB7CiYjNDM7CQkJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3Q7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovCiYjNDM7CQlpZiAoTkFQSV9HUk9fQ0IocCktJmd0O2NvdW50ID09IDEpCiYjNDM7CQkJTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKJiM0MzsJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDEwLDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC0mZ3Q7c2FkZHIsIHRoLSZndDtzb3VyY2UsCiAJCQkJICAgICAgIGlwaC0mZ3Q7ZGFkZHIsIG50b2hzKHRoLSZndDtkZXN0KSwKIAkJCQkgICAgICAgaWlmLCBzZGlmKTsKLQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9ICFzazsKJiM0MzsJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2sgJmFtcDsmYW1wOyAhc2tiX2lzX2dzbyhza2IpOwogCWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKIH0KQEAgLTQzMCw3ICYjNDM7NDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoIXRoKQogCQlnb3RvIGZsdXNoOwogCi0JdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7CiYjNDM7CWlmICh1bmxpa2VseShza2ItJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKQomIzQzOwkJdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7CiAKIAlyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMKaW5kZXggZjJhNjU5Y2Q2MTgzYy4uZWVjMzc3ODg1NWViOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYwpAQCAtMjYsNyAmIzQzOzI2LDE4IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAlwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpOwogCWlmIChwKSB7Ci0JCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJLyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovCiYjNDM7CQlpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0KSB7CiYjNDM7CQkJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3Q7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovCiYjNDM7CQlpZiAoTkFQSV9HUk9fQ0IocCktJmd0O2NvdW50ID09IDEpCiYjNDM7CQkJTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKJiM0MzsJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzayA9IF9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKG5ldCwgJmFtcDtoZHItJmd0O3NhZGRyLCB0aC0mZ3Q7c291cmNlLAogCQkJCQkmYW1wO2hkci0mZ3Q7ZGFkZHIsIG50b2hzKHRoLSZndDtkZXN0KSwKIAkJCQkJaWlmLCBzZGlmKTsKLQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9ICFzazsKJiM0MzsJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2sgJmFtcDsmYW1wOyAhc2tiX2lzX2dzbyhza2IpOwogCWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEdSTyBPZmZsb2FkIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AgYW5kIGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgLiBSaWdodCBhd2F5LCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgbG9va2luZyBhdCBUQ1AgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIHdoaWNoIG1lYW5zIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuIFRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBpc19mbGlzdGAgYW5kIHRoZSBgc2tiX2lzX2dzbyhza2IpYCBjYWxscyB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IG9kZCBlZGdlIGNhc2VzIG9yIG92ZXJmbG93cyBpbiB0aGVyZS4KCk15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBzaW5jZSB0aG9zZSBhcmUgdGhlIG9uZXMgSSBjYW4gcmVsaWFibHkgaGl0LiBTbyBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIGZ1enppbmcgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2dyb19yZWNlaXZlYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgdGNwNF9jaGVja19mcmFnbGlzdF9ncm9gIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS4KCk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBjb25kaXRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjaGVja2luZyB0aGUgc291cmNlIGZpbGVzIGZvciBjb25maWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0lORVRgIGNvbnRyb2xzIHRoZSBJUHY0IGNvZGUsIGFuZCBgQ09ORklHX0lQVjZgIHRoZSBJUHY2LiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBNYWtlZmlsZXMgZm9yIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gV2l0aCB0aGlzIGluZm8sIEkgY2FuIG1ha2Ugc3VyZSBteSBmdXp6ZXIgYnVpbGQgY29uZmlnIG1hdGNoZXMgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZXNlIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgY2FtcGFpZ24gc2V0IHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEyLVx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbmNlcm5pbmcgdGhlIFRDUCBPZmZsb2FkIE9iamVjdCBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBidWlsZCBzeXN0ZW0gcGVyc3BlY3RpdmUsIHRoZSBwcmVzZW5jZSBvZiBgdGNwX29mZmxvYWQub2AgaW4gdGhlIExpbnV4IGtlcm5lbCBpcyByZWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHdoaWNoIGlzIHRvIHNheSwgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3Mga2V5LiBXZSBrbm93IGBDT05GSUdfSU5FVGAgaXMgZWZmZWN0aXZlbHkgdGhlIG1hc3RlciBzd2l0Y2ggZm9yIElQdjQgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIE1ha2VmaWxlIGxvZ2ljIGluIGBuZXQvYCBhc3NpZ25zIGBvYmoteWAgdG8gYENPTkZJR19JTkVUYCBpZiBpdCYjMzk7cyBzZXQuIFRoZXJlZm9yZSwgaWYgSVAgaXMgY29uZmlndXJlZCBhbmQgcHJlc2VudCwgYHRjcF9vZmZsb2FkLm9gIGlzIGdvaW5nIHRvIGJlIGJ1aWx0IGFsb25nc2lkZS4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzOyBpdCYjMzk7cyBhIGRpcmVjdCByZXN1bHQgb2YgaW5jbHVkaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgaXMgYSB2ZXJ5IHByZWRpY3RhYmxlIGFuZCBzZW5zaWJsZSBkZXNpZ24sIGVuc3VyaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzIGFyZSByZWFkaWx5IGF2YWlsYWJsZSB3aGVuIElQIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3B2Nl9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFRDUHY2IE9mZmxvYWQgT2JqZWN0IEZpbGUgTG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHRjcHY2X29mZmxvYWQub2Agb2JqZWN0IGZpbGUgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIHRyZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIElQdjYgbmV0d29ya2luZywgc28gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBtYWtlZmlsZSBkcml2ZW4gYnVpbGQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBjb25maXJtIHRoaXMgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgaXRzZWxmIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldC9pcHY2L01ha2VmaWxlYCBhY3R1YWxseSBkZWZpbmVzIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgdGNwdjZfb2ZmbG9hZC5vYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwdjZfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgT2ZmbG9hZCAtIEEgTWFrZWZpbGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBvZmZsb2FkIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgSVB2Ni1yZWxhdGVkIGNvZGUuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVENQIG9mZmxvYWQgaW4gYW4gSVB2NiBjb250ZXh0LCB0aGUgTWFrZWZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIGdpdmUgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCYjMzk7cyBjb21waWxlZCBhbmQgbGlua2VkIGluLCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgdGNwdjZfb2ZmbG9hZGAgaW4gdGhhdCBNYWtlZmlsZS4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgVENQIG9mZmxvYWQgc3BlY2lmaWNhbGx5IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcHY2X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMS0jaW5jbHVkZSBcJiMzNDtpcDZfb2ZmbG9hZC5oXCYjMzQ7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjIyOiNpbmNsdWRlIFwmIzM0O3RjcHY2X29mZmxvYWQuY1wmIzM0O1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMy1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMzMj1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgaXB2Nl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ3LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozNDg6XHRpZiAobGlrZWx5KG9wcyA9PSBcdTAwMjZuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkKSlcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ5LVx0XHRyZXR1cm4gdGNwNl9ncm9fY29tcGxldGUoc2tiLCBuaG9mZik7XG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz00Mzc9c3RhdGljIGludCBfX2luaXQgaXB2Nl9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQzOS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6NDQwOlx0aWYgKHRjcHY2X29mZmxvYWRfaW5pdCgpIFx1MDAzYyAwKVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NDEtXHRcdHByX2NyaXQoXCYjMzQ7JXM6IENhbm5vdCBhZGQgVENQIHByb3RvY29sIG9mZmxvYWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oPTEyPWludCB1ZHB2Nl9vZmZsb2FkX2V4aXQodm9pZCk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEzOmludCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZCk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oLTE0LVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0xNjg9c3RhdGljIHN0cnVjdCBza19idWZmICp0Y3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNC1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoyMDU6aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDYte1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIwNzpcdG5ldF9ob3RkYXRhLnRjcHY2X29mZmxvYWQgPSAoc3RydWN0IG5ldF9vZmZsb2FkKSB7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjA4LVx0XHQuY2FsbGJhY2tzID0ge1xuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTMtXHR9O1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIxNDpcdHJldHVybiBpbmV0Nl9hZGRfb2ZmbG9hZChcdTAwMjZuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkLCBJUFBST1RPX1RDUCk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjE1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgT2ZmbG9hZCBDb21waWxhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBJIHNlZSB0aGF0IGB0Y3B2Nl9vZmZsb2FkLmNgIGlzIGJlaW5nIGNvbXBpbGVkICp3aXRoaW4qIHRoZSBgaXA2X29mZmxvYWQuY2AgZmlsZS4gTm90aGluZyBwYXJ0aWN1bGFybHkgc3VycHJpc2luZyB0aGVyZSwgc2luY2UgVENQdjYgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIElQdjYgaW1wbGVtZW50YXRpb24gYXMgYSB3aG9sZS4gQW5kLCBhcyBleHBlY3RlZCwgdGhlIGBpcDZfb2ZmbG9hZC5vYCBvYmplY3QgZmlsZSBpcyBvbmx5IGdvaW5nIHRvIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkZXBlbmRlbmN5LCBvdGhlcndpc2UgaXQgd291bGQgbm90IGJlIGluY2x1ZGVkLiBNYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X29mZmxvYWQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSAmIzQzOz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZTo0ODpcdFx0XHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIGEgY29uY2lzZSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5ldHdvcmsgR1JPIEZ1bmN0aW9uYWxpdHkgQ2hlY2sqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGVuYWJsZWQuIE5vdywgdGhlIG1lYXQgb2YgdGhpcyBsaWtlbHkgbGllcyBpbiB0aGUgR1JPIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoOiBgdGNwX2dyb19yZWNlaXZlYCwgYHRjcDRfZ3JvX3JlY2VpdmVgLCBhbmQgYHRjcDZfZ3JvX3JlY2VpdmVgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHRjcDZfZ3JvX3JlY2VpdmVgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyBhY2Nlc3NpYmxlIGFuZCBtb2RpZmlhYmxlIGl0IGlzLCB3aGljaCwgb2YgY291cnNlLCB3aWxsIGRyaXZlIHRoZSBuZXh0IHN0ZXBzIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3A2X2dyb19yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0xNz1zdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01NS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo1NjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBza19idWZmICp0Y3A2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTctXHRcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0yMDU9aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjA5LVx0XHRcdC5nc29fc2VnbWVudFx0PVx0dGNwNl9nc29fc2VnbWVudCxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoyMTA6XHRcdFx0Lmdyb19yZWNlaXZlXHQ9XHR0Y3A2X2dyb19yZWNlaXZlLFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIxMS1cdFx0XHQuZ3JvX2NvbXBsZXRlXHQ9XHR0Y3A2X2dyb19jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBTeW1ib2xzKioKCkhtbSwgc28gYHRjcDZfZ3JvX3JlY2VpdmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGJ5IHRoZSBjb21waWxlci4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQ29uc2VxdWVudGx5LCBJIHNob3VsZG4mIzM5O3QgZXhwZWN0IGEgc2VwYXJhdGUgc3ltYm9sIGZvciBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLCByaWdodD8gSXQgd29uJiMzOTt0IGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzIGlmIHRoZSBjb21waWxlciBoYXMgcHJvcGVybHkgaW5saW5lZCBpdCwgYXMgaXQgc2hvdWxkLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSBzdXNwZWN0ZWQuIEl0IHdpbGwgYmUgcGFydCBvZiB3aGF0ZXZlciBmdW5jdGlvbiBjYWxscyBpdC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgYHRjcDRfZ3JvX3JlY2VpdmVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJcyBpdCBpbmxpbmUgdG9vPyBJcyB0aGVyZSBhIHN5bWJvbCBmb3IgaXQgSSBjYW4gbG9vayBhdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjc9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDI4OnN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQyOS17XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Nzg9aW50IF9faW5pdCB0Y3B2NF9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ4Mi1cdFx0XHQuZ3NvX3NlZ21lbnRcdD1cdHRjcDRfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ4MzpcdFx0XHQuZ3JvX3JlY2VpdmVcdD1cdHRjcDRfZ3JvX3JlY2VpdmUsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ4NC1cdFx0XHQuZ3JvX2NvbXBsZXRlXHQ9XHR0Y3A0X2dyb19jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFRDUCBHUk8gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3A0X2dyb19yZWNlaXZlYC4gSXQmIzM5O3MgZGVmaW5lZCB3aXRoIGBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIHVzdWFsbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uIGlmIGBDT05GSUdfUkVUUE9MSU5FYCBpcyBlbmFibGVkLCB3aGljaCBzdWdnZXN0cyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgaXQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBCdXQgd2FpdCwgaXQmIzM5O3MgKm5vdCogaW5saW5lLiBXaHkgaXNuJiMzOTt0IGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoYXQgZGVzaWduIGRlY2lzaW9uLgoKQW5kIGFub3RoZXIgdGhpbmc6IGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIGRlZmluZWQgaW4gYG5ldC9pcHY0L3RjcF9vZmZsb2FkLmNgLiBBbHJpZ2h0LCB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlOyB0aGlzIGlzIHRoZSBJUHY0IFRDUCBvZmZsb2FkIHBhdGguIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGltcGxlbWVudGF0aW9uIGZvciBUQ1AuIEl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGNsZWFyIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBnaXZlbiB0aGF0IGl0IGNvbmNlcm5zIGEgc3BlY2lmaWMgcHJvdG9jb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg1LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgR3Jva2tpbmcgb2YgVENQL0lQdjYgR1JPIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIEdSTyBzdHVmZiBhbmQgSSYjMzk7dmUgZ290IHRvIHNvcnQgb3V0IHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSG1tLCBgdGNwX2dyb19yZWNlaXZlYC4uLiB0aGF0IG9uZSBpc24mIzM5O3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHRjcDZfZ3JvX3JlY2VpdmVgIGFnYWluLiBBaGEhICpUaGF0KiBvbmUmIzM5O3MgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW55d2F5PyBSaWdodCwgZGlnZ2luZyBhcm91bmQsIEkgc2VlIGl0JiMzOTtzIGluIGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoYXQgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGBuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jYC4gVGhpcyBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCBvciBhIGhpZXJhcmNoeSBpbiB0aGUgR1JPIHByb2Nlc3NpbmcuCgpJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLCBsZXQgbWUgdGhpbmsuLi4gYWgsIHllcyEgV2hhdCBhYm91dCBgaXB2Nl9ncm9fcmVjZWl2ZWAsIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jYD8gT2theSwgc28gdGhhdCBsaWtlbHkgaGFuZGxlcyB0aGUgSVB2NiBwb3J0aW9uLiBUaGVzZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciBvcHRpbWl6YXRpb24uIEdvdHRhIGtlZXAgdGhlc2UgcGllY2VzIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfZ3JvX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MTgxPXN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjAyLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMDM6SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjA0LVx0XHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yOTktfVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozMDA6RVhQT1JUX0lORElSRUNUX0NBTExBQkxFKGlwdjZfZ3JvX3JlY2VpdmUpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zMDEtXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMwMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNpdF9pcDZpcDZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTMxMy1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MzE0Olx0cmV0dXJuIGlwdjZfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKTtcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzE1LX1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQ4LVx0XHRcdC5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0OTpcdFx0XHQuZ3JvX3JlY2VpdmUgPSBpcHY2X2dyb19yZWNlaXZlLFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NTAtXHRcdFx0Lmdyb19jb21wbGV0ZSA9IGlwdjZfZ3JvX2NvbXBsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IEdSTyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgaXB2Nl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHJlYWwgbWVhdCBzZWVtcyB0byBiZSBpbiBgdGNwX2dyb19yZWNlaXZlYCwgYHRjcDRfZ3JvX3JlY2VpdmVgLCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYC4gRGVmaW5pdGVseSwgYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYCBhcmUgcHJpbWFyeSBzeW1ib2xzIHRvIGZvY3VzIG9uLiBCdXQgd2hhdCBhYm91dCBgdGNwNl9ncm9fcmVjZWl2ZWA/IEkgaW5pdGlhbGx5IHRob3VnaHQsIHNpbmNlIGl0JiMzOTtzIGlubGluZWQsIGl0JiMzOTtkIGJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gYGlwdjZfZ3JvX3JlY2VpdmVgIG9yIHNvbWV0aGluZyB0aGF0IGNhbGxzICppdCouIFdhaXQuLi4gaXNuJiMzOTt0IGB0Y3A2X2dyb19yZWNlaXZlYCBjYWxsZWQgYnkgYGlwdjZfZ3JvX3JlY2VpdmVgPyBIbW0sIG5vLCB0aGF0IGNhbiYjMzk7dCBiZSByaWdodDsgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIGAuZ3JvX3JlY2VpdmVgIGNhbGxiYWNrIGZvciBgSVBQUk9UT19UQ1BgIHdpdGhpbiBgdGNwdjZfb2ZmbG9hZF9pbml0YC4KClRoaXMgaXMgY29uZnVzaW5nIGJlY2F1c2UgaWYgaXQgaXMgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgaG93IGNhbiBpdCBiZSByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24/IFRoaXMgaW1wbGllcyBzb21ldGhpbmcgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcgYWJvdXQgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGlubGluaW5nIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gT2theSwgdGltZSB0byBjaGVjayB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AgdG8gc2VlIGhvdyB0aGUgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIEdvdHRhIGNsYXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwNl9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTc9c3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTUtXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6NTY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTU3LVx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MjA1PWludCBfX2luaXQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwOS1cdFx0XHQuZ3NvX3NlZ21lbnRcdD1cdHRjcDZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjEwOlx0XHRcdC5ncm9fcmVjZWl2ZVx0PVx0dGNwNl9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTEtXHRcdFx0Lmdyb19jb21wbGV0ZVx0PVx0dGNwNl9ncm9fY29tcGxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgQ29tcGlsYXRpb24gb2YgYSBDYWxsYmFjayBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGlzIHNldCB1cCBhcyBhIGNhbGxiYWNrLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBub24taW5saW5lIHZlcnNpb24gb2YgaXQsIGp1c3Qgc28gd2UgY2FuIGdldCBpdHMgYWRkcmVzcy4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgbm90aGluZyBncm91bmRicmVha2luZyB0aGVyZS4gQnV0IG5vdyBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3RyZWFtbGluZWQgYXBwcm9hY2ggaGVyZS4gTWF5YmUgSSBjYW4gYnlwYXNzIHRoZSB3aG9sZSBjYWxsYmFjayBtZWNoYW5pc20gYWx0b2dldGhlci4gSW5zdGVhZCBvZiB0aGlzLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IHVzaW5nIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAuIFRoZXkgbWlnaHQgYmUgYmV0dGVyIG9wdGlvbnMgZm9yIGhhbmRsaW5nIHRoaXMgZGlyZWN0bHkuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aG9zZSBmdW5jdGlvbnMgZXZlbiBleHBvcnRlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdmlzaWJpbGl0eSB0byBzZWUgaWYgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIHdoZXJlIEkmIzM5O20gd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN1bW1hcml6ZSBteSAmIzM0O3Rob3VnaHRzJiMzNDsgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQuIEhlcmUgd2UgZ286CgoqKkNoZWNraW5nIHRoZSBFeHBvcnQqKgoKQWxyaWdodCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBzdGVwLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBkYXRhLCB0aGUgbW9kZWwsIHRoZSBjb25maWd1cmF0aW9ucywgb3Igd2hhdGV2ZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXMgYWN0dWFsbHkgYmVlbiBleHBvcnRlZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCwgYWxtb3N0IHNpbGx5LCBzdGVwLCBidXQgb2Z0ZW4gb3Zlcmxvb2tlZCBpbiB0aGUgcnVzaCB0byBhbmFseXplIHJlc3VsdHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZXhwb3J0IGhhcyBoYXBwZW5lZCBhcyBleHBlY3RlZC4gRGlkIEkgc2VsZWN0IHRoZSBjb3JyZWN0IGZvcm1hdD8gQXJlIHRoZSBmaWxlcyB3aGVyZSB0aGV5IHNob3VsZCBiZT8gSXMgZXZlcnl0aGluZyB6aXBwZWQgb3IgcGFja2FnZWQgY29ycmVjdGx5PyBNYWtpbmcgc3VyZSB0aGUgZXhwb3J0IGFjdHVhbGx5ICp3b3JrZWQqIGlzIGZvdW5kYXRpb25hbCB0byBldmVyeXRoaW5nIGVsc2UuIE5vIGV4cG9ydCwgbm8gYW5hbHlzaXMuIFRpbWUgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVC4qdGNwX2dyb19yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFRDUCBPZmZsb2FkIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBUQ1Agb2ZmbG9hZCBzaXR1YXRpb24gaGVyZS4gSXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBjb25maWd1cmF0aW9uOyB0aGUgaXNzdWUgZmVlbHMgbW9yZSBkeW5hbWljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgbWFnaWMgaXMgaGFwcGVuaW5nLiBUaGUgdHJhY2Ugc2VlbXMgdG8gYmUgcG9pbnRpbmcgdG8gc29tZXRoaW5nIGJlaW5nIGhhbmRsZWQgaW50ZXJuYWxseSwgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFNpbmNlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gVENQIGFuZCBzb21lIHNvcnQgb2YgcmVjZWl2ZSBwcm9jZXNzaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NCBjb250ZXh0LiBHaXZlbiB0aGUgY2x1ZXMsIEkmIzM5O20gYmV0dGluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBmbG93LCB3aWxsIGJlIG5lc3RsZWQgaW5zaWRlIGBuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYHRjcF9ncm9fcmVjZWl2ZWAgZnVuY3Rpb247IHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgcHJvY2Vzc2luZy4gSXTigJlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGV4YW1pbmluZyBob3cgb2ZmbG9hZCBpbnRlcmFjdHMgd2l0aCBHUk8gaW4gdGhlIElQdjQgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg1LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgwCgkJCQkJCQlvdXRwdXQ6IDEwMQoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR1JPIFJlY2VpdmUgRnVuY3Rpb24gSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBHUk8gc3R1ZmYsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGtleSBmb3IgVENQIEdSTyByZWNlaXZlLiBgdGNwX2dyb19yZWNlaXZlYCBhbmQgYHRjcDRfZ3JvX3JlY2VpdmVgIGFyZSBqdW1waW5nIG91dCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gQnV0IGhhbmcgb24uLi4gd2hhdCBhYm91dCBgdGNwNl9ncm9fcmVjZWl2ZWA/IEFoLCByaWdodCwgaXQmIzM5O3MgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLiBUaGF0IG1lYW5zIGl0ICp1c3VhbGx5KiB3b24mIzM5O3QgaGF2ZSBhIGRlZGljYXRlZCBzeW1ib2wgYWRkcmVzcy4gVGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IGlubGluZSBpdCwgbWFraW5nIGl0IGhhcmRlciB0byB0cmFjayBkb3duLiBIb3dldmVyLCBpZiBpdHMgYWRkcmVzcyAqaXMqIGFjdHVhbGx5IHRha2VuLCB0aGUgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBhIGZ1bmN0aW9uLCBidXQgaXRzIG5hbWUgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUuIFNvLCBmb3Igbm93LCBJJiMzOTtsbCBzdGljayB3aXRoIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAuIFRoZXkgc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGlhYmxlIHN0YXJ0aW5nIHBvaW50cy4KCk5vdywgSSBzaG91bGQgY29uc2lkZXIgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCwgd2hpY2ggc2VlbSBsaWtlIHRoZSBwcmltYXJ5IGRyaXZlcnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnM/IFRoZSBjb2RlIGFsc28gcmVmZXJlbmNlcyBgc2tiX2lzX2dzbyhza2IpYCBhbmQgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYC4gVGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZlYXR1cmVzLCBzbyBJJiMzOTttIG5vdCBleHBlY3RpbmcgdGhlbSB0byBiZSBjb25maWctZGVwZW5kZW50IGluIGEgc2lnbmlmaWNhbnQgd2F5LiBTbywgYElORVRgIGFuZCBgSVBWNmAgYXJlIHRoZSBtYWluIG9uZXMgdGhhdCBzZWVtIHRvIG1hdHRlci4KCkp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgZ2l2ZSBgdGNwNF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3BfZ3JvX3JlY2VpdmVgIGFub3RoZXIgcXVpY2sgb25jZS1vdmVyIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMTA6NDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuYwppbmRleCAzYjFmZGNkM2NiMjliLi5lNzRkOTljYTlmYWNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMKQEAgLTMzMiw2ICYjNDM7MzMyLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlmbHVzaCB8PSBza2ItJmd0O2lwX3N1bW1lZCAhPSBwLSZndDtpcF9zdW1tZWQ7CiAJCWZsdXNoIHw9IHNrYi0mZ3Q7Y3N1bV9sZXZlbCAhPSBwLSZndDtjc3VtX2xldmVsOwogCQlmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7Y291bnQgJmd0Oz0gNjQ7CiYjNDM7CQlmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3Q7CiAJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7CiAKIAkJaWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZV9saXN0KHAsIHNrYikpCkBAIC0zOTUsMTIgJiM0MzszOTYsMjAgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJaW50IGlpZiwgc2RpZjsKIAotCWlmIChsaWtlbHkoIShza2ItJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSkKLQkJcmV0dXJuOwotCiAJcCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTsKIAlpZiAocCkgewotCQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdDsKJiM0MzsJCS8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqLwomIzQzOwkJaWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCkgewomIzQzOwkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqLwomIzQzOwkJaWYgKE5BUElfR1JPX0NCKHApLSZndDtjb3VudCA9PSAxKQomIzQzOwkJCU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiYjNDM7CQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQxMCw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzayA9IF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBpcGgtJmd0O3NhZGRyLCB0aC0mZ3Q7c291cmNlLAogCQkJCSAgICAgICBpcGgtJmd0O2RhZGRyLCBudG9ocyh0aC0mZ3Q7ZGVzdCksCiAJCQkJICAgICAgIGlpZiwgc2RpZik7Ci0JTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2s7CiYjNDM7CU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gIXNrICZhbXA7JmFtcDsgIXNrYl9pc19nc28oc2tiKTsKIAlpZiAoc2spCiAJCXNvY2tfZ2VuX3B1dChzayk7CiB9CkBAIC00MzAsNyAmIzQzOzQzOSw4IEBAIHN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCF0aCkKIAkJZ290byBmbHVzaDsKIAotCXRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpOwomIzQzOwlpZiAodW5saWtlbHkoc2tiLSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKSkKJiM0MzsJCXRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpOwogCiAJcmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jCmluZGV4IGYyYTY1OWNkNjE4M2MuLmVlYzM3Nzg4NTVlYjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMKQEAgLTI2LDcgJiM0MzsyNiwxOCBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTsKIAlpZiAocCkgewotCQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdDsKJiM0MzsJCS8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqLwomIzQzOwkJaWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCkgewomIzQzOwkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqLwomIzQzOwkJaWYgKE5BUElfR1JPX0NCKHApLSZndDtjb3VudCA9PSAxKQomIzQzOwkJCU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiYjNDM7CQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM2LDcgJiM0Mzs0Nyw3IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsICZhbXA7aGRyLSZndDtzYWRkciwgdGgtJmd0O3NvdXJjZSwKIAkJCQkJJmFtcDtoZHItJmd0O2RhZGRyLCBudG9ocyh0aC0mZ3Q7ZGVzdCksCiAJCQkJCWlpZiwgc2RpZik7Ci0JTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2s7CiYjNDM7CU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gIXNrICZhbXA7JmFtcDsgIXNrYl9pc19nc28oc2tiKTsKIAlpZiAoc2spCiAJCXNvY2tfZ2VuX3B1dChzayk7CiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JPIEZyYWdsaXN0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9vZmZsb2FkLmNgIGFuZCBgdGNwdjZfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBpc19mbGlzdGAgZmxhZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYE5BUElfR1JPX0NCYCBzdHJ1Y3R1cmUsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaG93IGBpc19mbGlzdGAgaXMgc2V0IGFuZCBjaGVja2VkIGluIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIHBsdXMgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYWRkZWQgaW4gYHRjcF9ncm9fcmVjZWl2ZWA6IGBmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3Q7YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgYE5BUElfR1JPX0NCYCBtYWNybywgcGFydGljdWxhcmx5IGBza2ItJmd0O2NiYC4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCBgc2tiLSZndDtjYmAgaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoaXMgY29kZSBydW5zPyBJIGtub3cgYE5BUElfR1JPX0NCYCBpcyBwcmV0dHkgY2VudHJhbCB0byBHUk8sIGFuZCB0aGUgYGNiYCBmaWVsZCAqc2hvdWxkKiBiZSBpbml0aWFsaXplZCB3aGVuIGFuIGBza2JgIGVudGVycyB0aGUgR1JPIHBhdGgsIGJ1dCB0aGVzZSBjaGFuZ2VzIHRvIGBpc19mbGlzdGAuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gbGllcy4gVGhhdCBuZXcgY2hlY2sgaW4gYHRjcF9ncm9fcmVjZWl2ZWAgaXMgc2NyZWFtaW5nICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCYjMzQ7IGlmIGVpdGhlciBgcGAgb3IgYHNrYmAgZG9uJiMzOTt0IGhhdmUgYGlzX2ZsaXN0YCBwcm9wZXJseSBzZXQuCgpBaGEhIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgKmRvZXMqIHNldCBgTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3RgLiBCdXQsIHRoZSBrZXkgaXMgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKHVubGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19GUkFHTElTVCkpYC4gSWYgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYCBpc24mIzM5O3Qgc2V0LCB0aGVuIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgKmlzbiYjMzk7dCogY2FsbGVkLiBUaGF0IG1lYW5zIGBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdGAgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkIGluIHRoYXQgY2FzZSwgbGVhZGluZyB0byB0aGF0IHJpc2t5IGNvbXBhcmlzb24gSSBzYXcgZWFybGllci4gV2UgYWxzbyBrbm93IHRoYXQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBjYW4gaGF2ZSBzaW1pbGFyIGlzc3Vlcy4KCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGBnaXQgZ3JlcGAgYW5kIHRyYWNrIGRvd24gZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYGlzX2ZsaXN0YCBpcyAqYWN0dWFsbHkqIGluaXRpYWxpemVkIHRvIGJlIHN1cmUgYW5kIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZyBldmVyeXdoZXJlIGl0IG5lZWRzIHRvIGJlIGJlZm9yZSBiZWluZyBjaGVja2VkLiBHb3R0YSBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfZmxpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZ3JvLmg9MTc9c3RydWN0IG5hcGlfZ3JvX2NiIHtcbi0tXG5pbmNsdWRlL25ldC9ncm8uaC04My1cdFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXG5pbmNsdWRlL25ldC9ncm8uaDo4NDpcdFx0dThcdGlzX2ZsaXN0OjE7XG5pbmNsdWRlL25ldC9ncm8uaC04NS1cdCk7XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yODY9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzI5LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzozMzA6XHRpZiAodW5saWtlbHkoTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpKSB7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTMzMS1cdFx0Zmx1c2ggfD0gKF9fZm9yY2UgaW50KShmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSk7XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0zMzQtXHRcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50IFx1MDAzZT0gNjQ7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjMzNTpcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzM2LVx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX2dyb19yZWNlaXZlX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MzkwPXN0YXRpYyB2b2lkIHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDEtXHRcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDI6XHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDM6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA4LVx0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDA5Olx0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDEwLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MTE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MTItXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MjEtXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDIyOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDIzLVx0aWYgKHNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9NDUyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3A0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGhvZmYpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NTctXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ1ODpcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0KSkge1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NTktXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0ZSQUdMSVNUIHwgU0tCX0dTT19UQ1BWNDtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTY5Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZV9zZWdtZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03MzMtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjczNDpcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzM1LVx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggPSAxO1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzQ5LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3NTA6XHRcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpIHtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzUxLVx0XHRcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTc4MT1zdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03OTQtXHQgKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk1Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc5Ni1cdGlmICghc2sgfHwgIXVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUpIHtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwMy1cdFx0aWYgKHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4MDQ6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IHNrID8gIXVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spIDogMTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA1LVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDYtXHRcdGlmICgoIXNrIFx1MDAyNlx1MDAyNiAoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fVURQX0ZXRCkpIHx8XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwNzpcdFx0ICAgIChzayBcdTAwMjZcdTAwMjYgdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykpIHx8IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwOC1cdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTk1ND1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwNF9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtOTYwLVx0LyogZG8gZnJhZ2xpc3Qgb25seSBpZiB0aGVyZSBpcyBubyBvdXRlciBVRFAgZW5jYXAgKG9yIHdlIGFscmVhZHkgcHJvY2Vzc2VkIGl0KSAqL1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo5NjE6XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCBcdTAwMjZcdTAwMjYgIU5BUElfR1JPX0NCKHNrYiktXHUwMDNlZW5jYXBfbWFyaykge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy05NjItXHRcdHVoLVx1MDAzZWxlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBuaG9mZik7XG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTI5LVx0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozMDpcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MzE6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTMyLVx0XHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMzYtXHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjM3Olx0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0zOC1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozOTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNDAtXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQ5LVx0XHRcdFx0XHRpaWYsIHNkaWYpO1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjUwOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01MS1cdGlmIChzaylcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGNwNl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRob2ZmKVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy04Ni1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo4NzpcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0KSkge1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTg4LVx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19GUkFHTElTVCB8IFNLQl9HU09fVENQVjY7XG4tLVxubmV0L2lwdjYvdWRwX29mZmxvYWQuYz0xNjY9aW50IHVkcDZfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZilcbi0tXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE3Mi1cdC8qIGRvIGZyYWdsaXN0IG9ubHkgaWYgdGhlcmUgaXMgbm8gb3V0ZXIgVURQIGVuY2FwIChvciB3ZSBhbHJlYWR5IHByb2Nlc3NlZCBpdCkgKi9cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTczOlx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgXHUwMDI2XHUwMDI2ICFOQVBJX0dST19DQihza2IpLVx1MDAzZWVuY2FwX21hcmspIHtcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTc0LVx0XHR1aC1cdTAwM2VsZW4gPSBodG9ucyhza2ItXHUwMDNlbGVuIC0gbmhvZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpc19mbGlzdGAgd2l0aGluIHRoZSBHUk8gQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgaXNfZmxpc3RgIGZpZWxkIHdpdGhpbiB0aGUgYG5hcGlfZ3JvX2NiYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWNhdXNlIG9mIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHN1YnN5c3RlbSwgSSBrbm93IHRoYXQgYG5hcGlfZ3JvX2NiYCBpcyB3aGVyZSBhbGwgdGhlIEdSTyBzdGF0ZSBsaXZlcy4gSSBzZWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZmllbGQgbGl2ZXMgd2l0aGluIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgLiBOb3csIHdoZXJlIGRvZXMgYG5hcGlfZ3JvX2NiYCBnZXQgaW5pdGlhbGl6ZWQ/IFRoZSBjb2RlIHN1Z2dlc3RzIHRoZSBwcmltZSBzdXNwZWN0IGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvY29yZS9ncm8uY2AuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgR1JPIHByb2Nlc3NpbmcsIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igc2V0dGluZyB1cCB0aGUgR1JPIGNvbnRleHQuCgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgd2l0aGluIGBkZXZfZ3JvX3JlY2VpdmVgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpc19mbGlzdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0aGVyZSwgb3IgcGVyaGFwcyBpcyBnaXZlbiBhIGRlZmF1bHQgdmFsdWUuIEl04oCZcyBhbHNvIHBvc3NpYmxlIGl0JiMzOTtzIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoZSBgbmFwaV9ncm9fY2JgIGlzIHNldCB1cC4gS25vd2luZyBleGFjdGx5IHdoZW4gYW5kIGhvdyBgaXNfZmxpc3RgIGdldHMgaXRzIHZhbHVlIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBHUk8gYmVoYXZpb3IuIEl0IHNlZW1zIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZsb3cgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOQVBJX0dST19DQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2dyby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2dyby5jPTkyPWludCBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtMTE1LVx0aWYgKHVubGlrZWx5KHAtXHUwMDNlbGVuICYjNDM7IGxlbiBcdTAwM2U9IG5ldGlmX2dldF9ncm9fbWF4X3NpemUocC1cdTAwM2VkZXYsIHApIHx8XG5uZXQvY29yZS9ncm8uYzoxMTY6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCkpXG5uZXQvY29yZS9ncm8uYy0xMTctXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMTE5LVx0aWYgKHVubGlrZWx5KHAtXHUwMDNlbGVuICYjNDM7IGxlbiBcdTAwM2U9IEdST19MRUdBQ1lfTUFYX1NJWkUpKSB7XG5uZXQvY29yZS9ncm8uYzoxMjA6XHRcdGlmIChOQVBJX0dST19DQihza2IpLVx1MDAzZXByb3RvICE9IElQUFJPVE9fVENQIHx8XG5uZXQvY29yZS9ncm8uYy0xMjEtXHRcdCAgICBwLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4tLVxubmV0L2NvcmUvZ3JvLmMtMTI0LVxubmV0L2NvcmUvZ3JvLmM6MTI1Olx0c2VncyA9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQ7XG5uZXQvY29yZS9ncm8uYzoxMjY6XHRscCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3Q7XG5uZXQvY29yZS9ncm8uYy0xMjctXHRwaW5mbyA9IHNrYl9zaGluZm8obHApO1xuLS1cbm5ldC9jb3JlL2dyby5jLTE1OC1cbm5ldC9jb3JlL2dyby5jOjE1OTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmVlID0gTkFQSV9HUk9fRlJFRTtcbm5ldC9jb3JlL2dyby5jLTE2MC1cdFx0Z290byBkb25lO1xuLS1cbm5ldC9jb3JlL2dyby5jLTE4NC1cdFx0c2tiLVx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xubmV0L2NvcmUvZ3JvLmM6MTg1Olx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZyZWUgPSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEO1xubmV0L2NvcmUvZ3JvLmMtMTg2LVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjA1LVxubmV0L2NvcmUvZ3JvLmM6MjA2Olx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QgPT0gcClcbm5ldC9jb3JlL2dyby5jLTIwNy1cdFx0c2tiX3NoaW5mbyhwKS1cdTAwM2VmcmFnX2xpc3QgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yMDgtXHRlbHNlXG5uZXQvY29yZS9ncm8uYzoyMDk6XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QtXHUwMDNlbmV4dCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jOjIxMDpcdE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yMTEtXHRfX3NrYl9oZWFkZXJfcmVsZWFzZShza2IpO1xuLS1cbm5ldC9jb3JlL2dyby5jLTIxNC1kb25lOlxubmV0L2NvcmUvZ3JvLmM6MjE1Olx0TkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgJiM0Mzs9IHNlZ3M7XG5uZXQvY29yZS9ncm8uYy0yMTYtXHRwLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBsZW47XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjI1LVx0fVxubmV0L2NvcmUvZ3JvLmM6MjI2Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VzYW1lX2Zsb3cgPSAxO1xubmV0L2NvcmUvZ3JvLmMtMjI3LVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvZ3JvLmM9MjMwPWludCBza2JfZ3JvX3JlY2VpdmVfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9ncm8uYy0yMzMtXHRpZiAodW5saWtlbHkocC1cdTAwM2VsZW4gJiM0Mzsgc2tiLVx1MDAzZWxlbiBcdTAwM2U9IDY1NTM2IHx8XG5uZXQvY29yZS9ncm8uYzoyMzQ6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCkpXG5uZXQvY29yZS9ncm8uYy0yMzUtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjM3LVx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcbm5ldC9jb3JlL2dyby5jOjIzODpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCA9IDE7XG5uZXQvY29yZS9ncm8uYy0yMzktXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL2dyby5jLTI0MS1cbm5ldC9jb3JlL2dyby5jOjI0MjpcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2VsYXN0ID09IHApXG5uZXQvY29yZS9ncm8uYy0yNDMtXHRcdHNrYl9zaGluZm8ocCktXHUwMDNlZnJhZ19saXN0ID0gc2tiO1xubmV0L2NvcmUvZ3JvLmMtMjQ0LVx0ZWxzZVxubmV0L2NvcmUvZ3JvLmM6MjQ1Olx0XHROQVBJX0dST19DQihwKS1cdTAwM2VsYXN0LVx1MDAzZW5leHQgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yNDYtXG4tLVxubmV0L2NvcmUvZ3JvLmMtMjQ4LVxubmV0L2NvcmUvZ3JvLmM6MjQ5Olx0TkFQSV9HUk9fQ0IocCktXHUwMDNlbGFzdCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jOjI1MDpcdE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbm5ldC9jb3JlL2dyby5jLTI1MS1cdHAtXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjYwLVxubmV0L2NvcmUvZ3JvLmM6MjYxOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VzYW1lX2Zsb3cgPSAxO1xubmV0L2NvcmUvZ3JvLmMtMjYyLVxuLS1cbm5ldC9jb3JlL2dyby5jPTI2Nj1zdGF0aWMgdm9pZCBncm9fY29tcGxldGUoc3RydWN0IGdyb19ub2RlICpncm8sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtMjc0LVxubmV0L2NvcmUvZ3JvLmM6Mjc1Olx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQgPT0gMSkge1xubmV0L2NvcmUvZ3JvLmMtMjc2LVx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgPSAwO1xuLS1cbm5ldC9jb3JlL2dyby5jLTMwMC1vdXQ6XG5uZXQvY29yZS9ncm8uYzozMDE6XHRncm9fbm9ybWFsX29uZShncm8sIHNrYiwgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjb3VudCk7XG5uZXQvY29yZS9ncm8uYy0zMDItfVxuLS1cbm5ldC9jb3JlL2dyby5jPTMwND1zdGF0aWMgdm9pZCBfX2dyb19mbHVzaF9jaGFpbihzdHJ1Y3QgZ3JvX25vZGUgKmdybywgdTMyIGluZGV4LCBib29sIGZsdXNoX29sZClcbi0tXG5uZXQvY29yZS9ncm8uYy0zMDktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShza2IsIHAsIGhlYWQsIGxpc3QpIHtcbm5ldC9jb3JlL2dyby5jOjMxMDpcdFx0aWYgKGZsdXNoX29sZCBcdTAwMjZcdTAwMjYgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VhZ2UgPT0gamlmZmllcylcbm5ldC9jb3JlL2dyby5jLTMxMS1cdFx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvZ3JvLmM9MzU3PXN0YXRpYyB2b2lkIGdyb19saXN0X3ByZXBhcmUoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9ncm8uYy0zNjctXHRcdGlmIChoYXNoICE9IHNrYl9nZXRfaGFzaF9yYXcocCkpIHtcbm5ldC9jb3JlL2dyby5jOjM2ODpcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2VzYW1lX2Zsb3cgPSAwO1xubmV0L2NvcmUvZ3JvLmMtMzY5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9jb3JlL2dyby5jLTM5Ni1cbm5ldC9jb3JlL2dyby5jOjM5NzpcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlc2FtZV9mbG93ID0gIWRpZmZzO1xubmV0L2NvcmUvZ3JvLmMtMzk4LVx0fVxuLS1cbm5ldC9jb3JlL2dyby5jPTQwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19yZXNldF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ob2ZmKVxuLS1cbm5ldC9jb3JlL2dyby5jLTQwNi1cbm5ldC9jb3JlL2dyby5jOjQwNzpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlbmV0d29ya19vZmZzZXQgPSAwO1xubmV0L2NvcmUvZ3JvLmM6NDA4Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VkYXRhX29mZnNldCA9IDA7XG5uZXQvY29yZS9ncm8uYy00MDktXHRoZWFkbGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbm5ldC9jb3JlL2dyby5jOjQxMDpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgPSBza2ItXHUwMDNlZGF0YTtcbm5ldC9jb3JlL2dyby5jOjQxMTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzBfbGVuID0gaGVhZGxlbjtcbm5ldC9jb3JlL2dyby5jLTQxMi1cdGlmIChoZWFkbGVuKVxuLS1cbm5ldC9jb3JlL2dyby5jLTQyMC1cdCAgICAoIU5FVF9JUF9BTElHTiB8fCAhKChza2JfZnJhZ19vZmYoZnJhZzApICYjNDM7IG5ob2ZmKSBcdTAwMjYgMykpKSB7XG5uZXQvY29yZS9ncm8uYzo0MjE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgPSBza2JfZnJhZ19hZGRyZXNzKGZyYWcwKTtcbm5ldC9jb3JlL2dyby5jOjQyMjpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmFnMF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsXG5uZXQvY29yZS9ncm8uYy00MjMtXHRcdFx0XHRcdFx0ICAgIHNrYl9mcmFnX3NpemUoZnJhZzApLFxuLS1cbm5ldC9jb3JlL2dyby5jPTQyOD1zdGF0aWMgdm9pZCBncm9fcHVsbF9mcm9tX2ZyYWcwKHN0cnVjdCBza19idWZmICpza2IsIGludCBncm93KVxuLS1cbm5ldC9jb3JlL2dyby5jLTQzMy1cbm5ldC9jb3JlL2dyby5jOjQzNDpcdG1lbWNweShza2JfdGFpbF9wb2ludGVyKHNrYiksIE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAsIGdyb3cpO1xubmV0L2NvcmUvZ3JvLmMtNDM1LVxuLS1cbm5ldC9jb3JlL2dyby5jPTQ3Nj1zdGF0aWMgZW51bSBncm9fcmVzdWx0IGRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgZ3JvX25vZGUgKmdybyxcbi0tXG5uZXQvY29yZS9ncm8uYy01MDYtXHRcdFx0XHRcdHNpemVvZih1MzIpKSk7IC8qIEF2b2lkIHNsb3cgdW5hbGlnbmVkIGFjYyAqL1xubmV0L2NvcmUvZ3JvLmM6NTA3Olx0Kih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7XG5uZXQvY29yZS9ncm8uYzo1MDg6XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoID0gc2tiX2hhc19mcmFnX2xpc3Qoc2tiKTtcbm5ldC9jb3JlL2dyby5jOjUwOTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQgPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTEwLVx0aWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpIHtcbm5ldC9jb3JlL2dyby5jOjUxMTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjb3VudCA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2Vncztcbm5ldC9jb3JlL2dyby5jLTUxMi1cdFx0LyogT25seSBzdXBwb3J0IFRDUCBhbmQgbm9uIERPREdZIHVzZXJzLiAqL1xuLS1cbm5ldC9jb3JlL2dyby5jLTUxNC1cdFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fRE9ER1kpKVxubmV0L2NvcmUvZ3JvLmM6NTE1Olx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTE2LVx0fVxuLS1cbm5ldC9jb3JlL2dyby5jLTUyMC1cdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG5uZXQvY29yZS9ncm8uYzo1MjE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bSA9IHNrYi1cdTAwM2Vjc3VtO1xubmV0L2NvcmUvZ3JvLmM6NTIyOlx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWNzdW1fdmFsaWQgPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTIzLVx0XHRicmVhaztcbm5ldC9jb3JlL2dyby5jLTUyNC1cdGNhc2UgQ0hFQ0tTVU1fVU5ORUNFU1NBUlk6XG5uZXQvY29yZS9ncm8uYzo1MjU6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bV9jbnQgPSBza2ItXHUwMDNlY3N1bV9sZXZlbCAmIzQzOyAxO1xubmV0L2NvcmUvZ3JvLmMtNTI2LVx0XHRicmVhaztcbi0tXG5uZXQvY29yZS9ncm8uYy01MzktXG5uZXQvY29yZS9ncm8uYzo1NDA6XHRzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLVx1MDAzZXNhbWVfZmxvdztcbm5ldC9jb3JlL2dyby5jOjU0MTpcdHJldCA9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7XG5uZXQvY29yZS9ncm8uYy01NDItXG4tLVxubmV0L2NvcmUvZ3JvLmMtNTUxLVxubmV0L2NvcmUvZ3JvLmM6NTUyOlx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2gpXG5uZXQvY29yZS9ncm8uYy01NTMtXHRcdGdvdG8gbm9ybWFsO1xuLS1cbm5ldC9jb3JlL2dyby5jLTU1OS1cbm5ldC9jb3JlL2dyby5jOjU2MDpcdC8qIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzZXR0aW5nIE5BUElfR1JPX0NCKHNrYiktXHUwMDNle2FnZXxsYXN0fSAqL1xubmV0L2NvcmUvZ3JvLmMtNTYxLVx0Z3JvX3RyeV9wdWxsX2Zyb21fZnJhZzAoc2tiKTtcbm5ldC9jb3JlL2dyby5jOjU2MjpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlYWdlID0gamlmZmllcztcbm5ldC9jb3JlL2dyby5jOjU2MzpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlbGFzdCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jLTU2NC1cdGlmICghc2tiX2lzX2dzbyhza2IpKVxuLS1cbm5ldC9jb3JlL2dyby5jPTYxMj1zdGF0aWMgZ3JvX3Jlc3VsdF90IGdyb19za2JfZmluaXNoKHN0cnVjdCBncm9fbm9kZSAqZ3JvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2dyby5jLTYyMC1cdGNhc2UgR1JPX01FUkdFRF9GUkVFOlxubmV0L2NvcmUvZ3JvLmM6NjIxOlx0XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmVlID09IE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQpXG5uZXQvY29yZS9ncm8uYy02MjItXHRcdFx0bmFwaV9za2JfZnJlZV9zdG9sZW5faGVhZChza2IpO1xuLS1cbm5ldC9jb3JlL2dyby5jPTcwNT1zdGF0aWMgZ3JvX3Jlc3VsdF90IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5uZXQvY29yZS9ncm8uYy03MTgtXHRjYXNlIEdST19NRVJHRURfRlJFRTpcbm5ldC9jb3JlL2dyby5jOjcxOTpcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJlZSA9PSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEKVxubmV0L2NvcmUvZ3JvLmMtNzIwLVx0XHRcdG5hcGlfc2tiX2ZyZWVfc3RvbGVuX2hlYWQoc2tiKTtcbi0tXG5uZXQvY29yZS9ncm8uYz03Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICpuYXBpX2ZyYWdzX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZ3JvLmMtNzU4LVxubmV0L2NvcmUvZ3JvLmM6NzU5Olx0XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmFnMCAhPSBza2ItXHUwMDNlZGF0YSlcbm5ldC9jb3JlL2dyby5jLTc2MC1cdFx0XHRncm9fcHVsbF9mcm9tX2ZyYWcwKHNrYiwgaGxlbik7XG5uZXQvY29yZS9ncm8uYy03NjEtXG5uZXQvY29yZS9ncm8uYzo3NjI6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgJiM0Mzs9IGhsZW47XG5uZXQvY29yZS9ncm8uYzo3NjM6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzBfbGVuIC09IGhsZW47XG5uZXQvY29yZS9ncm8uYy03NjQtXHR9XG4tLVxubmV0L2NvcmUvZ3JvLmM9Nzk0PV9fc3VtMTYgX19za2JfZ3JvX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtODAwLVxubmV0L2NvcmUvZ3JvLmM6ODAxOlx0LyogTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtIGhvbGRzIHBzZXVkbyBjaGVja3N1bSAqL1xubmV0L2NvcmUvZ3JvLmM6ODAyOlx0c3VtID0gY3N1bV9mb2xkKGNzdW1fYWRkKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bSwgd3N1bSkpO1xubmV0L2NvcmUvZ3JvLmMtODAzLVx0LyogU2VlIGNvbW1lbnRzIGluIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKCkuICovXG4tLVxubmV0L2NvcmUvZ3JvLmMtODA5LVxubmV0L2NvcmUvZ3JvLmM6ODEwOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtID0gd3N1bTtcbm5ldC9jb3JlL2dyby5jOjgxMTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bV92YWxpZCA9IDE7XG5uZXQvY29yZS9ncm8uYy04MTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvZGluZyBUaGlzIEdSTyBDb250cm9sIEJsb2NrKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uIGFuZCBJIHNlZSB0aGlzIGxpbmU6IGAqKHUzMiAqKSZhbXA7TkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7emVyb2VkID0gMDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoaXMgYHplcm9lZGAgZmllbGQgaW4gdGhlIGBOQVBJX0dST19DQmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQmIzM5O3MgaW1wb3J0YW50IGZvciB0aGUgR1JPIHByb2Nlc3MuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYHN0cnVjdCBuYXBpX2dyb19jYmAgbG9va3MgbGlrZSBpbiBgaW5jbHVkZS9uZXQvZ3JvLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpcyBhbGwgYWJvdXQsIGFuZCB0aGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oPTE3PXN0cnVjdCBuYXBpX2dyb19jYiB7XG4tLVxuaW5jbHVkZS9uZXQvZ3JvLmgtNTMtXHQvKiBwb3J0aW9uIG9mIHRoZSBjYiBzZXQgdG8gemVybyBhdCBldmVyeSBncm8gaXRlcmF0aW9uICovXG5pbmNsdWRlL25ldC9ncm8uaDo1NDpcdHN0cnVjdF9ncm91cCh6ZXJvZWQsXG5pbmNsdWRlL25ldC9ncm8uaC01NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBHUk8gQ2FsbGJhY2sgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIEdSTyBzdHVmZiB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBjYWxsYmFjayBtZWNoYW5pc20uIEkgcmVtZW1iZXIgc2VlaW5nIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgIG1lbnRpb25lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgc291cmNlIOKAkyB0aGUgYGluY2x1ZGUvbmV0L2dyby5oYCBoZWFkZXIgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuYXBpX2dyb19jYmAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY3JpdGljYWwgbWVtYmVycyB0aGF0IG1hbmFnZSB0aGUgcGFja2V0IGFnZ3JlZ2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGxheWVyLCBob3cgaXQgaGFuZGxlcyB0aGUgR1JPIHdvcmssIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFyb3VuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgZGVzaWduZXJzIGNob3NlIHRvIGV4cG9zZSBhbmQgY29udHJvbCB3aXRoaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdHJ1Y3QgbmFwaV9ncm9fY2Ige1xuICAxODpcdFx0dW5pb24ge1xuICAxOTpcdFx0XHRzdHJ1Y3Qge1xuICAyMDpcdFx0XHRcdC8qIFZpcnR1YWwgYWRkcmVzcyBvZiBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbMF0ucGFnZSAmIzQzOyBvZmZzZXQuICovXG4gIDIxOlx0XHRcdFx0dm9pZFx0KmZyYWcwO1xuICAyMjpcdFxuICAyMzpcdFx0XHRcdC8qIExlbmd0aCBvZiBmcmFnMC4gKi9cbiAgMjQ6XHRcdFx0XHR1bnNpZ25lZCBpbnQgZnJhZzBfbGVuO1xuICAyNTpcdFx0XHR9O1xuICAyNjpcdFxuICAyNzpcdFx0XHRzdHJ1Y3Qge1xuICAyODpcdFx0XHRcdC8qIHVzZWQgaW4gc2tiX2dyb19yZWNlaXZlKCkgc2xvdyBwYXRoICovXG4gIDI5Olx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmxhc3Q7XG4gIDMwOlx0XG4gIDMxOlx0XHRcdFx0LyogamlmZmllcyB3aGVuIGZpcnN0IHBhY2tldCB3YXMgY3JlYXRlZC9xdWV1ZWQgKi9cbiAgMzI6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFnZTtcbiAgMzM6XHRcdFx0fTtcbiAgMzQ6XHRcdH07XG4gIDM1Olx0XG4gIDM2Olx0XHQvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItXHUwMDNlZGF0YS4gKi9cbiAgMzc6XHRcdGludFx0ZGF0YV9vZmZzZXQ7XG4gIDM4Olx0XG4gIDM5Olx0XHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgY2Fubm90IGJlIG1lcmdlZCB3aXRoIHRoZSBuZXcgc2tiLiAqL1xuICA0MDpcdFx0dTE2XHRmbHVzaDtcbiAgNDE6XHRcbiAgNDI6XHRcdC8qIE51bWJlciBvZiBzZWdtZW50cyBhZ2dyZWdhdGVkLiAqL1xuICA0MzpcdFx0dTE2XHRjb3VudDtcbiAgNDQ6XHRcbiAgNDU6XHRcdC8qIFVzZWQgaW4gaXB2Nl9ncm9fcmVjZWl2ZSgpIGFuZCBmb28tb3Zlci11ZHAgYW5kIGVzcC1pbi11ZHAgKi9cbiAgNDY6XHRcdHUxNlx0cHJvdG87XG4gIDQ3Olx0XG4gIDQ4Olx0XHR1MTZcdHBhZDtcbiAgNDk6XHRcbiAgNTA6XHQvKiBVc2VkIGluIG5hcGlfZ3JvX2NiOjpmcmVlICovXG4gIDUxOlx0I2RlZmluZSBOQVBJX0dST19GUkVFICAgICAgICAgICAgIDFcbiAgNTI6XHQjZGVmaW5lIE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQgMlxuICA1MzpcdFx0LyogcG9ydGlvbiBvZiB0aGUgY2Igc2V0IHRvIHplcm8gYXQgZXZlcnkgZ3JvIGl0ZXJhdGlvbiAqL1xuICA1NDpcdFx0c3RydWN0X2dyb3VwKHplcm9lZCxcbiAgNTU6XHRcbiAgNTY6XHRcdFx0LyogU3RhcnQgb2Zmc2V0IGZvciByZW1vdGUgY2hlY2tzdW0gb2ZmbG9hZCAqL1xuICA1NzpcdFx0XHR1MTZcdGdyb19yZW1jc3VtX3N0YXJ0O1xuICA1ODpcdFxuICA1OTpcdFx0XHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgbWF5IGJlIG9mIHRoZSBzYW1lIGZsb3cuICovXG4gIDYwOlx0XHRcdHU4XHRzYW1lX2Zsb3c6MTtcbiAgNjE6XHRcbiAgNjI6XHRcdFx0LyogVXNlZCBpbiB0dW5uZWwgR1JPIHJlY2VpdmUgKi9cbiAgNjM6XHRcdFx0dThcdGVuY2FwX21hcms6MTtcbiAgNjQ6XHRcbiAgNjU6XHRcdFx0LyogR1JPIGNoZWNrc3VtIGlzIHZhbGlkICovXG4gIDY2Olx0XHRcdHU4XHRjc3VtX3ZhbGlkOjE7XG4gIDY3Olx0XG4gIDY4Olx0XHRcdC8qIE51bWJlciBvZiBjaGVja3N1bXMgdmlhIENIRUNLU1VNX1VOTkVDRVNTQVJZICovXG4gIDY5Olx0XHRcdHU4XHRjc3VtX2NudDozO1xuICA3MDpcdFxuICA3MTpcdFx0XHQvKiBGcmVlIHRoZSBza2I/ICovXG4gIDcyOlx0XHRcdHU4XHRmcmVlOjI7XG4gIDczOlx0XG4gIDc0Olx0XHRcdC8qIFVzZWQgaW4gR1JFLCBzZXQgaW4gZm91L2d1ZV9ncm9fcmVjZWl2ZSAqL1xuICA3NTpcdFx0XHR1OFx0aXNfZm91OjE7XG4gIDc2Olx0XG4gIDc3Olx0XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGlwaWRfb2Zmc2V0IGNhbiBiZSBpZ25vcmVkICovXG4gIDc4Olx0XHRcdHU4XHRpcF9maXhlZGlkOjI7XG4gIDc5Olx0XG4gIDgwOlx0XHRcdC8qIE51bWJlciBvZiBncm9fcmVjZWl2ZSBjYWxsYmFja3MgdGhpcyBwYWNrZXQgYWxyZWFkeSB3ZW50IHRocm91Z2ggKi9cbiAgODE6XHRcdFx0dTggcmVjdXJzaW9uX2NvdW50ZXI6NDtcbiAgODI6XHRcbiAgODM6XHRcdFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXG4gIDg0Olx0XHRcdHU4XHRpc19mbGlzdDoxO1xuICA4NTpcdFx0KTtcbiAgODY6XHRcbiAgODc6XHRcdC8qIHVzZWQgdG8gc3VwcG9ydCBDSEVDS1NVTV9DT01QTEVURSBmb3IgdHVubmVsaW5nIHByb3RvY29scyAqL1xuICA4ODpcdFx0X193c3VtXHRjc3VtO1xuICA4OTpcdFxuICA5MDpcdFx0LyogTDMgb2Zmc2V0cyAqL1xuICA5MTpcdFx0dW5pb24ge1xuICA5MjpcdFx0XHRzdHJ1Y3Qge1xuICA5MzpcdFx0XHRcdHUxNiBuZXR3b3JrX29mZnNldDtcbiAgOTQ6XHRcdFx0XHR1MTYgaW5uZXJfbmV0d29ya19vZmZzZXQ7XG4gIDk1Olx0XHRcdH07XG4gIDk2Olx0XHRcdHUxNiBuZXR3b3JrX29mZnNldHNbMl07XG4gIDk3Olx0XHR9O1xuICA5ODpcdH07XG4gIDk5Olx0XG4gMTAwOlx0I2RlZmluZSBOQVBJX0dST19DQihza2IpICgoc3RydWN0IG5hcGlfZ3JvX2NiICopKHNrYiktXHUwMDNlY2IpXG4gMTAxOlx0XG4gMTAyOlx0I2RlZmluZSBHUk9fUkVDVVJTSU9OX0xJTUlUIDE1XG4gMTAzOlx0c3RhdGljIGlubGluZSBpbnQgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEwNDpcdHtcbiAxMDU6XHRcdHJldHVybiAmIzQzOyYjNDM7TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VyZWN1cnNpb25fY291bnRlciA9PSBHUk9fUkVDVVJTSU9OX0xJTUlUO1xuIDEwNjpcdH1cbiAxMDc6XHRcbiAxMDg6XHR0eXBlZGVmIHN0cnVjdCBza19idWZmICooKmdyb19yZWNlaXZlX3QpKHN0cnVjdCBsaXN0X2hlYWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gMTA5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZShncm9fcmVjZWl2ZV90IGNiLFxuIDExMDpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxMTE6XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gMTEyOlx0e1xuIDExMzpcdFx0aWYgKHVubGlrZWx5KGdyb19yZWN1cnNpb25faW5jX3Rlc3Qoc2tiKSkpIHtcbiAxMTQ6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuIDExNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMTY6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1JPIGBpc19mbGlzdGAgSW5pdGlhbGl6YXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlzX2ZsaXN0YCBiaXRmaWVsZCwgYW5kIGl0JiMzOTtzIGNsZWFybHkgcGFydCBvZiB0aGUgYHplcm9lZGAgc3RydWN0IGdyb3VwLCB3aGljaCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIEdSTyBpbiB0aGUga2VybmVsLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MganVzdCBhbm90aGVyIGJpdGZpZWxkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gVGhlbiBJIHNlZSB0aGF0IGAqKHUzMiAqKSZhbXA7TkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7emVyb2VkID0gMDtgIGlzIHVzZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuICBUaGF0IGB6ZXJvZWRgIGFwcGVhcnMgdG8gYmUgYSBgdTMyYC4gIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpgZ3JvX3JlbWNzdW1fc3RhcnRgIGlzIGEgYHUxNmAgLSB0aGF0JiMzOTtzIDIgYnl0ZXMuIFRoZSBiaXRmaWVsZHMgYXJlIHBhY2tlZCwgc28gbGV0JiMzOTtzIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aG9zZToKCiogICBgc2FtZV9mbG93YCAoMSBiaXQpCiogICBgZW5jYXBfbWFya2AgKDEgYml0KQoqICAgYGNzdW1fdmFsaWRgICgxIGJpdCkKKiAgIGBjc3VtX2NudGAgKDMgYml0cykKKiAgIGBmcmVlYCAoMiBiaXRzKQoKVGhhdCYjMzk7cyBhIHRvdGFsIG9mIDggYml0cywgb3IgMSBieXRlLiBUaGVuIHRoZXNlOgoKKiAgIGBpc19mb3VgICgxIGJpdCkKKiAgIGBpcF9maXhlZGlkYCAoMiBiaXRzKQoqICAgYHJlY3Vyc2lvbl9jb3VudGVyYCAoNCBiaXRzKQoqICAgYGlzX2ZsaXN0YCAoMSBiaXQpCgpBbm90aGVyIDggYml0cywgb3IgMSBieXRlLgoKU28sIGBncm9fcmVtY3N1bV9zdGFydGAgKDIgYnl0ZXMpICYjNDM7IDEgYnl0ZSAoZmlyc3Qgc2V0IG9mIGJpdGZpZWxkcykgJiM0MzsgMSBieXRlIChzZWNvbmQgc2V0IG9mIGJpdGZpZWxkcykgPSA0IGJ5dGVzLiBQZXJmZWN0ISAgVGhhdCBtZWFucyBgKih1MzIgKikmYW1wO05BUElfR1JPX0NCKHNrYiktJmd0O3plcm9lZCA9IDA7YCB6ZXJvZXMgb3V0IGFsbCBvZiBgemVyb2VkYCBpbmNsdWRpbmcgYGlzX2ZsaXN0YC4gVGh1cyB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYGlzX2ZsaXN0YCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB0byAwIHdoZW4gYW4gc2tiIGVudGVycyB0aGUgR1JPIHBhdGgsIGJlY2F1c2Ugb2YgdGhpcyB6ZXJvaW5nIG9wZXJhdGlvbiBpbiBgZGV2X2dyb19yZWNlaXZlYC4KCk5vdywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGlzIHRoZSBvbmx5IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBjaGVjayBgZGV2X2dyb19yZWNlaXZlYCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIHNvbGUgZW50cnkgcG9pbnQgdG8gYmUgc3VyZS4gWWVwLCBpdCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBHUk8uIEFuZCBgdGNwX2dyb19yZWNlaXZlYCBoYW5kbGVzIHRoZSBHUk8gcHJvY2Vzc2luZyBmb3IgVENQIHBhY2tldHMuCgpCdXQsIGhvbGQgb24uICBgdGNwX2dyb19yZWNlaXZlYCByZWNlaXZlcyBhbiBza2IgYXMgYHBgLiAgYHBgIGlzIGFuIHNrYiBmcm9tIHRoZSBHUk8gbGlzdC4gV2hpY2ggYWxzbyB3ZW50IHRocm91Z2ggYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3RgIGlzIGFsc28gaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBpcyB0aGVyZSAqYW55KiBvdGhlciBwbGFjZSB3aGVyZSBgdGNwX2dyb19yZWNlaXZlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhbiBza2IgdGhhdCAqaGFzbiYjMzk7dCogZ29uZSB0aHJvdWdoIGBkZXZfZ3JvX3JlY2VpdmVgPyBUaGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gTm8sIEdSTyBwYWNrZXRzIGFyZSAqYWx3YXlzKiBwcm9jZXNzZWQgdGhyb3VnaCBgZGV2X2dyb19yZWNlaXZlYCBvciBgbmFwaV9ncm9fcmVjZWl2ZWAgd2hpY2ggaW4gdHVybiBjYWxscyBgZGV2X2dyb19yZWNlaXZlYC4KCkp1c3QgdG8gYmUgc2FmZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpc24mIzM5O3QgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UuIExldCYjMzk7cyBsb29rIGZvciBjYWxsZXJzIG9mIGB0Y3BfZ3JvX3JlY2VpdmVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2dyb19yZWNlaXZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI0Mjk9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjI0MzA6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjQzMS1cdFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTI2NT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19sb29rdXAoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHRjcGhkciAqdGgpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjI4NjpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTI4Ny1cdFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9NDI4PXN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDQtXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ0NTpcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ0Ni1cbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9NTY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy03My1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo3NDpcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAyCgkJCQkJCQlvdXRwdXQ6IDI5NwoJCQkJCQkJdGhvdWdodHM6IDE3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBUQ1AgR1JPIEZyYWdsaXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb2RlIHBhdGg6IGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIGNhbGxlZCBmcm9tIGB0Y3A0X2dyb19yZWNlaXZlYCBhbmQgYHRjcDZfZ3JvX3JlY2VpdmVgLCB3aGljaCBvcmlnaW5hdGUgZnJvbSBgaXB2NF9ncm9fcmVjZWl2ZWAgYW5kIGBpcHY2X2dyb19yZWNlaXZlYCwgYWxsIHVsdGltYXRlbHkgc3RhcnRpbmcgZnJvbSBgZGV2X2dyb19yZWNlaXZlYC4gU2luY2UgYGRldl9ncm9fcmVjZWl2ZWAgaXMgYXQgdGhlIHRvcCBsZXZlbCwgYWxsIHRoZSBTS0JzIHNob3VsZCBoYXZlIGBOQVBJX0dST19DQihza2IpLSZndDt6ZXJvZWRgIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGdvb2QuCgpUaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGlzX2ZsaXN0YCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB0Y3BfZ3JvX2xvb2t1cGAgdGhhdCBzZXRzIHRoaXMgZmxhZy4gSXQgKmxvb2tzKiBsaWtlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBgTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3RgLiBMZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGF0LiBTaW5jZSBgaXNfZmxpc3RgIGxpdmVzIGluIGEgYHplcm9lZGAgc3RydWN0LCB3aGljaCBgZGV2X2dyb19yZWNlaXZlYCBleHBsaWNpdGx5IGluaXRpYWxpemVzLCBpdCYjMzk7cyBhbHJlYWR5IGluaXRpYWxpemVkLiBTbyB0aGUgcGF0Y2gganVzdCBjaGFuZ2VzIHRoZSBsb2dpYyBvZiBpdHMgYXNzaWdubWVudCwgbm90IGl0cyBpbml0aWFsIHZhbHVlLgoKQnV0IHdhaXQsIGBza2JfaXNfZ3NvKHNrYilgIGlzIGludHJvZHVjZWQgaW50byB0aGUgY29uZGl0aW9uYWwuIFRoYXQgY2hlY2tzIHRoZSBHU08gc3RhdGUsIHNwZWNpZmljYWxseSBgc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2l6ZWAuIE9rYXksIGJ1dCBgc2tiX3NoaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggdGhlIFNLQiwgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4gVGhpcyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG9vLCByaWdodD8gQW5kIGBOQVBJX0dST19DQihwKS0mZ3Q7Y291bnRgIGFsc28gZ2V0cyBjaGVja2VkLiBgY291bnRgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBjb3VudGAgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4KClRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgdGhlIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AgZnVuY3Rpb25zLCB3aGljaCBoYXZlIGAhc2tiX2lzX2dzbyhza2IpYCBhZGRlZCB0byB0aGUgbG9naWMgZm9yIGFzc2lnbmluZyBgaXNfZmxpc3RgLiBBZ2FpbiwganVzdCBhIGJvb2xlYW4gbG9naWMgY2hhbmdlLCBub3RoaW5nIHRoYXQgc2hvdWxkIGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIHJlYWQuCgpEaXZpbmcgaW50byBgdGNwX2dyb19yZWNlaXZlYCwgdGhlcmUgaXMgYSBjb21wYXJpc29uIHdpdGggYGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdDtgLiBCdXQgYGlzX2ZsaXN0YCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIGFuIGlzc3VlLgoKVGhlbiBJIGNvbnNpZGVyZWQgYHNrYi0mZ3Q7Y2JgLiBJcyB0aGVyZSBhIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBmcm9tIHRoZXJlPyBCdXQgYGRldl9ncm9fcmVjZWl2ZWAgc2V0cyBgemVyb2VkYCBpbiBgY2JgIHdoaWNoIGluY2x1ZGVzIGBpc19mbGlzdGAuIEFsc28gYGRldl9ncm9fcmVjZWl2ZWAgaW5pdGlhbGl6ZXMgYSBidW5jaCBvZiBvdGhlciBmaWVsZHMgYXMgd2VsbCBsaWtlIGBmbHVzaGAsIGBjb3VudGAsIGBjc3VtYCwgZXRjLiBBbmQgdGhlIG90aGVyIGZpZWxkcyBsaWtlIGBkYXRhX29mZnNldGAsIGBmcmFnMGAsIGV0Yy4gZ2V0IGluaXRpYWxpemVkIGJ5IGBza2JfZ3JvX3Jlc2V0X29mZnNldGAgY2FsbGVkIGp1c3QgYmVmb3JlIEdSTy4gU28sIGBjYmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZm9yIEdSTywgd2hpY2ggaXMgZ29vZC4KCk9rYXksIHNvIGNvdWxkIHRoZSBwYXRjaCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiBwYXlsb2FkPyBUaGlzIHBhdGNoIGlzIGFib3V0IGZpeGluZyBmcmFnbGlzdCBHUk8sIHNvIGl0JiMzOTtzIGEgYnVnIGZpeC4gSWYgYGlzX2ZsaXN0YCBpcyBpbmNvcnJlY3RseSBzZXQsIHRoaXMgbWlnaHQgcmVzdWx0IGluIGluY29ycmVjdCBtZXJnZXMsIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBPT0IgYWNjZXNzZXMgb3IgVUFGLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGluZm8gbGVha3MuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCYjMzk7cyBicmllZmx5IGxvb2sgYXQgdGhlIGNvbnRleHQuIFRoZSBwYXRjaCBpcyBhYm91dCBmaXhpbmcgR1JPIGZyYWdsaXN0IGZhbGxiYWNrIGxvZ2ljLiBUaGlzIGlzIGZpeGluZyBhIGxvZ2ljIGJ1ZywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIEdTTyBza2JzIGFuZCBmcmFnbGlzdCBHUk8uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGEgY3Jhc2ggb3IgaW5jb3JyZWN0IHByb2Nlc3NpbmcgZHVlIHRvIGluY29ycmVjdCBwYWNrZXQgaGFuZGxpbmcuIFNpbmNlIHRoaXMgaXMgYSBsb2dpYyBidWcsIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQgbWF5IGV4cG9zZSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpGaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHNrYi0mZ3Q7Y2JgIGlzIG5ldmVyIHNlbnQgdG8gdXNlcnNwYWNlLiBgc2tiLSZndDtjYmAgaXMgYW4gaW50ZXJuYWwgY29udHJvbCBidWZmZXIgZm9yIHRoZSBrZXJuZWwsIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBJdCYjMzk7cyBvbmx5IHVzZWQgaW50ZXJuYWxseSBkdXJpbmcgdGhlIE5BUEkgR1JPIHByb2Nlc3NpbmcgcGhhc2UuIEFuZCB3aGVuIEdSTyBpcyBkb25lLCB0aGUgYGNiYCBpcyBmcmVlIHRvIGJlIHJldXNlZC4gVGhlcmUmIzM5O3Mgbm8gaW5mbyBsZWFrIHJpc2sgaGVyZS4KClNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSBzYWZlLCBhbmQgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgR1JPIG1lcmdpbmcsIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSBteSByZWFzb25pbmc6CjEuICBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRoZSBgaXNfZmxpc3RgIGZsYWcgaW4gdGhlIGBOQVBJX0dST19DQmAgY29udHJvbCBibG9jayBkdXJpbmcgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoZSBgaXNfZmxpc3RgIGZsYWcgYW5kIG90aGVyIGJpdGZpZWxkcyBpbiBgTkFQSV9HUk9fQ0JgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZSgpYCAodmlhIGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3RgKSBkbyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnVydGhlcm1vcmUsIHRoZSBgc2tiLVx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMS42MTIwMjYzNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyNTQyMzYyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidGNwNF9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXFx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMS42MTIwMzA5NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTgwMDQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDEwOjQ0OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXFxuaW5kZXggM2IxZmRjZDNjYjI5Yi4uZTc0ZDk5Y2E5ZmFjZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xcbkBAIC0zMzIsNiArMzMyLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRmbHVzaCB8PSBza2ItXFx1MDAzZWlwX3N1bW1lZCAhPSBwLVxcdTAwM2VpcF9zdW1tZWQ7XFxuIFxcdFxcdGZsdXNoIHw9IHNrYi1cXHUwMDNlY3N1bV9sZXZlbCAhPSBwLVxcdTAwM2Vjc3VtX2xldmVsO1xcbiBcXHRcXHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgXFx1MDAzZT0gNjQ7XFxuK1xcdFxcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdDtcXG4gXFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFxuIFxcdFxcdGlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmVfbGlzdChwLCBza2IpKVxcbkBAIC0zOTUsMTIgKzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdGludCBpaWYsIHNkaWY7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCEoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxuK1xcdFxcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xcbitcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0KSB7XFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xcbitcXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbitcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTQxMCw3ICs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzayA9IF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBpcGgtXFx1MDAzZXNhZGRyLCB0aC1cXHUwMDNlc291cmNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaXBoLVxcdTAwM2VkYWRkciwgbnRvaHModGgtXFx1MDAzZWRlc3QpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaWlmLCBzZGlmKTtcXG4tXFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSAhc2s7XFxuK1xcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxuIFxcdGlmIChzaylcXG4gXFx0XFx0c29ja19nZW5fcHV0KHNrKTtcXG4gfVxcbkBAIC00MzAsNyArNDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKCF0aClcXG4gXFx0XFx0Z290byBmbHVzaDtcXG4gXFxuLVxcdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xcbitcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKVxcbitcXHRcXHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcXG4gXFxuIFxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcXG5pbmRleCBmMmE2NTljZDYxODNjLi5lZWMzNzc4ODU1ZWI4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xcbisrKyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xcbkBAIC0yNiw3ICsyNiwxOCBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxuK1xcdFxcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xcbitcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0KSB7XFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xcbitcXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbitcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTM2LDcgKzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIFxcdTAwMjZoZHItXFx1MDAzZXNhZGRyLCB0aC1cXHUwMDNlc291cmNlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGRyLVxcdTAwM2VkYWRkciwgbnRvaHModGgtXFx1MDAzZWRlc3QpLFxcbiBcXHRcXHRcXHRcXHRcXHRpaWYsIHNkaWYpO1xcbi1cXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9ICFzaztcXG4rXFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSAhc2sgXFx1MDAyNlxcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcXG4gXFx0aWYgKHNrKVxcbiBcXHRcXHRzb2NrX2dlbl9wdXQoc2spO1xcbiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6MjMuMDMwOTg3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjEwNDg5NjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2dyb19yZWNlaXZlXCIsXG4gICAgXCJ0Y3A0X2dyb19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBmcmFnbGlzdCBHUk8gYW5kIEdTTyBza2JzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4OGU5NDE5ZTFmZTAxNDMxM2NkNjFkMThlMzhhYzA4ZWQyZTYzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEwOjQ0OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuYyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmNcbmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5AQCAtMzMyLDYgKzMzMiw3IEBAIHN0cnVjdCBza19idWZmICp0Y3BfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Zmx1c2ggfD0gc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBwLVx1MDAzZWlwX3N1bW1lZDtcbiBcdFx0Zmx1c2ggfD0gc2tiLVx1MDAzZWNzdW1fbGV2ZWwgIT0gcC1cdTAwM2Vjc3VtX2xldmVsO1xuIFx0XHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCBcdTAwM2U9IDY0O1xuK1x0XHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0O1xuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX2dyb19yZWNlaXZlX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFxuIFx0XHRpZiAoZmx1c2ggfHwgc2tiX2dyb19yZWNlaXZlX2xpc3QocCwgc2tiKSlcbkBAIC0zOTUsMTIgKzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlpZiwgc2RpZjtcbiBcbi1cdGlmIChsaWtlbHkoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbitcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG4rXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbitcdFx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50ID09IDEpXG4rXHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuK1x0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQxMCw3ICs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2sgPSBfX2luZXRfbG9va3VwX2VzdGFibGlzaGVkKG5ldCwgaXBoLVx1MDAzZXNhZGRyLCB0aC1cdTAwM2Vzb3VyY2UsXG4gXHRcdFx0XHQgICAgICAgaXBoLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdCAgICAgICBpaWYsIHNkaWYpO1xuLVx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzaztcbitcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2sgXHUwMDI2XHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XG4gXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gfVxuQEAgLTQzMCw3ICs0MzksOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCF0aClcbiBcdFx0Z290byBmbHVzaDtcbiBcbi1cdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuK1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKSlcbitcdFx0dGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7XG4gXG4gXHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuaW5kZXggZjJhNjU5Y2Q2MTgzYy4uZWVjMzc3ODg1NWViOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuKysrIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG5AQCAtMjYsNyArMjYsMTggQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHAgPSB0Y3BfZ3JvX2xvb2t1cChoZWFkLCB0aCk7XG4gXHRpZiAocCkge1xuLVx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4rXHRcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xuK1x0XHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbitcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xuK1x0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbitcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4rXG4rXHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzYsNyArNDcsNyBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIFx1MDAyNmhkci1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0XHRcdTAwMjZoZHItXHUwMDNlZGFkZHIsIG50b2hzKHRoLVx1MDAzZWRlc3QpLFxuIFx0XHRcdFx0XHRpaWYsIHNkaWYpO1xuLVx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzaztcbitcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2sgXHUwMDI2XHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XG4gXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gI2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMy4wMzA5ODk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0ODQxMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBHUk8gT2ZmbG9hZCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jYCBhbmQgYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AuIFJpZ2h0IGF3YXksIGl0J3MgY2xlYXIgd2UncmUgbG9va2luZyBhdCBUQ1AgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIHdoaWNoIG1lYW5zIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuIFRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBpc19mbGlzdGAgYW5kIHRoZSBgc2tiX2lzX2dzbyhza2IpYCBjYWxscyB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUncyBhbnkgb2RkIGVkZ2UgY2FzZXMgb3Igb3ZlcmZsb3dzIGluIHRoZXJlLlxuXG5NeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgc2luY2UgdGhvc2UgYXJlIHRoZSBvbmVzIEkgY2FuIHJlbGlhYmx5IGhpdC4gU28gSSdsbCBkZWZpbml0ZWx5IGJlIGZ1enppbmcgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2dyb19yZWNlaXZlYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgdGNwNF9jaGVja19mcmFnbGlzdF9ncm9gIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgdGhlc2UgZnVuY3Rpb25zLCBzbyBJJ20gY2hlY2tpbmcgdGhlIHNvdXJjZSBmaWxlcyBmb3IgY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JTkVUYCBjb250cm9scyB0aGUgSVB2NCBjb2RlLCBhbmQgYENPTkZJR19JUFY2YCB0aGUgSVB2Ni4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgTWFrZWZpbGVzIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbmZvLCBJIGNhbiBtYWtlIHN1cmUgbXkgZnV6emVyIGJ1aWxkIGNvbmZpZyBtYXRjaGVzIHdoYXQncyBuZWVkZWQgZm9yIHRoZXNlIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgY2FtcGFpZ24gc2V0IHVwIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6MjguNzc5NDAzMDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTg3MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9vZmZsb2FkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjI4LjgyNTU5NjY5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzgwMjE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRoaW5raW5nLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25jZXJuaW5nIHRoZSBUQ1AgT2ZmbG9hZCBPYmplY3QgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIGJ1aWxkIHN5c3RlbSBwZXJzcGVjdGl2ZSwgdGhlIHByZXNlbmNlIG9mIGB0Y3Bfb2ZmbG9hZC5vYCBpbiB0aGUgTGludXgga2VybmVsIGlzIHJlYWxseSBzdHJhaWdodGZvcndhcmQuIEl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCB3aGljaCBpcyB0byBzYXksIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBrZXkuIFdlIGtub3cgYENPTkZJR19JTkVUYCBpcyBlZmZlY3RpdmVseSB0aGUgbWFzdGVyIHN3aXRjaCBmb3IgSVB2NCBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgTWFrZWZpbGUgbG9naWMgaW4gYG5ldC9gIGFzc2lnbnMgYG9iai15YCB0byBgQ09ORklHX0lORVRgIGlmIGl0J3Mgc2V0LiBUaGVyZWZvcmUsIGlmIElQIGlzIGNvbmZpZ3VyZWQgYW5kIHByZXNlbnQsIGB0Y3Bfb2ZmbG9hZC5vYCBpcyBnb2luZyB0byBiZSBidWlsdCBhbG9uZ3NpZGUuIFRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzOyBpdCdzIGEgZGlyZWN0IHJlc3VsdCBvZiBpbmNsdWRpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBhIHZlcnkgcHJlZGljdGFibGUgYW5kIHNlbnNpYmxlIGRlc2lnbiwgZW5zdXJpbmcgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIHdoZW4gSVAgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjMyLjQwMzYyMDc3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUwNDIxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwdjZfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozMi40NTAxMjk2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTA3NTA3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUHY2IE9mZmxvYWQgT2JqZWN0IEZpbGUgTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGB0Y3B2Nl9vZmZsb2FkLm9gIG9iamVjdCBmaWxlIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gSVB2NiBuZXR3b3JraW5nLCBzbyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gR2l2ZW4gdGhhdCBpdCdzIGEgbWFrZWZpbGUgZHJpdmVuIGJ1aWxkLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gY29uZmlybSB0aGlzIGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGl0c2VsZiB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldC9pcHY2L01ha2VmaWxlYCBhY3R1YWxseSBkZWZpbmVzIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgdGNwdjZfb2ZmbG9hZC5vYC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjM2LjA0MDg4MzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTIxNDAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3B2Nl9vZmZsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozNi4wODYwMTE0MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg5NjMzOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IE9mZmxvYWQgLSBBIE1ha2VmaWxlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBvZmZsb2FkIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIElQdjYtcmVsYXRlZCBjb2RlLiBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgVENQIG9mZmxvYWQgaW4gYW4gSVB2NiBjb250ZXh0LCB0aGUgTWFrZWZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQnbGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3MgY29tcGlsZWQgYW5kIGxpbmtlZCBpbiwgYW5kIHdoZXJlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYXJlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgdGNwdjZfb2ZmbG9hZGAgaW4gdGhhdCBNYWtlZmlsZS4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgVENQIG9mZmxvYWQgc3BlY2lmaWNhbGx5IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozOC45NzU2NDgwOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTIwNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcHY2X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjEtI2luY2x1ZGUgXFxcImlwNl9vZmZsb2FkLmhcXFwiXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMjojaW5jbHVkZSBcXFwidGNwdjZfb2ZmbG9hZC5jXFxcIlxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjMtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMzMj1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgaXB2Nl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDctXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozNDg6XFx0aWYgKGxpa2VseShvcHMgPT0gXFx1MDAyNm5ldF9ob3RkYXRhLnRjcHY2X29mZmxvYWQpKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ5LVxcdFxcdHJldHVybiB0Y3A2X2dyb19jb21wbGV0ZShza2IsIG5ob2ZmKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9NDM3PXN0YXRpYyBpbnQgX19pbml0IGlwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQzOS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MDpcXHRpZiAodGNwdjZfb2ZmbG9hZF9pbml0KCkgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQxLVxcdFxcdHByX2NyaXQoXFxcIiVzOiBDYW5ub3QgYWRkIFRDUCBwcm90b2NvbCBvZmZsb2FkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oPTEyPWludCB1ZHB2Nl9vZmZsb2FkX2V4aXQodm9pZCk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuaDoxMzppbnQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtMTQtXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTY4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNC1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjA1OmludCBfX2luaXQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNi17XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIwNzpcXHRuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkID0gKHN0cnVjdCBuZXRfb2ZmbG9hZCkge1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDgtXFx0XFx0LmNhbGxiYWNrcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTMtXFx0fTtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjE0OlxcdHJldHVybiBpbmV0Nl9hZGRfb2ZmbG9hZChcXHUwMDI2bmV0X2hvdGRhdGEudGNwdjZfb2ZmbG9hZCwgSVBQUk9UT19UQ1ApO1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozOS4wMjU1NzQ0ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1Mjk1MTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBPZmZsb2FkIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBJIHNlZSB0aGF0IGB0Y3B2Nl9vZmZsb2FkLmNgIGlzIGJlaW5nIGNvbXBpbGVkICp3aXRoaW4qIHRoZSBgaXA2X29mZmxvYWQuY2AgZmlsZS4gTm90aGluZyBwYXJ0aWN1bGFybHkgc3VycHJpc2luZyB0aGVyZSwgc2luY2UgVENQdjYgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIElQdjYgaW1wbGVtZW50YXRpb24gYXMgYSB3aG9sZS4gQW5kLCBhcyBleHBlY3RlZCwgdGhlIGBpcDZfb2ZmbG9hZC5vYCBvYmplY3QgZmlsZSBpcyBvbmx5IGdvaW5nIHRvIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3ksIG90aGVyd2lzZSBpdCB3b3VsZCBub3QgYmUgaW5jbHVkZWQuIE1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDIuMTc4NTI4NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njk0ODA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSArPSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjQ4OlxcdFxcdFxcdGlwNl9vZmZsb2FkLm8gZXh0aGRyc19vZmZsb2FkLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDIuNTI1NDgxMjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDg5NTYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2UgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5ldHdvcmsgR1JPIEZ1bmN0aW9uYWxpdHkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB3ZSdyZSBnb2luZyB0byBuZWVkIGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBlbmFibGVkLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgbGlrZWx5IGxpZXMgaW4gdGhlIEdSTyBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGg6IGB0Y3BfZ3JvX3JlY2VpdmVgLCBgdGNwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdGNwNl9ncm9fcmVjZWl2ZWAuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgdGNwNl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0J2xsIGluZm9ybSBob3cgYWNjZXNzaWJsZSBhbmQgbW9kaWZpYWJsZSBpdCBpcywgd2hpY2gsIG9mIGNvdXJzZSwgd2lsbCBkcml2ZSB0aGUgbmV4dCBzdGVwcyBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ2LjEzNDQ0MDk2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTg1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwNl9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTUtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjU2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnRjcDZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTctXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0yMDU9aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDktXFx0XFx0XFx0Lmdzb19zZWdtZW50XFx0PVxcdHRjcDZfZ3NvX3NlZ21lbnQsXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIxMDpcXHRcXHRcXHQuZ3JvX3JlY2VpdmVcXHQ9XFx0dGNwNl9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjExLVxcdFxcdFxcdC5ncm9fY29tcGxldGVcXHQ9XFx0dGNwNl9ncm9fY29tcGxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ2LjE4MDQwNDg1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc2MDAxOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUCBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBTeW1ib2xzKipcblxuSG1tLCBzbyBgdGNwNl9ncm9fcmVjZWl2ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLiBUaGF0IG1lYW5zIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCBkaXJlY3RseSBpbnRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBieSB0aGUgY29tcGlsZXIuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIENvbnNlcXVlbnRseSwgSSBzaG91bGRuJ3QgZXhwZWN0IGEgc2VwYXJhdGUgc3ltYm9sIGZvciBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLCByaWdodD8gSXQgd29uJ3QgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MgaWYgdGhlIGNvbXBpbGVyIGhhcyBwcm9wZXJseSBpbmxpbmVkIGl0LCBhcyBpdCBzaG91bGQuIE9rYXksIHRoYXQncyB3aGF0IEkgc3VzcGVjdGVkLiBJdCB3aWxsIGJlIHBhcnQgb2Ygd2hhdGV2ZXIgZnVuY3Rpb24gY2FsbHMgaXQuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYHRjcDRfZ3JvX3JlY2VpdmVgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBub3cuIElzIGl0IGlubGluZSB0b28/IElzIHRoZXJlIGEgc3ltYm9sIGZvciBpdCBJIGNhbiBsb29rIGF0P1xuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDkuMDU2NDA5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzAzMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcDRfZ3JvX3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyNz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDI4OnN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00Mjkte1xcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Nzg9aW50IF9faW5pdCB0Y3B2NF9vZmZsb2FkX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDgyLVxcdFxcdFxcdC5nc29fc2VnbWVudFxcdD1cXHR0Y3A0X2dzb19zZWdtZW50LFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDgzOlxcdFxcdFxcdC5ncm9fcmVjZWl2ZVxcdD1cXHR0Y3A0X2dyb19yZWNlaXZlLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDg0LVxcdFxcdFxcdC5ncm9fY29tcGxldGVcXHQ9XFx0dGNwNF9ncm9fY29tcGxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ5LjEwMDcxNjk4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1NjY2ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBUQ1AgR1JPIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcDRfZ3JvX3JlY2VpdmVgLiBJdCdzIGRlZmluZWQgd2l0aCBgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgdXN1YWxseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24gaWYgYENPTkZJR19SRVRQT0xJTkVgIGlzIGVuYWJsZWQsIHdoaWNoIHN1Z2dlc3RzIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBpdCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJ1dCB3YWl0LCBpdCdzICpub3QqIGlubGluZS4gV2h5IGlzbid0IGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoYXQgZGVzaWduIGRlY2lzaW9uLlxuXG5BbmQgYW5vdGhlciB0aGluZzogYHRjcF9ncm9fcmVjZWl2ZWAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AuIEFscmlnaHQsIHRoYXQgbG9jYXRpb24gbWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIElQdjQgVENQIG9mZmxvYWQgcGF0aC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW1wbGVtZW50YXRpb24gZm9yIFRDUC4gSXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgY2xlYXIgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGdpdmVuIHRoYXQgaXQgY29uY2VybnMgYSBzcGVjaWZpYyBwcm90b2NvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjUyLjgwNjM4NjA4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3OTQwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg3LVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjg9c3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDQ1OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjUyLjg1MTE4NDc5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk0MzM3MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEdyb2traW5nIG9mIFRDUC9JUHY2IEdSTyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgR1JPIHN0dWZmIGFuZCBJJ3ZlIGdvdCB0byBzb3J0IG91dCB3aGVyZSB0aGluZ3MgYXJlIGRlZmluZWQuIEhtbSwgYHRjcF9ncm9fcmVjZWl2ZWAuLi4gdGhhdCBvbmUgaXNuJ3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdGNwNl9ncm9fcmVjZWl2ZWAgYWdhaW4uIEFoYSEgKlRoYXQqIG9uZSdzIG1hcmtlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQncyBpbXBvcnRhbnQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW55d2F5PyBSaWdodCwgZGlnZ2luZyBhcm91bmQsIEkgc2VlIGl0J3MgaW4gYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhhdCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgYG5ldC9pcHY2L2lwNl9vZmZsb2FkLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIG9yIGEgaGllcmFyY2h5IGluIHRoZSBHUk8gcHJvY2Vzc2luZy5cblxuSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0aGluaywgbGV0IG1lIHRoaW5rLi4uIGFoLCB5ZXMhIFdoYXQgYWJvdXQgYGlwdjZfZ3JvX3JlY2VpdmVgLCBkZWZpbmVkIHdpdGhpbiBgbmV0L2lwdjYvaXA2X29mZmxvYWQuY2A/IE9rYXksIHNvIHRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIElQdjYgcG9ydGlvbi4gVGhlc2UgZGV0YWlscyBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybiwgb3Igb3B0aW1pemF0aW9uLiBHb3R0YSBrZWVwIHRoZXNlIHBpZWNlcyBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjU2Ljc0NTUyNDk4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMzgyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MTgxPXN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMDItXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMDM6SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIwNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjk5LX1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjMwMDpFWFBPUlRfSU5ESVJFQ1RfQ0FMTEFCTEUoaXB2Nl9ncm9fcmVjZWl2ZSk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zMDEtXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz0zMDI9c3RhdGljIHN0cnVjdCBza19idWZmICpzaXRfaXA2aXA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTMxMy1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjMxNDpcXHRyZXR1cm4gaXB2Nl9ncm9fcmVjZWl2ZShoZWFkLCBza2IpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzE1LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9NDM3PXN0YXRpYyBpbnQgX19pbml0IGlwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0OC1cXHRcXHRcXHQuZ3NvX3NlZ21lbnQgPSBpcHY2X2dzb19zZWdtZW50LFxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6NDQ5OlxcdFxcdFxcdC5ncm9fcmVjZWl2ZSA9IGlwdjZfZ3JvX3JlY2VpdmUsXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NTAtXFx0XFx0XFx0Lmdyb19jb21wbGV0ZSA9IGlwdjZfZ3JvX2NvbXBsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDo1Ni43OTA1Njg2NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTkxMTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBHUk8gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgaXB2Nl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBtZWF0IHNlZW1zIHRvIGJlIGluIGB0Y3BfZ3JvX3JlY2VpdmVgLCBgdGNwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gLiBEZWZpbml0ZWx5LCBgdGNwX2dyb19yZWNlaXZlYCBhbmQgYHRjcDRfZ3JvX3JlY2VpdmVgIGFyZSBwcmltYXJ5IHN5bWJvbHMgdG8gZm9jdXMgb24uIEJ1dCB3aGF0IGFib3V0IGB0Y3A2X2dyb19yZWNlaXZlYD8gSSBpbml0aWFsbHkgdGhvdWdodCwgc2luY2UgaXQncyBpbmxpbmVkLCBpdCdkIGJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gYGlwdjZfZ3JvX3JlY2VpdmVgIG9yIHNvbWV0aGluZyB0aGF0IGNhbGxzICppdCouIFdhaXQuLi4gaXNuJ3QgYHRjcDZfZ3JvX3JlY2VpdmVgIGNhbGxlZCBieSBgaXB2Nl9ncm9fcmVjZWl2ZWA/IEhtbSwgbm8sIHRoYXQgY2FuJ3QgYmUgcmlnaHQ7IGl0J3MgcmVnaXN0ZXJlZCBhcyBhIGAuZ3JvX3JlY2VpdmVgIGNhbGxiYWNrIGZvciBgSVBQUk9UT19UQ1BgIHdpdGhpbiBgdGNwdjZfb2ZmbG9hZF9pbml0YC5cblxuVGhpcyBpcyBjb25mdXNpbmcgYmVjYXVzZSBpZiBpdCBpcyBtYXJrZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBob3cgY2FuIGl0IGJlIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjayBmdW5jdGlvbj8gVGhpcyBpbXBsaWVzIHNvbWV0aGluZyBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nIGFib3V0IGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyBpbmxpbmluZyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgIHRvIHNlZSBob3cgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLiBHb3R0YSBjbGFyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MDEuODU2NDgyMjU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3A2X2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTc9c3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01NS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6NTY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTIwNT1pbnQgX19pbml0IHRjcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwOS1cXHRcXHRcXHQuZ3NvX3NlZ21lbnRcXHQ9XFx0dGNwNl9nc29fc2VnbWVudCxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjEwOlxcdFxcdFxcdC5ncm9fcmVjZWl2ZVxcdD1cXHR0Y3A2X2dyb19yZWNlaXZlLFxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTEtXFx0XFx0XFx0Lmdyb19jb21wbGV0ZVxcdD1cXHR0Y3A2X2dyb19jb21wbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MDEuOTAyNDQ4MDk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM1MTYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGEgQ2FsbGJhY2sgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGlzIHNldCB1cCBhcyBhIGNhbGxiYWNrLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlcidzIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhIG5vbi1pbmxpbmUgdmVyc2lvbiBvZiBpdCwganVzdCBzbyB3ZSBjYW4gZ2V0IGl0cyBhZGRyZXNzLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIEJ1dCBub3cgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbW9yZSBzdHJlYW1saW5lZCBhcHByb2FjaCBoZXJlLiBNYXliZSBJIGNhbiBieXBhc3MgdGhlIHdob2xlIGNhbGxiYWNrIG1lY2hhbmlzbSBhbHRvZ2V0aGVyLiBJbnN0ZWFkIG9mIHRoaXMsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdXNpbmcgYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYC4gVGhleSBtaWdodCBiZSBiZXR0ZXIgb3B0aW9ucyBmb3IgaGFuZGxpbmcgdGhpcyBkaXJlY3RseS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRob3NlIGZ1bmN0aW9ucyBldmVuIGV4cG9ydGVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB2aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGV5J3JlIGFjY2Vzc2libGUgZnJvbSB3aGVyZSBJJ20gd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjA2LjkzNTk2Njc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5ODA4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowNy4wMDE5NTk4NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDY4NTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzXCIgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydC4gSGVyZSB3ZSBnbzpcblxuKipDaGVja2luZyB0aGUgRXhwb3J0KipcblxuQWxyaWdodCwgSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNydWNpYWwgc3RlcC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGUgZGF0YSwgdGhlIG1vZGVsLCB0aGUgY29uZmlndXJhdGlvbnMsIG9yIHdoYXRldmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXMgYWN0dWFsbHkgYmVlbiBleHBvcnRlZC4gSXQncyBhIGZ1bmRhbWVudGFsLCBhbG1vc3Qgc2lsbHksIHN0ZXAsIGJ1dCBvZnRlbiBvdmVybG9va2VkIGluIHRoZSBydXNoIHRvIGFuYWx5emUgcmVzdWx0cy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBleHBvcnQgaGFzIGhhcHBlbmVkIGFzIGV4cGVjdGVkLiBEaWQgSSBzZWxlY3QgdGhlIGNvcnJlY3QgZm9ybWF0PyBBcmUgdGhlIGZpbGVzIHdoZXJlIHRoZXkgc2hvdWxkIGJlPyBJcyBldmVyeXRoaW5nIHppcHBlZCBvciBwYWNrYWdlZCBjb3JyZWN0bHk/IE1ha2luZyBzdXJlIHRoZSBleHBvcnQgYWN0dWFsbHkgKndvcmtlZCogaXMgZm91bmRhdGlvbmFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gTm8gZXhwb3J0LCBubyBhbmFseXNpcy4gVGltZSB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowOS45MjI2NDc3MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODI4MDI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlQuKnRjcF9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowOS45ODM0ODAxODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTg0NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBUQ1AgT2ZmbG9hZCBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIFRDUCBvZmZsb2FkIHNpdHVhdGlvbiBoZXJlLiBJdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0aWMgY29uZmlndXJhdGlvbjsgdGhlIGlzc3VlIGZlZWxzIG1vcmUgZHluYW1pYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1hZ2ljIGlzIGhhcHBlbmluZy4gVGhlIHRyYWNlIHNlZW1zIHRvIGJlIHBvaW50aW5nIHRvIHNvbWV0aGluZyBiZWluZyBoYW5kbGVkIGludGVybmFsbHksIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBTaW5jZSBpdCdzIHJlbGF0ZWQgdG8gVENQIGFuZCBzb21lIHNvcnQgb2YgcmVjZWl2ZSBwcm9jZXNzaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHY0IGNvbnRleHQuIEdpdmVuIHRoZSBjbHVlcywgSSdtIGJldHRpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgZmxvdywgd2lsbCBiZSBuZXN0bGVkIGluc2lkZSBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYHRjcF9ncm9fcmVjZWl2ZWAgZnVuY3Rpb247IHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBwcm9jZXNzaW5nLiBJdOKAmXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgZXhhbWluaW5nIGhvdyBvZmZsb2FkIGludGVyYWN0cyB3aXRoIEdSTyBpbiB0aGUgSVB2NCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjEzLjM2MzMzMDgxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjkyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg3LVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjg9c3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDQ1OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjEzLjQxMTQ2NDkzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM4NDQxNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBHUk8gc3R1ZmYsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUga2V5IGZvciBUQ1AgR1JPIHJlY2VpdmUuIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAgYXJlIGp1bXBpbmcgb3V0IGFzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBCdXQgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGB0Y3A2X2dyb19yZWNlaXZlYD8gQWgsIHJpZ2h0LCBpdCdzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBtZWFucyBpdCAqdXN1YWxseSogd29uJ3QgaGF2ZSBhIGRlZGljYXRlZCBzeW1ib2wgYWRkcmVzcy4gVGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IGlubGluZSBpdCwgbWFraW5nIGl0IGhhcmRlciB0byB0cmFjayBkb3duLiBIb3dldmVyLCBpZiBpdHMgYWRkcmVzcyAqaXMqIGFjdHVhbGx5IHRha2VuLCB0aGUgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBhIGZ1bmN0aW9uLCBidXQgaXRzIG5hbWUgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUuIFNvLCBmb3Igbm93LCBJJ2xsIHN0aWNrIHdpdGggYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsaWFibGUgc3RhcnRpbmcgcG9pbnRzLlxuXG5Ob3csIEkgc2hvdWxkIGNvbnNpZGVyIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIHdoaWNoIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBkcml2ZXJzLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zPyBUaGUgY29kZSBhbHNvIHJlZmVyZW5jZXMgYHNrYl9pc19nc28oc2tiKWAgYW5kIGBORVRJRl9GX0dST19GUkFHTElTVGAuIFRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQgbmV0d29ya2luZyBmZWF0dXJlcywgc28gSSdtIG5vdCBleHBlY3RpbmcgdGhlbSB0byBiZSBjb25maWctZGVwZW5kZW50IGluIGEgc2lnbmlmaWNhbnQgd2F5LiBTbywgYElORVRgIGFuZCBgSVBWNmAgYXJlIHRoZSBtYWluIG9uZXMgdGhhdCBzZWVtIHRvIG1hdHRlci5cblxuSnVzdCB0byBiZSBzdXJlLCBJJ2xsIGdpdmUgYHRjcDRfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwX2dyb19yZWNlaXZlYCBhbm90aGVyIHF1aWNrIG9uY2Utb3ZlciB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MCwiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMDQ5OTA5ODc1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5NzA2NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZ3JvX3JlY2VpdmVcIixcbiAgICBcInRjcDRfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZ3JvX3JlY2VpdmVcIixcbiAgICBcInRjcDRfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NToxOS4xMzU4ODgxNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzMwMzY1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMTM2NTA1NjgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3NzI5NzQzODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRoZSBgaXNfZmxpc3RgIGZsYWcgaW4gdGhlIGBOQVBJX0dST19DQmAgY29udHJvbCBibG9jayBkdXJpbmcgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoZSBgaXNfZmxpc3RgIGZsYWcgYW5kIG90aGVyIGJpdGZpZWxkcyBpbiBgTkFQSV9HUk9fQ0JgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZSgpYCAodmlhIGAqKHUzMiAqKVxcdTAwMjZOQVBJX0dST19DQihza2IpLVxcdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0YCkgZG8gbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB0aGUgYHNrYi1cXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2ODhlOTQxOWUxZmUwMTQzMTNjZDYxZDE4ZTM4YWMwOGVkMmU2MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDo0NDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5pbmRleCAzYjFmZGNkM2NiMjliLi5lNzRkOTljYTlmYWNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xuQEAgLTMzMiw2ICszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gcC1cdTAwM2VpcF9zdW1tZWQ7XG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2Vjc3VtX2xldmVsICE9IHAtXHUwMDNlY3N1bV9sZXZlbDtcbiBcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgXHUwMDNlPSA2NDtcbitcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtcbiBcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcbiBcdFx0aWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZV9saXN0KHAsIHNrYikpXG5AQCAtMzk1LDEyICszOTYsMjAgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpaWYsIHNkaWY7XG4gXG4tXHRpZiAobGlrZWx5KCEoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcbiBcdGlmIChwKSB7XG4tXHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdDtcbitcdFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXG4rXHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xuK1x0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdDtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcbitcdFx0LyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovXG4rXHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxuK1x0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbitcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4rXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC00MTAsNyArNDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0ICAgICAgIGlwaC1cdTAwM2VkYWRkciwgbnRvaHModGgtXHUwMDNlZGVzdCksXG4gXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4rXHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gIXNrIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzbyhza2IpO1xuIFx0aWYgKHNrKVxuIFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIH1cbkBAIC00MzAsNyArNDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICghdGgpXG4gXHRcdGdvdG8gZmx1c2g7XG4gXG4tXHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcbitcdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpXG4rXHRcdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuIFxuIFx0cmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbmluZGV4IGYyYTY1OWNkNjE4M2MuLmVlYzM3Nzg4NTVlYjggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuQEAgLTI2LDcgKzI2LDE4IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbitcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG4rXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbitcdFx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50ID09IDEpXG4rXHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuK1x0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTM2LDcgKzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBcdTAwMjZoZHItXHUwMDNlc2FkZHIsIHRoLVx1MDAzZXNvdXJjZSxcbiBcdFx0XHRcdFx0XHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdFx0aWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4rXHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gIXNrIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzbyhza2IpO1xuIFx0aWYgKHNrKVxuIFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMTM2NTA2OTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MjYyNjQxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JPIEZyYWdsaXN0IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdGNwX29mZmxvYWQuY2AgYW5kIGB0Y3B2Nl9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgTkFQSV9HUk9fQ0JgIHN0cnVjdHVyZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNvbmNlcm4gaGVyZSBpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBob3cgYGlzX2ZsaXN0YCBpcyBzZXQgYW5kIGNoZWNrZWQgaW4gYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCwgcGx1cyB0aGVyZSdzIGEgbmV3IGNoZWNrIGFkZGVkIGluIGB0Y3BfZ3JvX3JlY2VpdmVgOiBgZmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGlzIGBOQVBJX0dST19DQmAgbWFjcm8sIHBhcnRpY3VsYXJseSBgc2tiLVx1MDAzZWNiYC4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCBgc2tiLVx1MDAzZWNiYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhpcyBjb2RlIHJ1bnM/IEkga25vdyBgTkFQSV9HUk9fQ0JgIGlzIHByZXR0eSBjZW50cmFsIHRvIEdSTywgYW5kIHRoZSBgY2JgIGZpZWxkICpzaG91bGQqIGJlIGluaXRpYWxpemVkIHdoZW4gYW4gYHNrYmAgZW50ZXJzIHRoZSBHUk8gcGF0aCwgYnV0IHRoZXNlIGNoYW5nZXMgdG8gYGlzX2ZsaXN0YC4uLiB0aGF0J3Mgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGxpZXMuIFRoYXQgbmV3IGNoZWNrIGluIGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIHNjcmVhbWluZyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRcIiBpZiBlaXRoZXIgYHBgIG9yIGBza2JgIGRvbid0IGhhdmUgYGlzX2ZsaXN0YCBwcm9wZXJseSBzZXQuXG5cbkFoYSEgYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCAqZG9lcyogc2V0IGBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0YC4gQnV0LCB0aGUga2V5IGlzIHRoZSBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpYC4gSWYgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYCBpc24ndCBzZXQsIHRoZW4gYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCAqaXNuJ3QqIGNhbGxlZC4gVGhhdCBtZWFucyBgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGAgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkIGluIHRoYXQgY2FzZSwgbGVhZGluZyB0byB0aGF0IHJpc2t5IGNvbXBhcmlzb24gSSBzYXcgZWFybGllci4gV2UgYWxzbyBrbm93IHRoYXQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBjYW4gaGF2ZSBzaW1pbGFyIGlzc3Vlcy5cblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRpbWUgdG8gYGdpdCBncmVwYCBhbmQgdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgaXNfZmxpc3RgIGlzICphY3R1YWxseSogaW5pdGlhbGl6ZWQgdG8gYmUgc3VyZSBhbmQgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nIGV2ZXJ5d2hlcmUgaXQgbmVlZHMgdG8gYmUgYmVmb3JlIGJlaW5nIGNoZWNrZWQuIEdvdHRhIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCByZWFkcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MjYuOTYyNzc0NjQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4OTkyOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZsaXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2dyby5oPTE3PXN0cnVjdCBuYXBpX2dyb19jYiB7XFxuLS1cXG5pbmNsdWRlL25ldC9ncm8uaC04My1cXHRcXHQvKiBHUk8gaXMgZG9uZSBieSBmcmFnX2xpc3QgcG9pbnRlciBjaGFpbmluZy4gKi9cXG5pbmNsdWRlL25ldC9ncm8uaDo4NDpcXHRcXHR1OFxcdGlzX2ZsaXN0OjE7XFxuaW5jbHVkZS9uZXQvZ3JvLmgtODUtXFx0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9Mjg2PXN0cnVjdCBza19idWZmICp0Y3BfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzI5LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MzMwOlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QpKSB7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0zMzEtXFx0XFx0Zmx1c2ggfD0gKF9fZm9yY2UgaW50KShmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTMzNC1cXHRcXHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgXFx1MDAzZT0gNjQ7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzozMzU6XFx0XFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0O1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzM2LVxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTM5MD1zdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDEtXFx0XFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDI6XFx0XFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCkge1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDAzOlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA0LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA4LVxcdFxcdGlmIChOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgPT0gMSlcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQwOTpcXHRcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QgPSAwO1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDEwLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDExOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQxMi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDIxLVxcdFxcdFxcdFxcdCAgICAgICBpaWYsIHNkaWYpO1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDIyOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MjMtXFx0aWYgKHNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00NTI9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcDRfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCB0aG9mZilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDU3LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDU4OlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCkpIHtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ1OS1cXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRlJBR0xJU1QgfCBTS0JfR1NPX1RDUFY0O1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz02OTY9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03MzMtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3MzQ6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCkge1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzM1LVxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZsdXNoID0gMTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzQ5LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3NTA6XFx0XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0KSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03NTEtXFx0XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NzgxPXN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzk0LVxcdCAqL1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk1OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc5Ni1cXHRpZiAoIXNrIHx8ICF1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSkge1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDMtXFx0XFx0aWYgKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODA0OlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA1LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA2LVxcdFxcdGlmICgoIXNrIFxcdTAwMjZcXHUwMDI2IChza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19VRFBfRldEKSkgfHxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwNzpcXHRcXHQgICAgKHNrIFxcdTAwMjZcXHUwMDI2IHVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spKSB8fCBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdClcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwOC1cXHRcXHRcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9OTU0PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHA0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTk2MC1cXHQvKiBkbyBmcmFnbGlzdCBvbmx5IGlmIHRoZXJlIGlzIG5vIG91dGVyIFVEUCBlbmNhcCAob3Igd2UgYWxyZWFkeSBwcm9jZXNzZWQgaXQpICovXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo5NjE6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0IFxcdTAwMjZcXHUwMDI2ICFOQVBJX0dST19DQihza2IpLVxcdTAwM2VlbmNhcF9tYXJrKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy05NjItXFx0XFx0dWgtXFx1MDAzZWxlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gbmhvZmYpO1xcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjktXFx0XFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjMwOlxcdFxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QpIHtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MzE6XFx0XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTMyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0zNi1cXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjM3OlxcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTM4LVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozOTpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQwLVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQ5LVxcdFxcdFxcdFxcdFxcdGlpZiwgc2RpZik7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjUwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTUxLVxcdGlmIChzaylcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB0Y3A2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGhvZmYpXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtODYtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjg3OlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCkpIHtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtODgtXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0ZSQUdMSVNUIHwgU0tCX0dTT19UQ1BWNjtcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTY2PWludCB1ZHA2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE3Mi1cXHQvKiBkbyBmcmFnbGlzdCBvbmx5IGlmIHRoZXJlIGlzIG5vIG91dGVyIFVEUCBlbmNhcCAob3Igd2UgYWxyZWFkeSBwcm9jZXNzZWQgaXQpICovXFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYzoxNzM6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0IFxcdTAwMjZcXHUwMDI2ICFOQVBJX0dST19DQihza2IpLVxcdTAwM2VlbmNhcF9tYXJrKSB7XFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNzQtXFx0XFx0dWgtXFx1MDAzZWxlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gbmhvZmYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NToyOC41OTE3NzQxMTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MTQzODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpc19mbGlzdGAgd2l0aGluIHRoZSBHUk8gQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGlzX2ZsaXN0YCBmaWVsZCB3aXRoaW4gdGhlIGBuYXBpX2dyb19jYmAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVjYXVzZSBvZiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBzdWJzeXN0ZW0sIEkga25vdyB0aGF0IGBuYXBpX2dyb19jYmAgaXMgd2hlcmUgYWxsIHRoZSBHUk8gc3RhdGUgbGl2ZXMuIEkgc2VlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZpZWxkIGxpdmVzIHdpdGhpbiBgc3RydWN0IG5hcGlfZ3JvX2NiYC4gTm93LCB3aGVyZSBkb2VzIGBuYXBpX2dyb19jYmAgZ2V0IGluaXRpYWxpemVkPyBUaGUgY29kZSBzdWdnZXN0cyB0aGUgcHJpbWUgc3VzcGVjdCBpcyBgZGV2X2dyb19yZWNlaXZlYCBmdW5jdGlvbiwgbG9jYXRlZCBpbiBgbmV0L2NvcmUvZ3JvLmNgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgR1JPIHByb2Nlc3NpbmcsIHNvIGl0J3MgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBzZXR0aW5nIHVwIHRoZSBHUk8gY29udGV4dC5cblxuVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHdpdGhpbiBgZGV2X2dyb19yZWNlaXZlYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgaXNfZmxpc3RgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIG9yIHBlcmhhcHMgaXMgZ2l2ZW4gYSBkZWZhdWx0IHZhbHVlLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSBpdCdzIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoZSBgbmFwaV9ncm9fY2JgIGlzIHNldCB1cC4gS25vd2luZyBleGFjdGx5IHdoZW4gYW5kIGhvdyBgaXNfZmxpc3RgIGdldHMgaXRzIHZhbHVlIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBHUk8gYmVoYXZpb3IuIEl0IHNlZW1zIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZsb3cgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MzMuMDYzMjE3MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwNTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOQVBJX0dST19DQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ncm8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ncm8uYz05Mj1pbnQgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTE1LVxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VsZW4gKyBsZW4gXFx1MDAzZT0gbmV0aWZfZ2V0X2dyb19tYXhfc2l6ZShwLVxcdTAwM2VkZXYsIHApIHx8XFxubmV0L2NvcmUvZ3JvLmM6MTE2OlxcdFxcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2gpKVxcbm5ldC9jb3JlL2dyby5jLTExNy1cXHRcXHRyZXR1cm4gLUUyQklHO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTE5LVxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VsZW4gKyBsZW4gXFx1MDAzZT0gR1JPX0xFR0FDWV9NQVhfU0laRSkpIHtcXG5uZXQvY29yZS9ncm8uYzoxMjA6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXByb3RvICE9IElQUFJPVE9fVENQIHx8XFxubmV0L2NvcmUvZ3JvLmMtMTIxLVxcdFxcdCAgICBwLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTI0LVxcbm5ldC9jb3JlL2dyby5jOjEyNTpcXHRzZWdzID0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQ7XFxubmV0L2NvcmUvZ3JvLmM6MTI2OlxcdGxwID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWxhc3Q7XFxubmV0L2NvcmUvZ3JvLmMtMTI3LVxcdHBpbmZvID0gc2tiX3NoaW5mbyhscCk7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0xNTgtXFxubmV0L2NvcmUvZ3JvLmM6MTU5OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyZWUgPSBOQVBJX0dST19GUkVFO1xcbm5ldC9jb3JlL2dyby5jLTE2MC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0xODQtXFx0XFx0c2tiLVxcdTAwM2V0cnVlc2l6ZSA9IG5ld190cnVlc2l6ZTtcXG5uZXQvY29yZS9ncm8uYzoxODU6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZnJlZSA9IE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQ7XFxubmV0L2NvcmUvZ3JvLmMtMTg2LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIwNS1cXG5uZXQvY29yZS9ncm8uYzoyMDY6XFx0aWYgKE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID09IHApXFxubmV0L2NvcmUvZ3JvLmMtMjA3LVxcdFxcdHNrYl9zaGluZm8ocCktXFx1MDAzZWZyYWdfbGlzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yMDgtXFx0ZWxzZVxcbm5ldC9jb3JlL2dyby5jOjIwOTpcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlbGFzdC1cXHUwMDNlbmV4dCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYzoyMTA6XFx0TkFQSV9HUk9fQ0IocCktXFx1MDAzZWxhc3QgPSBza2I7XFxubmV0L2NvcmUvZ3JvLmMtMjExLVxcdF9fc2tiX2hlYWRlcl9yZWxlYXNlKHNrYik7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yMTQtZG9uZTpcXG5uZXQvY29yZS9ncm8uYzoyMTU6XFx0TkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ICs9IHNlZ3M7XFxubmV0L2NvcmUvZ3JvLmMtMjE2LVxcdHAtXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIyNS1cXHR9XFxubmV0L2NvcmUvZ3JvLmM6MjI2OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXNhbWVfZmxvdyA9IDE7XFxubmV0L2NvcmUvZ3JvLmMtMjI3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmM9MjMwPWludCBza2JfZ3JvX3JlY2VpdmVfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIzMy1cXHRpZiAodW5saWtlbHkocC1cXHUwMDNlbGVuICsgc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gNjU1MzYgfHxcXG5uZXQvY29yZS9ncm8uYzoyMzQ6XFx0XFx0ICAgICBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCkpXFxubmV0L2NvcmUvZ3JvLmMtMjM1LVxcdFxcdHJldHVybiAtRTJCSUc7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yMzctXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcXG5uZXQvY29yZS9ncm8uYzoyMzg6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2ggPSAxO1xcbm5ldC9jb3JlL2dyby5jLTIzOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTI0MS1cXG5uZXQvY29yZS9ncm8uYzoyNDI6XFx0aWYgKE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID09IHApXFxubmV0L2NvcmUvZ3JvLmMtMjQzLVxcdFxcdHNrYl9zaGluZm8ocCktXFx1MDAzZWZyYWdfbGlzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yNDQtXFx0ZWxzZVxcbm5ldC9jb3JlL2dyby5jOjI0NTpcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlbGFzdC1cXHUwMDNlbmV4dCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yNDYtXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yNDgtXFxubmV0L2NvcmUvZ3JvLmM6MjQ5OlxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID0gc2tiO1xcbm5ldC9jb3JlL2dyby5jOjI1MDpcXHROQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQrKztcXG5uZXQvY29yZS9ncm8uYy0yNTEtXFx0cC1cXHUwMDNlZGF0YV9sZW4gKz0gc2tiLVxcdTAwM2VsZW47XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yNjAtXFxubmV0L2NvcmUvZ3JvLmM6MjYxOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXNhbWVfZmxvdyA9IDE7XFxubmV0L2NvcmUvZ3JvLmMtMjYyLVxcbi0tXFxubmV0L2NvcmUvZ3JvLmM9MjY2PXN0YXRpYyB2b2lkIGdyb19jb21wbGV0ZShzdHJ1Y3QgZ3JvX25vZGUgKmdybywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTI3NC1cXG5uZXQvY29yZS9ncm8uYzoyNzU6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNvdW50ID09IDEpIHtcXG5uZXQvY29yZS9ncm8uYy0yNzYtXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSA9IDA7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zMDAtb3V0Olxcbm5ldC9jb3JlL2dyby5jOjMwMTpcXHRncm9fbm9ybWFsX29uZShncm8sIHNrYiwgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQpO1xcbm5ldC9jb3JlL2dyby5jLTMwMi19XFxuLS1cXG5uZXQvY29yZS9ncm8uYz0zMDQ9c3RhdGljIHZvaWQgX19ncm9fZmx1c2hfY2hhaW4oc3RydWN0IGdyb19ub2RlICpncm8sIHUzMiBpbmRleCwgYm9vbCBmbHVzaF9vbGQpXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zMDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2Uoc2tiLCBwLCBoZWFkLCBsaXN0KSB7XFxubmV0L2NvcmUvZ3JvLmM6MzEwOlxcdFxcdGlmIChmbHVzaF9vbGQgXFx1MDAyNlxcdTAwMjYgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlYWdlID09IGppZmZpZXMpXFxubmV0L2NvcmUvZ3JvLmMtMzExLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9jb3JlL2dyby5jPTM1Nz1zdGF0aWMgdm9pZCBncm9fbGlzdF9wcmVwYXJlKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zNjctXFx0XFx0aWYgKGhhc2ggIT0gc2tiX2dldF9oYXNoX3JhdyhwKSkge1xcbm5ldC9jb3JlL2dyby5jOjM2ODpcXHRcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlc2FtZV9mbG93ID0gMDtcXG5uZXQvY29yZS9ncm8uYy0zNjktXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zOTYtXFxubmV0L2NvcmUvZ3JvLmM6Mzk3OlxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VzYW1lX2Zsb3cgPSAhZGlmZnM7XFxubmV0L2NvcmUvZ3JvLmMtMzk4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2dyby5jPTQwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19yZXNldF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ob2ZmKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNDA2LVxcbm5ldC9jb3JlL2dyby5jOjQwNzpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VuZXR3b3JrX29mZnNldCA9IDA7XFxubmV0L2NvcmUvZ3JvLmM6NDA4OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWRhdGFfb2Zmc2V0ID0gMDtcXG5uZXQvY29yZS9ncm8uYy00MDktXFx0aGVhZGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XFxubmV0L2NvcmUvZ3JvLmM6NDEwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwID0gc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9jb3JlL2dyby5jOjQxMTpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMF9sZW4gPSBoZWFkbGVuO1xcbm5ldC9jb3JlL2dyby5jLTQxMi1cXHRpZiAoaGVhZGxlbilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTQyMC1cXHQgICAgKCFORVRfSVBfQUxJR04gfHwgISgoc2tiX2ZyYWdfb2ZmKGZyYWcwKSArIG5ob2ZmKSBcXHUwMDI2IDMpKSkge1xcbm5ldC9jb3JlL2dyby5jOjQyMTpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCA9IHNrYl9mcmFnX2FkZHJlc3MoZnJhZzApO1xcbm5ldC9jb3JlL2dyby5jOjQyMjpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsXFxubmV0L2NvcmUvZ3JvLmMtNDIzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2JfZnJhZ19zaXplKGZyYWcwKSxcXG4tLVxcbm5ldC9jb3JlL2dyby5jPTQyOD1zdGF0aWMgdm9pZCBncm9fcHVsbF9mcm9tX2ZyYWcwKHN0cnVjdCBza19idWZmICpza2IsIGludCBncm93KVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNDMzLVxcbm5ldC9jb3JlL2dyby5jOjQzNDpcXHRtZW1jcHkoc2tiX3RhaWxfcG9pbnRlcihza2IpLCBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCwgZ3Jvdyk7XFxubmV0L2NvcmUvZ3JvLmMtNDM1LVxcbi0tXFxubmV0L2NvcmUvZ3JvLmM9NDc2PXN0YXRpYyBlbnVtIGdyb19yZXN1bHQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBncm9fbm9kZSAqZ3JvLFxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNTA2LVxcdFxcdFxcdFxcdFxcdHNpemVvZih1MzIpKSk7IC8qIEF2b2lkIHNsb3cgdW5hbGlnbmVkIGFjYyAqL1xcbm5ldC9jb3JlL2dyby5jOjUwNzpcXHQqKHUzMiAqKVxcdTAwMjZOQVBJX0dST19DQihza2IpLVxcdTAwM2V6ZXJvZWQgPSAwO1xcbm5ldC9jb3JlL2dyby5jOjUwODpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCA9IHNrYl9oYXNfZnJhZ19saXN0KHNrYik7XFxubmV0L2NvcmUvZ3JvLmM6NTA5OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNvdW50ID0gMTtcXG5uZXQvY29yZS9ncm8uYy01MTAtXFx0aWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpIHtcXG5uZXQvY29yZS9ncm8uYzo1MTE6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzO1xcbm5ldC9jb3JlL2dyby5jLTUxMi1cXHRcXHQvKiBPbmx5IHN1cHBvcnQgVENQIGFuZCBub24gRE9ER1kgdXNlcnMuICovXFxuLS1cXG5uZXQvY29yZS9ncm8uYy01MTQtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19ET0RHWSkpXFxubmV0L2NvcmUvZ3JvLmM6NTE1OlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZsdXNoID0gMTtcXG5uZXQvY29yZS9ncm8uYy01MTYtXFx0fVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNTIwLVxcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XFxubmV0L2NvcmUvZ3JvLmM6NTIxOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0gPSBza2ItXFx1MDAzZWNzdW07XFxubmV0L2NvcmUvZ3JvLmM6NTIyOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW1fdmFsaWQgPSAxO1xcbm5ldC9jb3JlL2dyby5jLTUyMy1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9ncm8uYy01MjQtXFx0Y2FzZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTpcXG5uZXQvY29yZS9ncm8uYzo1MjU6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV9jbnQgPSBza2ItXFx1MDAzZWNzdW1fbGV2ZWwgKyAxO1xcbm5ldC9jb3JlL2dyby5jLTUyNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTUzOS1cXG5uZXQvY29yZS9ncm8uYzo1NDA6XFx0c2FtZV9mbG93ID0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlc2FtZV9mbG93O1xcbm5ldC9jb3JlL2dyby5jOjU0MTpcXHRyZXQgPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmVlID8gR1JPX01FUkdFRF9GUkVFIDogR1JPX01FUkdFRDtcXG5uZXQvY29yZS9ncm8uYy01NDItXFxuLS1cXG5uZXQvY29yZS9ncm8uYy01NTEtXFxubmV0L2NvcmUvZ3JvLmM6NTUyOlxcdGlmIChOQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaClcXG5uZXQvY29yZS9ncm8uYy01NTMtXFx0XFx0Z290byBub3JtYWw7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy01NTktXFxubmV0L2NvcmUvZ3JvLmM6NTYwOlxcdC8qIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzZXR0aW5nIE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXthZ2V8bGFzdH0gKi9cXG5uZXQvY29yZS9ncm8uYy01NjEtXFx0Z3JvX3RyeV9wdWxsX2Zyb21fZnJhZzAoc2tiKTtcXG5uZXQvY29yZS9ncm8uYzo1NjI6XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlYWdlID0gamlmZmllcztcXG5uZXQvY29yZS9ncm8uYzo1NjM6XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlbGFzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy01NjQtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxuLS1cXG5uZXQvY29yZS9ncm8uYz02MTI9c3RhdGljIGdyb19yZXN1bHRfdCBncm9fc2tiX2ZpbmlzaChzdHJ1Y3QgZ3JvX25vZGUgKmdybywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTYyMC1cXHRjYXNlIEdST19NRVJHRURfRlJFRTpcXG5uZXQvY29yZS9ncm8uYzo2MjE6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyZWUgPT0gTkFQSV9HUk9fRlJFRV9TVE9MRU5fSEVBRClcXG5uZXQvY29yZS9ncm8uYy02MjItXFx0XFx0XFx0bmFwaV9za2JfZnJlZV9zdG9sZW5faGVhZChza2IpO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmM9NzA1PXN0YXRpYyBncm9fcmVzdWx0X3QgbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNzE4LVxcdGNhc2UgR1JPX01FUkdFRF9GUkVFOlxcbm5ldC9jb3JlL2dyby5jOjcxOTpcXHRcXHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZnJlZSA9PSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEKVxcbm5ldC9jb3JlL2dyby5jLTcyMC1cXHRcXHRcXHRuYXBpX3NrYl9mcmVlX3N0b2xlbl9oZWFkKHNrYik7XFxuLS1cXG5uZXQvY29yZS9ncm8uYz03Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICpuYXBpX2ZyYWdzX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9ncm8uYy03NTgtXFxubmV0L2NvcmUvZ3JvLmM6NzU5OlxcdFxcdGlmIChOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCAhPSBza2ItXFx1MDAzZWRhdGEpXFxubmV0L2NvcmUvZ3JvLmMtNzYwLVxcdFxcdFxcdGdyb19wdWxsX2Zyb21fZnJhZzAoc2tiLCBobGVuKTtcXG5uZXQvY29yZS9ncm8uYy03NjEtXFxubmV0L2NvcmUvZ3JvLmM6NzYyOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwICs9IGhsZW47XFxubmV0L2NvcmUvZ3JvLmM6NzYzOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwX2xlbiAtPSBobGVuO1xcbm5ldC9jb3JlL2dyby5jLTc2NC1cXHR9XFxuLS1cXG5uZXQvY29yZS9ncm8uYz03OTQ9X19zdW0xNiBfX3NrYl9ncm9fY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTgwMC1cXG5uZXQvY29yZS9ncm8uYzo4MDE6XFx0LyogTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bSBob2xkcyBwc2V1ZG8gY2hlY2tzdW0gKi9cXG5uZXQvY29yZS9ncm8uYzo4MDI6XFx0c3VtID0gY3N1bV9mb2xkKGNzdW1fYWRkKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0sIHdzdW0pKTtcXG5uZXQvY29yZS9ncm8uYy04MDMtXFx0LyogU2VlIGNvbW1lbnRzIGluIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKCkuICovXFxuLS1cXG5uZXQvY29yZS9ncm8uYy04MDktXFxubmV0L2NvcmUvZ3JvLmM6ODEwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0gPSB3c3VtO1xcbm5ldC9jb3JlL2dyby5jOjgxMTpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vjc3VtX3ZhbGlkID0gMTtcXG5uZXQvY29yZS9ncm8uYy04MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjMzLjEwODkyODg3NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NzQ5MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIFRoaXMgR1JPIENvbnRyb2wgQmxvY2sqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uIGFuZCBJIHNlZSB0aGlzIGxpbmU6IGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhpcyBgemVyb2VkYCBmaWVsZCBpbiB0aGUgYE5BUElfR1JPX0NCYC4gSSBoYXZlIGEgZmVlbGluZyBpdCdzIGltcG9ydGFudCBmb3IgdGhlIEdSTyBwcm9jZXNzLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYHN0cnVjdCBuYXBpX2dyb19jYmAgbG9va3MgbGlrZSBpbiBgaW5jbHVkZS9uZXQvZ3JvLmhgLiBMZXQncyBzZWUgd2hhdCB0aGlzIGlzIGFsbCBhYm91dCwgYW5kIHRoZW4gSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSBob3cgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgcHJvY2Vzc2luZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjM2LjYyNjY4MDcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM5MjUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvZ3JvLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZ3JvLmg9MTc9c3RydWN0IG5hcGlfZ3JvX2NiIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oLTUzLVxcdC8qIHBvcnRpb24gb2YgdGhlIGNiIHNldCB0byB6ZXJvIGF0IGV2ZXJ5IGdybyBpdGVyYXRpb24gKi9cXG5pbmNsdWRlL25ldC9ncm8uaDo1NDpcXHRzdHJ1Y3RfZ3JvdXAoemVyb2VkLFxcbmluY2x1ZGUvbmV0L2dyby5oLTU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTozNi42NzMwNzcyNjNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzNjI5NTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgR1JPIENhbGxiYWNrIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIEdSTyBzdHVmZiB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBjYWxsYmFjayBtZWNoYW5pc20uIEkgcmVtZW1iZXIgc2VlaW5nIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgIG1lbnRpb25lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ug4oCTIHRoZSBgaW5jbHVkZS9uZXQvZ3JvLmhgIGhlYWRlciBmaWxlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5hcGlfZ3JvX2NiYC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNyaXRpY2FsIG1lbWJlcnMgdGhhdCBtYW5hZ2UgdGhlIHBhY2tldCBhZ2dyZWdhdGlvbiBwcm9jZXNzLiBJJ20gbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGxheWVyLCBob3cgaXQgaGFuZGxlcyB0aGUgR1JPIHdvcmssIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFyb3VuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ25lcnMgY2hvc2UgdG8gZXhwb3NlIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6NDAuOTA5Mzc1NDI2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ncm8uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTc6XFx0c3RydWN0IG5hcGlfZ3JvX2NiIHtcXG4gIDE4OlxcdFxcdHVuaW9uIHtcXG4gIDE5OlxcdFxcdFxcdHN0cnVjdCB7XFxuICAyMDpcXHRcXHRcXHRcXHQvKiBWaXJ0dWFsIGFkZHJlc3Mgb2Ygc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1swXS5wYWdlICsgb2Zmc2V0LiAqL1xcbiAgMjE6XFx0XFx0XFx0XFx0dm9pZFxcdCpmcmFnMDtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0XFx0XFx0LyogTGVuZ3RoIG9mIGZyYWcwLiAqL1xcbiAgMjQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZyYWcwX2xlbjtcXG4gIDI1OlxcdFxcdFxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdFxcdHN0cnVjdCB7XFxuICAyODpcXHRcXHRcXHRcXHQvKiB1c2VkIGluIHNrYl9ncm9fcmVjZWl2ZSgpIHNsb3cgcGF0aCAqL1xcbiAgMjk6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmxhc3Q7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdFxcdFxcdC8qIGppZmZpZXMgd2hlbiBmaXJzdCBwYWNrZXQgd2FzIGNyZWF0ZWQvcXVldWVkICovXFxuICAzMjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFnZTtcXG4gIDMzOlxcdFxcdFxcdH07XFxuICAzNDpcXHRcXHR9O1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItXFx1MDAzZWRhdGEuICovXFxuICAzNzpcXHRcXHRpbnRcXHRkYXRhX29mZnNldDtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0LyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IGNhbm5vdCBiZSBtZXJnZWQgd2l0aCB0aGUgbmV3IHNrYi4gKi9cXG4gIDQwOlxcdFxcdHUxNlxcdGZsdXNoO1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQvKiBOdW1iZXIgb2Ygc2VnbWVudHMgYWdncmVnYXRlZC4gKi9cXG4gIDQzOlxcdFxcdHUxNlxcdGNvdW50O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQvKiBVc2VkIGluIGlwdjZfZ3JvX3JlY2VpdmUoKSBhbmQgZm9vLW92ZXItdWRwIGFuZCBlc3AtaW4tdWRwICovXFxuICA0NjpcXHRcXHR1MTZcXHRwcm90bztcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0dTE2XFx0cGFkO1xcbiAgNDk6XFx0XFxuICA1MDpcXHQvKiBVc2VkIGluIG5hcGlfZ3JvX2NiOjpmcmVlICovXFxuICA1MTpcXHQjZGVmaW5lIE5BUElfR1JPX0ZSRUUgICAgICAgICAgICAgMVxcbiAgNTI6XFx0I2RlZmluZSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEIDJcXG4gIDUzOlxcdFxcdC8qIHBvcnRpb24gb2YgdGhlIGNiIHNldCB0byB6ZXJvIGF0IGV2ZXJ5IGdybyBpdGVyYXRpb24gKi9cXG4gIDU0OlxcdFxcdHN0cnVjdF9ncm91cCh6ZXJvZWQsXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdFxcdC8qIFN0YXJ0IG9mZnNldCBmb3IgcmVtb3RlIGNoZWNrc3VtIG9mZmxvYWQgKi9cXG4gIDU3OlxcdFxcdFxcdHUxNlxcdGdyb19yZW1jc3VtX3N0YXJ0O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRcXHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgbWF5IGJlIG9mIHRoZSBzYW1lIGZsb3cuICovXFxuICA2MDpcXHRcXHRcXHR1OFxcdHNhbWVfZmxvdzoxO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRcXHQvKiBVc2VkIGluIHR1bm5lbCBHUk8gcmVjZWl2ZSAqL1xcbiAgNjM6XFx0XFx0XFx0dThcXHRlbmNhcF9tYXJrOjE7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdFxcdC8qIEdSTyBjaGVja3N1bSBpcyB2YWxpZCAqL1xcbiAgNjY6XFx0XFx0XFx0dThcXHRjc3VtX3ZhbGlkOjE7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdFxcdC8qIE51bWJlciBvZiBjaGVja3N1bXMgdmlhIENIRUNLU1VNX1VOTkVDRVNTQVJZICovXFxuICA2OTpcXHRcXHRcXHR1OFxcdGNzdW1fY250OjM7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZyZWUgdGhlIHNrYj8gKi9cXG4gIDcyOlxcdFxcdFxcdHU4XFx0ZnJlZToyO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQvKiBVc2VkIGluIEdSRSwgc2V0IGluIGZvdS9ndWVfZ3JvX3JlY2VpdmUgKi9cXG4gIDc1OlxcdFxcdFxcdHU4XFx0aXNfZm91OjE7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGlwaWRfb2Zmc2V0IGNhbiBiZSBpZ25vcmVkICovXFxuICA3ODpcXHRcXHRcXHR1OFxcdGlwX2ZpeGVkaWQ6MjtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0XFx0LyogTnVtYmVyIG9mIGdyb19yZWNlaXZlIGNhbGxiYWNrcyB0aGlzIHBhY2tldCBhbHJlYWR5IHdlbnQgdGhyb3VnaCAqL1xcbiAgODE6XFx0XFx0XFx0dTggcmVjdXJzaW9uX2NvdW50ZXI6NDtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0XFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXFxuICA4NDpcXHRcXHRcXHR1OFxcdGlzX2ZsaXN0OjE7XFxuICA4NTpcXHRcXHQpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiB1c2VkIHRvIHN1cHBvcnQgQ0hFQ0tTVU1fQ09NUExFVEUgZm9yIHR1bm5lbGluZyBwcm90b2NvbHMgKi9cXG4gIDg4OlxcdFxcdF9fd3N1bVxcdGNzdW07XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdC8qIEwzIG9mZnNldHMgKi9cXG4gIDkxOlxcdFxcdHVuaW9uIHtcXG4gIDkyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA5MzpcXHRcXHRcXHRcXHR1MTYgbmV0d29ya19vZmZzZXQ7XFxuICA5NDpcXHRcXHRcXHRcXHR1MTYgaW5uZXJfbmV0d29ya19vZmZzZXQ7XFxuICA5NTpcXHRcXHRcXHR9O1xcbiAgOTY6XFx0XFx0XFx0dTE2IG5ldHdvcmtfb2Zmc2V0c1syXTtcXG4gIDk3OlxcdFxcdH07XFxuICA5ODpcXHR9O1xcbiAgOTk6XFx0XFxuIDEwMDpcXHQjZGVmaW5lIE5BUElfR1JPX0NCKHNrYikgKChzdHJ1Y3QgbmFwaV9ncm9fY2IgKikoc2tiKS1cXHUwMDNlY2IpXFxuIDEwMTpcXHRcXG4gMTAyOlxcdCNkZWZpbmUgR1JPX1JFQ1VSU0lPTl9MSU1JVCAxNVxcbiAxMDM6XFx0c3RhdGljIGlubGluZSBpbnQgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMDQ6XFx0e1xcbiAxMDU6XFx0XFx0cmV0dXJuICsrTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlcmVjdXJzaW9uX2NvdW50ZXIgPT0gR1JPX1JFQ1VSU0lPTl9MSU1JVDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV90KShzdHJ1Y3QgbGlzdF9oZWFkICosIHN0cnVjdCBza19idWZmICopO1xcbiAxMDk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZShncm9fcmVjZWl2ZV90IGNiLFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDExMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTEyOlxcdHtcXG4gMTEzOlxcdFxcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XFxuIDExNDpcXHRcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCB8PSAxO1xcbiAxMTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDExNjpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjQwLjkwOTQ4MzIzNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY1NTE4MjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipHUk8gYGlzX2ZsaXN0YCBJbml0aWFsaXphdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlzX2ZsaXN0YCBiaXRmaWVsZCwgYW5kIGl0J3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgemVyb2VkYCBzdHJ1Y3QgZ3JvdXAsIHdoaWNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gR1JPIGluIHRoZSBrZXJuZWwuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGp1c3QgYW5vdGhlciBiaXRmaWVsZCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoZW4gSSBzZWUgdGhhdCBgKih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7YCBpcyB1c2VkIGluIGBkZXZfZ3JvX3JlY2VpdmVgLiAgVGhhdCBgemVyb2VkYCBhcHBlYXJzIHRvIGJlIGEgYHUzMmAuICBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cbmBncm9fcmVtY3N1bV9zdGFydGAgaXMgYSBgdTE2YCAtIHRoYXQncyAyIGJ5dGVzLiBUaGUgYml0ZmllbGRzIGFyZSBwYWNrZWQsIHNvIGxldCdzIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aG9zZTpcblxuKiAgIGBzYW1lX2Zsb3dgICgxIGJpdClcbiogICBgZW5jYXBfbWFya2AgKDEgYml0KVxuKiAgIGBjc3VtX3ZhbGlkYCAoMSBiaXQpXG4qICAgYGNzdW1fY250YCAoMyBiaXRzKVxuKiAgIGBmcmVlYCAoMiBiaXRzKVxuXG5UaGF0J3MgYSB0b3RhbCBvZiA4IGJpdHMsIG9yIDEgYnl0ZS4gVGhlbiB0aGVzZTpcblxuKiAgIGBpc19mb3VgICgxIGJpdClcbiogICBgaXBfZml4ZWRpZGAgKDIgYml0cylcbiogICBgcmVjdXJzaW9uX2NvdW50ZXJgICg0IGJpdHMpXG4qICAgYGlzX2ZsaXN0YCAoMSBiaXQpXG5cbkFub3RoZXIgOCBiaXRzLCBvciAxIGJ5dGUuXG5cblNvLCBgZ3JvX3JlbWNzdW1fc3RhcnRgICgyIGJ5dGVzKSArIDEgYnl0ZSAoZmlyc3Qgc2V0IG9mIGJpdGZpZWxkcykgKyAxIGJ5dGUgKHNlY29uZCBzZXQgb2YgYml0ZmllbGRzKSA9IDQgYnl0ZXMuIFBlcmZlY3QhICBUaGF0IG1lYW5zIGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgIHplcm9lcyBvdXQgYWxsIG9mIGB6ZXJvZWRgIGluY2x1ZGluZyBgaXNfZmxpc3RgLiBUaHVzIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgaXNfZmxpc3RgIGlzICphbHdheXMqIGluaXRpYWxpemVkIHRvIDAgd2hlbiBhbiBza2IgZW50ZXJzIHRoZSBHUk8gcGF0aCwgYmVjYXVzZSBvZiB0aGlzIHplcm9pbmcgb3BlcmF0aW9uIGluIGBkZXZfZ3JvX3JlY2VpdmVgLlxuXG5Ob3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyB0aGUgb25seSBlbnRyeSBwb2ludC4gSSdsbCBjaGVjayBgZGV2X2dyb19yZWNlaXZlYCB0byBzZWUgaWYgaXQncyB0aGUgc29sZSBlbnRyeSBwb2ludCB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIEdSTy4gQW5kIGB0Y3BfZ3JvX3JlY2VpdmVgIGhhbmRsZXMgdGhlIEdSTyBwcm9jZXNzaW5nIGZvciBUQ1AgcGFja2V0cy5cblxuQnV0LCBob2xkIG9uLiAgYHRjcF9ncm9fcmVjZWl2ZWAgcmVjZWl2ZXMgYW4gc2tiIGFzIGBwYC4gIGBwYCBpcyBhbiBza2IgZnJvbSB0aGUgR1JPIGxpc3QuIFdoaWNoIGFsc28gd2VudCB0aHJvdWdoIGBkZXZfZ3JvX3JlY2VpdmVgLiBTbyBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3RgIGlzIGFsc28gaW5pdGlhbGl6ZWQuXG5cbkFscmlnaHQsIGlzIHRoZXJlICphbnkqIG90aGVyIHBsYWNlIHdoZXJlIGB0Y3BfZ3JvX3JlY2VpdmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGFuIHNrYiB0aGF0ICpoYXNuJ3QqIGdvbmUgdGhyb3VnaCBgZGV2X2dyb19yZWNlaXZlYD8gVGhhdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vLCBHUk8gcGFja2V0cyBhcmUgKmFsd2F5cyogcHJvY2Vzc2VkIHRocm91Z2ggYGRldl9ncm9fcmVjZWl2ZWAgb3IgYG5hcGlfZ3JvX3JlY2VpdmVgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldl9ncm9fcmVjZWl2ZWAuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpc24ndCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZS4gTGV0J3MgbG9vayBmb3IgY2FsbGVycyBvZiBgdGNwX2dyb19yZWNlaXZlYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6NTEuNTY0NjY4MzQ4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI2NTk5NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9ncm9fcmVjZWl2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yNDI5PXN0cnVjdCBza19idWZmICp0Y3BfZ3JvX2xvb2t1cChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgdGNwaGRyICp0aCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MjQzMDpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjQzMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwaGRyICp0aCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTI2NT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19sb29rdXAoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHRjcGhkciAqdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTI4NS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjI4NjpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXFx0XFx0XFx0XFx0c3RydWN0IHRjcGhkciAqdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDQtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XFx0cmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ0Ni1cXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz01Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBza19idWZmICp0Y3A2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNzMtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjc0OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTo1My42OTEyNzQzMloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE3NDk0Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIFRDUCBHUk8gRnJhZ2xpc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aDogYHRjcF9ncm9fcmVjZWl2ZWAgaXMgY2FsbGVkIGZyb20gYHRjcDRfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNl9ncm9fcmVjZWl2ZWAsIHdoaWNoIG9yaWdpbmF0ZSBmcm9tIGBpcHY0X2dyb19yZWNlaXZlYCBhbmQgYGlwdjZfZ3JvX3JlY2VpdmVgLCBhbGwgdWx0aW1hdGVseSBzdGFydGluZyBmcm9tIGBkZXZfZ3JvX3JlY2VpdmVgLiBTaW5jZSBgZGV2X2dyb19yZWNlaXZlYCBpcyBhdCB0aGUgdG9wIGxldmVsLCBhbGwgdGhlIFNLQnMgc2hvdWxkIGhhdmUgYE5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkYCBwcm9wZXJseSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGlzX2ZsaXN0YCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB0Y3BfZ3JvX2xvb2t1cGAgdGhhdCBzZXRzIHRoaXMgZmxhZy4gSXQgKmxvb2tzKiBsaWtlIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3RgLiBMZXQncyBzY3J1dGluaXplIHRoYXQuIFNpbmNlIGBpc19mbGlzdGAgbGl2ZXMgaW4gYSBgemVyb2VkYCBzdHJ1Y3QsIHdoaWNoIGBkZXZfZ3JvX3JlY2VpdmVgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMsIGl0J3MgYWxyZWFkeSBpbml0aWFsaXplZC4gU28gdGhlIHBhdGNoIGp1c3QgY2hhbmdlcyB0aGUgbG9naWMgb2YgaXRzIGFzc2lnbm1lbnQsIG5vdCBpdHMgaW5pdGlhbCB2YWx1ZS5cblxuQnV0IHdhaXQsIGBza2JfaXNfZ3NvKHNrYilgIGlzIGludHJvZHVjZWQgaW50byB0aGUgY29uZGl0aW9uYWwuIFRoYXQgY2hlY2tzIHRoZSBHU08gc3RhdGUsIHNwZWNpZmljYWxseSBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplYC4gT2theSwgYnV0IGBza2Jfc2hpbmZvYCBpcyBhbGxvY2F0ZWQgd2l0aCB0aGUgU0tCLCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uIFRoaXMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvbywgcmlnaHQ/IEFuZCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnRgIGFsc28gZ2V0cyBjaGVja2VkLiBgY291bnRgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBjb3VudGAgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuVGhlIHBhdGNoIGFsc28gYWZmZWN0cyB0aGUgYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgYCFza2JfaXNfZ3NvKHNrYilgIGFkZGVkIHRvIHRoZSBsb2dpYyBmb3IgYXNzaWduaW5nIGBpc19mbGlzdGAuIEFnYWluLCBqdXN0IGEgYm9vbGVhbiBsb2dpYyBjaGFuZ2UsIG5vdGhpbmcgdGhhdCBzaG91bGQgaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC5cblxuRGl2aW5nIGludG8gYHRjcF9ncm9fcmVjZWl2ZWAsIHRoZXJlIGlzIGEgY29tcGFyaXNvbiB3aXRoIGBmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0O2AuIEJ1dCBgaXNfZmxpc3RgIGlzIGluaXRpYWxpemVkLCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhbiBpc3N1ZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgYHNrYi1cdTAwM2VjYmAuIElzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCByZWFkIGZyb20gdGhlcmU/IEJ1dCBgZGV2X2dyb19yZWNlaXZlYCBzZXRzIGB6ZXJvZWRgIGluIGBjYmAgd2hpY2ggaW5jbHVkZXMgYGlzX2ZsaXN0YC4gQWxzbyBgZGV2X2dyb19yZWNlaXZlYCBpbml0aWFsaXplcyBhIGJ1bmNoIG9mIG90aGVyIGZpZWxkcyBhcyB3ZWxsIGxpa2UgYGZsdXNoYCwgYGNvdW50YCwgYGNzdW1gLCBldGMuIEFuZCB0aGUgb3RoZXIgZmllbGRzIGxpa2UgYGRhdGFfb2Zmc2V0YCwgYGZyYWcwYCwgZXRjLiBnZXQgaW5pdGlhbGl6ZWQgYnkgYHNrYl9ncm9fcmVzZXRfb2Zmc2V0YCBjYWxsZWQganVzdCBiZWZvcmUgR1JPLiBTbywgYGNiYCBpcyBmdWxseSBpbml0aWFsaXplZCBmb3IgR1JPLCB3aGljaCBpcyBnb29kLlxuXG5Pa2F5LCBzbyBjb3VsZCB0aGUgcGF0Y2ggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBTS0IgcGF5bG9hZD8gVGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgZnJhZ2xpc3QgR1JPLCBzbyBpdCdzIGEgYnVnIGZpeC4gSWYgYGlzX2ZsaXN0YCBpcyBpbmNvcnJlY3RseSBzZXQsIHRoaXMgbWlnaHQgcmVzdWx0IGluIGluY29ycmVjdCBtZXJnZXMsIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBPT0IgYWNjZXNzZXMgb3IgVUFGLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCByZWFkcyBvciBwb3RlbnRpYWwgaW5mbyBsZWFrcy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCdzIGJyaWVmbHkgbG9vayBhdCB0aGUgY29udGV4dC4gVGhlIHBhdGNoIGlzIGFib3V0IGZpeGluZyBHUk8gZnJhZ2xpc3QgZmFsbGJhY2sgbG9naWMuIFRoaXMgaXMgZml4aW5nIGEgbG9naWMgYnVnLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggR1NPIHNrYnMgYW5kIGZyYWdsaXN0IEdSTy4gRXNzZW50aWFsbHksIGl0J3MgcHJldmVudGluZyBhIGNyYXNoIG9yIGluY29ycmVjdCBwcm9jZXNzaW5nIGR1ZSB0byBpbmNvcnJlY3QgcGFja2V0IGhhbmRsaW5nLiBTaW5jZSB0aGlzIGlzIGEgbG9naWMgYnVnLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGFzIGl0IG1heSBleHBvc2UgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5GaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHNrYi1cdTAwM2VjYmAgaXMgbmV2ZXIgc2VudCB0byB1c2Vyc3BhY2UuIGBza2ItXHUwMDNlY2JgIGlzIGFuIGludGVybmFsIGNvbnRyb2wgYnVmZmVyIGZvciB0aGUga2VybmVsLCBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBJdCdzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGR1cmluZyB0aGUgTkFQSSBHUk8gcHJvY2Vzc2luZyBwaGFzZS4gQW5kIHdoZW4gR1JPIGlzIGRvbmUsIHRoZSBgY2JgIGlzIGZyZWUgdG8gYmUgcmV1c2VkLiBUaGVyZSdzIG5vIGluZm8gbGVhayByaXNrIGhlcmUuXG5cblNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSBzYWZlLCBhbmQgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgR1JPIG1lcmdpbmcsIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQncyBzdW1tYXJpemUgbXkgcmVhc29uaW5nOlxuMS4gIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZ1xuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDIsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NjoxNi44NjYyMjUxMjlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXFx1MDAyNk5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXplcm9lZCA9IDA7YCkgYmVmb3JlIGFueSBHUk8gcHJvdG9jb2wgaGFuZGxlcnMgYXJlIGludm9rZWQuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb25kaXRpb25hbCBjaGVja3MgKGUuZy4sIGBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3RgKSBkbyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnVydGhlcm1vcmUsIHRoZSBgc2tiLVxcdTAwM2VjYmAgY29udHJvbCBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBmb3IgaW50ZXJuYWwga2VybmVsIHN0YXRlIHRyYWNraW5nIGR1cmluZyB0aGUgTkFQSSBwb2xsaW5nIHBoYXNlIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBlbGltaW5hdGluZyBhbnkgaW5mby1sZWFrIHJpc2tzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIEdSTyBtZXJnaW5nIGxvZ2ljIGZvciBHU08gcGFja2V0czsgYW55IHJlZ3Jlc3Npb25zIGhlcmUgd291bGQgbGVhZCB0byBza2IgbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgYWxyZWFkeSBjb21wcmVoZW5zaXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbnN1bXB0aW9uIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXFx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzvrlh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 09:44:16 +0000 UTC FinishedAt: 2026-08-19 10:46:19 +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": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "9df92a6d-3016-48df-9471-d73e2965e760" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_gro_receive", "tcp4_gro_receive" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDt0Y3A0X2dyb19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7YCkgYmVmb3JlIGFueSBHUk8gcHJvdG9jb2wgaGFuZGxlcnMgYXJlIGludm9rZWQuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb25kaXRpb25hbCBjaGVja3MgKGUuZy4sIGBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0YCkgZG8gbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB0aGUgYHNrYi1cdTAwM2VjYmAgY29udHJvbCBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBmb3IgaW50ZXJuYWwga2VybmVsIHN0YXRlIHRyYWNraW5nIGR1cmluZyB0aGUgTkFQSSBwb2xsaW5nIHBoYXNlIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBlbGltaW5hdGluZyBhbnkgaW5mby1sZWFrIHJpc2tzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIEdSTyBtZXJnaW5nIGxvZ2ljIGZvciBHU08gcGFja2V0czsgYW55IHJlZ3Jlc3Npb25zIGhlcmUgd291bGQgbGVhZCB0byBza2IgbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgYWxyZWFkeSBjb21wcmVoZW5zaXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbnN1bXB0aW9uIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBsb2dpYyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgaGFuZGxpbmcgZnJhZ2xpc3QgR1JPIGFuZCBHU08gc2ticy4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMTA6NDQ6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuYyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmNcbmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5AQCAtMzMyLDYgJiM0MzszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gcC1cdTAwM2VpcF9zdW1tZWQ7XG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2Vjc3VtX2xldmVsICE9IHAtXHUwMDNlY3N1bV9sZXZlbDtcbiBcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgXHUwMDNlPSA2NDtcbiYjNDM7XHRcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3Q7XG4gXHRcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7XG4gXG4gXHRcdGlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmVfbGlzdChwLCBza2IpKVxuQEAgLTM5NSwxMiAmIzQzOzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlpZiwgc2RpZjtcbiBcbi1cdGlmIChsaWtlbHkoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuJiM0MztcdFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXG4mIzQzO1x0XHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbiYjNDM7XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovXG4mIzQzO1x0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbiYjNDM7XHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuJiM0MztcbiYjNDM7XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xuJiM0MztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQxMCw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0ICAgICAgIGlwaC1cdTAwM2VkYWRkciwgbnRvaHModGgtXHUwMDNlZGVzdCksXG4gXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4mIzQzO1x0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbiBcdGlmIChzaylcbiBcdFx0c29ja19nZW5fcHV0KHNrKTtcbiB9XG5AQCAtNDMwLDcgJiM0Mzs0MzksOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCF0aClcbiBcdFx0Z290byBmbHVzaDtcbiBcbi1cdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuJiM0MztcdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpXG4mIzQzO1x0XHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcbiBcbiBcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG5pbmRleCBmMmE2NTljZDYxODNjLi5lZWMzNzc4ODU1ZWI4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbkBAIC0yNiw3ICYjNDM7MjYsMTggQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHAgPSB0Y3BfZ3JvX2xvb2t1cChoZWFkLCB0aCk7XG4gXHRpZiAocCkge1xuLVx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4mIzQzO1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbiYjNDM7XHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xuJiM0MztcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbiYjNDM7XHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxuJiM0MztcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4mIzQzO1xuJiM0MztcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4mIzQzO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBcdTAwMjZoZHItXHUwMDNlc2FkZHIsIHRoLVx1MDAzZXNvdXJjZSxcbiBcdFx0XHRcdFx0XHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdFx0aWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4mIzQzO1x0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbiBcdGlmIChzaylcbiBcdFx0c29ja19nZW5fcHV0KHNrKTtcbiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2dyb19yZWNlaXZlJiMzNDssCiAgICAmIzM0O3RjcDRfZ3JvX3JlY2VpdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBmcmFnbGlzdCBHUk8gYW5kIEdTTyBza2JzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY2ODhlOTQxOWUxZmUwMTQzMTNjZDYxZDE4ZTM4YWMwOGVkMmU2MzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDo0NDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jCmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuYwpAQCAtMzMyLDYgJiM0MzszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWZsdXNoIHw9IHNrYi0mZ3Q7aXBfc3VtbWVkICE9IHAtJmd0O2lwX3N1bW1lZDsKIAkJZmx1c2ggfD0gc2tiLSZndDtjc3VtX2xldmVsICE9IHAtJmd0O2NzdW1fbGV2ZWw7CiAJCWZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtjb3VudCAmZ3Q7PSA2NDsKJiM0MzsJCWZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdDsKIAkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTsKIAogCQlpZiAoZmx1c2ggfHwgc2tiX2dyb19yZWNlaXZlX2xpc3QocCwgc2tiKSkKQEAgLTM5NSwxMiAmIzQzOzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgaWlmLCBzZGlmOwogCi0JaWYgKGxpa2VseSghKHNrYi0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19GUkFHTElTVCkpKQotCQlyZXR1cm47Ci0KIAlwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpOwogCWlmIChwKSB7Ci0JCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJLyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovCiYjNDM7CQlpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0KSB7CiYjNDM7CQkJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3Q7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovCiYjNDM7CQlpZiAoTkFQSV9HUk9fQ0IocCktJmd0O2NvdW50ID09IDEpCiYjNDM7CQkJTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKJiM0MzsJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDEwLDcgJiM0Mzs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC0mZ3Q7c2FkZHIsIHRoLSZndDtzb3VyY2UsCiAJCQkJICAgICAgIGlwaC0mZ3Q7ZGFkZHIsIG50b2hzKHRoLSZndDtkZXN0KSwKIAkJCQkgICAgICAgaWlmLCBzZGlmKTsKLQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9ICFzazsKJiM0MzsJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2sgJmFtcDsmYW1wOyAhc2tiX2lzX2dzbyhza2IpOwogCWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKIH0KQEAgLTQzMCw3ICYjNDM7NDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAoIXRoKQogCQlnb3RvIGZsdXNoOwogCi0JdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7CiYjNDM7CWlmICh1bmxpa2VseShza2ItJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKQomIzQzOwkJdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7CiAKIAlyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMKaW5kZXggZjJhNjU5Y2Q2MTgzYy4uZWVjMzc3ODg1NWViOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYwpAQCAtMjYsNyAmIzQzOzI2LDE4IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAlwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpOwogCWlmIChwKSB7Ci0JCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJLyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovCiYjNDM7CQlpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0KSB7CiYjNDM7CQkJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3Q7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovCiYjNDM7CQlpZiAoTkFQSV9HUk9fQ0IocCktJmd0O2NvdW50ID09IDEpCiYjNDM7CQkJTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKJiM0MzsJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gMDsKJiM0MzsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzayA9IF9faW5ldDZfbG9va3VwX2VzdGFibGlzaGVkKG5ldCwgJmFtcDtoZHItJmd0O3NhZGRyLCB0aC0mZ3Q7c291cmNlLAogCQkJCQkmYW1wO2hkci0mZ3Q7ZGFkZHIsIG50b2hzKHRoLSZndDtkZXN0KSwKIAkJCQkJaWlmLCBzZGlmKTsKLQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9ICFzazsKJiM0MzsJTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2sgJmFtcDsmYW1wOyAhc2tiX2lzX2dzbyhza2IpOwogCWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEdSTyBPZmZsb2FkIFBhdGNoIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AgYW5kIGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgLiBSaWdodCBhd2F5LCBpdCYjMzk7cyBjbGVhciB3ZSYjMzk7cmUgbG9va2luZyBhdCBUQ1AgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIHdoaWNoIG1lYW5zIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuIFRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBpc19mbGlzdGAgYW5kIHRoZSBgc2tiX2lzX2dzbyhza2IpYCBjYWxscyB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IG9kZCBlZGdlIGNhc2VzIG9yIG92ZXJmbG93cyBpbiB0aGVyZS4KCk15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBzaW5jZSB0aG9zZSBhcmUgdGhlIG9uZXMgSSBjYW4gcmVsaWFibHkgaGl0LiBTbyBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIGZ1enppbmcgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2dyb19yZWNlaXZlYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgdGNwNF9jaGVja19mcmFnbGlzdF9ncm9gIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS4KCk5leHQsIEkgbmVlZCB0byBrbm93IHRoZSBjb25kaXRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjaGVja2luZyB0aGUgc291cmNlIGZpbGVzIGZvciBjb25maWcgb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0lORVRgIGNvbnRyb2xzIHRoZSBJUHY0IGNvZGUsIGFuZCBgQ09ORklHX0lQVjZgIHRoZSBJUHY2LiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBNYWtlZmlsZXMgZm9yIHJlbGV2YW50IGRlcGVuZGVuY2llcy4gV2l0aCB0aGlzIGluZm8sIEkgY2FuIG1ha2Ugc3VyZSBteSBmdXp6ZXIgYnVpbGQgY29uZmlnIG1hdGNoZXMgd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZXNlIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgY2FtcGFpZ24gc2V0IHVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEyLVx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aGlua2luZywgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkNvbmNlcm5pbmcgdGhlIFRDUCBPZmZsb2FkIE9iamVjdCBGaWxlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBidWlsZCBzeXN0ZW0gcGVyc3BlY3RpdmUsIHRoZSBwcmVzZW5jZSBvZiBgdGNwX29mZmxvYWQub2AgaW4gdGhlIExpbnV4IGtlcm5lbCBpcyByZWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHdoaWNoIGlzIHRvIHNheSwgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3Mga2V5LiBXZSBrbm93IGBDT05GSUdfSU5FVGAgaXMgZWZmZWN0aXZlbHkgdGhlIG1hc3RlciBzd2l0Y2ggZm9yIElQdjQgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIE1ha2VmaWxlIGxvZ2ljIGluIGBuZXQvYCBhc3NpZ25zIGBvYmoteWAgdG8gYENPTkZJR19JTkVUYCBpZiBpdCYjMzk7cyBzZXQuIFRoZXJlZm9yZSwgaWYgSVAgaXMgY29uZmlndXJlZCBhbmQgcHJlc2VudCwgYHRjcF9vZmZsb2FkLm9gIGlzIGdvaW5nIHRvIGJlIGJ1aWx0IGFsb25nc2lkZS4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzOyBpdCYjMzk7cyBhIGRpcmVjdCByZXN1bHQgb2YgaW5jbHVkaW5nIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suIFRoaXMgaXMgYSB2ZXJ5IHByZWRpY3RhYmxlIGFuZCBzZW5zaWJsZSBkZXNpZ24sIGVuc3VyaW5nIG9mZmxvYWQgY2FwYWJpbGl0aWVzIGFyZSByZWFkaWx5IGF2YWlsYWJsZSB3aGVuIElQIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3B2Nl9vZmZsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFRDUHY2IE9mZmxvYWQgT2JqZWN0IEZpbGUgTG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHRjcHY2X29mZmxvYWQub2Agb2JqZWN0IGZpbGUgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgc291cmNlIHRyZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIElQdjYgbmV0d29ya2luZywgc28gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IGZlZWxzIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEdpdmVuIHRoYXQgaXQmIzM5O3MgYSBtYWtlZmlsZSBkcml2ZW4gYnVpbGQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCB0byBjb25maXJtIHRoaXMgaXMgdG8gY2hlY2sgdGhlIGBNYWtlZmlsZWAgaXRzZWxmIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldC9pcHY2L01ha2VmaWxlYCBhY3R1YWxseSBkZWZpbmVzIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgdGNwdjZfb2ZmbG9hZC5vYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwdjZfb2ZmbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIElQdjYgT2ZmbG9hZCAtIEEgTWFrZWZpbGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBvZmZsb2FkIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LCBhcyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgSVB2Ni1yZWxhdGVkIGNvZGUuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgVENQIG9mZmxvYWQgaW4gYW4gSVB2NiBjb250ZXh0LCB0aGUgTWFrZWZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQmIzM5O2xsIGdpdmUgbWUgYSBoaWdoLWxldmVsIHZpZXcgb2Ygd2hhdCYjMzk7cyBjb21waWxlZCBhbmQgbGlua2VkIGluLCBhbmQgd2hlcmUgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhcmUuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgdGNwdjZfb2ZmbG9hZGAgaW4gdGhhdCBNYWtlZmlsZS4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgVENQIG9mZmxvYWQgc3BlY2lmaWNhbGx5IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcHY2X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMS0jaW5jbHVkZSBcJiMzNDtpcDZfb2ZmbG9hZC5oXCYjMzQ7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjIyOiNpbmNsdWRlIFwmIzM0O3RjcHY2X29mZmxvYWQuY1wmIzM0O1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMy1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMzMj1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgaXB2Nl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ3LVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozNDg6XHRpZiAobGlrZWx5KG9wcyA9PSBcdTAwMjZuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkKSlcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ5LVx0XHRyZXR1cm4gdGNwNl9ncm9fY29tcGxldGUoc2tiLCBuaG9mZik7XG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz00Mzc9c3RhdGljIGludCBfX2luaXQgaXB2Nl9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQzOS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6NDQwOlx0aWYgKHRjcHY2X29mZmxvYWRfaW5pdCgpIFx1MDAzYyAwKVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NDEtXHRcdHByX2NyaXQoXCYjMzQ7JXM6IENhbm5vdCBhZGQgVENQIHByb3RvY29sIG9mZmxvYWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oPTEyPWludCB1ZHB2Nl9vZmZsb2FkX2V4aXQodm9pZCk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oOjEzOmludCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZCk7XG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oLTE0LVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0xNjg9c3RhdGljIHN0cnVjdCBza19idWZmICp0Y3A2X2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNC1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoyMDU6aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDYte1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIwNzpcdG5ldF9ob3RkYXRhLnRjcHY2X29mZmxvYWQgPSAoc3RydWN0IG5ldF9vZmZsb2FkKSB7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjA4LVx0XHQuY2FsbGJhY2tzID0ge1xuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTMtXHR9O1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIxNDpcdHJldHVybiBpbmV0Nl9hZGRfb2ZmbG9hZChcdTAwMjZuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkLCBJUFBST1RPX1RDUCk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjE1LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIElQdjYgT2ZmbG9hZCBDb21waWxhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBJIHNlZSB0aGF0IGB0Y3B2Nl9vZmZsb2FkLmNgIGlzIGJlaW5nIGNvbXBpbGVkICp3aXRoaW4qIHRoZSBgaXA2X29mZmxvYWQuY2AgZmlsZS4gTm90aGluZyBwYXJ0aWN1bGFybHkgc3VycHJpc2luZyB0aGVyZSwgc2luY2UgVENQdjYgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIElQdjYgaW1wbGVtZW50YXRpb24gYXMgYSB3aG9sZS4gQW5kLCBhcyBleHBlY3RlZCwgdGhlIGBpcDZfb2ZmbG9hZC5vYCBvYmplY3QgZmlsZSBpcyBvbmx5IGdvaW5nIHRvIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkZXBlbmRlbmN5LCBvdGhlcndpc2UgaXQgd291bGQgbm90IGJlIGluY2x1ZGVkLiBNYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X29mZmxvYWQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSAmIzQzOz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZTo0ODpcdFx0XHRpcDZfb2ZmbG9hZC5vIGV4dGhkcnNfb2ZmbG9hZC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgaW5pdGlhbCB0aG91Z2h0cywgZnJhbWVkIGFzIGEgY29uY2lzZSBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKk5ldHdvcmsgR1JPIEZ1bmN0aW9uYWxpdHkgQ2hlY2sqKgoKQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCBzZWVtcyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYm90aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGVuYWJsZWQuIE5vdywgdGhlIG1lYXQgb2YgdGhpcyBsaWtlbHkgbGllcyBpbiB0aGUgR1JPIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoOiBgdGNwX2dyb19yZWNlaXZlYCwgYHRjcDRfZ3JvX3JlY2VpdmVgLCBhbmQgYHRjcDZfZ3JvX3JlY2VpdmVgLiBNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYHRjcDZfZ3JvX3JlY2VpdmVgIGlzIGV4cG9ydGVkIG9yIHN0YXRpYy4gVGhhdCYjMzk7bGwgaW5mb3JtIGhvdyBhY2Nlc3NpYmxlIGFuZCBtb2RpZmlhYmxlIGl0IGlzLCB3aGljaCwgb2YgY291cnNlLCB3aWxsIGRyaXZlIHRoZSBuZXh0IHN0ZXBzIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3A2X2dyb19yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0xNz1zdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01NS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo1NjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBza19idWZmICp0Y3A2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTctXHRcdFx0XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0yMDU9aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjA5LVx0XHRcdC5nc29fc2VnbWVudFx0PVx0dGNwNl9nc29fc2VnbWVudCxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzoyMTA6XHRcdFx0Lmdyb19yZWNlaXZlXHQ9XHR0Y3A2X2dyb19yZWNlaXZlLFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIxMS1cdFx0XHQuZ3JvX2NvbXBsZXRlXHQ9XHR0Y3A2X2dyb19jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBTeW1ib2xzKioKCkhtbSwgc28gYHRjcDZfZ3JvX3JlY2VpdmVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSB0byBiZSBpbmxpbmVkIGRpcmVjdGx5IGludG8gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGJ5IHRoZSBjb21waWxlci4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gQ29uc2VxdWVudGx5LCBJIHNob3VsZG4mIzM5O3QgZXhwZWN0IGEgc2VwYXJhdGUgc3ltYm9sIGZvciBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLCByaWdodD8gSXQgd29uJiMzOTt0IGhhdmUgYSBkaXN0aW5jdCBhZGRyZXNzIGlmIHRoZSBjb21waWxlciBoYXMgcHJvcGVybHkgaW5saW5lZCBpdCwgYXMgaXQgc2hvdWxkLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSBzdXNwZWN0ZWQuIEl0IHdpbGwgYmUgcGFydCBvZiB3aGF0ZXZlciBmdW5jdGlvbiBjYWxscyBpdC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgYHRjcDRfZ3JvX3JlY2VpdmVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LiBJcyBpdCBpbmxpbmUgdG9vPyBJcyB0aGVyZSBhIHN5bWJvbCBmb3IgaXQgSSBjYW4gbG9vayBhdD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjc9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDI4OnN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQyOS17XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Nzg9aW50IF9faW5pdCB0Y3B2NF9vZmZsb2FkX2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ4Mi1cdFx0XHQuZ3NvX3NlZ21lbnRcdD1cdHRjcDRfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ4MzpcdFx0XHQuZ3JvX3JlY2VpdmVcdD1cdHRjcDRfZ3JvX3JlY2VpdmUsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ4NC1cdFx0XHQuZ3JvX2NvbXBsZXRlXHQ9XHR0Y3A0X2dyb19jb21wbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk1OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIFRDUCBHUk8gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB0Y3A0X2dyb19yZWNlaXZlYC4gSXQmIzM5O3MgZGVmaW5lZCB3aXRoIGBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0JiMzOTtzIHVzdWFsbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uIGlmIGBDT05GSUdfUkVUUE9MSU5FYCBpcyBlbmFibGVkLCB3aGljaCBzdWdnZXN0cyB0aGUgY29tcGlsZXIgbWlnaHQgb3B0aW1pemUgaXQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBCdXQgd2FpdCwgaXQmIzM5O3MgKm5vdCogaW5saW5lLiBXaHkgaXNuJiMzOTt0IGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoYXQgZGVzaWduIGRlY2lzaW9uLgoKQW5kIGFub3RoZXIgdGhpbmc6IGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIGRlZmluZWQgaW4gYG5ldC9pcHY0L3RjcF9vZmZsb2FkLmNgLiBBbHJpZ2h0LCB0aGF0IGxvY2F0aW9uIG1ha2VzIHNlbnNlOyB0aGlzIGlzIHRoZSBJUHY0IFRDUCBvZmZsb2FkIHBhdGguIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGFuZCBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGltcGxlbWVudGF0aW9uIGZvciBUQ1AuIEl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGNsZWFyIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLCBnaXZlbiB0aGF0IGl0IGNvbmNlcm5zIGEgc3BlY2lmaWMgcHJvdG9jb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg1LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgR3Jva2tpbmcgb2YgVENQL0lQdjYgR1JPIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIEdSTyBzdHVmZiBhbmQgSSYjMzk7dmUgZ290IHRvIHNvcnQgb3V0IHdoZXJlIHRoaW5ncyBhcmUgZGVmaW5lZC4gSG1tLCBgdGNwX2dyb19yZWNlaXZlYC4uLiB0aGF0IG9uZSBpc24mIzM5O3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHRjcDZfZ3JvX3JlY2VpdmVgIGFnYWluLiBBaGEhICpUaGF0KiBvbmUmIzM5O3MgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW55d2F5PyBSaWdodCwgZGlnZ2luZyBhcm91bmQsIEkgc2VlIGl0JiMzOTtzIGluIGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoYXQgdGhpcyBmaWxlIGlzIGluY2x1ZGVkIGJ5IGBuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jYC4gVGhpcyBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCBvciBhIGhpZXJhcmNoeSBpbiB0aGUgR1JPIHByb2Nlc3NpbmcuCgpJcyB0aGVyZSBhbnl0aGluZyBlbHNlIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0IG1lIHRoaW5rLCBsZXQgbWUgdGhpbmsuLi4gYWgsIHllcyEgV2hhdCBhYm91dCBgaXB2Nl9ncm9fcmVjZWl2ZWAsIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jYD8gT2theSwgc28gdGhhdCBsaWtlbHkgaGFuZGxlcyB0aGUgSVB2NiBwb3J0aW9uLiBUaGVzZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvciBvcHRpbWl6YXRpb24uIEdvdHRhIGtlZXAgdGhlc2UgcGllY2VzIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfZ3JvX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MTgxPXN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjAyLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMDM6SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjA0LVx0XHRcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yOTktfVxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozMDA6RVhQT1JUX0lORElSRUNUX0NBTExBQkxFKGlwdjZfZ3JvX3JlY2VpdmUpO1xubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zMDEtXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMwMj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNpdF9pcDZpcDZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTMxMy1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6MzE0Olx0cmV0dXJuIGlwdjZfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKTtcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzE1LX1cbi0tXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTQzNz1zdGF0aWMgaW50IF9faW5pdCBpcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQ4LVx0XHRcdC5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0OTpcdFx0XHQuZ3JvX3JlY2VpdmUgPSBpcHY2X2dyb19yZWNlaXZlLFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NTAtXHRcdFx0Lmdyb19jb21wbGV0ZSA9IGlwdjZfZ3JvX2NvbXBsZXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IEdSTyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBgaXB2Nl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQgdGhlIHJlYWwgbWVhdCBzZWVtcyB0byBiZSBpbiBgdGNwX2dyb19yZWNlaXZlYCwgYHRjcDRfZ3JvX3JlY2VpdmVgLCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYC4gRGVmaW5pdGVseSwgYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYCBhcmUgcHJpbWFyeSBzeW1ib2xzIHRvIGZvY3VzIG9uLiBCdXQgd2hhdCBhYm91dCBgdGNwNl9ncm9fcmVjZWl2ZWA/IEkgaW5pdGlhbGx5IHRob3VnaHQsIHNpbmNlIGl0JiMzOTtzIGlubGluZWQsIGl0JiMzOTtkIGJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gYGlwdjZfZ3JvX3JlY2VpdmVgIG9yIHNvbWV0aGluZyB0aGF0IGNhbGxzICppdCouIFdhaXQuLi4gaXNuJiMzOTt0IGB0Y3A2X2dyb19yZWNlaXZlYCBjYWxsZWQgYnkgYGlwdjZfZ3JvX3JlY2VpdmVgPyBIbW0sIG5vLCB0aGF0IGNhbiYjMzk7dCBiZSByaWdodDsgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIGAuZ3JvX3JlY2VpdmVgIGNhbGxiYWNrIGZvciBgSVBQUk9UT19UQ1BgIHdpdGhpbiBgdGNwdjZfb2ZmbG9hZF9pbml0YC4KClRoaXMgaXMgY29uZnVzaW5nIGJlY2F1c2UgaWYgaXQgaXMgbWFya2VkIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYCwgaG93IGNhbiBpdCBiZSByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24/IFRoaXMgaW1wbGllcyBzb21ldGhpbmcgSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3BpbmcgYWJvdXQgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGlubGluaW5nIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gT2theSwgdGltZSB0byBjaGVjayB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AgdG8gc2VlIGhvdyB0aGUgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIEdvdHRhIGNsYXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwNl9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTc9c3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTUtXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6NTY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTU3LVx0XHRcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MjA1PWludCBfX2luaXQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwOS1cdFx0XHQuZ3NvX3NlZ21lbnRcdD1cdHRjcDZfZ3NvX3NlZ21lbnQsXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjEwOlx0XHRcdC5ncm9fcmVjZWl2ZVx0PVx0dGNwNl9ncm9fcmVjZWl2ZSxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTEtXHRcdFx0Lmdyb19jb21wbGV0ZVx0PVx0dGNwNl9ncm9fY29tcGxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgQ29tcGlsYXRpb24gb2YgYSBDYWxsYmFjayBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGlzIHNldCB1cCBhcyBhIGNhbGxiYWNrLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBoYXZlIHRvIG1ha2UgYSBub24taW5saW5lIHZlcnNpb24gb2YgaXQsIGp1c3Qgc28gd2UgY2FuIGdldCBpdHMgYWRkcmVzcy4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgbm90aGluZyBncm91bmRicmVha2luZyB0aGVyZS4gQnV0IG5vdyBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGVyZSYjMzk7cyBhIG1vcmUgc3RyZWFtbGluZWQgYXBwcm9hY2ggaGVyZS4gTWF5YmUgSSBjYW4gYnlwYXNzIHRoZSB3aG9sZSBjYWxsYmFjayBtZWNoYW5pc20gYWx0b2dldGhlci4gSW5zdGVhZCBvZiB0aGlzLCBJIHNob3VsZCBiZSBsb29raW5nIGF0IHVzaW5nIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAuIFRoZXkgbWlnaHQgYmUgYmV0dGVyIG9wdGlvbnMgZm9yIGhhbmRsaW5nIHRoaXMgZGlyZWN0bHkuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aG9zZSBmdW5jdGlvbnMgZXZlbiBleHBvcnRlZD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBzeW1ib2wgdmlzaWJpbGl0eSB0byBzZWUgaWYgdGhleSYjMzk7cmUgYWNjZXNzaWJsZSBmcm9tIHdoZXJlIEkmIzM5O20gd29ya2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ4NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIHN1bW1hcml6ZSBteSAmIzM0O3Rob3VnaHRzJiMzNDsgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQuIEhlcmUgd2UgZ286CgoqKkNoZWNraW5nIHRoZSBFeHBvcnQqKgoKQWxyaWdodCwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgcnVubmluZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3J1Y2lhbCBzdGVwLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBkYXRhLCB0aGUgbW9kZWwsIHRoZSBjb25maWd1cmF0aW9ucywgb3Igd2hhdGV2ZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoYXMgYWN0dWFsbHkgYmVlbiBleHBvcnRlZC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCwgYWxtb3N0IHNpbGx5LCBzdGVwLCBidXQgb2Z0ZW4gb3Zlcmxvb2tlZCBpbiB0aGUgcnVzaCB0byBhbmFseXplIHJlc3VsdHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgZXhwb3J0IGhhcyBoYXBwZW5lZCBhcyBleHBlY3RlZC4gRGlkIEkgc2VsZWN0IHRoZSBjb3JyZWN0IGZvcm1hdD8gQXJlIHRoZSBmaWxlcyB3aGVyZSB0aGV5IHNob3VsZCBiZT8gSXMgZXZlcnl0aGluZyB6aXBwZWQgb3IgcGFja2FnZWQgY29ycmVjdGx5PyBNYWtpbmcgc3VyZSB0aGUgZXhwb3J0IGFjdHVhbGx5ICp3b3JrZWQqIGlzIGZvdW5kYXRpb25hbCB0byBldmVyeXRoaW5nIGVsc2UuIE5vIGV4cG9ydCwgbm8gYW5hbHlzaXMuIFRpbWUgdG8gZG91YmxlLWNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVC4qdGNwX2dyb19yZWNlaXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFRDUCBPZmZsb2FkIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBUQ1Agb2ZmbG9hZCBzaXR1YXRpb24gaGVyZS4gSXQmIzM5O3Mgbm90IGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBjb25maWd1cmF0aW9uOyB0aGUgaXNzdWUgZmVlbHMgbW9yZSBkeW5hbWljLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgbWFnaWMgaXMgaGFwcGVuaW5nLiBUaGUgdHJhY2Ugc2VlbXMgdG8gYmUgcG9pbnRpbmcgdG8gc29tZXRoaW5nIGJlaW5nIGhhbmRsZWQgaW50ZXJuYWxseSwgbm90IGV4cGxpY2l0bHkgZXhwb3J0ZWQuIFNpbmNlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gVENQIGFuZCBzb21lIHNvcnQgb2YgcmVjZWl2ZSBwcm9jZXNzaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NCBjb250ZXh0LiBHaXZlbiB0aGUgY2x1ZXMsIEkmIzM5O20gYmV0dGluZyB0aGUgcmVsZXZhbnQgZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgY3JpdGljYWwgY29tcG9uZW50IG9mIHRoZSBmbG93LCB3aWxsIGJlIG5lc3RsZWQgaW5zaWRlIGBuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jYC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYHRjcF9ncm9fcmVjZWl2ZWAgZnVuY3Rpb247IHRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgcHJvY2Vzc2luZy4gSXTigJlzIHRoZSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGV4YW1pbmluZyBob3cgb2ZmbG9hZCBpbnRlcmFjdHMgd2l0aCBHUk8gaW4gdGhlIElQdjQgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9ncm9fcmVjZWl2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9vZmZsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg1LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXHRcdFx0XHRzdHJ1Y3QgdGNwaGRyICp0aClcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjgwCgkJCQkJCQlvdXRwdXQ6IDEwMQoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgR1JPIFJlY2VpdmUgRnVuY3Rpb24gSW1wbGVtZW50YXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBHUk8gc3R1ZmYsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBwaWN0dXJlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGtleSBmb3IgVENQIEdSTyByZWNlaXZlLiBgdGNwX2dyb19yZWNlaXZlYCBhbmQgYHRjcDRfZ3JvX3JlY2VpdmVgIGFyZSBqdW1waW5nIG91dCBhcyBnb29kIHN0YXJ0aW5nIHBvaW50cy4gQnV0IGhhbmcgb24uLi4gd2hhdCBhYm91dCBgdGNwNl9ncm9fcmVjZWl2ZWA/IEFoLCByaWdodCwgaXQmIzM5O3MgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLiBUaGF0IG1lYW5zIGl0ICp1c3VhbGx5KiB3b24mIzM5O3QgaGF2ZSBhIGRlZGljYXRlZCBzeW1ib2wgYWRkcmVzcy4gVGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IGlubGluZSBpdCwgbWFraW5nIGl0IGhhcmRlciB0byB0cmFjayBkb3duLiBIb3dldmVyLCBpZiBpdHMgYWRkcmVzcyAqaXMqIGFjdHVhbGx5IHRha2VuLCB0aGUgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBhIGZ1bmN0aW9uLCBidXQgaXRzIG5hbWUgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUuIFNvLCBmb3Igbm93LCBJJiMzOTtsbCBzdGljayB3aXRoIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAuIFRoZXkgc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGlhYmxlIHN0YXJ0aW5nIHBvaW50cy4KCk5vdywgSSBzaG91bGQgY29uc2lkZXIgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCwgd2hpY2ggc2VlbSBsaWtlIHRoZSBwcmltYXJ5IGRyaXZlcnMuIEFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnM/IFRoZSBjb2RlIGFsc28gcmVmZXJlbmNlcyBgc2tiX2lzX2dzbyhza2IpYCBhbmQgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYC4gVGhvc2UgYXJlIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZlYXR1cmVzLCBzbyBJJiMzOTttIG5vdCBleHBlY3RpbmcgdGhlbSB0byBiZSBjb25maWctZGVwZW5kZW50IGluIGEgc2lnbmlmaWNhbnQgd2F5LiBTbywgYElORVRgIGFuZCBgSVBWNmAgYXJlIHRoZSBtYWluIG9uZXMgdGhhdCBzZWVtIHRvIG1hdHRlci4KCkp1c3QgdG8gYmUgc3VyZSwgSSYjMzk7bGwgZ2l2ZSBgdGNwNF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3BfZ3JvX3JlY2VpdmVgIGFub3RoZXIgcXVpY2sgb25jZS1vdmVyIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfZ3JvX3JlY2VpdmUmIzM0OywKICAgICYjMzQ7dGNwNF9ncm9fcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTkgMTA6NDQ6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuYwppbmRleCAzYjFmZGNkM2NiMjliLi5lNzRkOTljYTlmYWNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMKQEAgLTMzMiw2ICYjNDM7MzMyLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlmbHVzaCB8PSBza2ItJmd0O2lwX3N1bW1lZCAhPSBwLSZndDtpcF9zdW1tZWQ7CiAJCWZsdXNoIHw9IHNrYi0mZ3Q7Y3N1bV9sZXZlbCAhPSBwLSZndDtjc3VtX2xldmVsOwogCQlmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7Y291bnQgJmd0Oz0gNjQ7CiYjNDM7CQlmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3Q7CiAJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7CiAKIAkJaWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZV9saXN0KHAsIHNrYikpCkBAIC0zOTUsMTIgJiM0MzszOTYsMjAgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAJaW50IGlpZiwgc2RpZjsKIAotCWlmIChsaWtlbHkoIShza2ItJmd0O2Rldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSkKLQkJcmV0dXJuOwotCiAJcCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTsKIAlpZiAocCkgewotCQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdDsKJiM0MzsJCS8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqLwomIzQzOwkJaWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCkgewomIzQzOwkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqLwomIzQzOwkJaWYgKE5BUElfR1JPX0NCKHApLSZndDtjb3VudCA9PSAxKQomIzQzOwkJCU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiYjNDM7CQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQxMCw3ICYjNDM7NDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlzayA9IF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBpcGgtJmd0O3NhZGRyLCB0aC0mZ3Q7c291cmNlLAogCQkJCSAgICAgICBpcGgtJmd0O2RhZGRyLCBudG9ocyh0aC0mZ3Q7ZGVzdCksCiAJCQkJICAgICAgIGlpZiwgc2RpZik7Ci0JTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2s7CiYjNDM7CU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gIXNrICZhbXA7JmFtcDsgIXNrYl9pc19nc28oc2tiKTsKIAlpZiAoc2spCiAJCXNvY2tfZ2VuX3B1dChzayk7CiB9CkBAIC00MzAsNyAmIzQzOzQzOSw4IEBAIHN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCF0aCkKIAkJZ290byBmbHVzaDsKIAotCXRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpOwomIzQzOwlpZiAodW5saWtlbHkoc2tiLSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKSkKJiM0MzsJCXRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpOwogCiAJcmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jCmluZGV4IGYyYTY1OWNkNjE4M2MuLmVlYzM3Nzg4NTVlYjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMKQEAgLTI2LDcgJiM0MzsyNiwxOCBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJcCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTsKIAlpZiAocCkgewotCQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdDsKJiM0MzsJCS8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqLwomIzQzOwkJaWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCkgewomIzQzOwkJCU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktJmd0O2lzX2ZsaXN0OwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqLwomIzQzOwkJaWYgKE5BUElfR1JPX0NCKHApLSZndDtjb3VudCA9PSAxKQomIzQzOwkJCU5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiYjNDM7CQlOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdCA9IDA7CiYjNDM7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM2LDcgJiM0Mzs0Nyw3IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsCiAJc2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsICZhbXA7aGRyLSZndDtzYWRkciwgdGgtJmd0O3NvdXJjZSwKIAkJCQkJJmFtcDtoZHItJmd0O2RhZGRyLCBudG9ocyh0aC0mZ3Q7ZGVzdCksCiAJCQkJCWlpZiwgc2RpZik7Ci0JTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSAhc2s7CiYjNDM7CU5BUElfR1JPX0NCKHNrYiktJmd0O2lzX2ZsaXN0ID0gIXNrICZhbXA7JmFtcDsgIXNrYl9pc19nc28oc2tiKTsKIAlpZiAoc2spCiAJCXNvY2tfZ2VuX3B1dChzayk7CiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNTAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA0OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JPIEZyYWdsaXN0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9vZmZsb2FkLmNgIGFuZCBgdGNwdjZfb2ZmbG9hZC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBpc19mbGlzdGAgZmxhZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgYE5BUElfR1JPX0NCYCBzdHJ1Y3R1cmUsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsbHkgaW50cm9kdWNpbmcgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gaG93IGBpc19mbGlzdGAgaXMgc2V0IGFuZCBjaGVja2VkIGluIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIHBsdXMgdGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgYWRkZWQgaW4gYHRjcF9ncm9fcmVjZWl2ZWA6IGBmbHVzaCB8PSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3Q7YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY3J1dGluaXplIHRoaXMgYE5BUElfR1JPX0NCYCBtYWNybywgcGFydGljdWxhcmx5IGBza2ItJmd0O2NiYC4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCBgc2tiLSZndDtjYmAgaXMgdW5pbml0aWFsaXplZCB3aGVuIHRoaXMgY29kZSBydW5zPyBJIGtub3cgYE5BUElfR1JPX0NCYCBpcyBwcmV0dHkgY2VudHJhbCB0byBHUk8sIGFuZCB0aGUgYGNiYCBmaWVsZCAqc2hvdWxkKiBiZSBpbml0aWFsaXplZCB3aGVuIGFuIGBza2JgIGVudGVycyB0aGUgR1JPIHBhdGgsIGJ1dCB0aGVzZSBjaGFuZ2VzIHRvIGBpc19mbGlzdGAuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGUgcG90ZW50aWFsIHByb2JsZW0gbGllcy4gVGhhdCBuZXcgY2hlY2sgaW4gYHRjcF9ncm9fcmVjZWl2ZWAgaXMgc2NyZWFtaW5nICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCYjMzQ7IGlmIGVpdGhlciBgcGAgb3IgYHNrYmAgZG9uJiMzOTt0IGhhdmUgYGlzX2ZsaXN0YCBwcm9wZXJseSBzZXQuCgpBaGEhIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgKmRvZXMqIHNldCBgTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3RgLiBCdXQsIHRoZSBrZXkgaXMgdGhlIGNvbmRpdGlvbmFsOiBgaWYgKHVubGlrZWx5KHNrYi0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0dST19GUkFHTElTVCkpYC4gSWYgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYCBpc24mIzM5O3Qgc2V0LCB0aGVuIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgKmlzbiYjMzk7dCogY2FsbGVkLiBUaGF0IG1lYW5zIGBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdGAgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkIGluIHRoYXQgY2FzZSwgbGVhZGluZyB0byB0aGF0IHJpc2t5IGNvbXBhcmlzb24gSSBzYXcgZWFybGllci4gV2UgYWxzbyBrbm93IHRoYXQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBjYW4gaGF2ZSBzaW1pbGFyIGlzc3Vlcy4KCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGBnaXQgZ3JlcGAgYW5kIHRyYWNrIGRvd24gZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYGlzX2ZsaXN0YCBpcyAqYWN0dWFsbHkqIGluaXRpYWxpemVkIHRvIGJlIHN1cmUgYW5kIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGhhcHBlbmluZyBldmVyeXdoZXJlIGl0IG5lZWRzIHRvIGJlIGJlZm9yZSBiZWluZyBjaGVja2VkLiBHb3R0YSBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgcmVhZHMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfZmxpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZ3JvLmg9MTc9c3RydWN0IG5hcGlfZ3JvX2NiIHtcbi0tXG5pbmNsdWRlL25ldC9ncm8uaC04My1cdFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXG5pbmNsdWRlL25ldC9ncm8uaDo4NDpcdFx0dThcdGlzX2ZsaXN0OjE7XG5pbmNsdWRlL25ldC9ncm8uaC04NS1cdCk7XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yODY9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzI5LVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzozMzA6XHRpZiAodW5saWtlbHkoTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpKSB7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTMzMS1cdFx0Zmx1c2ggfD0gKF9fZm9yY2UgaW50KShmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSk7XG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0zMzQtXHRcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50IFx1MDAzZT0gNjQ7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjMzNTpcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzM2LVx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX2dyb19yZWNlaXZlX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9MzkwPXN0YXRpYyB2b2lkIHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDEtXHRcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDI6XHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDM6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDQtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA4LVx0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDA5Olx0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDEwLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MTE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MTItXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MjEtXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDIyOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDIzLVx0aWYgKHNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9NDUyPUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3A0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGhvZmYpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NTctXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ1ODpcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0KSkge1xubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NTktXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0ZSQUdMSVNUIHwgU0tCX0dTT19UQ1BWNDtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTY5Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnVkcF9ncm9fcmVjZWl2ZV9zZWdtZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03MzMtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjczNDpcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzM1LVx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggPSAxO1xuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzQ5LVx0XHR9IGVsc2Uge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3NTA6XHRcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpIHtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzUxLVx0XHRcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTc4MT1zdHJ1Y3Qgc2tfYnVmZiAqdWRwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03OTQtXHQgKi9cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk1Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc5Ni1cdGlmICghc2sgfHwgIXVkcF9zayhzayktXHUwMDNlZ3JvX3JlY2VpdmUpIHtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwMy1cdFx0aWYgKHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo4MDQ6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IHNrID8gIXVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spIDogMTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA1LVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDYtXHRcdGlmICgoIXNrIFx1MDAyNlx1MDAyNiAoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fVURQX0ZXRCkpIHx8XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwNzpcdFx0ICAgIChzayBcdTAwMjZcdTAwMjYgdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykpIHx8IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QpXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwOC1cdFx0XHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTk1ND1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwNF9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtOTYwLVx0LyogZG8gZnJhZ2xpc3Qgb25seSBpZiB0aGVyZSBpcyBubyBvdXRlciBVRFAgZW5jYXAgKG9yIHdlIGFscmVhZHkgcHJvY2Vzc2VkIGl0KSAqL1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo5NjE6XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCBcdTAwMjZcdTAwMjYgIU5BUElfR1JPX0NCKHNrYiktXHUwMDNlZW5jYXBfbWFyaykge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy05NjItXHRcdHVoLVx1MDAzZWxlbiA9IGh0b25zKHNrYi1cdTAwM2VsZW4gLSBuaG9mZik7XG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTI5LVx0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozMDpcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MzE6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTMyLVx0XHRcdHJldHVybjtcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMzYtXHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjM3Olx0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0zOC1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozOTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNDAtXG4tLVxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQ5LVx0XHRcdFx0XHRpaWYsIHNkaWYpO1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjUwOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzayBcdTAwMjZcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01MS1cdGlmIChzaylcbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9ODE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdGNwNl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRob2ZmKVxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy04Ni1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo4NzpcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0KSkge1xubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTg4LVx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19GUkFHTElTVCB8IFNLQl9HU09fVENQVjY7XG4tLVxubmV0L2lwdjYvdWRwX29mZmxvYWQuYz0xNjY9aW50IHVkcDZfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZilcbi0tXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE3Mi1cdC8qIGRvIGZyYWdsaXN0IG9ubHkgaWYgdGhlcmUgaXMgbm8gb3V0ZXIgVURQIGVuY2FwIChvciB3ZSBhbHJlYWR5IHByb2Nlc3NlZCBpdCkgKi9cbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM6MTczOlx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgXHUwMDI2XHUwMDI2ICFOQVBJX0dST19DQihza2IpLVx1MDAzZWVuY2FwX21hcmspIHtcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmMtMTc0LVx0XHR1aC1cdTAwM2VsZW4gPSBodG9ucyhza2ItXHUwMDNlbGVuIC0gbmhvZmYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpc19mbGlzdGAgd2l0aGluIHRoZSBHUk8gQ29udGV4dCoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgaXNfZmxpc3RgIGZpZWxkIHdpdGhpbiB0aGUgYG5hcGlfZ3JvX2NiYCBzdHJ1Y3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWNhdXNlIG9mIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHN1YnN5c3RlbSwgSSBrbm93IHRoYXQgYG5hcGlfZ3JvX2NiYCBpcyB3aGVyZSBhbGwgdGhlIEdSTyBzdGF0ZSBsaXZlcy4gSSBzZWUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgZmllbGQgbGl2ZXMgd2l0aGluIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgLiBOb3csIHdoZXJlIGRvZXMgYG5hcGlfZ3JvX2NiYCBnZXQgaW5pdGlhbGl6ZWQ/IFRoZSBjb2RlIHN1Z2dlc3RzIHRoZSBwcmltZSBzdXNwZWN0IGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQvY29yZS9ncm8uY2AuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCBmb3IgR1JPIHByb2Nlc3NpbmcsIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3Igc2V0dGluZyB1cCB0aGUgR1JPIGNvbnRleHQuCgpUaGVyZWZvcmUsIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgd2l0aGluIGBkZXZfZ3JvX3JlY2VpdmVgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBpc19mbGlzdGAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0aGVyZSwgb3IgcGVyaGFwcyBpcyBnaXZlbiBhIGRlZmF1bHQgdmFsdWUuIEl04oCZcyBhbHNvIHBvc3NpYmxlIGl0JiMzOTtzIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoZSBgbmFwaV9ncm9fY2JgIGlzIHNldCB1cC4gS25vd2luZyBleGFjdGx5IHdoZW4gYW5kIGhvdyBgaXNfZmxpc3RgIGdldHMgaXRzIHZhbHVlIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBHUk8gYmVoYXZpb3IuIEl0IHNlZW1zIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZsb3cgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtOQVBJX0dST19DQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2dyby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2dyby5jPTkyPWludCBza2JfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtMTE1LVx0aWYgKHVubGlrZWx5KHAtXHUwMDNlbGVuICYjNDM7IGxlbiBcdTAwM2U9IG5ldGlmX2dldF9ncm9fbWF4X3NpemUocC1cdTAwM2VkZXYsIHApIHx8XG5uZXQvY29yZS9ncm8uYzoxMTY6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCkpXG5uZXQvY29yZS9ncm8uYy0xMTctXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMTE5LVx0aWYgKHVubGlrZWx5KHAtXHUwMDNlbGVuICYjNDM7IGxlbiBcdTAwM2U9IEdST19MRUdBQ1lfTUFYX1NJWkUpKSB7XG5uZXQvY29yZS9ncm8uYzoxMjA6XHRcdGlmIChOQVBJX0dST19DQihza2IpLVx1MDAzZXByb3RvICE9IElQUFJPVE9fVENQIHx8XG5uZXQvY29yZS9ncm8uYy0xMjEtXHRcdCAgICBwLVx1MDAzZWVuY2Fwc3VsYXRpb24pXG4tLVxubmV0L2NvcmUvZ3JvLmMtMTI0LVxubmV0L2NvcmUvZ3JvLmM6MTI1Olx0c2VncyA9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQ7XG5uZXQvY29yZS9ncm8uYzoxMjY6XHRscCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3Q7XG5uZXQvY29yZS9ncm8uYy0xMjctXHRwaW5mbyA9IHNrYl9zaGluZm8obHApO1xuLS1cbm5ldC9jb3JlL2dyby5jLTE1OC1cbm5ldC9jb3JlL2dyby5jOjE1OTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmVlID0gTkFQSV9HUk9fRlJFRTtcbm5ldC9jb3JlL2dyby5jLTE2MC1cdFx0Z290byBkb25lO1xuLS1cbm5ldC9jb3JlL2dyby5jLTE4NC1cdFx0c2tiLVx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xubmV0L2NvcmUvZ3JvLmM6MTg1Olx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZyZWUgPSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEO1xubmV0L2NvcmUvZ3JvLmMtMTg2LVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjA1LVxubmV0L2NvcmUvZ3JvLmM6MjA2Olx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QgPT0gcClcbm5ldC9jb3JlL2dyby5jLTIwNy1cdFx0c2tiX3NoaW5mbyhwKS1cdTAwM2VmcmFnX2xpc3QgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yMDgtXHRlbHNlXG5uZXQvY29yZS9ncm8uYzoyMDk6XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QtXHUwMDNlbmV4dCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jOjIxMDpcdE5BUElfR1JPX0NCKHApLVx1MDAzZWxhc3QgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yMTEtXHRfX3NrYl9oZWFkZXJfcmVsZWFzZShza2IpO1xuLS1cbm5ldC9jb3JlL2dyby5jLTIxNC1kb25lOlxubmV0L2NvcmUvZ3JvLmM6MjE1Olx0TkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgJiM0Mzs9IHNlZ3M7XG5uZXQvY29yZS9ncm8uYy0yMTYtXHRwLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBsZW47XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjI1LVx0fVxubmV0L2NvcmUvZ3JvLmM6MjI2Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VzYW1lX2Zsb3cgPSAxO1xubmV0L2NvcmUvZ3JvLmMtMjI3LVx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvZ3JvLmM9MjMwPWludCBza2JfZ3JvX3JlY2VpdmVfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvY29yZS9ncm8uYy0yMzMtXHRpZiAodW5saWtlbHkocC1cdTAwM2VsZW4gJiM0Mzsgc2tiLVx1MDAzZWxlbiBcdTAwM2U9IDY1NTM2IHx8XG5uZXQvY29yZS9ncm8uYzoyMzQ6XHRcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCkpXG5uZXQvY29yZS9ncm8uYy0yMzUtXHRcdHJldHVybiAtRTJCSUc7XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjM3LVx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcbm5ldC9jb3JlL2dyby5jOjIzODpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCA9IDE7XG5uZXQvY29yZS9ncm8uYy0yMzktXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9jb3JlL2dyby5jLTI0MS1cbm5ldC9jb3JlL2dyby5jOjI0MjpcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2VsYXN0ID09IHApXG5uZXQvY29yZS9ncm8uYy0yNDMtXHRcdHNrYl9zaGluZm8ocCktXHUwMDNlZnJhZ19saXN0ID0gc2tiO1xubmV0L2NvcmUvZ3JvLmMtMjQ0LVx0ZWxzZVxubmV0L2NvcmUvZ3JvLmM6MjQ1Olx0XHROQVBJX0dST19DQihwKS1cdTAwM2VsYXN0LVx1MDAzZW5leHQgPSBza2I7XG5uZXQvY29yZS9ncm8uYy0yNDYtXG4tLVxubmV0L2NvcmUvZ3JvLmMtMjQ4LVxubmV0L2NvcmUvZ3JvLmM6MjQ5Olx0TkFQSV9HUk9fQ0IocCktXHUwMDNlbGFzdCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jOjI1MDpcdE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbm5ldC9jb3JlL2dyby5jLTI1MS1cdHAtXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L2NvcmUvZ3JvLmMtMjYwLVxubmV0L2NvcmUvZ3JvLmM6MjYxOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VzYW1lX2Zsb3cgPSAxO1xubmV0L2NvcmUvZ3JvLmMtMjYyLVxuLS1cbm5ldC9jb3JlL2dyby5jPTI2Nj1zdGF0aWMgdm9pZCBncm9fY29tcGxldGUoc3RydWN0IGdyb19ub2RlICpncm8sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtMjc0LVxubmV0L2NvcmUvZ3JvLmM6Mjc1Olx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQgPT0gMSkge1xubmV0L2NvcmUvZ3JvLmMtMjc2LVx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgPSAwO1xuLS1cbm5ldC9jb3JlL2dyby5jLTMwMC1vdXQ6XG5uZXQvY29yZS9ncm8uYzozMDE6XHRncm9fbm9ybWFsX29uZShncm8sIHNrYiwgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjb3VudCk7XG5uZXQvY29yZS9ncm8uYy0zMDItfVxuLS1cbm5ldC9jb3JlL2dyby5jPTMwND1zdGF0aWMgdm9pZCBfX2dyb19mbHVzaF9jaGFpbihzdHJ1Y3QgZ3JvX25vZGUgKmdybywgdTMyIGluZGV4LCBib29sIGZsdXNoX29sZClcbi0tXG5uZXQvY29yZS9ncm8uYy0zMDktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShza2IsIHAsIGhlYWQsIGxpc3QpIHtcbm5ldC9jb3JlL2dyby5jOjMxMDpcdFx0aWYgKGZsdXNoX29sZCBcdTAwMjZcdTAwMjYgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VhZ2UgPT0gamlmZmllcylcbm5ldC9jb3JlL2dyby5jLTMxMS1cdFx0XHRyZXR1cm47XG4tLVxubmV0L2NvcmUvZ3JvLmM9MzU3PXN0YXRpYyB2b2lkIGdyb19saXN0X3ByZXBhcmUoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5uZXQvY29yZS9ncm8uYy0zNjctXHRcdGlmIChoYXNoICE9IHNrYl9nZXRfaGFzaF9yYXcocCkpIHtcbm5ldC9jb3JlL2dyby5jOjM2ODpcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2VzYW1lX2Zsb3cgPSAwO1xubmV0L2NvcmUvZ3JvLmMtMzY5LVx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9jb3JlL2dyby5jLTM5Ni1cbm5ldC9jb3JlL2dyby5jOjM5NzpcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlc2FtZV9mbG93ID0gIWRpZmZzO1xubmV0L2NvcmUvZ3JvLmMtMzk4LVx0fVxuLS1cbm5ldC9jb3JlL2dyby5jPTQwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19yZXNldF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ob2ZmKVxuLS1cbm5ldC9jb3JlL2dyby5jLTQwNi1cbm5ldC9jb3JlL2dyby5jOjQwNzpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlbmV0d29ya19vZmZzZXQgPSAwO1xubmV0L2NvcmUvZ3JvLmM6NDA4Olx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VkYXRhX29mZnNldCA9IDA7XG5uZXQvY29yZS9ncm8uYy00MDktXHRoZWFkbGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbm5ldC9jb3JlL2dyby5jOjQxMDpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgPSBza2ItXHUwMDNlZGF0YTtcbm5ldC9jb3JlL2dyby5jOjQxMTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzBfbGVuID0gaGVhZGxlbjtcbm5ldC9jb3JlL2dyby5jLTQxMi1cdGlmIChoZWFkbGVuKVxuLS1cbm5ldC9jb3JlL2dyby5jLTQyMC1cdCAgICAoIU5FVF9JUF9BTElHTiB8fCAhKChza2JfZnJhZ19vZmYoZnJhZzApICYjNDM7IG5ob2ZmKSBcdTAwMjYgMykpKSB7XG5uZXQvY29yZS9ncm8uYzo0MjE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgPSBza2JfZnJhZ19hZGRyZXNzKGZyYWcwKTtcbm5ldC9jb3JlL2dyby5jOjQyMjpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmFnMF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsXG5uZXQvY29yZS9ncm8uYy00MjMtXHRcdFx0XHRcdFx0ICAgIHNrYl9mcmFnX3NpemUoZnJhZzApLFxuLS1cbm5ldC9jb3JlL2dyby5jPTQyOD1zdGF0aWMgdm9pZCBncm9fcHVsbF9mcm9tX2ZyYWcwKHN0cnVjdCBza19idWZmICpza2IsIGludCBncm93KVxuLS1cbm5ldC9jb3JlL2dyby5jLTQzMy1cbm5ldC9jb3JlL2dyby5jOjQzNDpcdG1lbWNweShza2JfdGFpbF9wb2ludGVyKHNrYiksIE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAsIGdyb3cpO1xubmV0L2NvcmUvZ3JvLmMtNDM1LVxuLS1cbm5ldC9jb3JlL2dyby5jPTQ3Nj1zdGF0aWMgZW51bSBncm9fcmVzdWx0IGRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgZ3JvX25vZGUgKmdybyxcbi0tXG5uZXQvY29yZS9ncm8uYy01MDYtXHRcdFx0XHRcdHNpemVvZih1MzIpKSk7IC8qIEF2b2lkIHNsb3cgdW5hbGlnbmVkIGFjYyAqL1xubmV0L2NvcmUvZ3JvLmM6NTA3Olx0Kih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7XG5uZXQvY29yZS9ncm8uYzo1MDg6XHROQVBJX0dST19DQihza2IpLVx1MDAzZWZsdXNoID0gc2tiX2hhc19mcmFnX2xpc3Qoc2tiKTtcbm5ldC9jb3JlL2dyby5jOjUwOTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY291bnQgPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTEwLVx0aWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpIHtcbm5ldC9jb3JlL2dyby5jOjUxMTpcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjb3VudCA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2Vncztcbm5ldC9jb3JlL2dyby5jLTUxMi1cdFx0LyogT25seSBzdXBwb3J0IFRDUCBhbmQgbm9uIERPREdZIHVzZXJzLiAqL1xuLS1cbm5ldC9jb3JlL2dyby5jLTUxNC1cdFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fRE9ER1kpKVxubmV0L2NvcmUvZ3JvLmM6NTE1Olx0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2ggPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTE2LVx0fVxuLS1cbm5ldC9jb3JlL2dyby5jLTUyMC1cdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XG5uZXQvY29yZS9ncm8uYzo1MjE6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bSA9IHNrYi1cdTAwM2Vjc3VtO1xubmV0L2NvcmUvZ3JvLmM6NTIyOlx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWNzdW1fdmFsaWQgPSAxO1xubmV0L2NvcmUvZ3JvLmMtNTIzLVx0XHRicmVhaztcbm5ldC9jb3JlL2dyby5jLTUyNC1cdGNhc2UgQ0hFQ0tTVU1fVU5ORUNFU1NBUlk6XG5uZXQvY29yZS9ncm8uYzo1MjU6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bV9jbnQgPSBza2ItXHUwMDNlY3N1bV9sZXZlbCAmIzQzOyAxO1xubmV0L2NvcmUvZ3JvLmMtNTI2LVx0XHRicmVhaztcbi0tXG5uZXQvY29yZS9ncm8uYy01MzktXG5uZXQvY29yZS9ncm8uYzo1NDA6XHRzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLVx1MDAzZXNhbWVfZmxvdztcbm5ldC9jb3JlL2dyby5jOjU0MTpcdHJldCA9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7XG5uZXQvY29yZS9ncm8uYy01NDItXG4tLVxubmV0L2NvcmUvZ3JvLmMtNTUxLVxubmV0L2NvcmUvZ3JvLmM6NTUyOlx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZmx1c2gpXG5uZXQvY29yZS9ncm8uYy01NTMtXHRcdGdvdG8gbm9ybWFsO1xuLS1cbm5ldC9jb3JlL2dyby5jLTU1OS1cbm5ldC9jb3JlL2dyby5jOjU2MDpcdC8qIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzZXR0aW5nIE5BUElfR1JPX0NCKHNrYiktXHUwMDNle2FnZXxsYXN0fSAqL1xubmV0L2NvcmUvZ3JvLmMtNTYxLVx0Z3JvX3RyeV9wdWxsX2Zyb21fZnJhZzAoc2tiKTtcbm5ldC9jb3JlL2dyby5jOjU2MjpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlYWdlID0gamlmZmllcztcbm5ldC9jb3JlL2dyby5jOjU2MzpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlbGFzdCA9IHNrYjtcbm5ldC9jb3JlL2dyby5jLTU2NC1cdGlmICghc2tiX2lzX2dzbyhza2IpKVxuLS1cbm5ldC9jb3JlL2dyby5jPTYxMj1zdGF0aWMgZ3JvX3Jlc3VsdF90IGdyb19za2JfZmluaXNoKHN0cnVjdCBncm9fbm9kZSAqZ3JvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2dyby5jLTYyMC1cdGNhc2UgR1JPX01FUkdFRF9GUkVFOlxubmV0L2NvcmUvZ3JvLmM6NjIxOlx0XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmVlID09IE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQpXG5uZXQvY29yZS9ncm8uYy02MjItXHRcdFx0bmFwaV9za2JfZnJlZV9zdG9sZW5faGVhZChza2IpO1xuLS1cbm5ldC9jb3JlL2dyby5jPTcwNT1zdGF0aWMgZ3JvX3Jlc3VsdF90IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5uZXQvY29yZS9ncm8uYy03MTgtXHRjYXNlIEdST19NRVJHRURfRlJFRTpcbm5ldC9jb3JlL2dyby5jOjcxOTpcdFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJlZSA9PSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEKVxubmV0L2NvcmUvZ3JvLmMtNzIwLVx0XHRcdG5hcGlfc2tiX2ZyZWVfc3RvbGVuX2hlYWQoc2tiKTtcbi0tXG5uZXQvY29yZS9ncm8uYz03Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICpuYXBpX2ZyYWdzX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4tLVxubmV0L2NvcmUvZ3JvLmMtNzU4LVxubmV0L2NvcmUvZ3JvLmM6NzU5Olx0XHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmcmFnMCAhPSBza2ItXHUwMDNlZGF0YSlcbm5ldC9jb3JlL2dyby5jLTc2MC1cdFx0XHRncm9fcHVsbF9mcm9tX2ZyYWcwKHNrYiwgaGxlbik7XG5uZXQvY29yZS9ncm8uYy03NjEtXG5uZXQvY29yZS9ncm8uYzo3NjI6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzAgJiM0Mzs9IGhsZW47XG5uZXQvY29yZS9ncm8uYzo3NjM6XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlZnJhZzBfbGVuIC09IGhsZW47XG5uZXQvY29yZS9ncm8uYy03NjQtXHR9XG4tLVxubmV0L2NvcmUvZ3JvLmM9Nzk0PV9fc3VtMTYgX19za2JfZ3JvX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvZ3JvLmMtODAwLVxubmV0L2NvcmUvZ3JvLmM6ODAxOlx0LyogTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtIGhvbGRzIHBzZXVkbyBjaGVja3N1bSAqL1xubmV0L2NvcmUvZ3JvLmM6ODAyOlx0c3VtID0gY3N1bV9mb2xkKGNzdW1fYWRkKE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bSwgd3N1bSkpO1xubmV0L2NvcmUvZ3JvLmMtODAzLVx0LyogU2VlIGNvbW1lbnRzIGluIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKCkuICovXG4tLVxubmV0L2NvcmUvZ3JvLmMtODA5LVxubmV0L2NvcmUvZ3JvLmM6ODEwOlx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vjc3VtID0gd3N1bTtcbm5ldC9jb3JlL2dyby5jOjgxMTpcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlY3N1bV92YWxpZCA9IDE7XG5uZXQvY29yZS9ncm8uYy04MTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEZWNvZGluZyBUaGlzIEdSTyBDb250cm9sIEJsb2NrKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uIGFuZCBJIHNlZSB0aGlzIGxpbmU6IGAqKHUzMiAqKSZhbXA7TkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7emVyb2VkID0gMDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoaXMgYHplcm9lZGAgZmllbGQgaW4gdGhlIGBOQVBJX0dST19DQmAuIEkgaGF2ZSBhIGZlZWxpbmcgaXQmIzM5O3MgaW1wb3J0YW50IGZvciB0aGUgR1JPIHByb2Nlc3MuIE9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYHN0cnVjdCBuYXBpX2dyb19jYmAgbG9va3MgbGlrZSBpbiBgaW5jbHVkZS9uZXQvZ3JvLmhgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhpcyBpcyBhbGwgYWJvdXQsIGFuZCB0aGVuIEkmIzM5O2xsIGJlIGFibGUgdG8gZGVjaWRlIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzaW5nIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3plcm9lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oPTE3PXN0cnVjdCBuYXBpX2dyb19jYiB7XG4tLVxuaW5jbHVkZS9uZXQvZ3JvLmgtNTMtXHQvKiBwb3J0aW9uIG9mIHRoZSBjYiBzZXQgdG8gemVybyBhdCBldmVyeSBncm8gaXRlcmF0aW9uICovXG5pbmNsdWRlL25ldC9ncm8uaDo1NDpcdHN0cnVjdF9ncm91cCh6ZXJvZWQsXG5pbmNsdWRlL25ldC9ncm8uaC01NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBHUk8gQ2FsbGJhY2sgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIEdSTyBzdHVmZiB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBjYWxsYmFjayBtZWNoYW5pc20uIEkgcmVtZW1iZXIgc2VlaW5nIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgIG1lbnRpb25lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgc291cmNlIOKAkyB0aGUgYGluY2x1ZGUvbmV0L2dyby5oYCBoZWFkZXIgZmlsZS4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgZmlsZSBhbmQgZ2V0IHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuYXBpX2dyb19jYmAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY3JpdGljYWwgbWVtYmVycyB0aGF0IG1hbmFnZSB0aGUgcGFja2V0IGFnZ3JlZ2F0aW9uIHByb2Nlc3MuIEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGxheWVyLCBob3cgaXQgaGFuZGxlcyB0aGUgR1JPIHdvcmssIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFyb3VuZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgZGVzaWduZXJzIGNob3NlIHRvIGV4cG9zZSBhbmQgY29udHJvbCB3aXRoaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2dyby5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdHJ1Y3QgbmFwaV9ncm9fY2Ige1xuICAxODpcdFx0dW5pb24ge1xuICAxOTpcdFx0XHRzdHJ1Y3Qge1xuICAyMDpcdFx0XHRcdC8qIFZpcnR1YWwgYWRkcmVzcyBvZiBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ3NbMF0ucGFnZSAmIzQzOyBvZmZzZXQuICovXG4gIDIxOlx0XHRcdFx0dm9pZFx0KmZyYWcwO1xuICAyMjpcdFxuICAyMzpcdFx0XHRcdC8qIExlbmd0aCBvZiBmcmFnMC4gKi9cbiAgMjQ6XHRcdFx0XHR1bnNpZ25lZCBpbnQgZnJhZzBfbGVuO1xuICAyNTpcdFx0XHR9O1xuICAyNjpcdFxuICAyNzpcdFx0XHRzdHJ1Y3Qge1xuICAyODpcdFx0XHRcdC8qIHVzZWQgaW4gc2tiX2dyb19yZWNlaXZlKCkgc2xvdyBwYXRoICovXG4gIDI5Olx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmxhc3Q7XG4gIDMwOlx0XG4gIDMxOlx0XHRcdFx0LyogamlmZmllcyB3aGVuIGZpcnN0IHBhY2tldCB3YXMgY3JlYXRlZC9xdWV1ZWQgKi9cbiAgMzI6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFnZTtcbiAgMzM6XHRcdFx0fTtcbiAgMzQ6XHRcdH07XG4gIDM1Olx0XG4gIDM2Olx0XHQvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItXHUwMDNlZGF0YS4gKi9cbiAgMzc6XHRcdGludFx0ZGF0YV9vZmZzZXQ7XG4gIDM4Olx0XG4gIDM5Olx0XHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgY2Fubm90IGJlIG1lcmdlZCB3aXRoIHRoZSBuZXcgc2tiLiAqL1xuICA0MDpcdFx0dTE2XHRmbHVzaDtcbiAgNDE6XHRcbiAgNDI6XHRcdC8qIE51bWJlciBvZiBzZWdtZW50cyBhZ2dyZWdhdGVkLiAqL1xuICA0MzpcdFx0dTE2XHRjb3VudDtcbiAgNDQ6XHRcbiAgNDU6XHRcdC8qIFVzZWQgaW4gaXB2Nl9ncm9fcmVjZWl2ZSgpIGFuZCBmb28tb3Zlci11ZHAgYW5kIGVzcC1pbi11ZHAgKi9cbiAgNDY6XHRcdHUxNlx0cHJvdG87XG4gIDQ3Olx0XG4gIDQ4Olx0XHR1MTZcdHBhZDtcbiAgNDk6XHRcbiAgNTA6XHQvKiBVc2VkIGluIG5hcGlfZ3JvX2NiOjpmcmVlICovXG4gIDUxOlx0I2RlZmluZSBOQVBJX0dST19GUkVFICAgICAgICAgICAgIDFcbiAgNTI6XHQjZGVmaW5lIE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQgMlxuICA1MzpcdFx0LyogcG9ydGlvbiBvZiB0aGUgY2Igc2V0IHRvIHplcm8gYXQgZXZlcnkgZ3JvIGl0ZXJhdGlvbiAqL1xuICA1NDpcdFx0c3RydWN0X2dyb3VwKHplcm9lZCxcbiAgNTU6XHRcbiAgNTY6XHRcdFx0LyogU3RhcnQgb2Zmc2V0IGZvciByZW1vdGUgY2hlY2tzdW0gb2ZmbG9hZCAqL1xuICA1NzpcdFx0XHR1MTZcdGdyb19yZW1jc3VtX3N0YXJ0O1xuICA1ODpcdFxuICA1OTpcdFx0XHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgbWF5IGJlIG9mIHRoZSBzYW1lIGZsb3cuICovXG4gIDYwOlx0XHRcdHU4XHRzYW1lX2Zsb3c6MTtcbiAgNjE6XHRcbiAgNjI6XHRcdFx0LyogVXNlZCBpbiB0dW5uZWwgR1JPIHJlY2VpdmUgKi9cbiAgNjM6XHRcdFx0dThcdGVuY2FwX21hcms6MTtcbiAgNjQ6XHRcbiAgNjU6XHRcdFx0LyogR1JPIGNoZWNrc3VtIGlzIHZhbGlkICovXG4gIDY2Olx0XHRcdHU4XHRjc3VtX3ZhbGlkOjE7XG4gIDY3Olx0XG4gIDY4Olx0XHRcdC8qIE51bWJlciBvZiBjaGVja3N1bXMgdmlhIENIRUNLU1VNX1VOTkVDRVNTQVJZICovXG4gIDY5Olx0XHRcdHU4XHRjc3VtX2NudDozO1xuICA3MDpcdFxuICA3MTpcdFx0XHQvKiBGcmVlIHRoZSBza2I/ICovXG4gIDcyOlx0XHRcdHU4XHRmcmVlOjI7XG4gIDczOlx0XG4gIDc0Olx0XHRcdC8qIFVzZWQgaW4gR1JFLCBzZXQgaW4gZm91L2d1ZV9ncm9fcmVjZWl2ZSAqL1xuICA3NTpcdFx0XHR1OFx0aXNfZm91OjE7XG4gIDc2Olx0XG4gIDc3Olx0XHRcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGlwaWRfb2Zmc2V0IGNhbiBiZSBpZ25vcmVkICovXG4gIDc4Olx0XHRcdHU4XHRpcF9maXhlZGlkOjI7XG4gIDc5Olx0XG4gIDgwOlx0XHRcdC8qIE51bWJlciBvZiBncm9fcmVjZWl2ZSBjYWxsYmFja3MgdGhpcyBwYWNrZXQgYWxyZWFkeSB3ZW50IHRocm91Z2ggKi9cbiAgODE6XHRcdFx0dTggcmVjdXJzaW9uX2NvdW50ZXI6NDtcbiAgODI6XHRcbiAgODM6XHRcdFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXG4gIDg0Olx0XHRcdHU4XHRpc19mbGlzdDoxO1xuICA4NTpcdFx0KTtcbiAgODY6XHRcbiAgODc6XHRcdC8qIHVzZWQgdG8gc3VwcG9ydCBDSEVDS1NVTV9DT01QTEVURSBmb3IgdHVubmVsaW5nIHByb3RvY29scyAqL1xuICA4ODpcdFx0X193c3VtXHRjc3VtO1xuICA4OTpcdFxuICA5MDpcdFx0LyogTDMgb2Zmc2V0cyAqL1xuICA5MTpcdFx0dW5pb24ge1xuICA5MjpcdFx0XHRzdHJ1Y3Qge1xuICA5MzpcdFx0XHRcdHUxNiBuZXR3b3JrX29mZnNldDtcbiAgOTQ6XHRcdFx0XHR1MTYgaW5uZXJfbmV0d29ya19vZmZzZXQ7XG4gIDk1Olx0XHRcdH07XG4gIDk2Olx0XHRcdHUxNiBuZXR3b3JrX29mZnNldHNbMl07XG4gIDk3Olx0XHR9O1xuICA5ODpcdH07XG4gIDk5Olx0XG4gMTAwOlx0I2RlZmluZSBOQVBJX0dST19DQihza2IpICgoc3RydWN0IG5hcGlfZ3JvX2NiICopKHNrYiktXHUwMDNlY2IpXG4gMTAxOlx0XG4gMTAyOlx0I2RlZmluZSBHUk9fUkVDVVJTSU9OX0xJTUlUIDE1XG4gMTAzOlx0c3RhdGljIGlubGluZSBpbnQgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDEwNDpcdHtcbiAxMDU6XHRcdHJldHVybiAmIzQzOyYjNDM7TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VyZWN1cnNpb25fY291bnRlciA9PSBHUk9fUkVDVVJTSU9OX0xJTUlUO1xuIDEwNjpcdH1cbiAxMDc6XHRcbiAxMDg6XHR0eXBlZGVmIHN0cnVjdCBza19idWZmICooKmdyb19yZWNlaXZlX3QpKHN0cnVjdCBsaXN0X2hlYWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7XG4gMTA5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZShncm9fcmVjZWl2ZV90IGNiLFxuIDExMDpcdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbiAxMTE6XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4gMTEyOlx0e1xuIDExMzpcdFx0aWYgKHVubGlrZWx5KGdyb19yZWN1cnNpb25faW5jX3Rlc3Qoc2tiKSkpIHtcbiAxMTQ6XHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2VmbHVzaCB8PSAxO1xuIDExNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiAxMTY6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NTYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqR1JPIGBpc19mbGlzdGAgSW5pdGlhbGl6YXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlzX2ZsaXN0YCBiaXRmaWVsZCwgYW5kIGl0JiMzOTtzIGNsZWFybHkgcGFydCBvZiB0aGUgYHplcm9lZGAgc3RydWN0IGdyb3VwLCB3aGljaCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIEdSTyBpbiB0aGUga2VybmVsLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MganVzdCBhbm90aGVyIGJpdGZpZWxkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gVGhlbiBJIHNlZSB0aGF0IGAqKHUzMiAqKSZhbXA7TkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7emVyb2VkID0gMDtgIGlzIHVzZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuICBUaGF0IGB6ZXJvZWRgIGFwcGVhcnMgdG8gYmUgYSBgdTMyYC4gIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpgZ3JvX3JlbWNzdW1fc3RhcnRgIGlzIGEgYHUxNmAgLSB0aGF0JiMzOTtzIDIgYnl0ZXMuIFRoZSBiaXRmaWVsZHMgYXJlIHBhY2tlZCwgc28gbGV0JiMzOTtzIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aG9zZToKCiogICBgc2FtZV9mbG93YCAoMSBiaXQpCiogICBgZW5jYXBfbWFya2AgKDEgYml0KQoqICAgYGNzdW1fdmFsaWRgICgxIGJpdCkKKiAgIGBjc3VtX2NudGAgKDMgYml0cykKKiAgIGBmcmVlYCAoMiBiaXRzKQoKVGhhdCYjMzk7cyBhIHRvdGFsIG9mIDggYml0cywgb3IgMSBieXRlLiBUaGVuIHRoZXNlOgoKKiAgIGBpc19mb3VgICgxIGJpdCkKKiAgIGBpcF9maXhlZGlkYCAoMiBiaXRzKQoqICAgYHJlY3Vyc2lvbl9jb3VudGVyYCAoNCBiaXRzKQoqICAgYGlzX2ZsaXN0YCAoMSBiaXQpCgpBbm90aGVyIDggYml0cywgb3IgMSBieXRlLgoKU28sIGBncm9fcmVtY3N1bV9zdGFydGAgKDIgYnl0ZXMpICYjNDM7IDEgYnl0ZSAoZmlyc3Qgc2V0IG9mIGJpdGZpZWxkcykgJiM0MzsgMSBieXRlIChzZWNvbmQgc2V0IG9mIGJpdGZpZWxkcykgPSA0IGJ5dGVzLiBQZXJmZWN0ISAgVGhhdCBtZWFucyBgKih1MzIgKikmYW1wO05BUElfR1JPX0NCKHNrYiktJmd0O3plcm9lZCA9IDA7YCB6ZXJvZXMgb3V0IGFsbCBvZiBgemVyb2VkYCBpbmNsdWRpbmcgYGlzX2ZsaXN0YC4gVGh1cyB0aGUgY29uY2x1c2lvbiBpcyBjbGVhcjogYGlzX2ZsaXN0YCBpcyAqYWx3YXlzKiBpbml0aWFsaXplZCB0byAwIHdoZW4gYW4gc2tiIGVudGVycyB0aGUgR1JPIHBhdGgsIGJlY2F1c2Ugb2YgdGhpcyB6ZXJvaW5nIG9wZXJhdGlvbiBpbiBgZGV2X2dyb19yZWNlaXZlYC4KCk5vdywgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGlzIHRoZSBvbmx5IGVudHJ5IHBvaW50LiBJJiMzOTtsbCBjaGVjayBgZGV2X2dyb19yZWNlaXZlYCB0byBzZWUgaWYgaXQmIzM5O3MgdGhlIHNvbGUgZW50cnkgcG9pbnQgdG8gYmUgc3VyZS4gWWVwLCBpdCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBHUk8uIEFuZCBgdGNwX2dyb19yZWNlaXZlYCBoYW5kbGVzIHRoZSBHUk8gcHJvY2Vzc2luZyBmb3IgVENQIHBhY2tldHMuCgpCdXQsIGhvbGQgb24uICBgdGNwX2dyb19yZWNlaXZlYCByZWNlaXZlcyBhbiBza2IgYXMgYHBgLiAgYHBgIGlzIGFuIHNrYiBmcm9tIHRoZSBHUk8gbGlzdC4gV2hpY2ggYWxzbyB3ZW50IHRocm91Z2ggYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3RgIGlzIGFsc28gaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBpcyB0aGVyZSAqYW55KiBvdGhlciBwbGFjZSB3aGVyZSBgdGNwX2dyb19yZWNlaXZlYCBjb3VsZCBiZSBjYWxsZWQgd2l0aCBhbiBza2IgdGhhdCAqaGFzbiYjMzk7dCogZ29uZSB0aHJvdWdoIGBkZXZfZ3JvX3JlY2VpdmVgPyBUaGF0IHdvdWxkIGJlIGEgcHJvYmxlbS4gTm8sIEdSTyBwYWNrZXRzIGFyZSAqYWx3YXlzKiBwcm9jZXNzZWQgdGhyb3VnaCBgZGV2X2dyb19yZWNlaXZlYCBvciBgbmFwaV9ncm9fcmVjZWl2ZWAgd2hpY2ggaW4gdHVybiBjYWxscyBgZGV2X2dyb19yZWNlaXZlYC4KCkp1c3QgdG8gYmUgc2FmZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpc24mIzM5O3QgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UuIExldCYjMzk7cyBsb29rIGZvciBjYWxsZXJzIG9mIGB0Y3BfZ3JvX3JlY2VpdmVgIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2dyb19yZWNlaXZlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTI0Mjk9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKTtcbmluY2x1ZGUvbmV0L3RjcC5oOjI0MzA6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtMjQzMS1cdFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoKTtcbi0tXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTI2NT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19sb29rdXAoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHRjcGhkciAqdGgpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjI4NjpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTI4Ny1cdFx0XHRcdHN0cnVjdCB0Y3BoZHIgKnRoKVxuLS1cbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9NDI4PXN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDQtXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQ0NTpcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ0Ni1cbi0tXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9NTY9c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxuLS1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy03My1cbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzo3NDpcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTAyCgkJCQkJCQlvdXRwdXQ6IDI5NwoJCQkJCQkJdGhvdWdodHM6IDE3NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBUQ1AgR1JPIEZyYWdsaXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEkmIzM5O20gZm9sbG93aW5nIHRoZSBjb2RlIHBhdGg6IGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIGNhbGxlZCBmcm9tIGB0Y3A0X2dyb19yZWNlaXZlYCBhbmQgYHRjcDZfZ3JvX3JlY2VpdmVgLCB3aGljaCBvcmlnaW5hdGUgZnJvbSBgaXB2NF9ncm9fcmVjZWl2ZWAgYW5kIGBpcHY2X2dyb19yZWNlaXZlYCwgYWxsIHVsdGltYXRlbHkgc3RhcnRpbmcgZnJvbSBgZGV2X2dyb19yZWNlaXZlYC4gU2luY2UgYGRldl9ncm9fcmVjZWl2ZWAgaXMgYXQgdGhlIHRvcCBsZXZlbCwgYWxsIHRoZSBTS0JzIHNob3VsZCBoYXZlIGBOQVBJX0dST19DQihza2IpLSZndDt6ZXJvZWRgIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8sIHdoaWNoIGlzIGdvb2QuCgpUaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGlzX2ZsaXN0YCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB0Y3BfZ3JvX2xvb2t1cGAgdGhhdCBzZXRzIHRoaXMgZmxhZy4gSXQgKmxvb2tzKiBsaWtlIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYXNzaWdubWVudCBvZiBgTkFQSV9HUk9fQ0Ioc2tiKS0mZ3Q7aXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS0mZ3Q7aXNfZmxpc3RgLiBMZXQmIzM5O3Mgc2NydXRpbml6ZSB0aGF0LiBTaW5jZSBgaXNfZmxpc3RgIGxpdmVzIGluIGEgYHplcm9lZGAgc3RydWN0LCB3aGljaCBgZGV2X2dyb19yZWNlaXZlYCBleHBsaWNpdGx5IGluaXRpYWxpemVzLCBpdCYjMzk7cyBhbHJlYWR5IGluaXRpYWxpemVkLiBTbyB0aGUgcGF0Y2gganVzdCBjaGFuZ2VzIHRoZSBsb2dpYyBvZiBpdHMgYXNzaWdubWVudCwgbm90IGl0cyBpbml0aWFsIHZhbHVlLgoKQnV0IHdhaXQsIGBza2JfaXNfZ3NvKHNrYilgIGlzIGludHJvZHVjZWQgaW50byB0aGUgY29uZGl0aW9uYWwuIFRoYXQgY2hlY2tzIHRoZSBHU08gc3RhdGUsIHNwZWNpZmljYWxseSBgc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2l6ZWAuIE9rYXksIGJ1dCBgc2tiX3NoaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggdGhlIFNLQiwgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbS4gVGhpcyBzaG91bGQgYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG9vLCByaWdodD8gQW5kIGBOQVBJX0dST19DQihwKS0mZ3Q7Y291bnRgIGFsc28gZ2V0cyBjaGVja2VkLiBgY291bnRgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBjb3VudGAgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy4KClRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgdGhlIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AgZnVuY3Rpb25zLCB3aGljaCBoYXZlIGAhc2tiX2lzX2dzbyhza2IpYCBhZGRlZCB0byB0aGUgbG9naWMgZm9yIGFzc2lnbmluZyBgaXNfZmxpc3RgLiBBZ2FpbiwganVzdCBhIGJvb2xlYW4gbG9naWMgY2hhbmdlLCBub3RoaW5nIHRoYXQgc2hvdWxkIGludHJvZHVjZSBhbiB1bmluaXRpYWxpemVkIHJlYWQuCgpEaXZpbmcgaW50byBgdGNwX2dyb19yZWNlaXZlYCwgdGhlcmUgaXMgYSBjb21wYXJpc29uIHdpdGggYGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLSZndDtpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLSZndDtpc19mbGlzdDtgLiBCdXQgYGlzX2ZsaXN0YCBpcyBpbml0aWFsaXplZCwgc28gdGhpcyBzaG91bGRuJiMzOTt0IGJlIGFuIGlzc3VlLgoKVGhlbiBJIGNvbnNpZGVyZWQgYHNrYi0mZ3Q7Y2JgLiBJcyB0aGVyZSBhIHBvc3NpYmlsaXR5IG9mIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZCBmcm9tIHRoZXJlPyBCdXQgYGRldl9ncm9fcmVjZWl2ZWAgc2V0cyBgemVyb2VkYCBpbiBgY2JgIHdoaWNoIGluY2x1ZGVzIGBpc19mbGlzdGAuIEFsc28gYGRldl9ncm9fcmVjZWl2ZWAgaW5pdGlhbGl6ZXMgYSBidW5jaCBvZiBvdGhlciBmaWVsZHMgYXMgd2VsbCBsaWtlIGBmbHVzaGAsIGBjb3VudGAsIGBjc3VtYCwgZXRjLiBBbmQgdGhlIG90aGVyIGZpZWxkcyBsaWtlIGBkYXRhX29mZnNldGAsIGBmcmFnMGAsIGV0Yy4gZ2V0IGluaXRpYWxpemVkIGJ5IGBza2JfZ3JvX3Jlc2V0X29mZnNldGAgY2FsbGVkIGp1c3QgYmVmb3JlIEdSTy4gU28sIGBjYmAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgZm9yIEdSTywgd2hpY2ggaXMgZ29vZC4KCk9rYXksIHNvIGNvdWxkIHRoZSBwYXRjaCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiBwYXlsb2FkPyBUaGlzIHBhdGNoIGlzIGFib3V0IGZpeGluZyBmcmFnbGlzdCBHUk8sIHNvIGl0JiMzOTtzIGEgYnVnIGZpeC4gSWYgYGlzX2ZsaXN0YCBpcyBpbmNvcnJlY3RseSBzZXQsIHRoaXMgbWlnaHQgcmVzdWx0IGluIGluY29ycmVjdCBtZXJnZXMsIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBPT0IgYWNjZXNzZXMgb3IgVUFGLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEl0JiMzOTtzIG5vdCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgcmVhZHMgb3IgcG90ZW50aWFsIGluZm8gbGVha3MuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCYjMzk7cyBicmllZmx5IGxvb2sgYXQgdGhlIGNvbnRleHQuIFRoZSBwYXRjaCBpcyBhYm91dCBmaXhpbmcgR1JPIGZyYWdsaXN0IGZhbGxiYWNrIGxvZ2ljLiBUaGlzIGlzIGZpeGluZyBhIGxvZ2ljIGJ1ZywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIEdTTyBza2JzIGFuZCBmcmFnbGlzdCBHUk8uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIGEgY3Jhc2ggb3IgaW5jb3JyZWN0IHByb2Nlc3NpbmcgZHVlIHRvIGluY29ycmVjdCBwYWNrZXQgaGFuZGxpbmcuIFNpbmNlIHRoaXMgaXMgYSBsb2dpYyBidWcsIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQgbWF5IGV4cG9zZSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpGaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHNrYi0mZ3Q7Y2JgIGlzIG5ldmVyIHNlbnQgdG8gdXNlcnNwYWNlLiBgc2tiLSZndDtjYmAgaXMgYW4gaW50ZXJuYWwgY29udHJvbCBidWZmZXIgZm9yIHRoZSBrZXJuZWwsIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBJdCYjMzk7cyBvbmx5IHVzZWQgaW50ZXJuYWxseSBkdXJpbmcgdGhlIE5BUEkgR1JPIHByb2Nlc3NpbmcgcGhhc2UuIEFuZCB3aGVuIEdSTyBpcyBkb25lLCB0aGUgYGNiYCBpcyBmcmVlIHRvIGJlIHJldXNlZC4gVGhlcmUmIzM5O3Mgbm8gaW5mbyBsZWFrIHJpc2sgaGVyZS4KClNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSBzYWZlLCBhbmQgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgR1JPIG1lcmdpbmcsIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKTGV0JiMzOTtzIHN1bW1hcml6ZSBteSByZWFzb25pbmc6CjEuICBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRoZSBgaXNfZmxpc3RgIGZsYWcgaW4gdGhlIGBOQVBJX0dST19DQmAgY29udHJvbCBibG9jayBkdXJpbmcgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoZSBgaXNfZmxpc3RgIGZsYWcgYW5kIG90aGVyIGJpdGZpZWxkcyBpbiBgTkFQSV9HUk9fQ0JgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZSgpYCAodmlhIGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3RgKSBkbyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnVydGhlcm1vcmUsIHRoZSBgc2tiLVx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMS42MTIwMjYzNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTUyNTQyMzYyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9ncm9fcmVjZWl2ZVwiLFxuICAgIFwidGNwNF9ncm9fcmVjZWl2ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXFx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMS42MTIwMzA5NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTgwMDQzOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Njg4ZTk0MTllMWZlMDE0MzEzY2Q2MWQxOGUzOGFjMDhlZDJlNjM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDEwOjQ0OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXFxuaW5kZXggM2IxZmRjZDNjYjI5Yi4uZTc0ZDk5Y2E5ZmFjZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xcbkBAIC0zMzIsNiArMzMyLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRmbHVzaCB8PSBza2ItXFx1MDAzZWlwX3N1bW1lZCAhPSBwLVxcdTAwM2VpcF9zdW1tZWQ7XFxuIFxcdFxcdGZsdXNoIHw9IHNrYi1cXHUwMDNlY3N1bV9sZXZlbCAhPSBwLVxcdTAwM2Vjc3VtX2xldmVsO1xcbiBcXHRcXHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgXFx1MDAzZT0gNjQ7XFxuK1xcdFxcdGZsdXNoIHw9IE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdDtcXG4gXFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTtcXG4gXFxuIFxcdFxcdGlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmVfbGlzdChwLCBza2IpKVxcbkBAIC0zOTUsMTIgKzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuIFxcdGludCBpaWYsIHNkaWY7XFxuIFxcbi1cXHRpZiAobGlrZWx5KCEoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxuK1xcdFxcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xcbitcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0KSB7XFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xcbitcXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbitcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTQxMCw3ICs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRzayA9IF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBpcGgtXFx1MDAzZXNhZGRyLCB0aC1cXHUwMDNlc291cmNlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaXBoLVxcdTAwM2VkYWRkciwgbnRvaHModGgtXFx1MDAzZWRlc3QpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaWlmLCBzZGlmKTtcXG4tXFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSAhc2s7XFxuK1xcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxuIFxcdGlmIChzaylcXG4gXFx0XFx0c29ja19nZW5fcHV0KHNrKTtcXG4gfVxcbkBAIC00MzAsNyArNDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aWYgKCF0aClcXG4gXFx0XFx0Z290byBmbHVzaDtcXG4gXFxuLVxcdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xcbitcXHRpZiAodW5saWtlbHkoc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKVxcbitcXHRcXHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcXG4gXFxuIFxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcXG5pbmRleCBmMmE2NTljZDYxODNjLi5lZWMzNzc4ODU1ZWI4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xcbisrKyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xcbkBAIC0yNiw3ICsyNiwxOCBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcXG4gXFx0aWYgKHApIHtcXG4tXFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxuK1xcdFxcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xcbitcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0KSB7XFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xcbitcXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxuK1xcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbitcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxuK1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTM2LDcgKzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0c2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIFxcdTAwMjZoZHItXFx1MDAzZXNhZGRyLCB0aC1cXHUwMDNlc291cmNlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2aGRyLVxcdTAwM2VkYWRkciwgbnRvaHModGgtXFx1MDAzZWRlc3QpLFxcbiBcXHRcXHRcXHRcXHRcXHRpaWYsIHNkaWYpO1xcbi1cXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9ICFzaztcXG4rXFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSAhc2sgXFx1MDAyNlxcdTAwMjYgIXNrYl9pc19nc28oc2tiKTtcXG4gXFx0aWYgKHNrKVxcbiBcXHRcXHRzb2NrX2dlbl9wdXQoc2spO1xcbiAjZW5kaWYgLyogSVNfRU5BQkxFRChDT05GSUdfSVBWNikgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6MjMuMDMwOTg3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NjEwNDg5NjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2dyb19yZWNlaXZlXCIsXG4gICAgXCJ0Y3A0X2dyb19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGxvZ2ljIGZvciBib3RoIElQdjQgYW5kIElQdjYsIHNwZWNpZmljYWxseSBoYW5kbGluZyBmcmFnbGlzdCBHUk8gYW5kIEdTTyBza2JzLiBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjY4OGU5NDE5ZTFmZTAxNDMxM2NkNjFkMThlMzhhYzA4ZWQyZTYzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEwOjQ0OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuYyBiL25ldC9pcHY0L3RjcF9vZmZsb2FkLmNcbmluZGV4IDNiMWZkY2QzY2IyOWIuLmU3NGQ5OWNhOWZhY2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5AQCAtMzMyLDYgKzMzMiw3IEBAIHN0cnVjdCBza19idWZmICp0Y3BfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Zmx1c2ggfD0gc2tiLVx1MDAzZWlwX3N1bW1lZCAhPSBwLVx1MDAzZWlwX3N1bW1lZDtcbiBcdFx0Zmx1c2ggfD0gc2tiLVx1MDAzZWNzdW1fbGV2ZWwgIT0gcC1cdTAwM2Vjc3VtX2xldmVsO1xuIFx0XHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCBcdTAwM2U9IDY0O1xuK1x0XHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0O1xuIFx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiX2dyb19yZWNlaXZlX25ldHdvcmtfb2Zmc2V0KHNrYikpO1xuIFxuIFx0XHRpZiAoZmx1c2ggfHwgc2tiX2dyb19yZWNlaXZlX2xpc3QocCwgc2tiKSlcbkBAIC0zOTUsMTIgKzM5NiwyMCBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFx0aW50IGlpZiwgc2RpZjtcbiBcbi1cdGlmIChsaWtlbHkoIShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbitcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG4rXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbitcdFx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50ID09IDEpXG4rXHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuK1x0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTQxMCw3ICs0MTksNyBAQCBzdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2sgPSBfX2luZXRfbG9va3VwX2VzdGFibGlzaGVkKG5ldCwgaXBoLVx1MDAzZXNhZGRyLCB0aC1cdTAwM2Vzb3VyY2UsXG4gXHRcdFx0XHQgICAgICAgaXBoLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdCAgICAgICBpaWYsIHNkaWYpO1xuLVx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzaztcbitcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2sgXHUwMDI2XHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XG4gXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gfVxuQEAgLTQzMCw3ICs0MzksOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCF0aClcbiBcdFx0Z290byBmbHVzaDtcbiBcbi1cdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuK1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKSlcbitcdFx0dGNwNF9jaGVja19mcmFnbGlzdF9ncm8oaGVhZCwgc2tiLCB0aCk7XG4gXG4gXHRyZXR1cm4gdGNwX2dyb19yZWNlaXZlKGhlYWQsIHNrYiwgdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuYyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuaW5kZXggZjJhNjU5Y2Q2MTgzYy4uZWVjMzc3ODg1NWViOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuKysrIGIvbmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jXG5AQCAtMjYsNyArMjYsMTggQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHAgPSB0Y3BfZ3JvX2xvb2t1cChoZWFkLCB0aCk7XG4gXHRpZiAocCkge1xuLVx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4rXHRcdC8qIGZsaXN0IEdSTyBhcHBsaWVzIHRvIGNvbnNlY3V0aXZlIG5vbi1HU08gc2ticyAqL1xuK1x0XHRpZiAoIXNrYl9pc19nc28oc2tiKSB8fCAhTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QpIHtcbitcdFx0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3Q7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdC8qIEZhbGwgYmFjayB0byB0aGUgcmVndWxhciBHUk8gcGF0aCAqL1xuK1x0XHRpZiAoTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgPT0gMSlcbitcdFx0XHROQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4rXG4rXHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzYsNyArNDcsNyBAQCBzdGF0aWMgdm9pZCB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2sgPSBfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIFx1MDAyNmhkci1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0XHRcdTAwMjZoZHItXHUwMDNlZGFkZHIsIG50b2hzKHRoLVx1MDAzZWRlc3QpLFxuIFx0XHRcdFx0XHRpaWYsIHNkaWYpO1xuLVx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9ICFzaztcbitcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2sgXHUwMDI2XHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XG4gXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gI2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDoyMy4wMzA5ODk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0ODQxMDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBHUk8gT2ZmbG9hZCBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jYCBhbmQgYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AuIFJpZ2h0IGF3YXksIGl0J3MgY2xlYXIgd2UncmUgbG9va2luZyBhdCBUQ1AgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQsIHdoaWNoIG1lYW5zIHBvdGVudGlhbCBmb3Igc29tZSBpbnRlcmVzdGluZyBmdXp6aW5nIHRhcmdldHMuIFRoZSBtYWluIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dyb2AsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2NoZWNrX2ZyYWdsaXN0X2dyb2AuIFRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBpc19mbGlzdGAgYW5kIHRoZSBgc2tiX2lzX2dzbyhza2IpYCBjYWxscyB3aGljaCBtYWtlcyBtZSB3b25kZXIgaWYgdGhlcmUncyBhbnkgb2RkIGVkZ2UgY2FzZXMgb3Igb3ZlcmZsb3dzIGluIHRoZXJlLlxuXG5NeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgc2luY2UgdGhvc2UgYXJlIHRoZSBvbmVzIEkgY2FuIHJlbGlhYmx5IGhpdC4gU28gSSdsbCBkZWZpbml0ZWx5IGJlIGZ1enppbmcgYHRjcF9ncm9fcmVjZWl2ZWAsIGB0Y3A0X2dyb19yZWNlaXZlYCwgYW5kIGB0Y3A2X2dyb19yZWNlaXZlYC4gSSBjaGVja2VkIGFuZCBjb25maXJtZWQgdGhhdCBgdGNwNF9jaGVja19mcmFnbGlzdF9ncm9gIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gIGFyZSBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aG9zZS5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmRpdGlvbnMgdGhhdCBlbmFibGUgdGhlc2UgZnVuY3Rpb25zLCBzbyBJJ20gY2hlY2tpbmcgdGhlIHNvdXJjZSBmaWxlcyBmb3IgY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JTkVUYCBjb250cm9scyB0aGUgSVB2NCBjb2RlLCBhbmQgYENPTkZJR19JUFY2YCB0aGUgSVB2Ni4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgTWFrZWZpbGVzIGZvciByZWxldmFudCBkZXBlbmRlbmNpZXMuIFdpdGggdGhpcyBpbmZvLCBJIGNhbiBtYWtlIHN1cmUgbXkgZnV6emVyIGJ1aWxkIGNvbmZpZyBtYXRjaGVzIHdoYXQncyBuZWVkZWQgZm9yIHRoZXNlIHRvIGJlIGVuYWJsZWQuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgY2FtcGFpZ24gc2V0IHVwIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6MjguNzc5NDAzMDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTg3MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9vZmZsb2FkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTItXFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjEzOlxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjI4LjgyNTU5NjY5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzgwMjE5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRoaW5raW5nLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25jZXJuaW5nIHRoZSBUQ1AgT2ZmbG9hZCBPYmplY3QgRmlsZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSBhIGJ1aWxkIHN5c3RlbSBwZXJzcGVjdGl2ZSwgdGhlIHByZXNlbmNlIG9mIGB0Y3Bfb2ZmbG9hZC5vYCBpbiB0aGUgTGludXgga2VybmVsIGlzIHJlYWxseSBzdHJhaWdodGZvcndhcmQuIEl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCB3aGljaCBpcyB0byBzYXksIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBwcm9jZXNzLCBpZiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRoYXQncyBrZXkuIFdlIGtub3cgYENPTkZJR19JTkVUYCBpcyBlZmZlY3RpdmVseSB0aGUgbWFzdGVyIHN3aXRjaCBmb3IgSVB2NCBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsLiBUaGUgTWFrZWZpbGUgbG9naWMgaW4gYG5ldC9gIGFzc2lnbnMgYG9iai15YCB0byBgQ09ORklHX0lORVRgIGlmIGl0J3Mgc2V0LiBUaGVyZWZvcmUsIGlmIElQIGlzIGNvbmZpZ3VyZWQgYW5kIHByZXNlbnQsIGB0Y3Bfb2ZmbG9hZC5vYCBpcyBnb2luZyB0byBiZSBidWlsdCBhbG9uZ3NpZGUuIFRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzOyBpdCdzIGEgZGlyZWN0IHJlc3VsdCBvZiBpbmNsdWRpbmcgdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjay4gVGhpcyBpcyBhIHZlcnkgcHJlZGljdGFibGUgYW5kIHNlbnNpYmxlIGRlc2lnbiwgZW5zdXJpbmcgb2ZmbG9hZCBjYXBhYmlsaXRpZXMgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIHdoZW4gSVAgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjMyLjQwMzYyMDc3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUwNDIxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwdjZfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozMi40NTAxMjk2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTA3NTA3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUHY2IE9mZmxvYWQgT2JqZWN0IEZpbGUgTG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGB0Y3B2Nl9vZmZsb2FkLm9gIG9iamVjdCBmaWxlIGlzIGJlaW5nIGJ1aWx0IHdpdGhpbiB0aGUga2VybmVsJ3Mgc291cmNlIHRyZWUuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gSVB2NiBuZXR3b3JraW5nLCBzbyB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gR2l2ZW4gdGhhdCBpdCdzIGEgbWFrZWZpbGUgZHJpdmVuIGJ1aWxkLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gY29uZmlybSB0aGlzIGlzIHRvIGNoZWNrIHRoZSBgTWFrZWZpbGVgIGl0c2VsZiB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG5ldC9pcHY2L01ha2VmaWxlYCBhY3R1YWxseSBkZWZpbmVzIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgdGNwdjZfb2ZmbG9hZC5vYC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjM2LjA0MDg4MzYxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTIxNDAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3B2Nl9vZmZsb2FkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozNi4wODYwMTE0MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg5NjMzOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IE9mZmxvYWQgLSBBIE1ha2VmaWxlIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBvZmZsb2FkIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LCBhcyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIElQdjYtcmVsYXRlZCBjb2RlLiBHaXZlbiB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgVENQIG9mZmxvYWQgaW4gYW4gSVB2NiBjb250ZXh0LCB0aGUgTWFrZWZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSXQnbGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGF0J3MgY29tcGlsZWQgYW5kIGxpbmtlZCBpbiwgYW5kIHdoZXJlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYXJlLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBgdGNwdjZfb2ZmbG9hZGAgaW4gdGhhdCBNYWtlZmlsZS4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgY29kZSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgVENQIG9mZmxvYWQgc3BlY2lmaWNhbGx5IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozOC45NzU2NDgwOTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTIwNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcHY2X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjEtI2luY2x1ZGUgXFxcImlwNl9vZmZsb2FkLmhcXFwiXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMjojaW5jbHVkZSBcXFwidGNwdjZfb2ZmbG9hZC5jXFxcIlxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjMtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jPTMzMj1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgaXB2Nl9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKVxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zNDctXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzozNDg6XFx0aWYgKGxpa2VseShvcHMgPT0gXFx1MDAyNm5ldF9ob3RkYXRhLnRjcHY2X29mZmxvYWQpKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzQ5LVxcdFxcdHJldHVybiB0Y3A2X2dyb19jb21wbGV0ZShza2IsIG5ob2ZmKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9NDM3PXN0YXRpYyBpbnQgX19pbml0IGlwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQzOS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjQ0MDpcXHRpZiAodGNwdjZfb2ZmbG9hZF9pbml0KCkgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtNDQxLVxcdFxcdHByX2NyaXQoXFxcIiVzOiBDYW5ub3QgYWRkIFRDUCBwcm90b2NvbCBvZmZsb2FkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5oPTEyPWludCB1ZHB2Nl9vZmZsb2FkX2V4aXQodm9pZCk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuaDoxMzppbnQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmgtMTQtXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTY4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNC1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjA1OmludCBfX2luaXQgdGNwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwNi17XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIwNzpcXHRuZXRfaG90ZGF0YS50Y3B2Nl9vZmZsb2FkID0gKHN0cnVjdCBuZXRfb2ZmbG9hZCkge1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDgtXFx0XFx0LmNhbGxiYWNrcyA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTMtXFx0fTtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjE0OlxcdHJldHVybiBpbmV0Nl9hZGRfb2ZmbG9hZChcXHUwMDI2bmV0X2hvdGRhdGEudGNwdjZfb2ZmbG9hZCwgSVBQUk9UT19UQ1ApO1xcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDozOS4wMjU1NzQ0ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1Mjk1MTU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSBmYW1pbGlhciB3aXRoIG5ldHdvcmsgc3RhY2sgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBPZmZsb2FkIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZSBidWlsZCBwcm9jZXNzIGFuZCBJIHNlZSB0aGF0IGB0Y3B2Nl9vZmZsb2FkLmNgIGlzIGJlaW5nIGNvbXBpbGVkICp3aXRoaW4qIHRoZSBgaXA2X29mZmxvYWQuY2AgZmlsZS4gTm90aGluZyBwYXJ0aWN1bGFybHkgc3VycHJpc2luZyB0aGVyZSwgc2luY2UgVENQdjYgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGlzIHVzdWFsbHkgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIElQdjYgaW1wbGVtZW50YXRpb24gYXMgYSB3aG9sZS4gQW5kLCBhcyBleHBlY3RlZCwgdGhlIGBpcDZfb2ZmbG9hZC5vYCBvYmplY3QgZmlsZSBpcyBvbmx5IGdvaW5nIHRvIGJlIGJ1aWx0IHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY3ksIG90aGVyd2lzZSBpdCB3b3VsZCBub3QgYmUgaW5jbHVkZWQuIE1ha2VzIHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDIuMTc4NTI4NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njk0ODA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZfb2ZmbG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSArPSBvdXRwdXRfY29yZS5vIHByb3RvY29sLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjQ4OlxcdFxcdFxcdGlwNl9vZmZsb2FkLm8gZXh0aGRyc19vZmZsb2FkLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDIuNTI1NDgxMjYzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDg5NTYzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGNvbmNpc2UgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKk5ldHdvcmsgR1JPIEZ1bmN0aW9uYWxpdHkgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGl0IHNlZW1zIHByZXR0eSBjbGVhciB3ZSdyZSBnb2luZyB0byBuZWVkIGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBlbmFibGVkLiBOb3csIHRoZSBtZWF0IG9mIHRoaXMgbGlrZWx5IGxpZXMgaW4gdGhlIEdSTyBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCBiZSBkZWFsaW5nIHdpdGg6IGB0Y3BfZ3JvX3JlY2VpdmVgLCBgdGNwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdGNwNl9ncm9fcmVjZWl2ZWAuIE15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpZiBgdGNwNl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQgb3Igc3RhdGljLiBUaGF0J2xsIGluZm9ybSBob3cgYWNjZXNzaWJsZSBhbmQgbW9kaWZpYWJsZSBpdCBpcywgd2hpY2gsIG9mIGNvdXJzZSwgd2lsbCBkcml2ZSB0aGUgbmV4dCBzdGVwcyBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ2LjEzNDQ0MDk2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NTg1NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwNl9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTUtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjU2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnRjcDZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNTctXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz0yMDU9aW50IF9faW5pdCB0Y3B2Nl9vZmZsb2FkX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMDktXFx0XFx0XFx0Lmdzb19zZWdtZW50XFx0PVxcdHRjcDZfZ3NvX3NlZ21lbnQsXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjIxMDpcXHRcXHRcXHQuZ3JvX3JlY2VpdmVcXHQ9XFx0dGNwNl9ncm9fcmVjZWl2ZSxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjExLVxcdFxcdFxcdC5ncm9fY29tcGxldGVcXHQ9XFx0dGNwNl9ncm9fY29tcGxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ2LjE4MDQwNDg1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc2MDAxOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUCBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBTeW1ib2xzKipcblxuSG1tLCBzbyBgdGNwNl9ncm9fcmVjZWl2ZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLiBUaGF0IG1lYW5zIGl0J3MgYSBwcmltZSBjYW5kaWRhdGUgdG8gYmUgaW5saW5lZCBkaXJlY3RseSBpbnRvIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBieSB0aGUgY29tcGlsZXIuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIENvbnNlcXVlbnRseSwgSSBzaG91bGRuJ3QgZXhwZWN0IGEgc2VwYXJhdGUgc3ltYm9sIGZvciBpdCBpbiB0aGUgc3ltYm9sIHRhYmxlLCByaWdodD8gSXQgd29uJ3QgaGF2ZSBhIGRpc3RpbmN0IGFkZHJlc3MgaWYgdGhlIGNvbXBpbGVyIGhhcyBwcm9wZXJseSBpbmxpbmVkIGl0LCBhcyBpdCBzaG91bGQuIE9rYXksIHRoYXQncyB3aGF0IEkgc3VzcGVjdGVkLiBJdCB3aWxsIGJlIHBhcnQgb2Ygd2hhdGV2ZXIgZnVuY3Rpb24gY2FsbHMgaXQuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYHRjcDRfZ3JvX3JlY2VpdmVgPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbiBub3cuIElzIGl0IGlubGluZSB0b28/IElzIHRoZXJlIGEgc3ltYm9sIGZvciBpdCBJIGNhbiBsb29rIGF0P1xuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDQ6NDkuMDU2NDA5MjdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzAzMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcDRfZ3JvX3JlY2VpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyNz1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDI4OnN0cnVjdCBza19idWZmICp0Y3A0X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00Mjkte1xcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Nzg9aW50IF9faW5pdCB0Y3B2NF9vZmZsb2FkX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDgyLVxcdFxcdFxcdC5nc29fc2VnbWVudFxcdD1cXHR0Y3A0X2dzb19zZWdtZW50LFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDgzOlxcdFxcdFxcdC5ncm9fcmVjZWl2ZVxcdD1cXHR0Y3A0X2dyb19yZWNlaXZlLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDg0LVxcdFxcdFxcdC5ncm9fY29tcGxldGVcXHQ9XFx0dGNwNF9ncm9fY29tcGxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjQ5LjEwMDcxNjk4M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1NjY2ODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBUQ1AgR1JPIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHRjcDRfZ3JvX3JlY2VpdmVgLiBJdCdzIGRlZmluZWQgd2l0aCBgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0J3MgdXN1YWxseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24gaWYgYENPTkZJR19SRVRQT0xJTkVgIGlzIGVuYWJsZWQsIHdoaWNoIHN1Z2dlc3RzIHRoZSBjb21waWxlciBtaWdodCBvcHRpbWl6ZSBpdCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJ1dCB3YWl0LCBpdCdzICpub3QqIGlubGluZS4gV2h5IGlzbid0IGl0IGFuIGlubGluZSBmdW5jdGlvbj8gSSBuZWVkIHRvIGxvb2sgaW50byB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIHRoYXQgZGVzaWduIGRlY2lzaW9uLlxuXG5BbmQgYW5vdGhlciB0aGluZzogYHRjcF9ncm9fcmVjZWl2ZWAgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AuIEFscmlnaHQsIHRoYXQgbG9jYXRpb24gbWFrZXMgc2Vuc2U7IHRoaXMgaXMgdGhlIElQdjQgVENQIG9mZmxvYWQgcGF0aC4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIHdpdGhpbiB0aGF0IGZpbGUgYW5kIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgaW1wbGVtZW50YXRpb24gZm9yIFRDUC4gSXQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgY2xlYXIgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGdpdmVuIHRoYXQgaXQgY29uY2VybnMgYSBzcGVjaWZpYyBwcm90b2NvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjUyLjgwNjM4NjA4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3OTQwMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg3LVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjg9c3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDQ1OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjUyLjg1MTE4NDc5M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk0MzM3MTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEdyb2traW5nIG9mIFRDUC9JUHY2IEdSTyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgR1JPIHN0dWZmIGFuZCBJJ3ZlIGdvdCB0byBzb3J0IG91dCB3aGVyZSB0aGluZ3MgYXJlIGRlZmluZWQuIEhtbSwgYHRjcF9ncm9fcmVjZWl2ZWAuLi4gdGhhdCBvbmUgaXNuJ3Qgc3RhdGljLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgdGNwNl9ncm9fcmVjZWl2ZWAgYWdhaW4uIEFoYSEgKlRoYXQqIG9uZSdzIG1hcmtlZCBgc3RhdGljIF9fYWx3YXlzX2lubGluZWAuIFRoYXQncyBpbXBvcnRhbnQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW55d2F5PyBSaWdodCwgZGlnZ2luZyBhcm91bmQsIEkgc2VlIGl0J3MgaW4gYG5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY2AsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhhdCB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgYG5ldC9pcHY2L2lwNl9vZmZsb2FkLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIG9yIGEgaGllcmFyY2h5IGluIHRoZSBHUk8gcHJvY2Vzc2luZy5cblxuSXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCBtZSB0aGluaywgbGV0IG1lIHRoaW5rLi4uIGFoLCB5ZXMhIFdoYXQgYWJvdXQgYGlwdjZfZ3JvX3JlY2VpdmVgLCBkZWZpbmVkIHdpdGhpbiBgbmV0L2lwdjYvaXA2X29mZmxvYWQuY2A/IE9rYXksIHNvIHRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIElQdjYgcG9ydGlvbi4gVGhlc2UgZGV0YWlscyBhcmUgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybiwgb3Igb3B0aW1pemF0aW9uLiBHb3R0YSBrZWVwIHRoZXNlIHBpZWNlcyBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTQyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ0OjU2Ljc0NTUyNDk4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwMzgyMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9MTgxPXN0YXRpYyBpbnQgaXB2Nl9leHRoZHJzX2xlbihzdHJ1Y3QgaXB2NmhkciAqaXBoLFxcbi0tXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0yMDItXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYzoyMDM6SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgc3RydWN0IHNrX2J1ZmYgKmlwdjZfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTIwNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMjk5LX1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjMwMDpFWFBPUlRfSU5ESVJFQ1RfQ0FMTEFCTEUoaXB2Nl9ncm9fcmVjZWl2ZSk7XFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy0zMDEtXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYz0zMDI9c3RhdGljIHN0cnVjdCBza19idWZmICpzaXRfaXA2aXA2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTMxMy1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jOjMxNDpcXHRyZXR1cm4gaXB2Nl9ncm9fcmVjZWl2ZShoZWFkLCBza2IpO1xcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmMtMzE1LX1cXG4tLVxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM9NDM3PXN0YXRpYyBpbnQgX19pbml0IGlwdjZfb2ZmbG9hZF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb2ZmbG9hZC5jLTQ0OC1cXHRcXHRcXHQuZ3NvX3NlZ21lbnQgPSBpcHY2X2dzb19zZWdtZW50LFxcbm5ldC9pcHY2L2lwNl9vZmZsb2FkLmM6NDQ5OlxcdFxcdFxcdC5ncm9fcmVjZWl2ZSA9IGlwdjZfZ3JvX3JlY2VpdmUsXFxubmV0L2lwdjYvaXA2X29mZmxvYWQuYy00NTAtXFx0XFx0XFx0Lmdyb19jb21wbGV0ZSA9IGlwdjZfZ3JvX2NvbXBsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NDo1Ni43OTA1Njg2NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2NTkxMTU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBHUk8gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBgaXB2Nl9ncm9fcmVjZWl2ZWAgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCB0aGUgcmVhbCBtZWF0IHNlZW1zIHRvIGJlIGluIGB0Y3BfZ3JvX3JlY2VpdmVgLCBgdGNwNF9ncm9fcmVjZWl2ZWAsIGFuZCBgdGNwNl9jaGVja19mcmFnbGlzdF9ncm9gLiBEZWZpbml0ZWx5LCBgdGNwX2dyb19yZWNlaXZlYCBhbmQgYHRjcDRfZ3JvX3JlY2VpdmVgIGFyZSBwcmltYXJ5IHN5bWJvbHMgdG8gZm9jdXMgb24uIEJ1dCB3aGF0IGFib3V0IGB0Y3A2X2dyb19yZWNlaXZlYD8gSSBpbml0aWFsbHkgdGhvdWdodCwgc2luY2UgaXQncyBpbmxpbmVkLCBpdCdkIGJlIGltcGxpY2l0bHkgaGFuZGxlZCB3aXRoaW4gYGlwdjZfZ3JvX3JlY2VpdmVgIG9yIHNvbWV0aGluZyB0aGF0IGNhbGxzICppdCouIFdhaXQuLi4gaXNuJ3QgYHRjcDZfZ3JvX3JlY2VpdmVgIGNhbGxlZCBieSBgaXB2Nl9ncm9fcmVjZWl2ZWA/IEhtbSwgbm8sIHRoYXQgY2FuJ3QgYmUgcmlnaHQ7IGl0J3MgcmVnaXN0ZXJlZCBhcyBhIGAuZ3JvX3JlY2VpdmVgIGNhbGxiYWNrIGZvciBgSVBQUk9UT19UQ1BgIHdpdGhpbiBgdGNwdjZfb2ZmbG9hZF9pbml0YC5cblxuVGhpcyBpcyBjb25mdXNpbmcgYmVjYXVzZSBpZiBpdCBpcyBtYXJrZWQgYHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVgLCBob3cgY2FuIGl0IGJlIHJlZ2lzdGVyZWQgYXMgYSBjYWxsYmFjayBmdW5jdGlvbj8gVGhpcyBpbXBsaWVzIHNvbWV0aGluZyBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nIGFib3V0IGhvdyB0aGUgY29tcGlsZXIgaGFuZGxlcyBpbmxpbmluZyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGBuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNgIHRvIHNlZSBob3cgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLiBHb3R0YSBjbGFyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MDEuODU2NDgyMjU1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk2MTI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3A2X2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM9MTc9c3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01NS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6NTY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwNl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy01Ny1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTIwNT1pbnQgX19pbml0IHRjcHY2X29mZmxvYWRfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTIwOS1cXHRcXHRcXHQuZ3NvX3NlZ21lbnRcXHQ9XFx0dGNwNl9nc29fc2VnbWVudCxcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MjEwOlxcdFxcdFxcdC5ncm9fcmVjZWl2ZVxcdD1cXHR0Y3A2X2dyb19yZWNlaXZlLFxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0yMTEtXFx0XFx0XFx0Lmdyb19jb21wbGV0ZVxcdD1cXHR0Y3A2X2dyb19jb21wbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MDEuOTAyNDQ4MDk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzM1MTYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGEgQ2FsbGJhY2sgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGlzIHNldCB1cCBhcyBhIGNhbGxiYWNrLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlcidzIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBhIG5vbi1pbmxpbmUgdmVyc2lvbiBvZiBpdCwganVzdCBzbyB3ZSBjYW4gZ2V0IGl0cyBhZGRyZXNzLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG5vdGhpbmcgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIEJ1dCBub3cgSSdtIHdvbmRlcmluZyBpZiB0aGVyZSdzIGEgbW9yZSBzdHJlYW1saW5lZCBhcHByb2FjaCBoZXJlLiBNYXliZSBJIGNhbiBieXBhc3MgdGhlIHdob2xlIGNhbGxiYWNrIG1lY2hhbmlzbSBhbHRvZ2V0aGVyLiBJbnN0ZWFkIG9mIHRoaXMsIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdXNpbmcgYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYC4gVGhleSBtaWdodCBiZSBiZXR0ZXIgb3B0aW9ucyBmb3IgaGFuZGxpbmcgdGhpcyBkaXJlY3RseS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRob3NlIGZ1bmN0aW9ucyBldmVuIGV4cG9ydGVkPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHN5bWJvbCB2aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGV5J3JlIGFjY2Vzc2libGUgZnJvbSB3aGVyZSBJJ20gd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjA2LjkzNTk2Njc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5ODA4OTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowNy4wMDE5NTk4NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkyMDY4NTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgSSdtIHJlYWR5IHRvIHN1bW1hcml6ZSBteSBcInRob3VnaHRzXCIgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydC4gSGVyZSB3ZSBnbzpcblxuKipDaGVja2luZyB0aGUgRXhwb3J0KipcblxuQWxyaWdodCwgSSdtIGp1c3QgcXVpY2tseSBydW5uaW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNydWNpYWwgc3RlcC4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGUgZGF0YSwgdGhlIG1vZGVsLCB0aGUgY29uZmlndXJhdGlvbnMsIG9yIHdoYXRldmVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBoYXMgYWN0dWFsbHkgYmVlbiBleHBvcnRlZC4gSXQncyBhIGZ1bmRhbWVudGFsLCBhbG1vc3Qgc2lsbHksIHN0ZXAsIGJ1dCBvZnRlbiBvdmVybG9va2VkIGluIHRoZSBydXNoIHRvIGFuYWx5emUgcmVzdWx0cy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBleHBvcnQgaGFzIGhhcHBlbmVkIGFzIGV4cGVjdGVkLiBEaWQgSSBzZWxlY3QgdGhlIGNvcnJlY3QgZm9ybWF0PyBBcmUgdGhlIGZpbGVzIHdoZXJlIHRoZXkgc2hvdWxkIGJlPyBJcyBldmVyeXRoaW5nIHppcHBlZCBvciBwYWNrYWdlZCBjb3JyZWN0bHk/IE1ha2luZyBzdXJlIHRoZSBleHBvcnQgYWN0dWFsbHkgKndvcmtlZCogaXMgZm91bmRhdGlvbmFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gTm8gZXhwb3J0LCBubyBhbmFseXNpcy4gVGltZSB0byBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowOS45MjI2NDc3MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwODI4MDI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlQuKnRjcF9ncm9fcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTowOS45ODM0ODAxODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTg0NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBUQ1AgT2ZmbG9hZCBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSdtIGRlYWxpbmcgd2l0aCBhIFRDUCBvZmZsb2FkIHNpdHVhdGlvbiBoZXJlLiBJdCdzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0aWMgY29uZmlndXJhdGlvbjsgdGhlIGlzc3VlIGZlZWxzIG1vcmUgZHluYW1pYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1hZ2ljIGlzIGhhcHBlbmluZy4gVGhlIHRyYWNlIHNlZW1zIHRvIGJlIHBvaW50aW5nIHRvIHNvbWV0aGluZyBiZWluZyBoYW5kbGVkIGludGVybmFsbHksIG5vdCBleHBsaWNpdGx5IGV4cG9ydGVkLiBTaW5jZSBpdCdzIHJlbGF0ZWQgdG8gVENQIGFuZCBzb21lIHNvcnQgb2YgcmVjZWl2ZSBwcm9jZXNzaW5nLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHY0IGNvbnRleHQuIEdpdmVuIHRoZSBjbHVlcywgSSdtIGJldHRpbmcgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLCBvciBhdCBsZWFzdCBhIGNyaXRpY2FsIGNvbXBvbmVudCBvZiB0aGUgZmxvdywgd2lsbCBiZSBuZXN0bGVkIGluc2lkZSBgbmV0L2lwdjQvdGNwX29mZmxvYWQuY2AuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhhdCBmaWxlIGFuZCBsb29rIGZvciB0aGUgYHRjcF9ncm9fcmVjZWl2ZWAgZnVuY3Rpb247IHRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBwcm9jZXNzaW5nLiBJdOKAmXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgZXhhbWluaW5nIGhvdyBvZmZsb2FkIGludGVyYWN0cyB3aXRoIEdSTyBpbiB0aGUgSVB2NCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjEzLjM2MzMzMDgxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjkyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2dyb19yZWNlaXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9vZmZsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX29mZmxvYWQuYz0yNjU9c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fbG9va3VwKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODUtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzoyODY6c3RydWN0IHNrX2J1ZmYgKnRjcF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMjg3LVxcdFxcdFxcdFxcdHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00Mjg9c3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDQ0LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDQ1OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjEzLjQxMTQ2NDkzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM4NDQxNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBHUk8gUmVjZWl2ZSBGdW5jdGlvbiBJbXBsZW1lbnRhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBHUk8gc3R1ZmYsIGFuZCBpdCdzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIHBpY3R1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUga2V5IGZvciBUQ1AgR1JPIHJlY2VpdmUuIGB0Y3BfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNF9ncm9fcmVjZWl2ZWAgYXJlIGp1bXBpbmcgb3V0IGFzIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBCdXQgaGFuZyBvbi4uLiB3aGF0IGFib3V0IGB0Y3A2X2dyb19yZWNlaXZlYD8gQWgsIHJpZ2h0LCBpdCdzIGBzdGF0aWMgX19hbHdheXNfaW5saW5lYC4gVGhhdCBtZWFucyBpdCAqdXN1YWxseSogd29uJ3QgaGF2ZSBhIGRlZGljYXRlZCBzeW1ib2wgYWRkcmVzcy4gVGhlIGNvbXBpbGVyIHdpbGwgbGlrZWx5IGlubGluZSBpdCwgbWFraW5nIGl0IGhhcmRlciB0byB0cmFjayBkb3duLiBIb3dldmVyLCBpZiBpdHMgYWRkcmVzcyAqaXMqIGFjdHVhbGx5IHRha2VuLCB0aGUgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBhIGZ1bmN0aW9uLCBidXQgaXRzIG5hbWUgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUuIFNvLCBmb3Igbm93LCBJJ2xsIHN0aWNrIHdpdGggYHRjcF9ncm9fcmVjZWl2ZWAgYW5kIGB0Y3A0X2dyb19yZWNlaXZlYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsaWFibGUgc3RhcnRpbmcgcG9pbnRzLlxuXG5Ob3csIEkgc2hvdWxkIGNvbnNpZGVyIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAsIHdoaWNoIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBkcml2ZXJzLiBBcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zPyBUaGUgY29kZSBhbHNvIHJlZmVyZW5jZXMgYHNrYl9pc19nc28oc2tiKWAgYW5kIGBORVRJRl9GX0dST19GUkFHTElTVGAuIFRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQgbmV0d29ya2luZyBmZWF0dXJlcywgc28gSSdtIG5vdCBleHBlY3RpbmcgdGhlbSB0byBiZSBjb25maWctZGVwZW5kZW50IGluIGEgc2lnbmlmaWNhbnQgd2F5LiBTbywgYElORVRgIGFuZCBgSVBWNmAgYXJlIHRoZSBtYWluIG9uZXMgdGhhdCBzZWVtIHRvIG1hdHRlci5cblxuSnVzdCB0byBiZSBzdXJlLCBJJ2xsIGdpdmUgYHRjcDRfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwX2dyb19yZWNlaXZlYCBhbm90aGVyIHF1aWNrIG9uY2Utb3ZlciB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI4MCwiT3V0cHV0VG9rZW5zIjoxMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMDQ5OTA5ODc1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5NzA2NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZ3JvX3JlY2VpdmVcIixcbiAgICBcInRjcDRfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZ3JvX3JlY2VpdmVcIixcbiAgICBcInRjcDRfZ3JvX3JlY2VpdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgbG9naWMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Niwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGZyYWdsaXN0IEdSTyBhbmQgR1NPIHNrYnMuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NToxOS4xMzU4ODgxNjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NzMwMzY1MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMTM2NTA1NjgxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3NzI5NzQzODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNldHRpbmcgYW5kIGNoZWNraW5nIHRoZSBgaXNfZmxpc3RgIGZsYWcgaW4gdGhlIGBOQVBJX0dST19DQmAgY29udHJvbCBibG9jayBkdXJpbmcgVENQIEdSTyAoR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQpIHByb2Nlc3NpbmcuIFRoZSBgaXNfZmxpc3RgIGZsYWcgYW5kIG90aGVyIGJpdGZpZWxkcyBpbiBgTkFQSV9HUk9fQ0JgIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZSgpYCAodmlhIGAqKHUzMiAqKVxcdTAwMjZOQVBJX0dST19DQihza2IpLVxcdTAwM2V6ZXJvZWQgPSAwO2ApIGJlZm9yZSBhbnkgR1JPIHByb3RvY29sIGhhbmRsZXJzIGFyZSBpbnZva2VkLiBUaGVyZWZvcmUsIHRoZSBuZXcgY29uZGl0aW9uYWwgY2hlY2tzIChlLmcuLCBgTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0YCkgZG8gbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIEZ1cnRoZXJtb3JlLCB0aGUgYHNrYi1cXHUwMDNlY2JgIGNvbnRyb2wgYnVmZmVyIGlzIHVzZWQgc3RyaWN0bHkgZm9yIGludGVybmFsIGtlcm5lbCBzdGF0ZSB0cmFja2luZyBkdXJpbmcgdGhlIE5BUEkgcG9sbGluZyBwaGFzZSBhbmQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXJzcGFjZSwgZWxpbWluYXRpbmcgYW55IGluZm8tbGVhayByaXNrcy4gVGhlIHBhdGNoIGFkZHJlc3NlcyBHUk8gbWVyZ2luZyBsb2dpYyBmb3IgR1NPIHBhY2tldHM7IGFueSByZWdyZXNzaW9ucyBoZXJlIHdvdWxkIGxlYWQgdG8gc2tiIGxpc3QgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gYXJlIGFscmVhZHkgY29tcHJlaGVuc2l2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25zdW1wdGlvbiBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY2ODhlOTQxOWUxZmUwMTQzMTNjZDYxZDE4ZTM4YWMwOGVkMmU2MzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMDo0NDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vZmZsb2FkLmMgYi9uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jXG5pbmRleCAzYjFmZGNkM2NiMjliLi5lNzRkOTljYTlmYWNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xuKysrIGIvbmV0L2lwdjQvdGNwX29mZmxvYWQuY1xuQEAgLTMzMiw2ICszMzIsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2VpcF9zdW1tZWQgIT0gcC1cdTAwM2VpcF9zdW1tZWQ7XG4gXHRcdGZsdXNoIHw9IHNrYi1cdTAwM2Vjc3VtX2xldmVsICE9IHAtXHUwMDNlY3N1bV9sZXZlbDtcbiBcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnQgXHUwMDNlPSA2NDtcbitcdFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtcbiBcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fcmVjZWl2ZV9uZXR3b3JrX29mZnNldChza2IpKTtcbiBcbiBcdFx0aWYgKGZsdXNoIHx8IHNrYl9ncm9fcmVjZWl2ZV9saXN0KHAsIHNrYikpXG5AQCAtMzk1LDEyICszOTYsMjAgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBuZXQgKm5ldDtcbiBcdGludCBpaWYsIHNkaWY7XG4gXG4tXHRpZiAobGlrZWx5KCEoc2tiLVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9HUk9fRlJBR0xJU1QpKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0cCA9IHRjcF9ncm9fbG9va3VwKGhlYWQsIHRoKTtcbiBcdGlmIChwKSB7XG4tXHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdDtcbitcdFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXG4rXHRcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCkge1xuK1x0XHRcdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdDtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcbitcdFx0LyogRmFsbCBiYWNrIHRvIHRoZSByZWd1bGFyIEdSTyBwYXRoICovXG4rXHRcdGlmIChOQVBJX0dST19DQihwKS1cdTAwM2Vjb3VudCA9PSAxKVxuK1x0XHRcdE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbitcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IDA7XG4rXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC00MTAsNyArNDE5LDcgQEAgc3RhdGljIHZvaWQgdGNwNF9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChuZXQsIGlwaC1cdTAwM2VzYWRkciwgdGgtXHUwMDNlc291cmNlLFxuIFx0XHRcdFx0ICAgICAgIGlwaC1cdTAwM2VkYWRkciwgbnRvaHModGgtXHUwMDNlZGVzdCksXG4gXHRcdFx0XHQgICAgICAgaWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4rXHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gIXNrIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzbyhza2IpO1xuIFx0aWYgKHNrKVxuIFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIH1cbkBAIC00MzAsNyArNDM5LDggQEAgc3RydWN0IHNrX2J1ZmYgKnRjcDRfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICghdGgpXG4gXHRcdGdvdG8gZmx1c2g7XG4gXG4tXHR0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhoZWFkLCBza2IsIHRoKTtcbitcdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpXG4rXHRcdHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvKGhlYWQsIHNrYiwgdGgpO1xuIFxuIFx0cmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbmluZGV4IGYyYTY1OWNkNjE4M2MuLmVlYzM3Nzg4NTVlYjggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmNcbisrKyBiL25ldC9pcHY2L3RjcHY2X29mZmxvYWQuY1xuQEAgLTI2LDcgKzI2LDE4IEBAIHN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRwID0gdGNwX2dyb19sb29rdXAoaGVhZCwgdGgpO1xuIFx0aWYgKHApIHtcbi1cdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHQvKiBmbGlzdCBHUk8gYXBwbGllcyB0byBjb25zZWN1dGl2ZSBub24tR1NPIHNrYnMgKi9cbitcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0KSB7XG4rXHRcdFx0TkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdCA9IE5BUElfR1JPX0NCKHApLVx1MDAzZWlzX2ZsaXN0O1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHQvKiBGYWxsIGJhY2sgdG8gdGhlIHJlZ3VsYXIgR1JPIHBhdGggKi9cbitcdFx0aWYgKE5BUElfR1JPX0NCKHApLVx1MDAzZWNvdW50ID09IDEpXG4rXHRcdFx0TkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgPSAwO1xuK1xuK1x0XHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gMDtcbitcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTM2LDcgKzQ3LDcgQEAgc3RhdGljIHZvaWQgdGNwNl9jaGVja19mcmFnbGlzdF9ncm8oc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrID0gX19pbmV0Nl9sb29rdXBfZXN0YWJsaXNoZWQobmV0LCBcdTAwMjZoZHItXHUwMDNlc2FkZHIsIHRoLVx1MDAzZXNvdXJjZSxcbiBcdFx0XHRcdFx0XHUwMDI2aGRyLVx1MDAzZWRhZGRyLCBudG9ocyh0aC1cdTAwM2VkZXN0KSxcbiBcdFx0XHRcdFx0aWlmLCBzZGlmKTtcbi1cdE5BUElfR1JPX0NCKHNrYiktXHUwMDNlaXNfZmxpc3QgPSAhc2s7XG4rXHROQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gIXNrIFx1MDAyNlx1MDAyNiAhc2tiX2lzX2dzbyhza2IpO1xuIFx0aWYgKHNrKVxuIFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuICNlbmRpZiAvKiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MTkuMTM2NTA2OTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MjYyNjQxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JPIEZyYWdsaXN0IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgdGNwX29mZmxvYWQuY2AgYW5kIGB0Y3B2Nl9vZmZsb2FkLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBgTkFQSV9HUk9fQ0JgIHN0cnVjdHVyZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNvbmNlcm4gaGVyZSBpcyBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBob3cgYGlzX2ZsaXN0YCBpcyBzZXQgYW5kIGNoZWNrZWQgaW4gYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCwgcGx1cyB0aGVyZSdzIGEgbmV3IGNoZWNrIGFkZGVkIGluIGB0Y3BfZ3JvX3JlY2VpdmVgOiBgZmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdDtgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSB0aGlzIGBOQVBJX0dST19DQmAgbWFjcm8sIHBhcnRpY3VsYXJseSBgc2tiLVx1MDAzZWNiYC4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCBgc2tiLVx1MDAzZWNiYCBpcyB1bmluaXRpYWxpemVkIHdoZW4gdGhpcyBjb2RlIHJ1bnM/IEkga25vdyBgTkFQSV9HUk9fQ0JgIGlzIHByZXR0eSBjZW50cmFsIHRvIEdSTywgYW5kIHRoZSBgY2JgIGZpZWxkICpzaG91bGQqIGJlIGluaXRpYWxpemVkIHdoZW4gYW4gYHNrYmAgZW50ZXJzIHRoZSBHUk8gcGF0aCwgYnV0IHRoZXNlIGNoYW5nZXMgdG8gYGlzX2ZsaXN0YC4uLiB0aGF0J3Mgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGxpZXMuIFRoYXQgbmV3IGNoZWNrIGluIGB0Y3BfZ3JvX3JlY2VpdmVgIGlzIHNjcmVhbWluZyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRcIiBpZiBlaXRoZXIgYHBgIG9yIGBza2JgIGRvbid0IGhhdmUgYGlzX2ZsaXN0YCBwcm9wZXJseSBzZXQuXG5cbkFoYSEgYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCAqZG9lcyogc2V0IGBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0YC4gQnV0LCB0aGUga2V5IGlzIHRoZSBjb25kaXRpb25hbDogYGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0dST19GUkFHTElTVCkpYC4gSWYgYE5FVElGX0ZfR1JPX0ZSQUdMSVNUYCBpc24ndCBzZXQsIHRoZW4gYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCAqaXNuJ3QqIGNhbGxlZC4gVGhhdCBtZWFucyBgTkFQSV9HUk9fQ0Ioc2tiKS1cdTAwM2Vpc19mbGlzdGAgbWlnaHQgYmUgbGVmdCB1bmluaXRpYWxpemVkIGluIHRoYXQgY2FzZSwgbGVhZGluZyB0byB0aGF0IHJpc2t5IGNvbXBhcmlzb24gSSBzYXcgZWFybGllci4gV2UgYWxzbyBrbm93IHRoYXQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBjYW4gaGF2ZSBzaW1pbGFyIGlzc3Vlcy5cblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRpbWUgdG8gYGdpdCBncmVwYCBhbmQgdHJhY2sgZG93biBldmVyeSBpbnN0YW5jZSB3aGVyZSBgaXNfZmxpc3RgIGlzICphY3R1YWxseSogaW5pdGlhbGl6ZWQgdG8gYmUgc3VyZSBhbmQgZW5zdXJlIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgaGFwcGVuaW5nIGV2ZXJ5d2hlcmUgaXQgbmVlZHMgdG8gYmUgYmVmb3JlIGJlaW5nIGNoZWNrZWQuIEdvdHRhIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCByZWFkcyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MjYuOTYyNzc0NjQ0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI4OTkyOTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2ZsaXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2dyby5oPTE3PXN0cnVjdCBuYXBpX2dyb19jYiB7XFxuLS1cXG5pbmNsdWRlL25ldC9ncm8uaC04My1cXHRcXHQvKiBHUk8gaXMgZG9uZSBieSBmcmFnX2xpc3QgcG9pbnRlciBjaGFpbmluZy4gKi9cXG5pbmNsdWRlL25ldC9ncm8uaDo4NDpcXHRcXHR1OFxcdGlzX2ZsaXN0OjE7XFxuaW5jbHVkZS9uZXQvZ3JvLmgtODUtXFx0KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM9Mjg2PXN0cnVjdCBza19idWZmICp0Y3BfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzI5LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6MzMwOlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QpKSB7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0zMzEtXFx0XFx0Zmx1c2ggfD0gKF9fZm9yY2UgaW50KShmbGFncyBeIHRjcF9mbGFnX3dvcmQodGgyKSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTMzNC1cXHRcXHRmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgXFx1MDAzZT0gNjQ7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzozMzU6XFx0XFx0Zmx1c2ggfD0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0O1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtMzM2LVxcdFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBza2JfZ3JvX3JlY2VpdmVfbmV0d29ya19vZmZzZXQoc2tiKSk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTM5MD1zdGF0aWMgdm9pZCB0Y3A0X2NoZWNrX2ZyYWdsaXN0X2dybyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MDEtXFx0XFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0MDI6XFx0XFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgfHwgIU5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCkge1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDAzOlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWlzX2ZsaXN0O1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA0LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDA4LVxcdFxcdGlmIChOQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQgPT0gMSlcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjQwOTpcXHRcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QgPSAwO1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDEwLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDExOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQxMi1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDIxLVxcdFxcdFxcdFxcdCAgICAgICBpaWYsIHNkaWYpO1xcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDIyOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00MjMtXFx0aWYgKHNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYz00NTI9SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcDRfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCB0aG9mZilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmMtNDU3LVxcbm5ldC9pcHY0L3RjcF9vZmZsb2FkLmM6NDU4OlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCkpIHtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ1OS1cXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRlJBR0xJU1QgfCBTS0JfR1NPX1RDUFY0O1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz02OTY9c3RhdGljIHN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03MzMtXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3MzQ6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ICE9IE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCkge1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzM1LVxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZsdXNoID0gMTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzQ5LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo3NTA6XFx0XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0KSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy03NTEtXFx0XFx0XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9NzgxPXN0cnVjdCBza19idWZmICp1ZHBfZ3JvX3JlY2VpdmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNzk0LVxcdCAqL1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6Nzk1OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gMDtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTc5Ni1cXHRpZiAoIXNrIHx8ICF1ZHBfc2soc2spLVxcdTAwM2Vncm9fcmVjZWl2ZSkge1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy04MDMtXFx0XFx0aWYgKHNrYi1cXHUwMDNlZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfR1JPX0ZSQUdMSVNUKVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6ODA0OlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gc2sgPyAhdWRwX3Rlc3RfYml0KEdST19FTkFCTEVELCBzaykgOiAxO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA1LVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtODA2LVxcdFxcdGlmICgoIXNrIFxcdTAwMjZcXHUwMDI2IChza2ItXFx1MDAzZWRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0dST19VRFBfRldEKSkgfHxcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjgwNzpcXHRcXHQgICAgKHNrIFxcdTAwMjZcXHUwMDI2IHVkcF90ZXN0X2JpdChHUk9fRU5BQkxFRCwgc2spKSB8fCBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdClcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTgwOC1cXHRcXHRcXHRyZXR1cm4gY2FsbF9ncm9fcmVjZWl2ZSh1ZHBfZ3JvX3JlY2VpdmVfc2VnbWVudCwgaGVhZCwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM9OTU0PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHA0X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTk2MC1cXHQvKiBkbyBmcmFnbGlzdCBvbmx5IGlmIHRoZXJlIGlzIG5vIG91dGVyIFVEUCBlbmNhcCAob3Igd2UgYWxyZWFkeSBwcm9jZXNzZWQgaXQpICovXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzo5NjE6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0IFxcdTAwMjZcXHUwMDI2ICFOQVBJX0dST19DQihza2IpLVxcdTAwM2VlbmNhcF9tYXJrKSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy05NjItXFx0XFx0dWgtXFx1MDAzZWxlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gbmhvZmYpO1xcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jPTE3PXN0YXRpYyB2b2lkIHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtMjktXFx0XFx0LyogZmxpc3QgR1JPIGFwcGxpZXMgdG8gY29uc2VjdXRpdmUgbm9uLUdTTyBza2JzICovXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjMwOlxcdFxcdGlmICghc2tiX2lzX2dzbyhza2IpIHx8ICFOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QpIHtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmM6MzE6XFx0XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3QgPSBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3Q7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTMyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYy0zNi1cXHRcXHRpZiAoTkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ID09IDEpXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjM3OlxcdFxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTM4LVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYzozOTpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCA9IDA7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQwLVxcbi0tXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTQ5LVxcdFxcdFxcdFxcdFxcdGlpZiwgc2RpZik7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjUwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0ID0gIXNrIFxcdTAwMjZcXHUwMDI2ICFza2JfaXNfZ3NvKHNrYik7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTUxLVxcdGlmIChzaylcXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz04MT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGludCB0Y3A2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGhvZmYpXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtODYtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjg3OlxcdGlmICh1bmxpa2VseShOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdCkpIHtcXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtODgtXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0ZSQUdMSVNUIHwgU0tCX0dTT19UQ1BWNjtcXG4tLVxcbm5ldC9pcHY2L3VkcF9vZmZsb2FkLmM9MTY2PWludCB1ZHA2X2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpXFxuLS1cXG5uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jLTE3Mi1cXHQvKiBkbyBmcmFnbGlzdCBvbmx5IGlmIHRoZXJlIGlzIG5vIG91dGVyIFVEUCBlbmNhcCAob3Igd2UgYWxyZWFkeSBwcm9jZXNzZWQgaXQpICovXFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYzoxNzM6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWlzX2ZsaXN0IFxcdTAwMjZcXHUwMDI2ICFOQVBJX0dST19DQihza2IpLVxcdTAwM2VlbmNhcF9tYXJrKSB7XFxubmV0L2lwdjYvdWRwX29mZmxvYWQuYy0xNzQtXFx0XFx0dWgtXFx1MDAzZWxlbiA9IGh0b25zKHNrYi1cXHUwMDNlbGVuIC0gbmhvZmYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NToyOC41OTE3NzQxMTNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MTQzODg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBpc19mbGlzdGAgd2l0aGluIHRoZSBHUk8gQ29udGV4dCoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYGlzX2ZsaXN0YCBmaWVsZCB3aXRoaW4gdGhlIGBuYXBpX2dyb19jYmAgc3RydWN0dXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVjYXVzZSBvZiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBzdWJzeXN0ZW0sIEkga25vdyB0aGF0IGBuYXBpX2dyb19jYmAgaXMgd2hlcmUgYWxsIHRoZSBHUk8gc3RhdGUgbGl2ZXMuIEkgc2VlIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIGZpZWxkIGxpdmVzIHdpdGhpbiBgc3RydWN0IG5hcGlfZ3JvX2NiYC4gTm93LCB3aGVyZSBkb2VzIGBuYXBpX2dyb19jYmAgZ2V0IGluaXRpYWxpemVkPyBUaGUgY29kZSBzdWdnZXN0cyB0aGUgcHJpbWUgc3VzcGVjdCBpcyBgZGV2X2dyb19yZWNlaXZlYCBmdW5jdGlvbiwgbG9jYXRlZCBpbiBgbmV0L2NvcmUvZ3JvLmNgLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgR1JPIHByb2Nlc3NpbmcsIHNvIGl0J3MgYSBsaWtlbHkgY2FuZGlkYXRlIGZvciBzZXR0aW5nIHVwIHRoZSBHUk8gY29udGV4dC5cblxuVGhlcmVmb3JlLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIHdpdGhpbiBgZGV2X2dyb19yZWNlaXZlYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgaXNfZmxpc3RgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdGhlcmUsIG9yIHBlcmhhcHMgaXMgZ2l2ZW4gYSBkZWZhdWx0IHZhbHVlLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSBpdCdzIGluaXRpYWxpemVkIGVsc2V3aGVyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoZSBgbmFwaV9ncm9fY2JgIGlzIHNldCB1cC4gS25vd2luZyBleGFjdGx5IHdoZW4gYW5kIGhvdyBgaXNfZmxpc3RgIGdldHMgaXRzIHZhbHVlIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyBHUk8gYmVoYXZpb3IuIEl0IHNlZW1zIHRoZSBiZXN0IHdheSB0byBkZXRlcm1pbmUgdGhlIGZsb3cgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6MzMuMDYzMjE3MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwNTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJOQVBJX0dST19DQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ncm8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ncm8uYz05Mj1pbnQgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTE1LVxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VsZW4gKyBsZW4gXFx1MDAzZT0gbmV0aWZfZ2V0X2dyb19tYXhfc2l6ZShwLVxcdTAwM2VkZXYsIHApIHx8XFxubmV0L2NvcmUvZ3JvLmM6MTE2OlxcdFxcdCAgICAgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2gpKVxcbm5ldC9jb3JlL2dyby5jLTExNy1cXHRcXHRyZXR1cm4gLUUyQklHO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTE5LVxcdGlmICh1bmxpa2VseShwLVxcdTAwM2VsZW4gKyBsZW4gXFx1MDAzZT0gR1JPX0xFR0FDWV9NQVhfU0laRSkpIHtcXG5uZXQvY29yZS9ncm8uYzoxMjA6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXByb3RvICE9IElQUFJPVE9fVENQIHx8XFxubmV0L2NvcmUvZ3JvLmMtMTIxLVxcdFxcdCAgICBwLVxcdTAwM2VlbmNhcHN1bGF0aW9uKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtMTI0LVxcbm5ldC9jb3JlL2dyby5jOjEyNTpcXHRzZWdzID0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQ7XFxubmV0L2NvcmUvZ3JvLmM6MTI2OlxcdGxwID0gTkFQSV9HUk9fQ0IocCktXFx1MDAzZWxhc3Q7XFxubmV0L2NvcmUvZ3JvLmMtMTI3LVxcdHBpbmZvID0gc2tiX3NoaW5mbyhscCk7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0xNTgtXFxubmV0L2NvcmUvZ3JvLmM6MTU5OlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyZWUgPSBOQVBJX0dST19GUkVFO1xcbm5ldC9jb3JlL2dyby5jLTE2MC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0xODQtXFx0XFx0c2tiLVxcdTAwM2V0cnVlc2l6ZSA9IG5ld190cnVlc2l6ZTtcXG5uZXQvY29yZS9ncm8uYzoxODU6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZnJlZSA9IE5BUElfR1JPX0ZSRUVfU1RPTEVOX0hFQUQ7XFxubmV0L2NvcmUvZ3JvLmMtMTg2LVxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIwNS1cXG5uZXQvY29yZS9ncm8uYzoyMDY6XFx0aWYgKE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID09IHApXFxubmV0L2NvcmUvZ3JvLmMtMjA3LVxcdFxcdHNrYl9zaGluZm8ocCktXFx1MDAzZWZyYWdfbGlzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yMDgtXFx0ZWxzZVxcbm5ldC9jb3JlL2dyby5jOjIwOTpcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlbGFzdC1cXHUwMDNlbmV4dCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYzoyMTA6XFx0TkFQSV9HUk9fQ0IocCktXFx1MDAzZWxhc3QgPSBza2I7XFxubmV0L2NvcmUvZ3JvLmMtMjExLVxcdF9fc2tiX2hlYWRlcl9yZWxlYXNlKHNrYik7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yMTQtZG9uZTpcXG5uZXQvY29yZS9ncm8uYzoyMTU6XFx0TkFQSV9HUk9fQ0IocCktXFx1MDAzZWNvdW50ICs9IHNlZ3M7XFxubmV0L2NvcmUvZ3JvLmMtMjE2LVxcdHAtXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIyNS1cXHR9XFxubmV0L2NvcmUvZ3JvLmM6MjI2OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXNhbWVfZmxvdyA9IDE7XFxubmV0L2NvcmUvZ3JvLmMtMjI3LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmM9MjMwPWludCBza2JfZ3JvX3JlY2VpdmVfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTIzMy1cXHRpZiAodW5saWtlbHkocC1cXHUwMDNlbGVuICsgc2tiLVxcdTAwM2VsZW4gXFx1MDAzZT0gNjU1MzYgfHxcXG5uZXQvY29yZS9ncm8uYzoyMzQ6XFx0XFx0ICAgICBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCkpXFxubmV0L2NvcmUvZ3JvLmMtMjM1LVxcdFxcdHJldHVybiAtRTJCSUc7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yMzctXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpIHtcXG5uZXQvY29yZS9ncm8uYzoyMzg6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZmx1c2ggPSAxO1xcbm5ldC9jb3JlL2dyby5jLTIzOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTI0MS1cXG5uZXQvY29yZS9ncm8uYzoyNDI6XFx0aWYgKE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID09IHApXFxubmV0L2NvcmUvZ3JvLmMtMjQzLVxcdFxcdHNrYl9zaGluZm8ocCktXFx1MDAzZWZyYWdfbGlzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yNDQtXFx0ZWxzZVxcbm5ldC9jb3JlL2dyby5jOjI0NTpcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlbGFzdC1cXHUwMDNlbmV4dCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy0yNDYtXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yNDgtXFxubmV0L2NvcmUvZ3JvLmM6MjQ5OlxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VsYXN0ID0gc2tiO1xcbm5ldC9jb3JlL2dyby5jOjI1MDpcXHROQVBJX0dST19DQihwKS1cXHUwMDNlY291bnQrKztcXG5uZXQvY29yZS9ncm8uYy0yNTEtXFx0cC1cXHUwMDNlZGF0YV9sZW4gKz0gc2tiLVxcdTAwM2VsZW47XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0yNjAtXFxubmV0L2NvcmUvZ3JvLmM6MjYxOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXNhbWVfZmxvdyA9IDE7XFxubmV0L2NvcmUvZ3JvLmMtMjYyLVxcbi0tXFxubmV0L2NvcmUvZ3JvLmM9MjY2PXN0YXRpYyB2b2lkIGdyb19jb21wbGV0ZShzdHJ1Y3QgZ3JvX25vZGUgKmdybywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTI3NC1cXG5uZXQvY29yZS9ncm8uYzoyNzU6XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNvdW50ID09IDEpIHtcXG5uZXQvY29yZS9ncm8uYy0yNzYtXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSA9IDA7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zMDAtb3V0Olxcbm5ldC9jb3JlL2dyby5jOjMwMTpcXHRncm9fbm9ybWFsX29uZShncm8sIHNrYiwgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQpO1xcbm5ldC9jb3JlL2dyby5jLTMwMi19XFxuLS1cXG5uZXQvY29yZS9ncm8uYz0zMDQ9c3RhdGljIHZvaWQgX19ncm9fZmx1c2hfY2hhaW4oc3RydWN0IGdyb19ub2RlICpncm8sIHUzMiBpbmRleCwgYm9vbCBmbHVzaF9vbGQpXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zMDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2Uoc2tiLCBwLCBoZWFkLCBsaXN0KSB7XFxubmV0L2NvcmUvZ3JvLmM6MzEwOlxcdFxcdGlmIChmbHVzaF9vbGQgXFx1MDAyNlxcdTAwMjYgTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlYWdlID09IGppZmZpZXMpXFxubmV0L2NvcmUvZ3JvLmMtMzExLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9jb3JlL2dyby5jPTM1Nz1zdGF0aWMgdm9pZCBncm9fbGlzdF9wcmVwYXJlKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zNjctXFx0XFx0aWYgKGhhc2ggIT0gc2tiX2dldF9oYXNoX3JhdyhwKSkge1xcbm5ldC9jb3JlL2dyby5jOjM2ODpcXHRcXHRcXHROQVBJX0dST19DQihwKS1cXHUwMDNlc2FtZV9mbG93ID0gMDtcXG5uZXQvY29yZS9ncm8uYy0zNjktXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy0zOTYtXFxubmV0L2NvcmUvZ3JvLmM6Mzk3OlxcdFxcdE5BUElfR1JPX0NCKHApLVxcdTAwM2VzYW1lX2Zsb3cgPSAhZGlmZnM7XFxubmV0L2NvcmUvZ3JvLmMtMzk4LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2dyby5jPTQwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dyb19yZXNldF9vZmZzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ob2ZmKVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNDA2LVxcbm5ldC9jb3JlL2dyby5jOjQwNzpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VuZXR3b3JrX29mZnNldCA9IDA7XFxubmV0L2NvcmUvZ3JvLmM6NDA4OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWRhdGFfb2Zmc2V0ID0gMDtcXG5uZXQvY29yZS9ncm8uYy00MDktXFx0aGVhZGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XFxubmV0L2NvcmUvZ3JvLmM6NDEwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwID0gc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9jb3JlL2dyby5jOjQxMTpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMF9sZW4gPSBoZWFkbGVuO1xcbm5ldC9jb3JlL2dyby5jLTQxMi1cXHRpZiAoaGVhZGxlbilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTQyMC1cXHQgICAgKCFORVRfSVBfQUxJR04gfHwgISgoc2tiX2ZyYWdfb2ZmKGZyYWcwKSArIG5ob2ZmKSBcXHUwMDI2IDMpKSkge1xcbm5ldC9jb3JlL2dyby5jOjQyMTpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCA9IHNrYl9mcmFnX2FkZHJlc3MoZnJhZzApO1xcbm5ldC9jb3JlL2dyby5jOjQyMjpcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsXFxubmV0L2NvcmUvZ3JvLmMtNDIzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBza2JfZnJhZ19zaXplKGZyYWcwKSxcXG4tLVxcbm5ldC9jb3JlL2dyby5jPTQyOD1zdGF0aWMgdm9pZCBncm9fcHVsbF9mcm9tX2ZyYWcwKHN0cnVjdCBza19idWZmICpza2IsIGludCBncm93KVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNDMzLVxcbm5ldC9jb3JlL2dyby5jOjQzNDpcXHRtZW1jcHkoc2tiX3RhaWxfcG9pbnRlcihza2IpLCBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCwgZ3Jvdyk7XFxubmV0L2NvcmUvZ3JvLmMtNDM1LVxcbi0tXFxubmV0L2NvcmUvZ3JvLmM9NDc2PXN0YXRpYyBlbnVtIGdyb19yZXN1bHQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBncm9fbm9kZSAqZ3JvLFxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNTA2LVxcdFxcdFxcdFxcdFxcdHNpemVvZih1MzIpKSk7IC8qIEF2b2lkIHNsb3cgdW5hbGlnbmVkIGFjYyAqL1xcbm5ldC9jb3JlL2dyby5jOjUwNzpcXHQqKHUzMiAqKVxcdTAwMjZOQVBJX0dST19DQihza2IpLVxcdTAwM2V6ZXJvZWQgPSAwO1xcbm5ldC9jb3JlL2dyby5jOjUwODpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCA9IHNrYl9oYXNfZnJhZ19saXN0KHNrYik7XFxubmV0L2NvcmUvZ3JvLmM6NTA5OlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNvdW50ID0gMTtcXG5uZXQvY29yZS9ncm8uYy01MTAtXFx0aWYgKHVubGlrZWx5KHNrYl9pc19nc28oc2tiKSkpIHtcXG5uZXQvY29yZS9ncm8uYzo1MTE6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY291bnQgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzO1xcbm5ldC9jb3JlL2dyby5jLTUxMi1cXHRcXHQvKiBPbmx5IHN1cHBvcnQgVENQIGFuZCBub24gRE9ER1kgdXNlcnMuICovXFxuLS1cXG5uZXQvY29yZS9ncm8uYy01MTQtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19ET0RHWSkpXFxubmV0L2NvcmUvZ3JvLmM6NTE1OlxcdFxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZsdXNoID0gMTtcXG5uZXQvY29yZS9ncm8uYy01MTYtXFx0fVxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNTIwLVxcdGNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6XFxubmV0L2NvcmUvZ3JvLmM6NTIxOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0gPSBza2ItXFx1MDAzZWNzdW07XFxubmV0L2NvcmUvZ3JvLmM6NTIyOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW1fdmFsaWQgPSAxO1xcbm5ldC9jb3JlL2dyby5jLTUyMy1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9ncm8uYy01MjQtXFx0Y2FzZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTpcXG5uZXQvY29yZS9ncm8uYzo1MjU6XFx0XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bV9jbnQgPSBza2ItXFx1MDAzZWNzdW1fbGV2ZWwgKyAxO1xcbm5ldC9jb3JlL2dyby5jLTUyNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTUzOS1cXG5uZXQvY29yZS9ncm8uYzo1NDA6XFx0c2FtZV9mbG93ID0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlc2FtZV9mbG93O1xcbm5ldC9jb3JlL2dyby5jOjU0MTpcXHRyZXQgPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmVlID8gR1JPX01FUkdFRF9GUkVFIDogR1JPX01FUkdFRDtcXG5uZXQvY29yZS9ncm8uYy01NDItXFxuLS1cXG5uZXQvY29yZS9ncm8uYy01NTEtXFxubmV0L2NvcmUvZ3JvLmM6NTUyOlxcdGlmIChOQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaClcXG5uZXQvY29yZS9ncm8uYy01NTMtXFx0XFx0Z290byBub3JtYWw7XFxuLS1cXG5uZXQvY29yZS9ncm8uYy01NTktXFxubmV0L2NvcmUvZ3JvLmM6NTYwOlxcdC8qIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzZXR0aW5nIE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXthZ2V8bGFzdH0gKi9cXG5uZXQvY29yZS9ncm8uYy01NjEtXFx0Z3JvX3RyeV9wdWxsX2Zyb21fZnJhZzAoc2tiKTtcXG5uZXQvY29yZS9ncm8uYzo1NjI6XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlYWdlID0gamlmZmllcztcXG5uZXQvY29yZS9ncm8uYzo1NjM6XFx0TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlbGFzdCA9IHNrYjtcXG5uZXQvY29yZS9ncm8uYy01NjQtXFx0aWYgKCFza2JfaXNfZ3NvKHNrYikpXFxuLS1cXG5uZXQvY29yZS9ncm8uYz02MTI9c3RhdGljIGdyb19yZXN1bHRfdCBncm9fc2tiX2ZpbmlzaChzdHJ1Y3QgZ3JvX25vZGUgKmdybywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTYyMC1cXHRjYXNlIEdST19NRVJHRURfRlJFRTpcXG5uZXQvY29yZS9ncm8uYzo2MjE6XFx0XFx0aWYgKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyZWUgPT0gTkFQSV9HUk9fRlJFRV9TVE9MRU5fSEVBRClcXG5uZXQvY29yZS9ncm8uYy02MjItXFx0XFx0XFx0bmFwaV9za2JfZnJlZV9zdG9sZW5faGVhZChza2IpO1xcbi0tXFxubmV0L2NvcmUvZ3JvLmM9NzA1PXN0YXRpYyBncm9fcmVzdWx0X3QgbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi0tXFxubmV0L2NvcmUvZ3JvLmMtNzE4LVxcdGNhc2UgR1JPX01FUkdFRF9GUkVFOlxcbm5ldC9jb3JlL2dyby5jOjcxOTpcXHRcXHRpZiAoTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlZnJlZSA9PSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEKVxcbm5ldC9jb3JlL2dyby5jLTcyMC1cXHRcXHRcXHRuYXBpX3NrYl9mcmVlX3N0b2xlbl9oZWFkKHNrYik7XFxuLS1cXG5uZXQvY29yZS9ncm8uYz03Mzc9c3RhdGljIHN0cnVjdCBza19idWZmICpuYXBpX2ZyYWdzX3NrYihzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9ncm8uYy03NTgtXFxubmV0L2NvcmUvZ3JvLmM6NzU5OlxcdFxcdGlmIChOQVBJX0dST19DQihza2IpLVxcdTAwM2VmcmFnMCAhPSBza2ItXFx1MDAzZWRhdGEpXFxubmV0L2NvcmUvZ3JvLmMtNzYwLVxcdFxcdFxcdGdyb19wdWxsX2Zyb21fZnJhZzAoc2tiLCBobGVuKTtcXG5uZXQvY29yZS9ncm8uYy03NjEtXFxubmV0L2NvcmUvZ3JvLmM6NzYyOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwICs9IGhsZW47XFxubmV0L2NvcmUvZ3JvLmM6NzYzOlxcdFxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWZyYWcwX2xlbiAtPSBobGVuO1xcbm5ldC9jb3JlL2dyby5jLTc2NC1cXHR9XFxuLS1cXG5uZXQvY29yZS9ncm8uYz03OTQ9X19zdW0xNiBfX3NrYl9ncm9fY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9jb3JlL2dyby5jLTgwMC1cXG5uZXQvY29yZS9ncm8uYzo4MDE6XFx0LyogTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlY3N1bSBob2xkcyBwc2V1ZG8gY2hlY2tzdW0gKi9cXG5uZXQvY29yZS9ncm8uYzo4MDI6XFx0c3VtID0gY3N1bV9mb2xkKGNzdW1fYWRkKE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0sIHdzdW0pKTtcXG5uZXQvY29yZS9ncm8uYy04MDMtXFx0LyogU2VlIGNvbW1lbnRzIGluIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKCkuICovXFxuLS1cXG5uZXQvY29yZS9ncm8uYy04MDktXFxubmV0L2NvcmUvZ3JvLmM6ODEwOlxcdE5BUElfR1JPX0NCKHNrYiktXFx1MDAzZWNzdW0gPSB3c3VtO1xcbm5ldC9jb3JlL2dyby5jOjgxMTpcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2Vjc3VtX3ZhbGlkID0gMTtcXG5uZXQvY29yZS9ncm8uYy04MTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjMzLjEwODkyODg3NVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NzQ5MTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRlY29kaW5nIFRoaXMgR1JPIENvbnRyb2wgQmxvY2sqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBkZXZfZ3JvX3JlY2VpdmVgIGZ1bmN0aW9uIGFuZCBJIHNlZSB0aGlzIGxpbmU6IGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhpcyBgemVyb2VkYCBmaWVsZCBpbiB0aGUgYE5BUElfR1JPX0NCYC4gSSBoYXZlIGEgZmVlbGluZyBpdCdzIGltcG9ydGFudCBmb3IgdGhlIEdSTyBwcm9jZXNzLiBPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYHN0cnVjdCBuYXBpX2dyb19jYmAgbG9va3MgbGlrZSBpbiBgaW5jbHVkZS9uZXQvZ3JvLmhgLiBMZXQncyBzZWUgd2hhdCB0aGlzIGlzIGFsbCBhYm91dCwgYW5kIHRoZW4gSSdsbCBiZSBhYmxlIHRvIGRlY2lkZSBob3cgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgcHJvY2Vzc2luZyBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjM2LjYyNjY4MDcyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM5MjUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6ZXJvZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvZ3JvLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZ3JvLmg9MTc9c3RydWN0IG5hcGlfZ3JvX2NiIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2dyby5oLTUzLVxcdC8qIHBvcnRpb24gb2YgdGhlIGNiIHNldCB0byB6ZXJvIGF0IGV2ZXJ5IGdybyBpdGVyYXRpb24gKi9cXG5pbmNsdWRlL25ldC9ncm8uaDo1NDpcXHRzdHJ1Y3RfZ3JvdXAoemVyb2VkLFxcbmluY2x1ZGUvbmV0L2dyby5oLTU1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTozNi42NzMwNzcyNjNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzNjI5NTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgR1JPIENhbGxiYWNrIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIEdSTyBzdHVmZiB3b3Jrcywgc3BlY2lmaWNhbGx5IHRoZSBjYWxsYmFjayBtZWNoYW5pc20uIEkgcmVtZW1iZXIgc2VlaW5nIGBzdHJ1Y3QgbmFwaV9ncm9fY2JgIG1lbnRpb25lZCwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ug4oCTIHRoZSBgaW5jbHVkZS9uZXQvZ3JvLmhgIGhlYWRlciBmaWxlLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgdGhlIGRlZmluaXRpdmUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5hcGlfZ3JvX2NiYC4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIGNyaXRpY2FsIG1lbWJlcnMgdGhhdCBtYW5hZ2UgdGhlIHBhY2tldCBhZ2dyZWdhdGlvbiBwcm9jZXNzLiBJJ20gbG9va2luZyBmb3IgZGV0YWlscyBvbiBob3cgdGhlIGNhbGxiYWNrIGludGVyYWN0cyB3aXRoIHRoZSBOQVBJIGxheWVyLCBob3cgaXQgaGFuZGxlcyB0aGUgR1JPIHdvcmssIHRoZSBmdW5jdGlvbnMgaW52b2x2ZWQsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcGFzc2VkIGFyb3VuZC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBkZXNpZ25lcnMgY2hvc2UgdG8gZXhwb3NlIGFuZCBjb250cm9sIHdpdGhpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6NDAuOTA5Mzc1NDI2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ncm8uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTc6XFx0c3RydWN0IG5hcGlfZ3JvX2NiIHtcXG4gIDE4OlxcdFxcdHVuaW9uIHtcXG4gIDE5OlxcdFxcdFxcdHN0cnVjdCB7XFxuICAyMDpcXHRcXHRcXHRcXHQvKiBWaXJ0dWFsIGFkZHJlc3Mgb2Ygc2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnc1swXS5wYWdlICsgb2Zmc2V0LiAqL1xcbiAgMjE6XFx0XFx0XFx0XFx0dm9pZFxcdCpmcmFnMDtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0XFx0XFx0LyogTGVuZ3RoIG9mIGZyYWcwLiAqL1xcbiAgMjQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGZyYWcwX2xlbjtcXG4gIDI1OlxcdFxcdFxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdFxcdHN0cnVjdCB7XFxuICAyODpcXHRcXHRcXHRcXHQvKiB1c2VkIGluIHNrYl9ncm9fcmVjZWl2ZSgpIHNsb3cgcGF0aCAqL1xcbiAgMjk6XFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmxhc3Q7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdFxcdFxcdC8qIGppZmZpZXMgd2hlbiBmaXJzdCBwYWNrZXQgd2FzIGNyZWF0ZWQvcXVldWVkICovXFxuICAzMjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFnZTtcXG4gIDMzOlxcdFxcdFxcdH07XFxuICAzNDpcXHRcXHR9O1xcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItXFx1MDAzZWRhdGEuICovXFxuICAzNzpcXHRcXHRpbnRcXHRkYXRhX29mZnNldDtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0LyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IGNhbm5vdCBiZSBtZXJnZWQgd2l0aCB0aGUgbmV3IHNrYi4gKi9cXG4gIDQwOlxcdFxcdHUxNlxcdGZsdXNoO1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQvKiBOdW1iZXIgb2Ygc2VnbWVudHMgYWdncmVnYXRlZC4gKi9cXG4gIDQzOlxcdFxcdHUxNlxcdGNvdW50O1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQvKiBVc2VkIGluIGlwdjZfZ3JvX3JlY2VpdmUoKSBhbmQgZm9vLW92ZXItdWRwIGFuZCBlc3AtaW4tdWRwICovXFxuICA0NjpcXHRcXHR1MTZcXHRwcm90bztcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0dTE2XFx0cGFkO1xcbiAgNDk6XFx0XFxuICA1MDpcXHQvKiBVc2VkIGluIG5hcGlfZ3JvX2NiOjpmcmVlICovXFxuICA1MTpcXHQjZGVmaW5lIE5BUElfR1JPX0ZSRUUgICAgICAgICAgICAgMVxcbiAgNTI6XFx0I2RlZmluZSBOQVBJX0dST19GUkVFX1NUT0xFTl9IRUFEIDJcXG4gIDUzOlxcdFxcdC8qIHBvcnRpb24gb2YgdGhlIGNiIHNldCB0byB6ZXJvIGF0IGV2ZXJ5IGdybyBpdGVyYXRpb24gKi9cXG4gIDU0OlxcdFxcdHN0cnVjdF9ncm91cCh6ZXJvZWQsXFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdFxcdC8qIFN0YXJ0IG9mZnNldCBmb3IgcmVtb3RlIGNoZWNrc3VtIG9mZmxvYWQgKi9cXG4gIDU3OlxcdFxcdFxcdHUxNlxcdGdyb19yZW1jc3VtX3N0YXJ0O1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRcXHQvKiBUaGlzIGlzIG5vbi16ZXJvIGlmIHRoZSBwYWNrZXQgbWF5IGJlIG9mIHRoZSBzYW1lIGZsb3cuICovXFxuICA2MDpcXHRcXHRcXHR1OFxcdHNhbWVfZmxvdzoxO1xcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHRcXHQvKiBVc2VkIGluIHR1bm5lbCBHUk8gcmVjZWl2ZSAqL1xcbiAgNjM6XFx0XFx0XFx0dThcXHRlbmNhcF9tYXJrOjE7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdFxcdC8qIEdSTyBjaGVja3N1bSBpcyB2YWxpZCAqL1xcbiAgNjY6XFx0XFx0XFx0dThcXHRjc3VtX3ZhbGlkOjE7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdFxcdC8qIE51bWJlciBvZiBjaGVja3N1bXMgdmlhIENIRUNLU1VNX1VOTkVDRVNTQVJZICovXFxuICA2OTpcXHRcXHRcXHR1OFxcdGNzdW1fY250OjM7XFxuICA3MDpcXHRcXG4gIDcxOlxcdFxcdFxcdC8qIEZyZWUgdGhlIHNrYj8gKi9cXG4gIDcyOlxcdFxcdFxcdHU4XFx0ZnJlZToyO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRcXHQvKiBVc2VkIGluIEdSRSwgc2V0IGluIGZvdS9ndWVfZ3JvX3JlY2VpdmUgKi9cXG4gIDc1OlxcdFxcdFxcdHU4XFx0aXNfZm91OjE7XFxuICA3NjpcXHRcXG4gIDc3OlxcdFxcdFxcdC8qIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGlwaWRfb2Zmc2V0IGNhbiBiZSBpZ25vcmVkICovXFxuICA3ODpcXHRcXHRcXHR1OFxcdGlwX2ZpeGVkaWQ6MjtcXG4gIDc5OlxcdFxcbiAgODA6XFx0XFx0XFx0LyogTnVtYmVyIG9mIGdyb19yZWNlaXZlIGNhbGxiYWNrcyB0aGlzIHBhY2tldCBhbHJlYWR5IHdlbnQgdGhyb3VnaCAqL1xcbiAgODE6XFx0XFx0XFx0dTggcmVjdXJzaW9uX2NvdW50ZXI6NDtcXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0XFx0LyogR1JPIGlzIGRvbmUgYnkgZnJhZ19saXN0IHBvaW50ZXIgY2hhaW5pbmcuICovXFxuICA4NDpcXHRcXHRcXHR1OFxcdGlzX2ZsaXN0OjE7XFxuICA4NTpcXHRcXHQpO1xcbiAgODY6XFx0XFxuICA4NzpcXHRcXHQvKiB1c2VkIHRvIHN1cHBvcnQgQ0hFQ0tTVU1fQ09NUExFVEUgZm9yIHR1bm5lbGluZyBwcm90b2NvbHMgKi9cXG4gIDg4OlxcdFxcdF9fd3N1bVxcdGNzdW07XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdC8qIEwzIG9mZnNldHMgKi9cXG4gIDkxOlxcdFxcdHVuaW9uIHtcXG4gIDkyOlxcdFxcdFxcdHN0cnVjdCB7XFxuICA5MzpcXHRcXHRcXHRcXHR1MTYgbmV0d29ya19vZmZzZXQ7XFxuICA5NDpcXHRcXHRcXHRcXHR1MTYgaW5uZXJfbmV0d29ya19vZmZzZXQ7XFxuICA5NTpcXHRcXHRcXHR9O1xcbiAgOTY6XFx0XFx0XFx0dTE2IG5ldHdvcmtfb2Zmc2V0c1syXTtcXG4gIDk3OlxcdFxcdH07XFxuICA5ODpcXHR9O1xcbiAgOTk6XFx0XFxuIDEwMDpcXHQjZGVmaW5lIE5BUElfR1JPX0NCKHNrYikgKChzdHJ1Y3QgbmFwaV9ncm9fY2IgKikoc2tiKS1cXHUwMDNlY2IpXFxuIDEwMTpcXHRcXG4gMTAyOlxcdCNkZWZpbmUgR1JPX1JFQ1VSU0lPTl9MSU1JVCAxNVxcbiAxMDM6XFx0c3RhdGljIGlubGluZSBpbnQgZ3JvX3JlY3Vyc2lvbl9pbmNfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAxMDQ6XFx0e1xcbiAxMDU6XFx0XFx0cmV0dXJuICsrTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlcmVjdXJzaW9uX2NvdW50ZXIgPT0gR1JPX1JFQ1VSU0lPTl9MSU1JVDtcXG4gMTA2OlxcdH1cXG4gMTA3OlxcdFxcbiAxMDg6XFx0dHlwZWRlZiBzdHJ1Y3Qgc2tfYnVmZiAqKCpncm9fcmVjZWl2ZV90KShzdHJ1Y3QgbGlzdF9oZWFkICosIHN0cnVjdCBza19idWZmICopO1xcbiAxMDk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FsbF9ncm9fcmVjZWl2ZShncm9fcmVjZWl2ZV90IGNiLFxcbiAxMTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuIDExMTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMTEyOlxcdHtcXG4gMTEzOlxcdFxcdGlmICh1bmxpa2VseShncm9fcmVjdXJzaW9uX2luY190ZXN0KHNrYikpKSB7XFxuIDExNDpcXHRcXHRcXHROQVBJX0dST19DQihza2IpLVxcdTAwM2VmbHVzaCB8PSAxO1xcbiAxMTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDExNjpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEwOjQ1OjQwLjkwOTQ4MzIzNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY1NTE4MjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipHUk8gYGlzX2ZsaXN0YCBJbml0aWFsaXphdGlvbiBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlzX2ZsaXN0YCBiaXRmaWVsZCwgYW5kIGl0J3MgY2xlYXJseSBwYXJ0IG9mIHRoZSBgemVyb2VkYCBzdHJ1Y3QgZ3JvdXAsIHdoaWNoIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gR1JPIGluIHRoZSBrZXJuZWwuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGp1c3QgYW5vdGhlciBiaXRmaWVsZCB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoZW4gSSBzZWUgdGhhdCBgKih1MzIgKilcdTAwMjZOQVBJX0dST19DQihza2IpLVx1MDAzZXplcm9lZCA9IDA7YCBpcyB1c2VkIGluIGBkZXZfZ3JvX3JlY2VpdmVgLiAgVGhhdCBgemVyb2VkYCBhcHBlYXJzIHRvIGJlIGEgYHUzMmAuICBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cbmBncm9fcmVtY3N1bV9zdGFydGAgaXMgYSBgdTE2YCAtIHRoYXQncyAyIGJ5dGVzLiBUaGUgYml0ZmllbGRzIGFyZSBwYWNrZWQsIHNvIGxldCdzIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aG9zZTpcblxuKiAgIGBzYW1lX2Zsb3dgICgxIGJpdClcbiogICBgZW5jYXBfbWFya2AgKDEgYml0KVxuKiAgIGBjc3VtX3ZhbGlkYCAoMSBiaXQpXG4qICAgYGNzdW1fY250YCAoMyBiaXRzKVxuKiAgIGBmcmVlYCAoMiBiaXRzKVxuXG5UaGF0J3MgYSB0b3RhbCBvZiA4IGJpdHMsIG9yIDEgYnl0ZS4gVGhlbiB0aGVzZTpcblxuKiAgIGBpc19mb3VgICgxIGJpdClcbiogICBgaXBfZml4ZWRpZGAgKDIgYml0cylcbiogICBgcmVjdXJzaW9uX2NvdW50ZXJgICg0IGJpdHMpXG4qICAgYGlzX2ZsaXN0YCAoMSBiaXQpXG5cbkFub3RoZXIgOCBiaXRzLCBvciAxIGJ5dGUuXG5cblNvLCBgZ3JvX3JlbWNzdW1fc3RhcnRgICgyIGJ5dGVzKSArIDEgYnl0ZSAoZmlyc3Qgc2V0IG9mIGJpdGZpZWxkcykgKyAxIGJ5dGUgKHNlY29uZCBzZXQgb2YgYml0ZmllbGRzKSA9IDQgYnl0ZXMuIFBlcmZlY3QhICBUaGF0IG1lYW5zIGAqKHUzMiAqKVx1MDAyNk5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkID0gMDtgIHplcm9lcyBvdXQgYWxsIG9mIGB6ZXJvZWRgIGluY2x1ZGluZyBgaXNfZmxpc3RgLiBUaHVzIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyOiBgaXNfZmxpc3RgIGlzICphbHdheXMqIGluaXRpYWxpemVkIHRvIDAgd2hlbiBhbiBza2IgZW50ZXJzIHRoZSBHUk8gcGF0aCwgYmVjYXVzZSBvZiB0aGlzIHplcm9pbmcgb3BlcmF0aW9uIGluIGBkZXZfZ3JvX3JlY2VpdmVgLlxuXG5Ob3csIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhpcyBpcyB0aGUgb25seSBlbnRyeSBwb2ludC4gSSdsbCBjaGVjayBgZGV2X2dyb19yZWNlaXZlYCB0byBzZWUgaWYgaXQncyB0aGUgc29sZSBlbnRyeSBwb2ludCB0byBiZSBzdXJlLiBZZXAsIGl0IGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIEdSTy4gQW5kIGB0Y3BfZ3JvX3JlY2VpdmVgIGhhbmRsZXMgdGhlIEdSTyBwcm9jZXNzaW5nIGZvciBUQ1AgcGFja2V0cy5cblxuQnV0LCBob2xkIG9uLiAgYHRjcF9ncm9fcmVjZWl2ZWAgcmVjZWl2ZXMgYW4gc2tiIGFzIGBwYC4gIGBwYCBpcyBhbiBza2IgZnJvbSB0aGUgR1JPIGxpc3QuIFdoaWNoIGFsc28gd2VudCB0aHJvdWdoIGBkZXZfZ3JvX3JlY2VpdmVgLiBTbyBgTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3RgIGlzIGFsc28gaW5pdGlhbGl6ZWQuXG5cbkFscmlnaHQsIGlzIHRoZXJlICphbnkqIG90aGVyIHBsYWNlIHdoZXJlIGB0Y3BfZ3JvX3JlY2VpdmVgIGNvdWxkIGJlIGNhbGxlZCB3aXRoIGFuIHNrYiB0aGF0ICpoYXNuJ3QqIGdvbmUgdGhyb3VnaCBgZGV2X2dyb19yZWNlaXZlYD8gVGhhdCB3b3VsZCBiZSBhIHByb2JsZW0uIE5vLCBHUk8gcGFja2V0cyBhcmUgKmFsd2F5cyogcHJvY2Vzc2VkIHRocm91Z2ggYGRldl9ncm9fcmVjZWl2ZWAgb3IgYG5hcGlfZ3JvX3JlY2VpdmVgIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRldl9ncm9fcmVjZWl2ZWAuXG5cbkp1c3QgdG8gYmUgc2FmZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpc24ndCBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZS4gTGV0J3MgbG9vayBmb3IgY2FsbGVycyBvZiBgdGNwX2dyb19yZWNlaXZlYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTU2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTA6NDU6NTEuNTY0NjY4MzQ4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI2NTk5NzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9ncm9fcmVjZWl2ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yNDI5PXN0cnVjdCBza19idWZmICp0Y3BfZ3JvX2xvb2t1cChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgdGNwaGRyICp0aCk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MjQzMDpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjQzMS1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwaGRyICp0aCk7XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTI2NT1zdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19sb29rdXAoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHRjcGhkciAqdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTI4NS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jOjI4NjpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy0yODctXFx0XFx0XFx0XFx0c3RydWN0IHRjcGhkciAqdGgpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jPTQyOD1zdHJ1Y3Qgc2tfYnVmZiAqdGNwNF9ncm9fcmVjZWl2ZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYy00NDQtXFxubmV0L2lwdjQvdGNwX29mZmxvYWQuYzo0NDU6XFx0cmV0dXJuIHRjcF9ncm9fcmVjZWl2ZShoZWFkLCBza2IsIHRoKTtcXG5uZXQvaXB2NC90Y3Bfb2ZmbG9hZC5jLTQ0Ni1cXG4tLVxcbm5ldC9pcHY2L3RjcHY2X29mZmxvYWQuYz01Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBza19idWZmICp0Y3A2X2dyb19yZWNlaXZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5uZXQvaXB2Ni90Y3B2Nl9vZmZsb2FkLmMtNzMtXFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jOjc0OlxcdHJldHVybiB0Y3BfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiLCB0aCk7XFxubmV0L2lwdjYvdGNwdjZfb2ZmbG9hZC5jLTc1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NTo1My42OTEyNzQzMloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE3NDk0Njk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIFRDUCBHUk8gRnJhZ2xpc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aDogYHRjcF9ncm9fcmVjZWl2ZWAgaXMgY2FsbGVkIGZyb20gYHRjcDRfZ3JvX3JlY2VpdmVgIGFuZCBgdGNwNl9ncm9fcmVjZWl2ZWAsIHdoaWNoIG9yaWdpbmF0ZSBmcm9tIGBpcHY0X2dyb19yZWNlaXZlYCBhbmQgYGlwdjZfZ3JvX3JlY2VpdmVgLCBhbGwgdWx0aW1hdGVseSBzdGFydGluZyBmcm9tIGBkZXZfZ3JvX3JlY2VpdmVgLiBTaW5jZSBgZGV2X2dyb19yZWNlaXZlYCBpcyBhdCB0aGUgdG9wIGxldmVsLCBhbGwgdGhlIFNLQnMgc2hvdWxkIGhhdmUgYE5BUElfR1JPX0NCKHNrYiktXHUwMDNlemVyb2VkYCBwcm9wZXJseSBpbml0aWFsaXplZCB0byB6ZXJvLCB3aGljaCBpcyBnb29kLlxuXG5UaGUga2V5IGNoYW5nZSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCB0aGUgYGlzX2ZsaXN0YCBmbGFnLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGluIGB0Y3BfZ3JvX2xvb2t1cGAgdGhhdCBzZXRzIHRoaXMgZmxhZy4gSXQgKmxvb2tzKiBsaWtlIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBhc3NpZ25tZW50IG9mIGBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0ID0gTkFQSV9HUk9fQ0IocCktXHUwMDNlaXNfZmxpc3RgLiBMZXQncyBzY3J1dGluaXplIHRoYXQuIFNpbmNlIGBpc19mbGlzdGAgbGl2ZXMgaW4gYSBgemVyb2VkYCBzdHJ1Y3QsIHdoaWNoIGBkZXZfZ3JvX3JlY2VpdmVgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMsIGl0J3MgYWxyZWFkeSBpbml0aWFsaXplZC4gU28gdGhlIHBhdGNoIGp1c3QgY2hhbmdlcyB0aGUgbG9naWMgb2YgaXRzIGFzc2lnbm1lbnQsIG5vdCBpdHMgaW5pdGlhbCB2YWx1ZS5cblxuQnV0IHdhaXQsIGBza2JfaXNfZ3NvKHNrYilgIGlzIGludHJvZHVjZWQgaW50byB0aGUgY29uZGl0aW9uYWwuIFRoYXQgY2hlY2tzIHRoZSBHU08gc3RhdGUsIHNwZWNpZmljYWxseSBgc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplYC4gT2theSwgYnV0IGBza2Jfc2hpbmZvYCBpcyBhbGxvY2F0ZWQgd2l0aCB0aGUgU0tCLCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uIFRoaXMgc2hvdWxkIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIHRvbywgcmlnaHQ/IEFuZCBgTkFQSV9HUk9fQ0IocCktXHUwMDNlY291bnRgIGFsc28gZ2V0cyBjaGVja2VkLiBgY291bnRgIGdldHMgaW5pdGlhbGl6ZWQgaW4gYGRldl9ncm9fcmVjZWl2ZWAuIFNvIGBjb3VudGAgc2hvdWxkIGJlIGluaXRpYWxpemVkIGFzIHdlbGwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuVGhlIHBhdGNoIGFsc28gYWZmZWN0cyB0aGUgYHRjcDRfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBhbmQgYHRjcDZfY2hlY2tfZnJhZ2xpc3RfZ3JvYCBmdW5jdGlvbnMsIHdoaWNoIGhhdmUgYCFza2JfaXNfZ3NvKHNrYilgIGFkZGVkIHRvIHRoZSBsb2dpYyBmb3IgYXNzaWduaW5nIGBpc19mbGlzdGAuIEFnYWluLCBqdXN0IGEgYm9vbGVhbiBsb2dpYyBjaGFuZ2UsIG5vdGhpbmcgdGhhdCBzaG91bGQgaW50cm9kdWNlIGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC5cblxuRGl2aW5nIGludG8gYHRjcF9ncm9fcmVjZWl2ZWAsIHRoZXJlIGlzIGEgY29tcGFyaXNvbiB3aXRoIGBmbHVzaCB8PSBOQVBJX0dST19DQihwKS1cdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVx1MDAzZWlzX2ZsaXN0O2AuIEJ1dCBgaXNfZmxpc3RgIGlzIGluaXRpYWxpemVkLCBzbyB0aGlzIHNob3VsZG4ndCBiZSBhbiBpc3N1ZS5cblxuVGhlbiBJIGNvbnNpZGVyZWQgYHNrYi1cdTAwM2VjYmAuIElzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgYW4gdW5pbml0aWFsaXplZCByZWFkIGZyb20gdGhlcmU/IEJ1dCBgZGV2X2dyb19yZWNlaXZlYCBzZXRzIGB6ZXJvZWRgIGluIGBjYmAgd2hpY2ggaW5jbHVkZXMgYGlzX2ZsaXN0YC4gQWxzbyBgZGV2X2dyb19yZWNlaXZlYCBpbml0aWFsaXplcyBhIGJ1bmNoIG9mIG90aGVyIGZpZWxkcyBhcyB3ZWxsIGxpa2UgYGZsdXNoYCwgYGNvdW50YCwgYGNzdW1gLCBldGMuIEFuZCB0aGUgb3RoZXIgZmllbGRzIGxpa2UgYGRhdGFfb2Zmc2V0YCwgYGZyYWcwYCwgZXRjLiBnZXQgaW5pdGlhbGl6ZWQgYnkgYHNrYl9ncm9fcmVzZXRfb2Zmc2V0YCBjYWxsZWQganVzdCBiZWZvcmUgR1JPLiBTbywgYGNiYCBpcyBmdWxseSBpbml0aWFsaXplZCBmb3IgR1JPLCB3aGljaCBpcyBnb29kLlxuXG5Pa2F5LCBzbyBjb3VsZCB0aGUgcGF0Y2ggZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBTS0IgcGF5bG9hZD8gVGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgZnJhZ2xpc3QgR1JPLCBzbyBpdCdzIGEgYnVnIGZpeC4gSWYgYGlzX2ZsaXN0YCBpcyBpbmNvcnJlY3RseSBzZXQsIHRoaXMgbWlnaHQgcmVzdWx0IGluIGluY29ycmVjdCBtZXJnZXMsIGFuZCB0aGF0ICpjb3VsZCogbGVhZCB0byBPT0IgYWNjZXNzZXMgb3IgVUFGLCB3aGljaCBLQVNBTiB3b3VsZCBkZXRlY3QuIEl0J3Mgbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCByZWFkcyBvciBwb3RlbnRpYWwgaW5mbyBsZWFrcy5cblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIExldCdzIGJyaWVmbHkgbG9vayBhdCB0aGUgY29udGV4dC4gVGhlIHBhdGNoIGlzIGFib3V0IGZpeGluZyBHUk8gZnJhZ2xpc3QgZmFsbGJhY2sgbG9naWMuIFRoaXMgaXMgZml4aW5nIGEgbG9naWMgYnVnLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggR1NPIHNrYnMgYW5kIGZyYWdsaXN0IEdSTy4gRXNzZW50aWFsbHksIGl0J3MgcHJldmVudGluZyBhIGNyYXNoIG9yIGluY29ycmVjdCBwcm9jZXNzaW5nIGR1ZSB0byBpbmNvcnJlY3QgcGFja2V0IGhhbmRsaW5nLiBTaW5jZSB0aGlzIGlzIGEgbG9naWMgYnVnLCBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGFzIGl0IG1heSBleHBvc2UgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5GaW5hbGx5LCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgYHNrYi1cdTAwM2VjYmAgaXMgbmV2ZXIgc2VudCB0byB1c2Vyc3BhY2UuIGBza2ItXHUwMDNlY2JgIGlzIGFuIGludGVybmFsIGNvbnRyb2wgYnVmZmVyIGZvciB0aGUga2VybmVsLCBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkLiBJdCdzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGR1cmluZyB0aGUgTkFQSSBHUk8gcHJvY2Vzc2luZyBwaGFzZS4gQW5kIHdoZW4gR1JPIGlzIGRvbmUsIHRoZSBgY2JgIGlzIGZyZWUgdG8gYmUgcmV1c2VkLiBUaGVyZSdzIG5vIGluZm8gbGVhayByaXNrIGhlcmUuXG5cblNvLCBpbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBsb2dpYyBjaGFuZ2VzIGFyZSBzYWZlLCBhbmQgZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIG1vcmUgcmVsYXRlZCB0byBpbmNvcnJlY3QgR1JPIG1lcmdpbmcsIHdoaWNoIEtBU0FOIHdvdWxkIGNhdGNoLiBUaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQncyBzdW1tYXJpemUgbXkgcmVhc29uaW5nOlxuMS4gIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZ1xuXG4iLCJJbnB1dFRva2VucyI6MTQ5MDIsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMDo0NjoxNi44NjYyMjUxMjlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhlIGBpc19mbGlzdGAgZmxhZyBpbiB0aGUgYE5BUElfR1JPX0NCYCBjb250cm9sIGJsb2NrIGR1cmluZyBUQ1AgR1JPIChHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCkgcHJvY2Vzc2luZy4gVGhlIGBpc19mbGlzdGAgZmxhZyBhbmQgb3RoZXIgYml0ZmllbGRzIGluIGBOQVBJX0dST19DQmAgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2dyb19yZWNlaXZlKClgICh2aWEgYCoodTMyICopXFx1MDAyNk5BUElfR1JPX0NCKHNrYiktXFx1MDAzZXplcm9lZCA9IDA7YCkgYmVmb3JlIGFueSBHUk8gcHJvdG9jb2wgaGFuZGxlcnMgYXJlIGludm9rZWQuIFRoZXJlZm9yZSwgdGhlIG5ldyBjb25kaXRpb25hbCBjaGVja3MgKGUuZy4sIGBOQVBJX0dST19DQihwKS1cXHUwMDNlaXNfZmxpc3QgIT0gTkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlaXNfZmxpc3RgKSBkbyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnVydGhlcm1vcmUsIHRoZSBgc2tiLVxcdTAwM2VjYmAgY29udHJvbCBidWZmZXIgaXMgdXNlZCBzdHJpY3RseSBmb3IgaW50ZXJuYWwga2VybmVsIHN0YXRlIHRyYWNraW5nIGR1cmluZyB0aGUgTkFQSSBwb2xsaW5nIHBoYXNlIGFuZCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlcnNwYWNlLCBlbGltaW5hdGluZyBhbnkgaW5mby1sZWFrIHJpc2tzLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIEdSTyBtZXJnaW5nIGxvZ2ljIGZvciBHU08gcGFja2V0czsgYW55IHJlZ3Jlc3Npb25zIGhlcmUgd291bGQgbGVhZCB0byBza2IgbGlzdCBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBhcmUgYWxyZWFkeSBjb21wcmVoZW5zaXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbnN1bXB0aW9uIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGUgYGlzX2ZsaXN0YCBmbGFnIGluIHRoZSBgTkFQSV9HUk9fQ0JgIGNvbnRyb2wgYmxvY2sgZHVyaW5nIFRDUCBHUk8gKEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkKSBwcm9jZXNzaW5nLiBUaGUgYGlzX2ZsaXN0YCBmbGFnIGFuZCBvdGhlciBiaXRmaWVsZHMgaW4gYE5BUElfR1JPX0NCYCBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfZ3JvX3JlY2VpdmUoKWAgKHZpYSBgKih1MzIgKilcXHUwMDI2TkFQSV9HUk9fQ0Ioc2tiKS1cXHUwMDNlemVyb2VkID0gMDtgKSBiZWZvcmUgYW55IEdSTyBwcm90b2NvbCBoYW5kbGVycyBhcmUgaW52b2tlZC4gVGhlcmVmb3JlLCB0aGUgbmV3IGNvbmRpdGlvbmFsIGNoZWNrcyAoZS5nLiwgYE5BUElfR1JPX0NCKHApLVxcdTAwM2Vpc19mbGlzdCAhPSBOQVBJX0dST19DQihza2IpLVxcdTAwM2Vpc19mbGlzdGApIGRvIG5vdCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGdXJ0aGVybW9yZSwgdGhlIGBza2ItXFx1MDAzZWNiYCBjb250cm9sIGJ1ZmZlciBpcyB1c2VkIHN0cmljdGx5IGZvciBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgdHJhY2tpbmcgZHVyaW5nIHRoZSBOQVBJIHBvbGxpbmcgcGhhc2UgYW5kIGlzIG5ldmVyIGNvcGllZCB0byB1c2Vyc3BhY2UsIGVsaW1pbmF0aW5nIGFueSBpbmZvLWxlYWsgcmlza3MuIFRoZSBwYXRjaCBhZGRyZXNzZXMgR1JPIG1lcmdpbmcgbG9naWMgZm9yIEdTTyBwYWNrZXRzOyBhbnkgcmVncmVzc2lvbnMgaGVyZSB3b3VsZCBsZWFkIHRvIHNrYiBsaXN0IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBjb3JydXB0aW9uIGFyZSBhbHJlYWR5IGNvbXByZWhlbnNpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uc3VtcHRpb24gb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzvrlh[1] Phase: Succeeded StartedAt: 2026-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 10:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 10:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2] Phase: Succeeded StartedAt: 2026-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 10:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:28 +0000 UTC FinishedAt: 2026-08-19 10:46:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3219736432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:38 +0000 UTC FinishedAt: 2026-08-19 11:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:38 +0000 UTC FinishedAt: 2026-08-19 11:06:00 +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:*2d74f904-3af6-4b72-8d1a-468566d7da25,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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3219736432/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": "c928767b-0ea8-4486-9b69-22ac9ffbca88", "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-workflowzvrlh/series-workflowzvrlh-build-action-1518490230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 10:46:38 +0000 UTC FinishedAt: 2026-08-19 11:05:50 +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:*2d74f904-3af6-4b72-8d1a-468566d7da25,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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3219736432/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": "c928767b-0ea8-4486-9b69-22ac9ffbca88", "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-workflowzvrlh/series-workflowzvrlh-build-action-1518490230/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:00 +0000 UTC FinishedAt: 2026-08-19 11:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:00 +0000 UTC FinishedAt: 2026-08-19 11:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:00 +0000 UTC FinishedAt: 2026-08-19 11:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:00 +0000 UTC FinishedAt: 2026-08-19 11:06:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3092537431/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:11 +0000 UTC FinishedAt: 2026-08-19 11:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:06:11 +0000 UTC FinishedAt: 2026-08-19 11:08:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c928767b-0ea8-4486-9b69-22ac9ffbca88,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-workflowzvrlh/series-workflowzvrlh-build-action-1518490230/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-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:08:36 +0000 UTC FinishedAt: 2026-08-19 11:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:08:36 +0000 UTC FinishedAt: 2026-08-19 11:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:08:36 +0000 UTC FinishedAt: 2026-08-19 11:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:08:36 +0000 UTC FinishedAt: 2026-08-19 11:24:54 +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:*2d74f904-3af6-4b72-8d1a-468566d7da25,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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3092537431/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": "39a6c245-3b6e-479a-89bb-c9d9b84e3b51", "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-workflowzvrlh/series-workflowzvrlh-build-action-2033637275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:08:36 +0000 UTC FinishedAt: 2026-08-19 11:24:44 +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:*2d74f904-3af6-4b72-8d1a-468566d7da25,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-workflowzvrlh/series-workflowzvrlh-convert-artifact-3092537431/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": "39a6c245-3b6e-479a-89bb-c9d9b84e3b51", "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-workflowzvrlh/series-workflowzvrlh-build-action-2033637275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:24:54 +0000 UTC FinishedAt: 2026-08-19 11:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:24:54 +0000 UTC FinishedAt: 2026-08-19 11:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:24:54 +0000 UTC FinishedAt: 2026-08-19 11:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:24:54 +0000 UTC FinishedAt: 2026-08-19 11:26:49 +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:*39a6c245-3b6e-479a-89bb-c9d9b84e3b51,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-workflowzvrlh/series-workflowzvrlh-build-action-2033637275/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-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +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":["tcp_gro_receive","tcp4_gro_receive"],"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:*c928767b-0ea8-4486-9b69-22ac9ffbca88,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39a6c245-3b6e-479a-89bb-c9d9b84e3b51,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-workflowzvrlh/series-workflowzvrlh-build-action-1518490230/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-workflowzvrlh/series-workflowzvrlh-build-action-2033637275/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 11:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 11:27:04 +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":["tcp_gro_receive","tcp4_gro_receive"],"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-workflowzvrlh/series-workflowzvrlh-convert-artifact-1580144912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 11:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:26:59 +0000 UTC FinishedAt: 2026-08-19 11:26:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:27:00 +0000 UTC FinishedAt: 2026-08-19 11:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:27:10 +0000 UTC FinishedAt: 2026-08-19 14:29:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvrlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"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":["tcp_gro_receive","tcp4_gro_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c8c69c9a6d817a1c198c08ea6eb82acfdcad55fa","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"9df92a6d-3016-48df-9471-d73e2965e760","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-08-19 11:27:10 +0000 UTC FinishedAt: 2026-08-19 14:29:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c928767b-0ea8-4486-9b69-22ac9ffbca88,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39a6c245-3b6e-479a-89bb-c9d9b84e3b51,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-workflowzvrlh/series-workflowzvrlh-build-action-1518490230/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-workflowzvrlh/series-workflowzvrlh-build-action-2033637275/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-workflowzvrlh/series-workflowzvrlh-convert-artifact-1580144912/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,}