Name: series-workflow6f2nt Phase: Succeeded StartedAt: 2026-09-05 03:41:20 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[0] Phase: Succeeded StartedAt: 2026-09-05 03:41:20 +0000 UTC FinishedAt: 2026-09-05 03:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 03:41:20 +0000 UTC FinishedAt: 2026-09-05 03:44:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "0f19268e-6409-4430-99a0-aaa2f331d043" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_ipv6_setsockopt", "ipv6_setsockopt", "udp6_addrform_queue_has_ipv6", "ip_recv_error", "udpv6_queue_rcv_one_skb" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjZjNjBmYmNiOGE1MDg5Y2E3NzFhMWE4YjIwMGIxZGEyMzRjZjVjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDM6NDM6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmhcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgZW51bSB7XG4gXHRVRFBfRkxBR1NfQUNDRVBUX0ZSQUdMSVNULFxuIFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcbiBcdFVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovXG4mIzQzO1x0VURQX0ZMQUdTX0FERFJGT1JNLCAgICAgIC8qIEJsb2NrIElQdjYgcmVjZWl2ZSBkdXJpbmcvYWZ0ZXIgQUREUkZPUk0gKi9cbiB9O1xuIFxuIC8qIHBlciBOVU1BIHN0cnVjdHVyZSBmb3IgbG9ja2xlc3MgcHJvZHVjZXIgdXNhZ2UuICovXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLmZjZDEwMmFlOGJlZGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtNTMzLDkgJiM0Mzs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4gXHRpbnQgY29waWVkO1xuIFxuIFx0ZXJyID0gLUVBR0FJTjtcbiYjNDM7YWdhaW46XG4gXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gXHRpZiAoIXNrYilcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHR9XG4gXG4gXHRjb3BpZWQgPSBza2ItXHUwMDNlbGVuO1xuIFx0aWYgKGNvcGllZCBcdTAwM2UgbGVuKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi5kMzA3Y2VhOWViYzVjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zNzMsNiAmIzQzOzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9IFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuJiM0MztcdFx0XHRmb3VuZCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7dW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbkBAIC01ODcsNiAmIzQzOzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4mIzQzO1x0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbiYjNDM7XHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiYjNDM7XHRcdFx0XHRpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHtcbiYjNDM7XHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbiYjNDM7XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0X19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spO1xuIFx0XHRcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtODIyLDYgJiM0Mzs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4mIzQzO1x0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19TT0NLRVQ7XG4mIzQzO1x0XHRnb3RvIGRyb3A7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbiBcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjZjNjBmYmNiOGE1MDg5Y2E3NzFhMWE4YjIwMGIxZGEyMzRjZjVjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDM6NDM6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCA5OTg5MDZlYzNiMzJhLi5mNzc1Zjc4ZDZiZjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIGVudW0gewogCVVEUF9GTEFHU19BQ0NFUFRfRlJBR0xJU1QsCiAJVURQX0ZMQUdTX0FDQ0VQVF9MNCwKIAlVRFBfRkxBR1NfRU5DQVBfRU5BQkxFRCwgLyogVGhpcyBzb2NrZXQgZW5hYmxlZCBlbmNhcCAqLwomIzQzOwlVRFBfRkxBR1NfQUREUkZPUk0sICAgICAgLyogQmxvY2sgSVB2NiByZWNlaXZlIGR1cmluZy9hZnRlciBBRERSRk9STSAqLwogfTsKIAogLyogcGVyIE5VTUEgc3RydWN0dXJlIGZvciBsb2NrbGVzcyBwcm9kdWNlciB1c2FnZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLmZjZDEwMmFlOGJlZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtNTMzLDkgJiM0Mzs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pCiAJaW50IGNvcGllZDsKIAogCWVyciA9IC1FQUdBSU47CiYjNDM7YWdhaW46CiAJc2tiID0gc29ja19kZXF1ZXVlX2Vycl9za2Ioc2spOwogCWlmICghc2tiKQogCQlnb3RvIG91dDsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza190eXBlID09IFNPQ0tfREdSQU0gJmFtcDsmYW1wOwomIzQzOwkJICAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOwomIzQzOwkJICAgICB1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJZ290byBhZ2FpbjsKJiM0MzsJfQogCiAJY29waWVkID0gc2tiLSZndDtsZW47CiAJaWYgKGNvcGllZCAmZ3Q7IGxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IGI0Yzk3NzQzNGMyZTAuLmQzMDdjZWE5ZWJjNWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTM3Myw2ICYjNDM7MzczLDMzIEBAIHN0YXRpYyBpbnQgaXB2Nl9zZXRfb3B0X2hkcihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9ICZhbXA7dWRwX3NrKHNrKS0mZ3Q7cmVhZGVyX3F1ZXVlOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3JlYWRlcl9xdWV1ZS0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzOwlza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikgewomIzQzOwkJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKJiM0MzsJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJc2tiX3F1ZXVlX3dhbGsoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKSB7CiYjNDM7CQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZWFkZXJfcXVldWUtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwogaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNTg3LDYgJiM0Mzs2MTQsMTYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlpZiAoc2stJmd0O3NrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7CiYjNDM7CQkJCXVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7CiYjNDM7CQkJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwkJCQlpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHsKJiM0MzsJCQkJCXVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTsKJiM0MzsJCQkJCXJldHYgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsKIAkJCV9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTsKIAkJCV9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtODIyLDYgJiM0Mzs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiYjNDM7CWlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHsKJiM0MzsJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDsKJiM0MzsJCWdvdG8gZHJvcDsKJiM0MzsJfQomIzQzOwogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTsKIAkJZ290byBkcm9wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHJlbGF0ZWQgdG8gVURQIGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHNhZmV0eSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4gVGhpcyBzZWVtcyB0byBmYWxsIHVuZGVyIHRoZSAmIzM0O2Jlbmlnbi9kZWZlbnNpdmUgc2VjdXJpdHkvcXVhbGl0eSBhc3N1cmFuY2UmIzM0OyBjYXRlZ29yeSwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgYWJvdXQgaGFyZGVuaW5nIHRoZSBrZXJuZWwsIG5vdCBpbnRyb2R1Y2luZyBhIGNvbXBsZXRlbHkgbmV3IGZlYXR1cmUuIFRoZSBwcmltYXJ5IHRhc2sgaXMgdHJpYWdlOiB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGhvdy4gVGhhdCBtZWFucyBhdWRpdGluZyB0aGUgY29kZSwgZGVjaWRpbmcgaWYgaXQgc2hvdWxkIGJlIGZ1enplZCwgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGUgbmVjZXNzYXJ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEZyb20gdGhlIGRpZmYsIEkgc2VlIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKCjEuICBBIG5ldyBgVURQX0ZMQUdTX0FERFJGT1JNYCBmbGFnIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3VkcC5oYC4gT2theSwgYSBuZXcgYml0IGZsYWcuIE1ha2VzIHNlbnNlIGluIGNvbnRleHQuCjIuICBJbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHRoZSBgaXBfcmVjdl9lcnJvcmAgZnVuY3Rpb24gaXMgdXBkYXRlZC4gSXQgbG9va3MgbGlrZSBpdOKAmXMgZHJvcHBpbmcgSVB2NiBza2JzIGlmIGBVRFBfRkxBR1NfQUREUkZPUk1gIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIElQdjQtc3BlY2lmaWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBkcm9wcGluZyBJUHY2IHBhY2tldHMgd2hlbiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcywgd2hldGhlciBpdCYjMzk7cyBkcm9wcGluZyB0aGVtIGZvciB0aGUgcmlnaHQgcmVhc29ucywgb3IgaWYgd2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCjMuICBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBub3cgaGFzIGEgaGVscGVyIGZ1bmN0aW9uIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YC4gVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgdGhlIGBJUFY2X0FERFJGT1JNYCBvcHRpb24uIFdoZW4gYSBVRFAgc29ja2V0JiMzOTtzIGBBRERSRk9STWAgYml0IGlzIHNldCwgaXQgY2hlY2tzIGlmIHRoZSBxdWV1ZSBoYXMgSVB2NiBza2JzLiBJZiBpdCBkb2VzLCBpdCByZXR1cm5zIGAtRUJVU1lgIGFuZCBjbGVhcnMgdGhlIGJpdC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIG9yIHN0YXRlIGlzc3VlLCBhbmQgYHN5bmNocm9uaXplX25ldCgpYCBpcyBjYWxsZWQgc28gdGhlIGlzc3VlIGlzIGRlYWx0IHdpdGguIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guIFRoaXMgaXMgd2hlcmUgbW9zdCBvZiB0aGUgcmVsZXZhbnQgZnV6emluZyBtaWdodCBuZWVkIHRvIGJlIGNvbmNlbnRyYXRlZCB0byBmaW5kIGJ1Z3MgaW4gdGhlIGVkZ2UgY2FzZS4KNC4gIEZpbmFsbHksIGBuZXQvaXB2Ni91ZHAuY2AsIGluIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAsIGlmIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQgb24gdGhlIHNvY2tldCwgdGhlIHBhY2tldCBpcyBkcm9wcGVkLiBUaGlzIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgbG9naWMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhwZXJ0aXNlIGFuZCB0b29scy4gSSYjMzk7bSBnb2luZyB0byB1c2UgbXkgZ3JlcCBza2lsbHMgYW5kIGNvZGUtcmVhZGluZyBrbm93bGVkZ2UgdG8gaW5zcGVjdCB0aGVzZSBmaWxlcywgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gd2l0aCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgQUREUkZPUk1gIGZsYWcgY29tcGxldGVseSwgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgaXQsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBkcm9wcGluZyBwYWNrZXRzIG9yIHJldHVybmluZyBgLUVCVVNZYC4gSSB3aWxsIGFsc28gY2hlY2sgd2hhdCBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgYXJlIHVzaW5nIHRoaXMgbmV3IGZsYWcgb3IgdGhlIGZ1bmN0aW9ucy92YXJpYWJsZXMgdGhhdCBhcmUgYmVpbmcgYWRkZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGFwcHJvcHJpYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCBpZiBhbnkgYEZvY3VzU3ltYm9sc2AgbmVlZCB0byBiZSBzZXQsIGFuZCB3aGF0IG15IGZpbmFsIHJlY29tbWVuZGF0aW9uIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9BRERSRk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMxLVxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MzI6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMzLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTU0Nz1pbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy01NjktXHRkZWZhdWx0OlxubmV0L2lwdjYvYWZfaW5ldDYuYzo1NzA6XHRcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYy01NzEtXHRcdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTYzOC1cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjM5Olx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDU9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1My1cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjU0Olx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NS1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTQwMz1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc3LVx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NTc4Olx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc5LVx0ICovXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU4NC1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1ODU6XHRjYXNlIElQVjZfQUREUkZPUk06XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTg2LVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTExNT1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTEyNy1cdHN3aXRjaCAob3B0bmFtZSkge1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMjg6XHRjYXNlIElQVjZfQUREUkZPUk06XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTEyOS1cdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFNvY2tldCBHbHVlKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgbXkgZXhwZXJ0aXNlIGFuZCBpbnN0aXR1dGlvbmFsIGtub3dsZWRnZSB0byBuYXZpZ2F0ZSB0byB0aGUgdmljaW5pdHkgb2YgbGluZSA1ODUgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgZW1wbG95IHRoZSB0cnVzdHkgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBpbW1lZGlhdGVseSBhY2Nlc3MgYW5kIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGxvZ2ljIEkgYW0gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXG4gNTgxOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDU4MjpcdFxuIDU4MzpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNTg0Olx0XG4gNTg1Olx0XHRjYXNlIElQVjZfQUREUkZPUk06XG4gNTg2Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDU4NzpcdFx0XHRcdGdvdG8gZV9pbnZhbDtcbiA1ODg6XHRcdFx0aWYgKHZhbCA9PSBQRl9JTkVUKSB7XG4gNTg5Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19SQVcpXG4gNTkwOlx0XHRcdFx0XHRicmVhaztcbiA1OTE6XHRcbiA1OTI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbiA1OTM6XHRcdFx0XHRcdGlmICh1ZHBfc2soc2spLVx1MDAzZXBlbmRpbmcgPT0gQUZfSU5FVDYpIHtcbiA1OTQ6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1OTU6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTk2Olx0XHRcdFx0XHR9XG4gNTk3Olx0XHRcdFx0fSBlbHNlIGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU5ODpcdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QgIT0gXHUwMDI2dGNwdjZfcHJvdCkge1xuIDU5OTpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDYwMDpcdFx0XHRcdFx0XHRicmVhaztcbiA2MDE6XHRcdFx0XHRcdH1cbiA2MDI6XHRcdFx0XHR9IGVsc2Uge1xuIDYwMzpcdFx0XHRcdFx0YnJlYWs7XG4gNjA0Olx0XHRcdFx0fVxuIDYwNTpcdFxuIDYwNjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiA2MDc6XHRcdFx0XHRcdHJldHYgPSAtRU5PVENPTk47XG4gNjA4Olx0XHRcdFx0XHRicmVhaztcbiA2MDk6XHRcdFx0XHR9XG4gNjEwOlx0XG4gNjExOlx0XHRcdFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxuIDYxMjpcdFx0XHRcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSkge1xuIDYxMzpcdFx0XHRcdFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xuIDYxNDpcdFx0XHRcdFx0YnJlYWs7XG4gNjE1Olx0XHRcdFx0fVxuIDYxNjpcdFxuIDYxNzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuIDYxODpcdFx0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbiA2MTk6XHRcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDYyMDpcdFx0XHRcdFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XG4gNjIxOlx0XHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbiA2MjI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MjM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjI0Olx0XHRcdFx0XHR9XG4gNjI1Olx0XHRcdFx0fVxuIDYyNjpcdFxuIDYyNzpcdFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiA2Mjg6XHRcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gNjI5Olx0XG4gNjMwOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4gNjMxOlx0XHRcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gNjMyOlx0XG4gNjMzOlx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDYzNDpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnRjcF9wcm90LCAxKTtcbiA2MzU6XHRcbiA2MzY6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9zdHJlYW1fb3BzICovXG4gNjM3Olx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3Byb3QsIFx1MDAyNnRjcF9wcm90KTtcbiA2Mzg6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHRjcF8oZ2V0fHNldClzb2Nrb3B0KCkgKi9cbiA2Mzk6XHRcdFx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2FmX29wcywgXHUwMDI2aXB2NF9zcGVjaWZpYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIElQdjYgVURQIEFkZHJlc3MgRm9ybSBIYW5kbGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIFVEUCBhZGRyZXNzIGZvcm0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZSBhbmQgZm9jdXMgb24gbGluZXMgNjQwIHRvIDcwMC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyB0aGF0IGRlZmluZXMgaG93IFVEUCBzb2NrZXQgYWRkcmVzc2luZyBpcyBtYW5hZ2VkIHdpdGggSVB2Ni4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgYWRkcmVzcyBmb3JtYXRzIGFuZCBob3cgdGhlIHRyYW5zaXRpb24gaXMgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyB3aGF0IEkgZXhwZWN0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgbWFrZSBzdXJlIGl0IGlzIHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xuIDY0MTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xuIDY0MjpcdFx0XHRcdFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVx1MDAzZWljc2tfcG10dV9jb29raWUpO1xuIDY0MzpcdFx0XHRcdH0gZWxzZSB7XG4gNjQ0Olx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDY0NTpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnVkcF9wcm90LCAxKTtcbiA2NDY6XHRcbiA2NDc6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cbiA2NDg6XHRcdFx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCwgXHUwMDI2dWRwX3Byb3QpO1xuIDY0OTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X2RncmFtX29wcyk7XG4gNjUwOlx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XG4gNjUxOlx0XHRcdFx0fVxuIDY1MjpcdFxuIDY1MzpcdFx0XHRcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxuIDY1NDpcdFx0XHRcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcbiA2NTU6XHRcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG4gNjU2Olx0XHRcdFx0ICovXG4gNjU3Olx0XHRcdFx0bnAtXHUwMDNlcnhvcHQuYWxsID0gMDtcbiA2NTg6XHRcbiA2NTk6XHRcdFx0XHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xuIDY2MDpcdFxuIDY2MTpcdFx0XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIDY2MjpcdFx0XHRcdHJldHYgPSAwO1xuIDY2MzpcdFx0XHRcdGJyZWFrO1xuIDY2NDpcdFx0XHR9XG4gNjY1Olx0XHRcdGdvdG8gZV9pbnZhbDtcbiA2NjY6XHRcbiA2Njc6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNjY4Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpIHx8XG4gNjY5Olx0XHRcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSlcbiA2NzA6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNjcxOlx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gdmFsYm9vbDtcbiA2NzI6XHRcdFx0cmV0diA9IDA7XG4gNjczOlx0XHRcdGJyZWFrO1xuIDY3NDpcdFxuIDY3NTpcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDY3NjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA2Nzc6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNjc4Olx0XHRcdG5wLVx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcbiA2Nzk6XHRcdFx0cmV0diA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaXBfc29ja2dsdWUuY2AqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JraW5nIGlzc3VlLCBhbmQgaXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgcHJvYmxlbSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyBzb2NrZXRzIGFyZSBnbHVlZCB0b2dldGhlciwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgSVAgbGF5ZXIuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDUzMyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBzb21lIGtleSBzb2NrZXQgb3BlcmF0aW9ucyBvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIGFtIGludmVzdGlnYXRpbmcgYW4gSVAtcmVsYXRlZCBwcm9ibGVtIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdFx0c3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2VycjtcbiA1MjY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTI3Olx0XHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaW4sIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gNTI4Olx0XHRzdHJ1Y3Qge1xuIDUyOTpcdFx0XHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgZWU7XG4gNTMwOlx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pblx0IG9mZmVuZGVyO1xuIDUzMTpcdFx0fSBlcnJoZHI7XG4gNTMyOlx0XHRpbnQgZXJyO1xuIDUzMzpcdFx0aW50IGNvcGllZDtcbiA1MzQ6XHRcbiA1MzU6XHRcdGVyciA9IC1FQUdBSU47XG4gNTM2Olx0YWdhaW46XG4gNTM3Olx0XHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gNTM4Olx0XHRpZiAoIXNrYilcbiA1Mzk6XHRcdFx0Z290byBvdXQ7XG4gNTQwOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFx1MDAyNlx1MDAyNlxuIDU0MTpcdFx0XHQgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuIDU0MjpcdFx0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuIDU0MzpcdFx0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcbiA1NDQ6XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA1NDU6XHRcdFx0Z290byBhZ2FpbjtcbiA1NDY6XHRcdH1cbiA1NDc6XHRcbiA1NDg6XHRcdGNvcGllZCA9IHNrYi1cdTAwM2VsZW47XG4gNTQ5Olx0XHRpZiAoY29waWVkIFx1MDAzZSBsZW4pIHtcbiA1NTA6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfVFJVTkM7XG4gNTUxOlx0XHRcdGNvcGllZCA9IGxlbjtcbiA1NTI6XHRcdH1cbiA1NTM6XHRcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIDAsIG1zZywgY29waWVkKTtcbiA1NTQ6XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gNTU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDU1NjpcdFx0XHRyZXR1cm4gZXJyO1xuIDU1NzpcdFx0fVxuIDU1ODpcdFx0c29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpO1xuIDU1OTpcdFxuIDU2MDpcdFx0c2VyciA9IFNLQl9FWFRfRVJSKHNrYik7XG4gNTYxOlx0XG4gNTYyOlx0XHRpZiAoc2luIFx1MDAyNlx1MDAyNiBpcHY0X2RhdGFncmFtX3N1cHBvcnRfYWRkcihzZXJyKSkge1xuIDU2MzpcdFx0XHRzaW4tXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4gNTY0Olx0XHRcdHNpbi1cdTAwM2VzaW5fYWRkci5zX2FkZHIgPSAqKF9fYmUzMiAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVURQdjYgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgbmV0L2lwdjYvdWRwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODIyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mLCBsZXQmIzM5O3Mgc2F5LCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgb3IgbWF5YmUgc29tZSBmcmFnbWVudGF0aW9uIGlzc3VlcyB3aXRoaW4gdGhlIFVEUHY2IGltcGxlbWVudGF0aW9uLiBJIHJlY2FsbCBzb21lIHN1YnRsZXRpZXMgdGhlcmUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZWl0aGVyIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJUHY2IGhlYWRlciBvciBwZXJoYXBzIHNvbWUgb2YgdGhlIG9mZmxvYWQgZmVhdHVyZXMuIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBwbGFjZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMgYXJlIGluIHBsYWNlIGFuZCB0aGF0IHRoZSBwYWNrZXQgZ2V0cyByb3V0ZWQgY29ycmVjdGx5IGFmdGVyIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgYnV0IEkmIzM5O2xsIHNlZSB3aGVyZSB0aGlzIHRha2VzIG1lLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcbiA4MTY6XHRcdHJldHVybiAwO1xuIDgxNzpcdH1cbiA4MTg6XHRcbiA4MTk6XHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4MjA6XHR7XG4gODIxOlx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuIDgyMjpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gODIzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gODI0Olx0XG4gODI1Olx0XHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4gODI2Olx0XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbiA4Mjc6XHRcdFx0Z290byBkcm9wO1xuIDgyODpcdFx0fVxuIDgyOTpcdFxuIDgzMDpcdFx0aWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gODMxOlx0XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xuIDgzMjpcdFx0XHRnb3RvIGRyb3A7XG4gODMzOlx0XHR9XG4gODM0Olx0XHRuZl9yZXNldF9jdChza2IpO1xuIDgzNTpcdFxuIDgzNjpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2dWRwdjZfZW5jYXBfbmVlZGVkX2tleSkgXHUwMDI2XHUwMDI2XG4gODM3Olx0XHQgICAgUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3R5cGUpKSB7XG4gODM4Olx0XHRcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiA4Mzk6XHRcbiA4NDA6XHRcdFx0LypcbiA4NDE6XHRcdFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cbiA4NDI6XHRcdFx0ICogdGhlIHNvY2tldCYjMzk7cyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XG4gODQzOlx0XHRcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxuIDg0NDpcdFx0XHQgKiB1cC1cdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XG4gODQ1Olx0XHRcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcbiA4NDY6XHRcdFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxuIDg0NzpcdFx0XHQgKiBcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cbiA4NDg6XHRcdFx0ICogXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXG4gODQ5Olx0XHRcdCAqL1xuIDg1MDpcdFxuIDg1MTpcdFx0XHQvKiBpZiB3ZSYjMzk7cmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xuIDg1MjpcdFx0XHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfcmN2KTtcbiA4NTM6XHRcdFx0aWYgKGVuY2FwX3Jjdikge1xuIDg1NDpcdFx0XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBJUHY2IHRvIElQdjQgQWRkcmVzcyBDb252ZXJzaW9uIG9uIFVEUCBTb2NrZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JrIHNvY2tldCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBjb252ZXJzaW9uIG9mIElQdjYgdG8gSVB2NCBhZGRyZXNzIGZvcm1hdHMgb24gVURQIHNvY2tldHMgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5PyBUaGUgYWltIGlzIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgZXJyb25lb3VzbHkgcHJvY2Vzc2VkIG9yLCB3b3JzZSwgZGVxdWV1ZWQgYXMgSVB2NCBlcnJvcnMgYWZ0ZXIgYSBVRFAgc29ja2V0IGlzIHN3aXRjaGVkIHRvIElQdjQgdmlhIGBJUFY2X0FERFJGT1JNYC4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIHNldHMgYW4gYEFERFJGT1JNYCBmbGFnLCBjYWxscyBgc3luY2hyb25pemVfbmV0KClgLCBhbmQgdGhlbiBjaGVja3MgaWYgSVB2NiBwYWNrZXRzIGFyZSBzdGlsbCBsaW5nZXJpbmcgYXJvdW5kIGluIHRoZSByZWNlaXZlIHF1ZXVlcyAoYHJlYWRlcl9xdWV1ZWAgb3IgYHNrX3JlY2VpdmVfcXVldWVgKS4gSW4gYG5ldC9pcHY2L3VkcC5jYCwgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBwcm9hY3RpdmVseSBkcm9wcyBJUHY2IHBhY2tldHMgaWYgdGhlIGBBRERSRk9STWAgZmxhZyBpcyBzZXQuIFRoZW4sIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgYGlwX3JlY3ZfZXJyb3JgIGZ1cnRoZXIgZW5mb3JjZXMgdGhpcyBieSBkcm9wcGluZyBJUHY2IHNrYnMgaWYgdGhlIGBBRERSRk9STWAgZmxhZyBpcyBzZXQgb24gYSBVRFAgc29ja2V0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBhcmVhIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgWUVTISBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbnZvbHZlZCBpbiBBRl9JTkVUNi9BRl9JTkVUIHNvY2tldCBvcHRpb25zLCB0aGUgVURQIHNvY2tldCByZWNlaXZlIHBhdGgsIGFuZCBlcnJvciBxdWV1ZSBoYW5kbGluZy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHM6IGBzZXRzb2Nrb3B0KC4uLiwgSVBQUk9UT19JUFY2LCBJUFY2X0FERFJGT1JNLCAuLi4pYCwgYHJlY3Ztc2coLi4uLCBNU0dfRVJSUVVFVUUpYCwgYW5kIGJhc2ljIFVEUCBwYWNrZXQgcmVjZXB0aW9uLiBUaGlzIGlzIHRleHRib29rIGZ1enppbmcgdGVycml0b3J5IQoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcgc3RyYXRlZ3ksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIE9idmlvdXNseSwgSVB2NiBuZWVkcyB0byBiZSBlbmFibGVkLCBzbyB3ZSBuZWVkIGBDT05GSUdfSVBWNmAgKG9yIGp1c3QgYElQVjZgIHdpdGhvdXQgdGhlIHByZWZpeCkuIGBDT05GSUdfSU5FVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBmb3IgYW55IG5ldHdvcmtpbmctcmVsYXRlZCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gYElQVjZgIG9yIHRoZXNlIHNwZWNpZmljIGZpbGVzIChgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBgdWRwLmNgKSwgYnV0IHRoZSBjb3JlIGVsZW1lbnRzIGxvb2sgcHJvbWlzaW5nIGZvciBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc29ja2dsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTktXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgSVB2NiBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciBgaXB2Nl9zb2NrZ2x1ZS5vYCBhbmQgYHVkcC5vYC4gV2hlcmUgd291bGQgSSBmaW5kIHRoZSBtb3N0IHJlbGlhYmxlIGJ1aWxkIGluZm9ybWF0aW9uPyBUaGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyB0aGUgcGxhY2UgdG8gYmUsIG9mIGNvdXJzZS4gU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGRlZmluZXMgaG93IHRoZXNlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGxpbmtlZCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBJIG5lZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBidWlsZCBjb250ZXh0IGZvciB0aGVzZSBjcnVjaWFsIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc29ja2dsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgSVBWNmAgKGFuZCBhbHNvIGBJTkVUYCwgb2YgY291cnNlKS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGVyZSB3ZSYjMzk7dmUgbWFkZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgaW52b2x2ZWQuIE15IGluaXRpYWwgc2NhbiBoYXMgdHVybmVkIHVwIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGVpdGhlciBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB3aGVyZSB0aGVzZSBhcHBlYXIgaW4gdGhlIGtlcm5lbDoKCiogICBXZSBoYXZlIGBkb19pcHY2X3NldHNvY2tvcHRgLCBvciBwb3RlbnRpYWxseSBpdHMgdmFyaWFudHMgYGlwdjZfc2V0c29ja29wdGAgb3IgYW5vdGhlciBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobmVlZCB0byBjbGFyaWZ5IHRoZSBkaWZmZXJlbmNlcyBhbmQgdGhlaXIgY2FsbHMpLgoqICAgVGhlbiB0aGVyZSBpcyBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAsIHdoaWNoIGlzIHN0YXRpYywgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgdXNlZCBhbmQgaWYgaXQgZ2V0cyBpbmxpbmVkLCBvciBpZiBpdCBoYXMgc29tZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMuCiogICBBbHNvLCBgaXBfcmVjdl9lcnJvcmAgc2hvdWxkIGJlIGltcG9ydGFudCB0byBzdHVkeS4KKiAgIFRoZW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYC4KKiAgIEFuZCBmaW5hbGx5LCBgdWRwdjZfcmVjdm1zZ2Agb3IgYWdhaW4gYGlwdjZfc2V0c29ja29wdGAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggb2YgdGhlc2UgYXJlIGFjdHVhbGx5ICpkZWZpbmVkKiBub24tc3RhdGljYWxseSwgb3IgYXQgbGVhc3QgaG93IG1hbnkgZGlzdGluY3Qgc3RhdGljIHN5bWJvbHMgd2UgaGF2ZS4gSXQgbG9va3MgbGlrZToKCiogICBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBub24tc3RhdGljIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBHb29kLgoqICAgYGlwX3JlY3ZfZXJyb3JgIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJbnRlcmVzdGluZywgdGhpcyBsb29rcyBsaWtlIGFuIElQdjQgZnVuY3Rpb24sIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkLgoqICAgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBpcyBzdGF0aWMgaW4gYG5ldC9pcHY2L3VkcC5jYCwgc28gd2UgaGF2ZSB0byB3YXRjaCBob3cgdGhhdCBnZXRzIHVzZWQuCiogICBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAgaXMgc3RhdGljIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBPa2F5LgoqICAgQW5kIGZpbmFsbHksIGBpcHY2X3NldHNvY2tvcHRgLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgaW4gYGlwdjZfc29ja2dsdWUuY2AgYW5kIGNhbGxzIGBkb19pcHY2X3NldHNvY2tvcHRgLiBUaGF0IG1ha2VzIHNlbnNlLgoKU28gbmV4dCwgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGF0LCBwYXJ0aWN1bGFybHksIGlmIHRoZSBmdW5jdGlvbnMgbWFrZSB0aGVpciB3YXkgaW50byBzb21lIG1vZHVsZSBleHBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1zdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwMzppbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDQtXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy05OTAtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6OTkxOmludCBpcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTk5Mi1cdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDEtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwMjpcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDAzLSNpZmRlZiBDT05GSUdfTkVURklMVEVSXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTAtfVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NldHNvY2tvcHQpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIENhbGxlcnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L3VkcC5jYC4gSXQmIzM5O3MgY3J1Y2lhbCwgYW5kIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5ICpjYWxsKiB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgdGhlIHR5cGVzIG9mIHNpdHVhdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgY3JpdGljYWwgcGF0aC4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIElQdjYgVURQIHN0YWNrLiBUaW1lIHRvIGNoZWNrIHRoZSBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTc4NT1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtODE4LVxubmV0L2lwdjYvdWRwLmM6ODE5OnN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvdWRwLmMtODIwLXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz04OTU9c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy05MDAtXHRpZiAobGlrZWx5KCF1ZHBfdW5leHBlY3RlZF9nc28oc2ssIHNrYikpKVxubmV0L2lwdjYvdWRwLmM6OTAxOlx0XHRyZXR1cm4gdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG5uZXQvaXB2Ni91ZHAuYy05MDItXG4tLVxubmV0L2lwdjYvdWRwLmMtOTA4LVx0XHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XG5uZXQvaXB2Ni91ZHAuYzo5MDk6XHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xubmV0L2lwdjYvdWRwLmMtOTEwLVx0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgVURQdjYgcmVjZXB0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgY3JvcHBpbmcgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgcmVjZWl2ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgX191ZHA2X2xpYl9yY3ZgLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIGFuZCBgdWRwdjZfcmN2YCB3aXRoaW4gdGhlIGBuZXQvaXB2Ni91ZHAuY2AgZmlsZS4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWJ1Z2dpbmcgVURQdjYgcmVjZXB0aW9uIGlzc3VlcywgYW5kIHRoZXkmIzM5O3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCB0cmFjaW5nIHBhY2tldCBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIHF1ZXVlaW5nIHByb2JsZW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5IHdoZXJlIEkgY2FuIGdldCBzb21lIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcHY2X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTEwNTU9c3RhdGljIGludCB1ZHA2X2NzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aClcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMDg2LVxubmV0L2lwdjYvdWRwLmM6MTA4NzpJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni91ZHAuYy0xMDg4LXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTU3PWludCBfX2luaXQgdWRwdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NjEtXHRuZXRfaG90ZGF0YS51ZHB2Nl9wcm90b2NvbCA9IChzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wpIHtcbm5ldC9pcHY2L3VkcC5jOjE5NjI6XHRcdC5oYW5kbGVyICAgICA9IHVkcHY2X3Jjdixcbm5ldC9pcHY2L3VkcC5jLTE5NjMtXHRcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2VycixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDgKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgSVB2NiB0byBJUHY0IEFkZHJlc3MgRmFtaWx5IENvbnZlcnNpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHMuIEkgc2VlOiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLCBgaXBfcmVjdl9lcnJvcmAsIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAsIGFuZCBgaXB2Nl9zZXRzb2Nrb3B0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgY2FuIHRlbGwgdGhlc2UgYXJlbiYjMzk7dCBnZW5lcmljIGhvdHNwb3RzIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBUaGV5IGFyZSBhbGwgcHJldHR5IHNwZWNpZmljLiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBhbmQgYGlwdjZfc2V0c29ja29wdGAgYXJlIGZvciBJUHY2IHNvY2tldCBvcHRpb25zIG9ubHkuIGBpcF9yZWN2X2Vycm9yYCBpcyBhYm91dCB0aGUgZXJyb3IgcXVldWUgZm9yIElQdjQsIG5vdCB0aGUgaG90IHBhdGguIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgc3BlY2lmaWNhbGx5IGFib3V0IHJlY2VpdmluZyBVRFB2NiBwYWNrZXRzLCBhbmQgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgIGlzIHRoYXQgbmV3IGhlbHBlciB3ZSBhZGRlZCBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgY29uZmlncywgd2UgaGF2ZSBgSVBWNmAgYW5kIGBJTkVUYCwgc28gdGhhdCYjMzk7cyBnb29kLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBVRFAgaGFuZGxpbmcgdGhhdCBvY2N1ciB3aGVuIHdlIGNvbnZlcnQgYSBzb2NrZXQgZnJvbSBJUHY2IHRvIElQdjQgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzb2NrZXQgb3B0aW9uLiBXZSYjMzk7cmUgYWRkaW5nIHRoZSBgVURQX0ZMQUdTX0FERFJGT1JNYCBiaXQgdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyByZWNlaXZlZCB2aWEgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgYW5kIHdlJiMzOTtyZSBkcm9wcGluZyBsZWZ0b3ZlciBJUHY2IHBhY2tldHMgdGhhdCBlbmQgdXAgaW4gdGhlIGVycm9yIHF1ZXVlIHVzaW5nIGBpcF9yZWN2X2Vycm9yYC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCB3ZSYjMzk7cmUgYWRkaW5nIGNoZWNrcyB0byBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aXRoIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCB0byBtYWtlIHN1cmUgd2UgcmVqZWN0IHRoZSBjb252ZXJzaW9uIGlmIHRoZXJlIGFyZSBhbnkgSVB2NiBwYWNrZXRzIHN0aWxsIHdhaXRpbmcgaW4gdGhlIFVEUCByZWFkZXIgb3IgcmVjZWl2ZSBxdWV1ZXMuIFNvLCBlc3NlbnRpYWxseSwgd2UmIzM5O3JlIG1vZGlmeWluZyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgc3VjaCBhcyBgc2V0c29ja29wdGAgYW5kIGByZWN2bXNnYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2JiMzNDssCiAgICAmIzM0O2lwX3JlY3ZfZXJyb3ImIzM0OywKICAgICYjMzQ7dWRwdjZfcXVldWVfcmN2X29uZV9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgdG8gaGFuZGxlIFVEUCBJUHY2LXRvLUlQdjQgY29udmVyc2lvbiB2aWEgdGhlIElQVjZfQUREUkZPUk0gc29ja2V0IG9wdGlvbi4gSXQgaW50cm9kdWNlcyBVRFBfRkxBR1NfQUREUkZPUk0gdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKSBhbmQgZHJvcHMgdW5leHBlY3RlZCBJUHY2IHNrYnMgZnJvbSB0aGUgZXJyb3IgcXVldWUgKGlwX3JlY3ZfZXJyb3IpLiBJdCBhbHNvIGFkZHMgcXVldWUgaW5zcGVjdGlvbiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NikgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0IGJlZm9yZSBhbGxvd2luZyB0aGUgYWRkcmVzcyBmb3JtIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiBVRFAgYW5kIHNvY2tldCBvcHRpb25zLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmM2MGZiY2I4YTUwODljYTc3MWExYThiMjAwYjFkYTIzNGNmNWM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oCmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91ZHAuaApAQCAtNjcsNiAmIzQzOzY3LDcgQEAgZW51bSB7CiAJVURQX0ZMQUdTX0FDQ0VQVF9GUkFHTElTVCwKIAlVRFBfRkxBR1NfQUNDRVBUX0w0LAogCVVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovCiYjNDM7CVVEUF9GTEFHU19BRERSRk9STSwgICAgICAvKiBCbG9jayBJUHY2IHJlY2VpdmUgZHVyaW5nL2FmdGVyIEFERFJGT1JNICovCiB9OwogCiAvKiBwZXIgTlVNQSBzdHJ1Y3R1cmUgZm9yIGxvY2tsZXNzIHByb2R1Y2VyIHVzYWdlLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC01MzMsOSAmIzQzOzUzMywxNyBAQCBpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbikKIAlpbnQgY29waWVkOwogCiAJZXJyID0gLUVBR0FJTjsKJiM0MzthZ2FpbjoKIAlza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7CiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwomIzQzOwlpZiAodW5saWtlbHkoc2stJmd0O3NrX3R5cGUgPT0gU09DS19ER1JBTSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHsKJiM0MzsJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwl9CiAKIAljb3BpZWQgPSBza2ItJmd0O2xlbjsKIAlpZiAoY29waWVkICZndDsgbGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMzczLDYgJiM0MzszNzMsMzMgQEAgc3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcmVhZGVyX3F1ZXVlID0gJmFtcDt1ZHBfc2soc2spLSZndDtyZWFkZXJfcXVldWU7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cmVhZGVyX3F1ZXVlLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7CiYjNDM7CQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlza2JfcXVldWVfd2FsaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLCBza2IpIHsKJiM0MzsJCWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQkJZm91bmQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3JlYWRlcl9xdWV1ZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CkBAIC01ODcsNiAmIzQzOzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCWlmIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKJiM0MzsJCQkJdWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTsKJiM0MzsJCQkJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CQkJCWlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkgewomIzQzOwkJCQkJdWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spOwomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwogCQkJX19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spOwogCQkJX19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDkzNDc4ZDFhZDU3NjkuLmNjZDhhZTkyZjUyYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jCkBAIC04MjIsNiAmIzQzOzgyMiwxMSBAQCBzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spKSkgewomIzQzOwkJZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZOwogCQlnb3RvIGRyb3A7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIEFkZHJlc3MgRm9ybSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHRodXMgbmVjZXNzaXRhdGluZyBLTVNBTiBhbmFseXNpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGFjdHVhbGx5IGRvZXMuCgpJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGZvciBVRFAgc29ja2V0cyBhbmQgaG93IHdlIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIElQdjYgYW5kIElQdjQuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd246CgoxLiAgQSBuZXcgZmxhZywgYFVEUF9GTEFHU19BRERSRk9STWAsIGlzIGludHJvZHVjZWQgaW4gYGluY2x1ZGUvbGludXgvdWRwLmhgLgoyLiAgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgIG5vdyBoYXMgc29tZSBjb25kaXRpb25hbCBsb2dpYyBpbiBgaXBfcmVjdl9lcnJvcigpYC4gSWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFVEUCBkYXRhZ3JhbSBzb2NrZXQsIHRoZSBVRFAgYEFERFJGT1JNYCBmbGFnIGlzIHNldCwgYW5kIHRoZSBwYWNrZXQgaXMgSVB2NiwgdGhlIGNvZGUgY29uc3VtZXMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgbG9vcHMsIGZldGNoaW5nIGFub3RoZXIgYHNrYmAuIEVmZmVjdGl2ZWx5LCB0aGlzIGRpc2NhcmRzIHRoZSBJUHY2IHBhY2tldC4KMy4gIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KClgLCB3aGljaCBjaGVja3MgdGhlIHJlY2VpdmUgcXVldWVzIG9mIHRoZSBzb2NrZXQgZm9yIGFueSBsaW5nZXJpbmcgSVB2NiBwYWNrZXRzIHdoZW4gdGhlIGBJUFY2X0FERFJGT1JNYCBvcHRpb24gaXMgdXNlZC4gVGhlIGZ1bmN0aW9uIGFjcXVpcmVzIGxvY2tzIHRvIHNhZmVseSB0cmF2ZXJzZSB0aGUgcXVldWVzLiBJbiB0aGUgYGRvX2lwdjZfc2V0c29ja29wdCgpYCBmdW5jdGlvbiwgd2hlbiBgSVBWNl9BRERSRk9STWAgaXMgc2V0IG9uIGEgVURQIHNvY2tldCwgdGhlIGBBRERSRk9STWAgYml0IGlzIHNldCwgYHN5bmNocm9uaXplX25ldCgpYCBpcyBjYWxsZWQgKGxpa2VseSB0byBlbnN1cmUgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyksIGFuZCB0aGVuIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KClgIGlzIGNoZWNrZWQuIElmIGFueSBJUHY2IHBhY2tldHMgYXJlIHN0aWxsIHByZXNlbnQsIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBjbGVhcmVkLCBhbmQgYW4gYC1FQlVTWWAgZXJyb3IgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdG8gcHJldmVudCBhIHR5cGUgY29uZnVzaW9uIHNpdHVhdGlvbi4KNC4gIGBuZXQvaXB2Ni91ZHAuY2Agbm93IGluY2x1ZGVzIGEgY2hlY2sgaW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKClgLiBJZiB0aGUgYEFERFJGT1JNYCBiaXQgaXMgc2V0LCBhbnkgYXJyaXZpbmcgSVB2NiBwYWNrZXRzIGFyZSBkcm9wcGVkIHdpdGggdGhlIHJlYXNvbiBgU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVGAuCgpTbywgaXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBvciB0eXBlIGNvbmZ1c2lvbiB3aGVuIGNvbnZlcnRpbmcgYW4gSVB2NiBVRFAgc29ja2V0IHRvIGFuIElQdjQgb25lIHVzaW5nIGBJUFY2X0FERFJGT1JNYC4gSVB2NiBwYWNrZXRzIG1pZ2h0IGJlIGluLWZsaWdodCBvciBxdWV1ZWQgd2hlbiB0aGUgY29udmVyc2lvbiBoYXBwZW5zLCBhbmQgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGZsdXNoIHRoZW0uIElmIG5vdCBmbHVzaGVkLCB0aGUgSVB2NCBjb2RlIGNvdWxkIG1pc2hhbmRsZSBJUHY2IHBhY2tldHMgYW5kIHZpY2UgdmVyc2EuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYXR0ZW1wdGluZyB0byBhdm9pZCBhIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSwgb3Igb3RoZXIgaXNzdWVzIHJlbGF0ZWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpJIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gV2hhdCB3YXMgdGhlICpwcm9ibGVtKiB0aGF0IG1vdGl2YXRlZCB0aGlzPyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB1c2VmdWwgaGVyZS4gQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgbmVlZCBmb3IgdGhlIHBhdGNoLCBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseSBhdCBgaXBfcmVjdl9lcnJvcmAgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBJUHY2IHNrYnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgbG9vayBhdCBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIFRoaXMgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpcF9yZWN2X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfc29ja2dsdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTQ5NT1zdGF0aWMgYm9vbCBpcHY0X2RhdGFncmFtX3N1cHBvcnRfY21zZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjItICovXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjUyMzppbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBhcyBhbiBleHBlcnQgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpZWQgbGluZXMgb2YgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgOgoKKipEZWVwIERpdmUgaW50byBJUCBTb2NrZXQgR2x1ZSBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYSBzcGVjaWZpYyBjaHVuayBvZiB0aGUgSVAgc29ja2V0IGdsdWUgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVxdWVzdCBpcyB0byBmb2N1cyBvbiBsaW5lcyA1MjAgdG8gNjAwIG9mIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBhIGtleSBhcmVhIGZvciBzb2NrZXQtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIGxheWVyLiYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHNvY2tldCBvcGVyYXRpb25zLCBsaWtlIGBzZW5kbXNnYCBvciBgcmVjdm1zZ2AsIGFyZSBoYW5kbGVkIGF0IHRoZSBJUCBsZXZlbC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGNvbnN0cnVjdGluZyBJUCBoZWFkZXJzLCBwb3NzaWJseSBoYW5kbGluZyBJUCBvcHRpb25zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggZnJhZ21lbnRhdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBzZWdtZW50IHdvcmtpbmcgY2xvc2VseSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhhdCBpcyBrZXkgd2hlbiBuYXZpZ2F0aW5nIHRoaXMgY29kZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBwb3RlbnRpYWwgZGlzY3Vzc2lvbnMgb246CgoqICAgKipIZWFkZXIgY29uc3RydWN0aW9uOioqIEhvdyBhcmUgSVAgaGVhZGVycyAoc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MsIFRUTCwgcHJvdG9jb2wsIGV0Yy4pIGJlaW5nIGJ1aWx0IGJhc2VkIG9uIHRoZSBzb2NrZXQmIzM5O3MgY29uZmlndXJhdGlvbiBhbmQgdGhlIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgZnJvbSBzb2NrZXQgY2FsbHMgaW50byBjYWxscyB0aGF0IGNyZWF0ZSB0aGUgaGVhZGVyIGRhdGEuCiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgSVAgaGVhZGVyIGNoZWNrc3VtIGJlaW5nIGNhbGN1bGF0ZWQ/IElzIGl0IGRvbmUgaW5saW5lIG9yIGhhbmRsZWQgc2VwYXJhdGVseT8gRWZmaWNpZW5jeSB3aWxsIGJlIGtleSBoZXJlLgoqICAgKipGcmFnbWVudGF0aW9uOioqIE1pZ2h0IHRoaXMgc2VjdGlvbiBoYW5kbGUgb3IgaW50ZXJmYWNlIHdpdGggSVAgZnJhZ21lbnRhdGlvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGBpcF9mcmFnYCBkYXRhIHN0cnVjdHVyZXMgb3IgZnJhZ21lbnRhdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucy4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSYjMzk7bGwgYmUgY3VyaW91cyBhYm91dCBlcnJvciBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGhvdyBJUC1sZXZlbCBlcnJvcnMgYXJlIHJlcG9ydGVkIGJhY2sgdG8gdGhlIHNvY2tldCBsYXllciwgYW5kIGhvdyB0aGluZ3MgbGlrZSBJQ01QIGVycm9ycyBhcmUgaGFuZGxlZC4KKiAgICoqU2VjdXJpdHk6KiogVGhpcyBiZWluZyBhIGNyaXRpY2FsIHBhdGgsIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgaXBfYnVpbGRfaGVhZGVyKClgLCBgaXBfc2VuZF9jaGVjaygpYCwgYGlwX2ZyYWdtZW50KClgLCBvciBhbnl0aGluZyBpbnZvbHZpbmcgYHNrYmAgKHNvY2tldCBidWZmZXIpIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwcmV0dHkgZGVuc2UsIGJ1dCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUsIHRvIHNlZSB3aGF0IHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciB3YXMuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdC8qXG4gNTIxOlx0ICpcdEhhbmRsZSBNU0dfRVJSUVVFVUVcbiA1MjI6XHQgKi9cbiA1MjM6XHRpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbiA1MjQ6XHR7XG4gNTI1Olx0XHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xuIDUyNjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1Mjc6XHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiA1Mjg6XHRcdHN0cnVjdCB7XG4gNTI5Olx0XHRcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciBlZTtcbiA1MzA6XHRcdFx0c3RydWN0IHNvY2thZGRyX2luXHQgb2ZmZW5kZXI7XG4gNTMxOlx0XHR9IGVycmhkcjtcbiA1MzI6XHRcdGludCBlcnI7XG4gNTMzOlx0XHRpbnQgY29waWVkO1xuIDUzNDpcdFxuIDUzNTpcdFx0ZXJyID0gLUVBR0FJTjtcbiA1MzY6XHRhZ2FpbjpcbiA1Mzc6XHRcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcbiA1Mzg6XHRcdGlmICghc2tiKVxuIDUzOTpcdFx0XHRnb3RvIG91dDtcbiA1NDA6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2XG4gNTQxOlx0XHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4gNTQyOlx0XHRcdCAgICAgdWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykgXHUwMDI2XHUwMDI2XG4gNTQzOlx0XHRcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xuIDU0NDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDU0NTpcdFx0XHRnb3RvIGFnYWluO1xuIDU0NjpcdFx0fVxuIDU0NzpcdFxuIDU0ODpcdFx0Y29waWVkID0gc2tiLVx1MDAzZWxlbjtcbiA1NDk6XHRcdGlmIChjb3BpZWQgXHUwMDNlIGxlbikge1xuIDU1MDpcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19UUlVOQztcbiA1NTE6XHRcdFx0Y29waWVkID0gbGVuO1xuIDU1MjpcdFx0fVxuIDU1MzpcdFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgMCwgbXNnLCBjb3BpZWQpO1xuIDU1NDpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiA1NTU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNTU2Olx0XHRcdHJldHVybiBlcnI7XG4gNTU3Olx0XHR9XG4gNTU4Olx0XHRzb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7XG4gNTU5Olx0XG4gNTYwOlx0XHRzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTtcbiA1NjE6XHRcbiA1NjI6XHRcdGlmIChzaW4gXHUwMDI2XHUwMDI2IGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9hZGRyKHNlcnIpKSB7XG4gNTYzOlx0XHRcdHNpbi1cdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiA1NjQ6XHRcdFx0c2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9ICooX19iZTMyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7XG4gNTY1Olx0XHRcdFx0XHRcdFx0ICAgc2Vyci1cdTAwM2VhZGRyX29mZnNldCk7XG4gNTY2Olx0XHRcdHNpbi1cdTAwM2VzaW5fcG9ydCA9IHNlcnItXHUwMDNlcG9ydDtcbiA1Njc6XHRcdFx0bWVtc2V0KFx1MDAyNnNpbi1cdTAwM2VzaW5femVybywgMCwgc2l6ZW9mKHNpbi1cdTAwM2VzaW5femVybykpO1xuIDU2ODpcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2YoKnNpbik7XG4gNTY5Olx0XHR9XG4gNTcwOlx0XG4gNTcxOlx0XHRtZW1jcHkoXHUwMDI2ZXJyaGRyLmVlLCBcdTAwMjZzZXJyLVx1MDAzZWVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7XG4gNTcyOlx0XHRzaW4gPSBcdTAwMjZlcnJoZHIub2ZmZW5kZXI7XG4gNTczOlx0XHRtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpO1xuIDU3NDpcdFxuIDU3NTpcdFx0aWYgKGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9jbXNnKHNrLCBza2IsIHNlcnItXHUwMDNlZWUuZWVfb3JpZ2luKSkge1xuIDU3NjpcdFx0XHRzaW4tXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4gNTc3Olx0XHRcdHNpbi1cdTAwM2VzaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiA1Nzg6XHRcdFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0X3NrKHNrKSkpXG4gNTc5Olx0XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbiA1ODA6XHRcdH1cbiA1ODE6XHRcbiA1ODI6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWRVJSLCBzaXplb2YoZXJyaGRyKSwgXHUwMDI2ZXJyaGRyKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIE5vdyB3ZSBjb3VsZCB0cnkgdG8gZHVtcCBvZmZlbmRlZCBwYWNrZXQgb3B0aW9ucyAqL1xuIDU4NTpcdFxuIDU4NjpcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfRVJSUVVFVUU7XG4gNTg3Olx0XHRlcnIgPSBjb3BpZWQ7XG4gNTg4Olx0XG4gNTg5Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDU5MDpcdG91dDpcbiA1OTE6XHRcdHJldHVybiBlcnI7XG4gNTkyOlx0fVxuIDU5MzpcdFxuIDU5NDpcdHZvaWQgX19pcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHU4IG9sZF90b3MgPSBpbmV0X3NrKHNrKS1cdTAwM2V0b3M7XG4gNTk3Olx0XG4gNTk4Olx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuIDU5OTpcdFx0XHR2YWwgXHUwMDI2PSB+SU5FVF9FQ05fTUFTSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQuIExldCYjMzk7cyBzZWUuLi5JIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgc2V0c29ja29wdGAgYW5kIElQdjYuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uLi4uIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1ODAgdG8gNjUwIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRob3NlIElQdjYtc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIGluIHRoZXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgYFNJT0NgIGNvbW1hbmQgY29kZXMgZ2V0IHByb2Nlc3NlZCwgb3B0aW9uIHZhbGlkYXRpb24gb2NjdXJzLCBhbmQgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgc3RhY2sgY2FsbHMgYXJlIGRpc3BhdGNoZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYXNzb2NpYXRlZCBJUHY2IHNvY2tldCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxuIDU4MTpcdFx0XHRnb3RvIHVubG9jaztcbiA1ODI6XHRcbiA1ODM6XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDU4NDpcdFxuIDU4NTpcdFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxuIDU4NjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1ODc6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTg4Olx0XHRcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xuIDU4OTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxuIDU5MDpcdFx0XHRcdFx0YnJlYWs7XG4gNTkxOlx0XG4gNTkyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4gNTkzOlx0XHRcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XG4gNTk0Olx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNTk1Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDU5NjpcdFx0XHRcdFx0fVxuIDU5NzpcdFx0XHRcdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiA1OTg6XHRcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90ICE9IFx1MDAyNnRjcHY2X3Byb3QpIHtcbiA1OTk6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MDA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjAxOlx0XHRcdFx0XHR9XG4gNjAyOlx0XHRcdFx0fSBlbHNlIHtcbiA2MDM6XHRcdFx0XHRcdGJyZWFrO1xuIDYwNDpcdFx0XHRcdH1cbiA2MDU6XHRcbiA2MDY6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XG4gNjA3Olx0XHRcdFx0XHRyZXR2ID0gLUVOT1RDT05OO1xuIDYwODpcdFx0XHRcdFx0YnJlYWs7XG4gNjA5Olx0XHRcdFx0fVxuIDYxMDpcdFxuIDYxMTpcdFx0XHRcdGlmIChpcHY2X29ubHlfc29jayhzaykgfHxcbiA2MTI6XHRcdFx0XHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcikpIHtcbiA2MTM6XHRcdFx0XHRcdHJldHYgPSAtRUFERFJOT1RBVkFJTDtcbiA2MTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDYxNTpcdFx0XHRcdH1cbiA2MTY6XHRcbiA2MTc6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbiA2MTg6XHRcdFx0XHRcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XG4gNjE5Olx0XHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiA2MjA6XHRcdFx0XHRcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xuIDYyMTpcdFx0XHRcdFx0XHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XG4gNjIyOlx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNjIzOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDYyNDpcdFx0XHRcdFx0fVxuIDYyNTpcdFx0XHRcdH1cbiA2MjY6XHRcbiA2Mjc6XHRcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gNjI4Olx0XHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIDYyOTpcdFxuIDYzMDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDYzMTpcdFx0XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDYzMjpcdFxuIDYzMzpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVx1MDAzZXNrX3Byb3QsIC0xKTtcbiA2MzQ6XHRcdFx0XHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcdTAwMjZ0Y3BfcHJvdCwgMSk7XG4gNjM1Olx0XG4gNjM2Olx0XHRcdFx0XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCkgaW4gaW5ldDZfc3RyZWFtX29wcyAqL1xuIDYzNzpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19wcm90LCBcdTAwMjZ0Y3BfcHJvdCk7XG4gNjM4Olx0XHRcdFx0XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiB0Y3BfKGdldHxzZXQpc29ja29wdCgpICovXG4gNjM5Olx0XHRcdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19hZl9vcHMsIFx1MDAyNmlwdjRfc3BlY2lmaWMpO1xuIDY0MDpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xuIDY0MTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xuIDY0MjpcdFx0XHRcdFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVx1MDAzZWljc2tfcG10dV9jb29raWUpO1xuIDY0MzpcdFx0XHRcdH0gZWxzZSB7XG4gNjQ0Olx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDY0NTpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnVkcF9wcm90LCAxKTtcbiA2NDY6XHRcbiA2NDc6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cbiA2NDg6XHRcdFx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCwgXHUwMDI2dWRwX3Byb3QpO1xuIDY0OTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X2RncmFtX29wcyk7XG4gNjUwOlx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XG4gNjUxOlx0XHRcdFx0fVxuIDY1MjpcdFxuIDY1MzpcdFx0XHRcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxuIDY1NDpcdFx0XHRcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcbiA2NTU6XHRcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG4gNjU2Olx0XHRcdFx0ICovXG4gNjU3Olx0XHRcdFx0bnAtXHUwMDNlcnhvcHQuYWxsID0gMDtcbiA2NTg6XHRcbiA2NTk6XHRcdFx0XHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg2CgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDEwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEFkZHJlc3NpbmcgVURQIFNvY2tldCBQcm90b2NvbCBDb252ZXJzaW9uIFJpc2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdpdGhpbiB0aGlzIHBhdGNoLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiBgdWRwLmhgLCBgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBhbmQgYHVkcC5jYC4KCkZpcnN0LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYElQVjZfQUREUkZPUk1gIGZ1bmN0aW9uYWxpdHkgb24gVURQIHNvY2tldHMsIGVzc2VudGlhbGx5IHN3aXRjaGluZyBhbiBJUHY2IHNvY2tldCB0byBJUHY0LiBUaGUgY2hhbmdlcyBhcHBlYXIgZGVzaWduZWQgdG8gcHJldmVudCBhbmQgZml4IGEgdHlwZSBjb25mdXNpb24gdnVsbmVyYWJpbGl0eSBhbmQgcmFjZSBjb25kaXRpb25zLCBhIGdvb2QgdGhpbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gd2hldGhlciB0aGlzIHBhdGNoICppbnRyb2R1Y2VzKiBvciAqZXhwb3NlcyogYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGFzcGVjdHM6CgoxLiAgKipEYXRhIHNlbnQgdG8gdXNlcnNwYWNlOioqIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBuZXcgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLiBUaGUgb2xkIGBpcF9yZWN2X2Vycm9yKClgIGlzc3VlIHRoYXQgaW50ZXJwcmV0ZWQgSVB2NiBhcyBJUHY0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJlYWRzIGJleW9uZCBidWZmZXJzIG9yIGludmFsaWQgaGVhZGVycywgaXMgYWRkcmVzc2VkLiBUaGUgcGF0Y2ggbm93IHByb3Blcmx5IGRyb3BzIHRoZSBJUHY2IHNrYi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkmIzM5O20gbWFraW5nIHN1cmUgdGhhdCB0aGUgcGF0Y2ggbG9naWMgZG9lc24mIzM5O3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBWYXJpYWJsZXMgbGlrZSBgdXAtJmd0O3VkcF9mbGFnc2AsIGBza2ItJmd0O3Byb3RvY29sYCBhbmQgYGZvdW5kYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExvb2tzIGdvb2QuCjMuICAqKkRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBsYXRlciBhY2Nlc3NlZC4KNC4gICoqQm91bmRzIGNoZWNrczoqKiBJJiMzOTttIGNoZWNraW5nIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGxvb3NlbiBhbnkgZXhpc3RpbmcgYm91bmRzIGNoZWNrcywgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm8gY2hhbmdlIHRoZXJlLgoKU28sIGluIG15IGFzc2Vzc21lbnQsIHRoZSBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBzZWVpbmcgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW52b2x2aW5nIHR5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoYElQVjZfQUREUkZPUk1gKSBvbiBVRFAgc29ja2V0cy4gQ29uY3VycmVudCBvciBxdWV1ZWQgSVB2NiBwYWNrZXRzIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIHdpdGggb2xkIGhhbmRsZXJzLCBidXQgbm93IHdlJiMzOTtyZSBzeW5jaHJvbml6aW5nLCBjaGVja2luZyBxdWV1ZXMsIGFuZCBkcm9wcGluZyB0aGUgcm9ndWUgcGFja2V0cy4KClNpbmNlIHRoaXMgcGF0Y2ggKmZpeGVzKiBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aHJvdWdoIGJldHRlciBjb250cm9sLWZsb3csIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWdnaW5nIHRvb2xzKSBzaG91bGQgc3VmZmljZSBmb3IgdGVzdGluZy4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTiBoZXJlLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIHR5cGUgY29uZnVzaW9uIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoaW5ncyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KCk15IGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOYDogZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjI2Ljc2NzI5NjMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjU4NDcyMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVxcdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNi43NjczMDE5MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODk1NjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2YzYwZmJjYjhhNTA4OWNhNzcxYTFhOGIyMDBiMWRhMjM0Y2Y1YzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaFxcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmhcXG5AQCAtNjcsNiArNjcsNyBAQCBlbnVtIHtcXG4gXFx0VURQX0ZMQUdTX0FDQ0VQVF9GUkFHTElTVCxcXG4gXFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcXG4gXFx0VURQX0ZMQUdTX0VOQ0FQX0VOQUJMRUQsIC8qIFRoaXMgc29ja2V0IGVuYWJsZWQgZW5jYXAgKi9cXG4rXFx0VURQX0ZMQUdTX0FERFJGT1JNLCAgICAgIC8qIEJsb2NrIElQdjYgcmVjZWl2ZSBkdXJpbmcvYWZ0ZXIgQUREUkZPUk0gKi9cXG4gfTtcXG4gXFxuIC8qIHBlciBOVU1BIHN0cnVjdHVyZSBmb3IgbG9ja2xlc3MgcHJvZHVjZXIgdXNhZ2UuICovXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbkBAIC01MzMsOSArNTMzLDE3IEBAIGludCBpcF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbiBcXHRpbnQgY29waWVkO1xcbiBcXG4gXFx0ZXJyID0gLUVBR0FJTjtcXG4rYWdhaW46XFxuIFxcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcXG4gXFx0aWYgKCFza2IpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcXG4rXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0fVxcbiBcXG4gXFx0Y29waWVkID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdGlmIChjb3BpZWQgXFx1MDAzZSBsZW4pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5AQCAtMzczLDYgKzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcmVhZGVyX3F1ZXVlID0gXFx1MDAyNnVkcF9zayhzayktXFx1MDAzZXJlYWRlcl9xdWV1ZTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyZWFkZXJfcXVldWUtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikge1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpIHtcXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cmVhZGVyX3F1ZXVlLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiB7XFxuQEAgLTU4Nyw2ICs2MTQsMTYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuK1xcdFxcdFxcdFxcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XFxuK1xcdFxcdFxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbitcXHRcXHRcXHRcXHRpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0dWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcXG5pbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtODIyLDYgKzgyMiwxMSBAQCBzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHtcXG4rXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbitcXHRcXHRnb3RvIGRyb3A7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiBcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcXG4gXFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNy4xODY5NzMxNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyNzc0NDE0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0byBoYW5kbGUgVURQIElQdjYtdG8tSVB2NCBjb252ZXJzaW9uIHZpYSB0aGUgSVBWNl9BRERSRk9STSBzb2NrZXQgb3B0aW9uLiBJdCBpbnRyb2R1Y2VzIFVEUF9GTEFHU19BRERSRk9STSB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHF1ZXVlZCAodWRwdjZfcXVldWVfcmN2X29uZV9za2IpIGFuZCBkcm9wcyB1bmV4cGVjdGVkIElQdjYgc2ticyBmcm9tIHRoZSBlcnJvciBxdWV1ZSAoaXBfcmVjdl9lcnJvcikuIEl0IGFsc28gYWRkcyBxdWV1ZSBpbnNwZWN0aW9uICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KSBpbiBkb19pcHY2X3NldHNvY2tvcHQgYmVmb3JlIGFsbG93aW5nIHRoZSBhZGRyZXNzIGZvcm0gY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIFVEUCBhbmQgc29ja2V0IG9wdGlvbnMsIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmM2MGZiY2I4YTUwODljYTc3MWExYThiMjAwYjFkYTIzNGNmNWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5pbmRleCA5OTg5MDZlYzNiMzJhLi5mNzc1Zjc4ZDZiZjQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC91ZHAuaFxuQEAgLTY3LDYgKzY3LDcgQEAgZW51bSB7XG4gXHRVRFBfRkxBR1NfQUNDRVBUX0ZSQUdMSVNULFxuIFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcbiBcdFVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovXG4rXHRVRFBfRkxBR1NfQUREUkZPUk0sICAgICAgLyogQmxvY2sgSVB2NiByZWNlaXZlIGR1cmluZy9hZnRlciBBRERSRk9STSAqL1xuIH07XG4gXG4gLyogcGVyIE5VTUEgc3RydWN0dXJlIGZvciBsb2NrbGVzcyBwcm9kdWNlciB1c2FnZS4gKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC01MzMsOSArNTMzLDE3IEBAIGludCBpcF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuIFx0aW50IGNvcGllZDtcbiBcbiBcdGVyciA9IC1FQUdBSU47XG4rYWdhaW46XG4gXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gXHRpZiAoIXNrYilcbiBcdFx0Z290byBvdXQ7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0Z290byBhZ2FpbjtcbitcdH1cbiBcbiBcdGNvcGllZCA9IHNrYi1cdTAwM2VsZW47XG4gXHRpZiAoY29waWVkIFx1MDAzZSBsZW4pIHtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLmQzMDdjZWE5ZWJjNWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTM3Myw2ICszNzMsMzMgQEAgc3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyZWFkZXJfcXVldWUgPSBcdTAwMjZ1ZHBfc2soc2spLVx1MDAzZXJlYWRlcl9xdWV1ZTtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikge1xuK1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4rXHRza2JfcXVldWVfd2FsayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpIHtcbitcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZyZWFkZXJfcXVldWUtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNTg3LDYgKzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbitcdFx0XHRcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbitcdFx0XHRcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xuK1x0XHRcdFx0XHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLmNjZDhhZTkyZjUyYmEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC04MjIsNiArODIyLDExIEBAIHN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXG4rXHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4rXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbitcdFx0Z290byBkcm9wO1xuK1x0fVxuK1xuIFx0aWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xuIFx0XHRnb3RvIGRyb3A7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNy4xODY5NzYxODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc2MTgwOTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBVRFAgYW5kIElQdjYsIHNwZWNpZmljYWxseSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgc2FmZXR5LCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuIFRoaXMgc2VlbXMgdG8gZmFsbCB1bmRlciB0aGUgXCJiZW5pZ24vZGVmZW5zaXZlIHNlY3VyaXR5L3F1YWxpdHkgYXNzdXJhbmNlXCIgY2F0ZWdvcnksIHdoaWNoIGlzIGdvb2QuIEl0J3MgYWJvdXQgaGFyZGVuaW5nIHRoZSBrZXJuZWwsIG5vdCBpbnRyb2R1Y2luZyBhIGNvbXBsZXRlbHkgbmV3IGZlYXR1cmUuIFRoZSBwcmltYXJ5IHRhc2sgaXMgdHJpYWdlOiB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGhvdy4gVGhhdCBtZWFucyBhdWRpdGluZyB0aGUgY29kZSwgZGVjaWRpbmcgaWYgaXQgc2hvdWxkIGJlIGZ1enplZCwgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGUgbmVjZXNzYXJ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBGcm9tIHRoZSBkaWZmLCBJIHNlZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6XG5cbjEuICBBIG5ldyBgVURQX0ZMQUdTX0FERFJGT1JNYCBmbGFnIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3VkcC5oYC4gT2theSwgYSBuZXcgYml0IGZsYWcuIE1ha2VzIHNlbnNlIGluIGNvbnRleHQuXG4yLiAgSW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCB0aGUgYGlwX3JlY3ZfZXJyb3JgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXTigJlzIGRyb3BwaW5nIElQdjYgc2ticyBpZiBgVURQX0ZMQUdTX0FERFJGT1JNYCBpcyBzZXQgb24gYSBVRFAgc29ja2V0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBJUHY0LXNwZWNpZmljIGZ1bmN0aW9uLCBidXQgaXQncyBkcm9wcGluZyBJUHY2IHBhY2tldHMgd2hlbiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcywgd2hldGhlciBpdCdzIGRyb3BwaW5nIHRoZW0gZm9yIHRoZSByaWdodCByZWFzb25zLCBvciBpZiB3ZSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuMy4gIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIG5vdyBoYXMgYSBoZWxwZXIgZnVuY3Rpb24gYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLiBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciB0aGUgYElQVjZfQUREUkZPUk1gIG9wdGlvbi4gV2hlbiBhIFVEUCBzb2NrZXQncyBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGl0IGNoZWNrcyBpZiB0aGUgcXVldWUgaGFzIElQdjYgc2ticy4gSWYgaXQgZG9lcywgaXQgcmV0dXJucyBgLUVCVVNZYCBhbmQgY2xlYXJzIHRoZSBiaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBvciBzdGF0ZSBpc3N1ZSwgYW5kIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgY2FsbGVkIHNvIHRoZSBpc3N1ZSBpcyBkZWFsdCB3aXRoLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBUaGlzIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIHJlbGV2YW50IGZ1enppbmcgbWlnaHQgbmVlZCB0byBiZSBjb25jZW50cmF0ZWQgdG8gZmluZCBidWdzIGluIHRoZSBlZGdlIGNhc2UuXG40LiAgRmluYWxseSwgYG5ldC9pcHY2L3VkcC5jYCwgaW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgaWYgdGhlIGBBRERSRk9STWAgYml0IGlzIHNldCBvbiB0aGUgc29ja2V0LCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBsb2dpYy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhwZXJ0aXNlIGFuZCB0b29scy4gSSdtIGdvaW5nIHRvIHVzZSBteSBncmVwIHNraWxscyBhbmQgY29kZS1yZWFkaW5nIGtub3dsZWRnZSB0byBpbnNwZWN0IHRoZXNlIGZpbGVzLCBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBBRERSRk9STWAgZmxhZyBjb21wbGV0ZWx5LCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciBpdCwgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGRyb3BwaW5nIHBhY2tldHMgb3IgcmV0dXJuaW5nIGAtRUJVU1lgLiBJIHdpbGwgYWxzbyBjaGVjayB3aGF0IG90aGVyIHBsYWNlcyBpbiB0aGUgY29kZSBhcmUgdXNpbmcgdGhpcyBuZXcgZmxhZyBvciB0aGUgZnVuY3Rpb25zL3ZhcmlhYmxlcyB0aGF0IGFyZSBiZWluZyBhZGRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQncyBhcHByb3ByaWF0ZSBmb3Igc3l6a2FsbGVyLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgaWYgYW55IGBGb2N1c1N5bWJvbHNgIG5lZWQgdG8gYmUgc2V0LCBhbmQgd2hhdCBteSBmaW5hbCByZWNvbW1lbmRhdGlvbiB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6MzkuOTQ4Nzg4NzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzk4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQVjZfQUREUkZPUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FmX2luZXQ2LmM9NDI2PWludCBpbmV0Nl9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQzMS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQzMjpcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzMtXFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTU0Nz1pbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU2OS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NTcwOlxcdFxcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU3MS1cXHRcXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjMxPWludCBpbmV0Nl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTYzOC1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjYzOTpcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDAtXFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTMtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTQ6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjU1LVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTQwMz1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NzctXFx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU3ODpcXHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc5LVxcdCAqL1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU4NC1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NTg1OlxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTg2LVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMTE1PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMjctXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMjg6XFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMTI5LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDAuMDAyNTk1MDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNzQxMTczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTb2NrZXQgR2x1ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHVzZSBteSBleHBlcnRpc2UgYW5kIGluc3RpdHV0aW9uYWwga25vd2xlZGdlIHRvIG5hdmlnYXRlIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDU4NSB3aXRoaW4gdGhhdCBmaWxlLiBJJ2xsIGVtcGxveSB0aGUgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gaW1tZWRpYXRlbHkgYWNjZXNzIGFuZCBleGFtaW5lIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBsb2dpYyBJIGFtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDIuNDIwMDA4NjEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXFxuIDU4MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDU4NDpcXHRcXG4gNTg1OlxcdFxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG4gNTg2OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNTg3OlxcdFxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4gNTg4OlxcdFxcdFxcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xcbiA1ODk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxcbiA1OTA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG4gNTkzOlxcdFxcdFxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA1OTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5NjpcXHRcXHRcXHRcXHRcXHR9XFxuIDU5NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbiA1OTg6XFx0XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90ICE9IFxcdTAwMjZ0Y3B2Nl9wcm90KSB7XFxuIDU5OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA2MDA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwMTpcXHRcXHRcXHRcXHRcXHR9XFxuIDYwMjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA2MDM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwNDpcXHRcXHRcXHRcXHR9XFxuIDYwNTpcXHRcXG4gNjA2OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XFxuIDYwNzpcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVOT1RDT05OO1xcbiA2MDg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwOTpcXHRcXHRcXHRcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdFxcdFxcdGlmIChpcHY2X29ubHlfc29jayhzaykgfHxcXG4gNjEyOlxcdFxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHIpKSB7XFxuIDYxMzpcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVBRERSTk9UQVZBSUw7XFxuIDYxNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNjE1OlxcdFxcdFxcdFxcdH1cXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbiA2MTg6XFx0XFx0XFx0XFx0XFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcXG4gNjE5OlxcdFxcdFxcdFxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiA2MjA6XFx0XFx0XFx0XFx0XFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XFxuIDYyMTpcXHRcXHRcXHRcXHRcXHRcXHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XFxuIDYyMjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA2MjM6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYyNDpcXHRcXHRcXHRcXHRcXHR9XFxuIDYyNTpcXHRcXHRcXHRcXHR9XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG4gNjI4OlxcdFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbiA2MzE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXFx1MDAzZXNrX3Byb3QsIC0xKTtcXG4gNjM0OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcXHUwMDI2dGNwX3Byb3QsIDEpO1xcbiA2MzU6XFx0XFxuIDYzNjpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpIGluIGluZXQ2X3N0cmVhbV9vcHMgKi9cXG4gNjM3OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QsIFxcdTAwMjZ0Y3BfcHJvdCk7XFxuIDYzODpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiB0Y3BfKGdldHxzZXQpc29ja29wdCgpICovXFxuIDYzOTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKGljc2stXFx1MDAzZWljc2tfYWZfb3BzLCBcXHUwMDI2aXB2NF9zcGVjaWZpYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjQyLjQyMDEwMzQ5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTU2Mzk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIElQdjYgVURQIEFkZHJlc3MgRm9ybSBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgVURQIGFkZHJlc3MgZm9ybSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIGZpbGUgYW5kIGZvY3VzIG9uIGxpbmVzIDY0MCB0byA3MDAuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBkZWZpbmVzIGhvdyBVRFAgc29ja2V0IGFkZHJlc3NpbmcgaXMgbWFuYWdlZCB3aXRoIElQdjYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgYWRkcmVzcyBmb3JtYXRzIGFuZCBob3cgdGhlIHRyYW5zaXRpb24gaXMgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyB3aGF0IEkgZXhwZWN0LiBMZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBtYWtlIHN1cmUgaXQgaXMgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDUuMjc1NzQ2MDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcywgXFx1MDAyNmluZXRfc3RyZWFtX29wcyk7XFxuIDY0MTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xcbiA2NDI6XFx0XFx0XFx0XFx0XFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVxcdTAwM2VpY3NrX3BtdHVfY29va2llKTtcXG4gNjQzOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXFx1MDAzZXNrX3Byb3QsIC0xKTtcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcXHUwMDI2dWRwX3Byb3QsIDEpO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpIGluIGluZXQ2X2RncmFtX29wcyAqL1xcbiA2NDg6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcHJvdCwgXFx1MDAyNnVkcF9wcm90KTtcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlb3BzLCBcXHUwMDI2aW5ldF9kZ3JhbV9vcHMpO1xcbiA2NTA6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5LCBQRl9JTkVUKTtcXG4gNjUxOlxcdFxcdFxcdFxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0XFx0XFx0LyogRGlzYWJsZSBhbGwgb3B0aW9ucyBub3QgdG8gYWxsb2NhdGUgbWVtb3J5IGFueW1vcmUsXFxuIDY1NDpcXHRcXHRcXHRcXHQgKiBidXQgdGhlcmUgaXMgc3RpbGwgYSByYWNlLiAgU2VlIHRoZSBsb2NrbGVzcyBwYXRoXFxuIDY1NTpcXHRcXHRcXHRcXHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXFxuIDY1NjpcXHRcXHRcXHRcXHQgKi9cXG4gNjU3OlxcdFxcdFxcdFxcdG5wLVxcdTAwM2VyeG9wdC5hbGwgPSAwO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRcXHRcXHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gNjYyOlxcdFxcdFxcdFxcdHJldHYgPSAwO1xcbiA2NjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2NDpcXHRcXHRcXHR9XFxuIDY2NTpcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdGNhc2UgSVBWNl9WNk9OTFk6XFxuIDY2ODpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkgfHxcXG4gNjY5OlxcdFxcdFxcdCAgICBpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9udW0pXFxuIDY3MDpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDY3MTpcXHRcXHRcXHRzay1cXHUwMDNlc2tfaXB2Nm9ubHkgPSB2YWxib29sO1xcbiA2NzI6XFx0XFx0XFx0cmV0diA9IDA7XFxuIDY3MzpcXHRcXHRcXHRicmVhaztcXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxcbiA2NzY6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA2Nzc6XFx0XFx0XFx0XFx0Z290byBlX2ludmFsO1xcbiA2Nzg6XFx0XFx0XFx0bnAtXFx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcXG4gNjc5OlxcdFxcdFxcdHJldHYgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo0NS4yNzU4Mzk4MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc2MTY0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgaXNzdWUsIGFuZCBpdCdzIHRpbWUgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgc29ja2V0cyBhcmUgZ2x1ZWQgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIElQIGxheWVyLiBJJ20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDUzMyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBzb21lIGtleSBzb2NrZXQgb3BlcmF0aW9ucyBvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIEkgYW0gaW52ZXN0aWdhdGluZyBhbiBJUC1yZWxhdGVkIHByb2JsZW0gaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDcuMTUyMDA2NDc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHRcXHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xcbiA1MjY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTI3OlxcdFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHNpbiwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuIDUyODpcXHRcXHRzdHJ1Y3Qge1xcbiA1Mjk6XFx0XFx0XFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyIGVlO1xcbiA1MzA6XFx0XFx0XFx0c3RydWN0IHNvY2thZGRyX2luXFx0IG9mZmVuZGVyO1xcbiA1MzE6XFx0XFx0fSBlcnJoZHI7XFxuIDUzMjpcXHRcXHRpbnQgZXJyO1xcbiA1MzM6XFx0XFx0aW50IGNvcGllZDtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4gNTM2OlxcdGFnYWluOlxcbiA1Mzc6XFx0XFx0c2tiID0gc29ja19kZXF1ZXVlX2Vycl9za2Ioc2spO1xcbiA1Mzg6XFx0XFx0aWYgKCFza2IpXFxuIDUzOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTQwOlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFxcdTAwMjZcXHUwMDI2XFxuIDU0MTpcXHRcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNlxcbiA1NDI6XFx0XFx0XFx0ICAgICB1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSBcXHUwMDI2XFx1MDAyNlxcbiA1NDM6XFx0XFx0XFx0ICAgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xcbiA1NDQ6XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gNTQ1OlxcdFxcdFxcdGdvdG8gYWdhaW47XFxuIDU0NjpcXHRcXHR9XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdGNvcGllZCA9IHNrYi1cXHUwMDNlbGVuO1xcbiA1NDk6XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNlIGxlbikge1xcbiA1NTA6XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX1RSVU5DO1xcbiA1NTE6XFx0XFx0XFx0Y29waWVkID0gbGVuO1xcbiA1NTI6XFx0XFx0fVxcbiA1NTM6XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgMCwgbXNnLCBjb3BpZWQpO1xcbiA1NTQ6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNTU1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA1NTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTU3OlxcdFxcdH1cXG4gNTU4OlxcdFxcdHNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTtcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0c2VyciA9IFNLQl9FWFRfRVJSKHNrYik7XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmIChzaW4gXFx1MDAyNlxcdTAwMjYgaXB2NF9kYXRhZ3JhbV9zdXBwb3J0X2FkZHIoc2VycikpIHtcXG4gNTYzOlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuIDU2NDpcXHRcXHRcXHRzaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9ICooX19iZTMyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDcuMTUyMTEzMjA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDI4MjY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFVEUHY2IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2Ni91ZHAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MjIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YsIGxldCdzIHNheSwgY2hlY2tzdW0gY2FsY3VsYXRpb25zIG9yIG1heWJlIHNvbWUgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBVRFB2NiBpbXBsZW1lbnRhdGlvbi4gSSByZWNhbGwgc29tZSBzdWJ0bGV0aWVzIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVpdGhlciB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSVB2NiBoZWFkZXIgb3IgcGVyaGFwcyBzb21lIG9mIHRoZSBvZmZsb2FkIGZlYXR1cmVzLiBJJ20gYmV0dGluZyB0aGF0IHRoZSBwbGFjZSBJJ20gaW50ZXJlc3RlZCBpbiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgYXBwcm9wcmlhdGUgaGVhZGVycyBhcmUgaW4gcGxhY2UgYW5kIHRoYXQgdGhlIHBhY2tldCBnZXRzIHJvdXRlZCBjb3JyZWN0bHkgYWZ0ZXIgY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBidXQgSSdsbCBzZWUgd2hlcmUgdGhpcyB0YWtlcyBtZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo0OS45OTQ5NDE5NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHRcXG4gODE2OlxcdFxcdHJldHVybiAwO1xcbiA4MTc6XFx0fVxcbiA4MTg6XFx0XFxuIDgxOTpcXHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gODIwOlxcdHtcXG4gODIxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuIDgyMjpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4gODIzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0aWYgKHVubGlrZWx5KHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spKSkge1xcbiA4MjY6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbiA4Mjc6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA4Mjg6XFx0XFx0fVxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcXG4gODMxOlxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbiA4MzI6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA4MzM6XFx0XFx0fVxcbiA4MzQ6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVkcHY2X2VuY2FwX25lZWRlZF9rZXkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzNzpcXHRcXHQgICAgUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF90eXBlKSkge1xcbiA4Mzg6XFx0XFx0XFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRcXHQvKlxcbiA4NDE6XFx0XFx0XFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cXG4gODQyOlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQncyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XFxuIDg0MzpcXHRcXHRcXHQgKiBmYWxsIHRocm91Z2ggYW5kIHBhc3MgdGhpcyB1cCB0aGUgVURQIHNvY2tldC5cXG4gODQ0OlxcdFxcdFxcdCAqIHVwLVxcdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XFxuIDg0NTpcXHRcXHRcXHQgKiA9MCBpZiBza2Igd2FzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgdG8gdGhlIGVuY2FwXFxuIDg0NjpcXHRcXHRcXHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXFxuIDg0NzpcXHRcXHRcXHQgKiBcXHUwMDNlMCBpZiBza2Igc2hvdWxkIGJlIHBhc3NlZCBvbiB0byBVRFAuXFxuIDg0ODpcXHRcXHRcXHQgKiBcXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXFxuIDg0OTpcXHRcXHRcXHQgKi9cXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0XFx0LyogaWYgd2UncmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xcbiA4NTI6XFx0XFx0XFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF9yY3YpO1xcbiA4NTM6XFx0XFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbiA4NTQ6XFx0XFx0XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDkuOTk1MDU4MTYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTY5ODI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBJUHY2IHRvIElQdjQgQWRkcmVzcyBDb252ZXJzaW9uIG9uIFVEUCBTb2NrZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29yayBzb2NrZXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgY29udmVyc2lvbiBvZiBJUHY2IHRvIElQdjQgYWRkcmVzcyBmb3JtYXRzIG9uIFVEUCBzb2NrZXRzIHVzaW5nIHRoZSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eT8gVGhlIGFpbSBpcyB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIGVycm9uZW91c2x5IHByb2Nlc3NlZCBvciwgd29yc2UsIGRlcXVldWVkIGFzIElQdjQgZXJyb3JzIGFmdGVyIGEgVURQIHNvY2tldCBpcyBzd2l0Y2hlZCB0byBJUHY0IHZpYSBgSVBWNl9BRERSRk9STWAuXG5cbkhlcmUncyB0aGUgZ2lzdDogYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2Agc2V0cyBhbiBgQUREUkZPUk1gIGZsYWcsIGNhbGxzIGBzeW5jaHJvbml6ZV9uZXQoKWAsIGFuZCB0aGVuIGNoZWNrcyBpZiBJUHY2IHBhY2tldHMgYXJlIHN0aWxsIGxpbmdlcmluZyBhcm91bmQgaW4gdGhlIHJlY2VpdmUgcXVldWVzIChgcmVhZGVyX3F1ZXVlYCBvciBgc2tfcmVjZWl2ZV9xdWV1ZWApLiBJbiBgbmV0L2lwdjYvdWRwLmNgLCBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIHByb2FjdGl2ZWx5IGRyb3BzIElQdjYgcGFja2V0cyBpZiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gVGhlbiwgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBgaXBfcmVjdl9lcnJvcmAgZnVydGhlciBlbmZvcmNlcyB0aGlzIGJ5IGRyb3BwaW5nIElQdjYgc2ticyBpZiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgYXJlYSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFlFUyEgV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbnZvbHZlZCBpbiBBRl9JTkVUNi9BRl9JTkVUIHNvY2tldCBvcHRpb25zLCB0aGUgVURQIHNvY2tldCByZWNlaXZlIHBhdGgsIGFuZCBlcnJvciBxdWV1ZSBoYW5kbGluZy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHM6IGBzZXRzb2Nrb3B0KC4uLiwgSVBQUk9UT19JUFY2LCBJUFY2X0FERFJGT1JNLCAuLi4pYCwgYHJlY3Ztc2coLi4uLCBNU0dfRVJSUVVFVUUpYCwgYW5kIGJhc2ljIFVEUCBwYWNrZXQgcmVjZXB0aW9uLiBUaGlzIGlzIHRleHRib29rIGZ1enppbmcgdGVycml0b3J5IVxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZnV6emluZyBzdHJhdGVneSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBPYnZpb3VzbHksIElQdjYgbmVlZHMgdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBgQ09ORklHX0lQVjZgIChvciBqdXN0IGBJUFY2YCB3aXRob3V0IHRoZSBwcmVmaXgpLiBgQ09ORklHX0lORVRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gZm9yIGFueSBuZXR3b3JraW5nLXJlbGF0ZWQgY29kZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gYElQVjZgIG9yIHRoZXNlIHNwZWNpZmljIGZpbGVzIChgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBgdWRwLmNgKSwgYnV0IHRoZSBjb3JlIGVsZW1lbnRzIGxvb2sgcHJvbWlzaW5nIGZvciBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjU0LjkxMjA0Mzk1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDc1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjU1LjE5MzUyNTY4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjUzMTAzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgSVB2NiBJbmZyYXN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBpcHY2X3NvY2tnbHVlLm9gIGFuZCBgdWRwLm9gLiBXaGVyZSB3b3VsZCBJIGZpbmQgdGhlIG1vc3QgcmVsaWFibGUgYnVpbGQgaW5mb3JtYXRpb24/IFRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIHRoZSBwbGFjZSB0byBiZSwgb2YgY291cnNlLiBTbywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgYnVpbGQgcHJvY2VzcyBkZWZpbmVzIGhvdyB0aGVzZSBvYmplY3RzIGFyZSBjcmVhdGVkIGFuZCBsaW5rZWQsIHdoaWNoIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgSSBuZWVkLiBJdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBidWlsZCBjb250ZXh0IGZvciB0aGVzZSBjcnVjaWFsIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NTYuODQ2NjMxNTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNzg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo1Ni44OTMyNTU0MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwOTg2ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgSVBWNmAgKGFuZCBhbHNvIGBJTkVUYCwgb2YgY291cnNlKS4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHdlJ3ZlIG1hZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkLiBNeSBpbml0aWFsIHNjYW4gaGFzIHR1cm5lZCB1cCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBlaXRoZXIgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gd2hlcmUgdGhlc2UgYXBwZWFyIGluIHRoZSBrZXJuZWw6XG5cbiogICBXZSBoYXZlIGBkb19pcHY2X3NldHNvY2tvcHRgLCBvciBwb3RlbnRpYWxseSBpdHMgdmFyaWFudHMgYGlwdjZfc2V0c29ja29wdGAgb3IgYW5vdGhlciBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobmVlZCB0byBjbGFyaWZ5IHRoZSBkaWZmZXJlbmNlcyBhbmQgdGhlaXIgY2FsbHMpLlxuKiAgIFRoZW4gdGhlcmUgaXMgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLCB3aGljaCBpcyBzdGF0aWMsIHNvIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQncyB1c2VkIGFuZCBpZiBpdCBnZXRzIGlubGluZWQsIG9yIGlmIGl0IGhhcyBzb21lIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiogICBBbHNvLCBgaXBfcmVjdl9lcnJvcmAgc2hvdWxkIGJlIGltcG9ydGFudCB0byBzdHVkeS5cbiogICBUaGVuIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAuXG4qICAgQW5kIGZpbmFsbHksIGB1ZHB2Nl9yZWN2bXNnYCBvciBhZ2FpbiBgaXB2Nl9zZXRzb2Nrb3B0YC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggb2YgdGhlc2UgYXJlIGFjdHVhbGx5ICpkZWZpbmVkKiBub24tc3RhdGljYWxseSwgb3IgYXQgbGVhc3QgaG93IG1hbnkgZGlzdGluY3Qgc3RhdGljIHN5bWJvbHMgd2UgaGF2ZS4gSXQgbG9va3MgbGlrZTpcblxuKiAgIGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIG5vbi1zdGF0aWMgYW5kIGRlZmluZWQgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIEdvb2QuXG4qICAgYGlwX3JlY3ZfZXJyb3JgIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJbnRlcmVzdGluZywgdGhpcyBsb29rcyBsaWtlIGFuIElQdjQgZnVuY3Rpb24sIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkLlxuKiAgIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgc3RhdGljIGluIGBuZXQvaXB2Ni91ZHAuY2AsIHNvIHdlIGhhdmUgdG8gd2F0Y2ggaG93IHRoYXQgZ2V0cyB1c2VkLlxuKiAgIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCBpcyBzdGF0aWMgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIE9rYXkuXG4qICAgQW5kIGZpbmFsbHksIGBpcHY2X3NldHNvY2tvcHRgLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYCBhbmQgY2FsbHMgYGRvX2lwdjZfc2V0c29ja29wdGAuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cblNvIG5leHQsIGxldCdzIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGF0LCBwYXJ0aWN1bGFybHksIGlmIHRoZSBmdW5jdGlvbnMgbWFrZSB0aGVpciB3YXkgaW50byBzb21lIG1vZHVsZSBleHBvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDowMC44MDMxMjc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDY0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PXN0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMi1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAzOmludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDQtXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtOTkwLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo5OTE6aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTk5Mi1cXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDAxLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDAyOlxcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwMy0jaWZkZWYgQ09ORklHX05FVEZJTFRFUlxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTAtfVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDExOkVYUE9SVF9TWU1CT0woaXB2Nl9zZXRzb2Nrb3B0KTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDAuODQ5MjAwOTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTk0MDY2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBDYWxsZXJzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L3VkcC5jYC4gSXQncyBjcnVjaWFsLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgKmNhbGwqIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCB0aGUgdHlwZXMgb2Ygc2l0dWF0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjcml0aWNhbCBwYXRoLiBUaGlzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgSVB2NiBVRFAgc3RhY2suIFRpbWUgdG8gY2hlY2sgdGhlIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDIuNzQ4NjExNzM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1NjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz03ODU9c3RhdGljIGludCBfX3VkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtODE4LVxcbm5ldC9pcHY2L3VkcC5jOjgxOTpzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy04MjAte1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODk1PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy05MDAtXFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG5uZXQvaXB2Ni91ZHAuYzo5MDE6XFx0XFx0cmV0dXJuIHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbm5ldC9pcHY2L3VkcC5jLTkwMi1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTkwOC1cXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxubmV0L2lwdjYvdWRwLmM6OTA5OlxcdFxcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbm5ldC9pcHY2L3VkcC5jLTkxMC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDIuNzk1Nzc0MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjAyOTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgVURQdjYgcmVjZXB0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgY3JvcHBpbmcgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgcmVjZWl2ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYF9fdWRwNl9saWJfcmN2YCwgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgLCBhbmQgYHVkcHY2X3JjdmAgd2l0aGluIHRoZSBgbmV0L2lwdjYvdWRwLmNgIGZpbGUuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVidWdnaW5nIFVEUHY2IHJlY2VwdGlvbiBpc3N1ZXMsIGFuZCB0aGV5J3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCB0cmFjaW5nIHBhY2tldCBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIHF1ZXVlaW5nIHByb2JsZW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5IHdoZXJlIEkgY2FuIGdldCBzb21lIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDQuODExODA2ODM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHB2Nl9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdWRwLmM9MTA1NT1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTA4Ni1cXG5uZXQvaXB2Ni91ZHAuYzoxMDg3OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy0xMDg4LXtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5NTc9aW50IF9faW5pdCB1ZHB2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTYxLVxcdG5ldF9ob3RkYXRhLnVkcHY2X3Byb3RvY29sID0gKHN0cnVjdCBpbmV0Nl9wcm90b2NvbCkge1xcbm5ldC9pcHY2L3VkcC5jOjE5NjI6XFx0XFx0LmhhbmRsZXIgICAgID0gdWRwdjZfcmN2LFxcbm5ldC9pcHY2L3VkcC5jLTE5NjMtXFx0XFx0LmVycl9oYW5kbGVyID0gdWRwdjZfZXJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDowNC44NjA0MjE0MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMDYwMjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIElQdjYgdG8gSVB2NCBBZGRyZXNzIEZhbWlseSBDb252ZXJzaW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gSSBzZWU6IGBkb19pcHY2X3NldHNvY2tvcHRgLCBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAsIGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgYW5kIGBpcHY2X3NldHNvY2tvcHRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBjYW4gdGVsbCB0aGVzZSBhcmVuJ3QgZ2VuZXJpYyBob3RzcG90cyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbi4gVGhleSBhcmUgYWxsIHByZXR0eSBzcGVjaWZpYy4gYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGBpcHY2X3NldHNvY2tvcHRgIGFyZSBmb3IgSVB2NiBzb2NrZXQgb3B0aW9ucyBvbmx5LiBgaXBfcmVjdl9lcnJvcmAgaXMgYWJvdXQgdGhlIGVycm9yIHF1ZXVlIGZvciBJUHY0LCBub3QgdGhlIGhvdCBwYXRoLiBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWNlaXZpbmcgVURQdjYgcGFja2V0cywgYW5kIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCBpcyB0aGF0IG5ldyBoZWxwZXIgd2UgYWRkZWQgaW4gYGlwdjZfc29ja2dsdWUuY2AuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHRoZSBjb25maWdzLCB3ZSBoYXZlIGBJUFY2YCBhbmQgYElORVRgLCBzbyB0aGF0J3MgZ29vZC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgaGVyZS4gRnJvbSB3aGF0IEkgc2VlLCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBVRFAgaGFuZGxpbmcgdGhhdCBvY2N1ciB3aGVuIHdlIGNvbnZlcnQgYSBzb2NrZXQgZnJvbSBJUHY2IHRvIElQdjQgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzb2NrZXQgb3B0aW9uLiBXZSdyZSBhZGRpbmcgdGhlIGBVRFBfRkxBR1NfQUREUkZPUk1gIGJpdCB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHJlY2VpdmVkIHZpYSBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgLCBhbmQgd2UncmUgZHJvcHBpbmcgbGVmdG92ZXIgSVB2NiBwYWNrZXRzIHRoYXQgZW5kIHVwIGluIHRoZSBlcnJvciBxdWV1ZSB1c2luZyBgaXBfcmVjdl9lcnJvcmAuIEFsc28sIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgd2UncmUgYWRkaW5nIGNoZWNrcyB0byBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aXRoIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCB0byBtYWtlIHN1cmUgd2UgcmVqZWN0IHRoZSBjb252ZXJzaW9uIGlmIHRoZXJlIGFyZSBhbnkgSVB2NiBwYWNrZXRzIHN0aWxsIHdhaXRpbmcgaW4gdGhlIFVEUCByZWFkZXIgb3IgcmVjZWl2ZSBxdWV1ZXMuIFNvLCBlc3NlbnRpYWxseSwgd2UncmUgbW9kaWZ5aW5nIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscyBzdWNoIGFzIGBzZXRzb2Nrb3B0YCBhbmQgYHJlY3Ztc2dgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDkuODgxMDI2MzY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNTgyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0byBoYW5kbGUgVURQIElQdjYtdG8tSVB2NCBjb252ZXJzaW9uIHZpYSB0aGUgSVBWNl9BRERSRk9STSBzb2NrZXQgb3B0aW9uLiBJdCBpbnRyb2R1Y2VzIFVEUF9GTEFHU19BRERSRk9STSB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHF1ZXVlZCAodWRwdjZfcXVldWVfcmN2X29uZV9za2IpIGFuZCBkcm9wcyB1bmV4cGVjdGVkIElQdjYgc2ticyBmcm9tIHRoZSBlcnJvciBxdWV1ZSAoaXBfcmVjdl9lcnJvcikuIEl0IGFsc28gYWRkcyBxdWV1ZSBpbnNwZWN0aW9uICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KSBpbiBkb19pcHY2X3NldHNvY2tvcHQgYmVmb3JlIGFsbG93aW5nIHRoZSBhZGRyZXNzIGZvcm0gY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIFVEUCBhbmQgc29ja2V0IG9wdGlvbnMsIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcHY2X3NldHNvY2tvcHRcIixcbiAgICBcInVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZcIixcbiAgICBcImlwX3JlY3ZfZXJyb3JcIixcbiAgICBcInVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgdG8gaGFuZGxlIFVEUCBJUHY2LXRvLUlQdjQgY29udmVyc2lvbiB2aWEgdGhlIElQVjZfQUREUkZPUk0gc29ja2V0IG9wdGlvbi4gSXQgaW50cm9kdWNlcyBVRFBfRkxBR1NfQUREUkZPUk0gdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKSBhbmQgZHJvcHMgdW5leHBlY3RlZCBJUHY2IHNrYnMgZnJvbSB0aGUgZXJyb3IgcXVldWUgKGlwX3JlY3ZfZXJyb3IpLiBJdCBhbHNvIGFkZHMgcXVldWUgaW5zcGVjdGlvbiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NikgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0IGJlZm9yZSBhbGxvd2luZyB0aGUgYWRkcmVzcyBmb3JtIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiBVRFAgYW5kIHNvY2tldCBvcHRpb25zLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTM5MjI1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2NDM2NjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTkyMDk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwNjM4MzMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVxcdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2YzYwZmJjYjhhNTA4OWNhNzcxYTFhOGIyMDBiMWRhMjM0Y2Y1YzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAzOjQzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmhcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5AQCAtNjcsNiArNjcsNyBAQCBlbnVtIHtcbiBcdFVEUF9GTEFHU19BQ0NFUFRfRlJBR0xJU1QsXG4gXHRVRFBfRkxBR1NfQUNDRVBUX0w0LFxuIFx0VURQX0ZMQUdTX0VOQ0FQX0VOQUJMRUQsIC8qIFRoaXMgc29ja2V0IGVuYWJsZWQgZW5jYXAgKi9cbitcdFVEUF9GTEFHU19BRERSRk9STSwgICAgICAvKiBCbG9jayBJUHY2IHJlY2VpdmUgZHVyaW5nL2FmdGVyIEFERFJGT1JNICovXG4gfTtcbiBcbiAvKiBwZXIgTlVNQSBzdHJ1Y3R1cmUgZm9yIGxvY2tsZXNzIHByb2R1Y2VyIHVzYWdlLiAqL1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5pbmRleCBhNTVlZjMyN2VjOTMyLi5mY2QxMDJhZThiZWRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuQEAgLTUzMyw5ICs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4gXHRpbnQgY29waWVkO1xuIFxuIFx0ZXJyID0gLUVBR0FJTjtcbithZ2FpbjpcbiBcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcbiBcdGlmICghc2tiKVxuIFx0XHRnb3RvIG91dDtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgdWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xuK1x0XHRjb25zdW1lX3NrYihza2IpO1xuK1x0XHRnb3RvIGFnYWluO1xuK1x0fVxuIFxuIFx0Y29waWVkID0gc2tiLVx1MDAzZWxlbjtcbiBcdGlmIChjb3BpZWQgXHUwMDNlIGxlbikge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtMzczLDYgKzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9IFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZyZWFkZXJfcXVldWUtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7XG4rXHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuK1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJlYWRlcl9xdWV1ZS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbkBAIC01ODcsNiArNjE0LDE2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuK1x0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbitcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuK1x0XHRcdFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XG4rXHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbitcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1xuIFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiBcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xuaW5kZXggOTM0NzhkMWFkNTc2OS4uY2NkOGFlOTJmNTJiYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTgyMiw2ICs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbitcdGlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHtcbitcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xuK1x0XHRnb3RvIGRyb3A7XG4rXHR9XG4rXG4gXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4gXHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTkyMjA2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzQ4MzY5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQIEFkZHJlc3MgRm9ybSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB0aHVzIG5lY2Vzc2l0YXRpbmcgS01TQU4gYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGZvciBVRFAgc29ja2V0cyBhbmQgaG93IHdlIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIElQdjYgYW5kIElQdjQuXG5cbkhlcmUncyB0aGUgYnJlYWtkb3duOlxuXG4xLiAgQSBuZXcgZmxhZywgYFVEUF9GTEFHU19BRERSRk9STWAsIGlzIGludHJvZHVjZWQgaW4gYGluY2x1ZGUvbGludXgvdWRwLmhgLlxuMi4gIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBub3cgaGFzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaW4gYGlwX3JlY3ZfZXJyb3IoKWAuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFVEUCBkYXRhZ3JhbSBzb2NrZXQsIHRoZSBVRFAgYEFERFJGT1JNYCBmbGFnIGlzIHNldCwgYW5kIHRoZSBwYWNrZXQgaXMgSVB2NiwgdGhlIGNvZGUgY29uc3VtZXMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgbG9vcHMsIGZldGNoaW5nIGFub3RoZXIgYHNrYmAuIEVmZmVjdGl2ZWx5LCB0aGlzIGRpc2NhcmRzIHRoZSBJUHY2IHBhY2tldC5cbjMuICBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NigpYCwgd2hpY2ggY2hlY2tzIHRoZSByZWNlaXZlIHF1ZXVlcyBvZiB0aGUgc29ja2V0IGZvciBhbnkgbGluZ2VyaW5nIElQdjYgcGFja2V0cyB3aGVuIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGlzIHVzZWQuIFRoZSBmdW5jdGlvbiBhY3F1aXJlcyBsb2NrcyB0byBzYWZlbHkgdHJhdmVyc2UgdGhlIHF1ZXVlcy4gSW4gdGhlIGBkb19pcHY2X3NldHNvY2tvcHQoKWAgZnVuY3Rpb24sIHdoZW4gYElQVjZfQUREUkZPUk1gIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQsIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgY2FsbGVkIChsaWtlbHkgdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcpLCBhbmQgdGhlbiBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NigpYCBpcyBjaGVja2VkLiBJZiBhbnkgSVB2NiBwYWNrZXRzIGFyZSBzdGlsbCBwcmVzZW50LCB0aGUgYEFERFJGT1JNYCBiaXQgaXMgY2xlYXJlZCwgYW5kIGFuIGAtRUJVU1lgIGVycm9yIGlzIHJldHVybmVkLiBUaGlzIGlzIHRvIHByZXZlbnQgYSB0eXBlIGNvbmZ1c2lvbiBzaXR1YXRpb24uXG40LiAgYG5ldC9pcHY2L3VkcC5jYCBub3cgaW5jbHVkZXMgYSBjaGVjayBpbiBgdWRwdjZfcXVldWVfcmN2X29uZV9za2IoKWAuIElmIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGFueSBhcnJpdmluZyBJUHY2IHBhY2tldHMgYXJlIGRyb3BwZWQgd2l0aCB0aGUgcmVhc29uIGBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUYC5cblxuU28sIGl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgdHlwZSBjb25mdXNpb24gd2hlbiBjb252ZXJ0aW5nIGFuIElQdjYgVURQIHNvY2tldCB0byBhbiBJUHY0IG9uZSB1c2luZyBgSVBWNl9BRERSRk9STWAuIElQdjYgcGFja2V0cyBtaWdodCBiZSBpbi1mbGlnaHQgb3IgcXVldWVkIHdoZW4gdGhlIGNvbnZlcnNpb24gaGFwcGVucywgYW5kIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBmbHVzaCB0aGVtLiBJZiBub3QgZmx1c2hlZCwgdGhlIElQdjQgY29kZSBjb3VsZCBtaXNoYW5kbGUgSVB2NiBwYWNrZXRzIGFuZCB2aWNlIHZlcnNhLiBJdCBsb29rcyBsaWtlIGl0IGlzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUsIG9yIG90aGVyIGlzc3VlcyByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gV2hhdCB3YXMgdGhlICpwcm9ibGVtKiB0aGF0IG1vdGl2YXRlZCB0aGlzPyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB1c2VmdWwgaGVyZS4gQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgbmVlZCBmb3IgdGhlIHBhdGNoLCBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseSBhdCBgaXBfcmVjdl9lcnJvcmAgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBJUHY2IHNrYnMuIExldCdzIHN0YXJ0IHdpdGggYSBsb29rIGF0IGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gVGhpcyBtaWdodCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjIwLjMxMDI5NDYwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzEzODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcF9yZWN2X2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuYz00OTU9c3RhdGljIGJvb2wgaXB2NF9kYXRhZ3JhbV9zdXBwb3J0X2Ntc2coY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjItICovXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo1MjM6aW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMC40Njg3MTYzN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY0OTE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgYXMgYW4gZXhwZXJ0IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb2RlLCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWVkIGxpbmVzIG9mIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYDpcblxuKipEZWVwIERpdmUgaW50byBJUCBTb2NrZXQgR2x1ZSBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBhIHNwZWNpZmljIGNodW5rIG9mIHRoZSBJUCBzb2NrZXQgZ2x1ZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIHJlcXVlc3QgaXMgdG8gZm9jdXMgb24gbGluZXMgNTIwIHRvIDYwMCBvZiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyBhIGtleSBhcmVhIGZvciBzb2NrZXQtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIGxheWVyLlwiIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgc29ja2V0IG9wZXJhdGlvbnMsIGxpa2UgYHNlbmRtc2dgIG9yIGByZWN2bXNnYCwgYXJlIGhhbmRsZWQgYXQgdGhlIElQIGxldmVsLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgSVAgaGVhZGVycywgcG9zc2libHkgaGFuZGxpbmcgSVAgb3B0aW9ucywgb3IgbWF5YmUgZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24uIFRoZXJlJ3MgYWxzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBzZWdtZW50IHdvcmtpbmcgY2xvc2VseSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhhdCBpcyBrZXkgd2hlbiBuYXZpZ2F0aW5nIHRoaXMgY29kZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgcG90ZW50aWFsIGRpc2N1c3Npb25zIG9uOlxuXG4qICAgKipIZWFkZXIgY29uc3RydWN0aW9uOioqIEhvdyBhcmUgSVAgaGVhZGVycyAoc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MsIFRUTCwgcHJvdG9jb2wsIGV0Yy4pIGJlaW5nIGJ1aWx0IGJhc2VkIG9uIHRoZSBzb2NrZXQncyBjb25maWd1cmF0aW9uIGFuZCB0aGUgZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZm9sbG93IHRoZSBmbG93IGZyb20gc29ja2V0IGNhbGxzIGludG8gY2FsbHMgdGhhdCBjcmVhdGUgdGhlIGhlYWRlciBkYXRhLlxuKiAgICoqQ2hlY2tzdW0gQ2FsY3VsYXRpb246KiogSG93IGlzIHRoZSBJUCBoZWFkZXIgY2hlY2tzdW0gYmVpbmcgY2FsY3VsYXRlZD8gSXMgaXQgZG9uZSBpbmxpbmUgb3IgaGFuZGxlZCBzZXBhcmF0ZWx5PyBFZmZpY2llbmN5IHdpbGwgYmUga2V5IGhlcmUuXG4qICAgKipGcmFnbWVudGF0aW9uOioqIE1pZ2h0IHRoaXMgc2VjdGlvbiBoYW5kbGUgb3IgaW50ZXJmYWNlIHdpdGggSVAgZnJhZ21lbnRhdGlvbj8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgYGlwX2ZyYWdgIGRhdGEgc3RydWN0dXJlcyBvciBmcmFnbWVudGF0aW9uLXJlbGF0ZWQgZnVuY3Rpb25zLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSdsbCBiZSBjdXJpb3VzIGFib3V0IGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaG93IElQLWxldmVsIGVycm9ycyBhcmUgcmVwb3J0ZWQgYmFjayB0byB0aGUgc29ja2V0IGxheWVyLCBhbmQgaG93IHRoaW5ncyBsaWtlIElDTVAgZXJyb3JzIGFyZSBoYW5kbGVkLlxuKiAgICoqU2VjdXJpdHk6KiogVGhpcyBiZWluZyBhIGNyaXRpY2FsIHBhdGgsIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGlwX2J1aWxkX2hlYWRlcigpYCwgYGlwX3NlbmRfY2hlY2soKWAsIGBpcF9mcmFnbWVudCgpYCwgb3IgYW55dGhpbmcgaW52b2x2aW5nIGBza2JgIChzb2NrZXQgYnVmZmVyKSBtYW5pcHVsYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IGRlbnNlLCBidXQgSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUsIHRvIHNlZSB3aGF0IHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciB3YXMuIExldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMy45MzM2MzkwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0LypcXG4gNTIxOlxcdCAqXFx0SGFuZGxlIE1TR19FUlJRVUVVRVxcbiA1MjI6XFx0ICovXFxuIDUyMzpcXHRpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4gNTI0OlxcdHtcXG4gNTI1OlxcdFxcdHN0cnVjdCBzb2NrX2V4dGVycl9za2IgKnNlcnI7XFxuIDUyNjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA1Mjc6XFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc2luLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4gNTI4OlxcdFxcdHN0cnVjdCB7XFxuIDUyOTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgZWU7XFxuIDUzMDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW5cXHQgb2ZmZW5kZXI7XFxuIDUzMTpcXHRcXHR9IGVycmhkcjtcXG4gNTMyOlxcdFxcdGludCBlcnI7XFxuIDUzMzpcXHRcXHRpbnQgY29waWVkO1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbiA1MzY6XFx0YWdhaW46XFxuIDUzNzpcXHRcXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XFxuIDUzODpcXHRcXHRpZiAoIXNrYilcXG4gNTM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1NDA6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXFx1MDAyNlxcdTAwMjZcXG4gNTQxOlxcdFxcdFxcdCAgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuIDU0MjpcXHRcXHRcXHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFxcdTAwMjZcXHUwMDI2XFxuIDU0MzpcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7XFxuIDU0NDpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA1NDU6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gNTQ2OlxcdFxcdH1cXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0Y29waWVkID0gc2tiLVxcdTAwM2VsZW47XFxuIDU0OTpcXHRcXHRpZiAoY29waWVkIFxcdTAwM2UgbGVuKSB7XFxuIDU1MDpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19mbGFncyB8PSBNU0dfVFJVTkM7XFxuIDU1MTpcXHRcXHRcXHRjb3BpZWQgPSBsZW47XFxuIDU1MjpcXHRcXHR9XFxuIDU1MzpcXHRcXHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7XFxuIDU1NDpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiA1NTU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDU1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTc6XFx0XFx0fVxcbiA1NTg6XFx0XFx0c29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpO1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTtcXG4gNTYxOlxcdFxcbiA1NjI6XFx0XFx0aWYgKHNpbiBcXHUwMDI2XFx1MDAyNiBpcHY0X2RhdGFncmFtX3N1cHBvcnRfYWRkcihzZXJyKSkge1xcbiA1NjM6XFx0XFx0XFx0c2luLVxcdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gNTY0OlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyID0gKihfX2JlMzIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xcbiA1NjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2Vyci1cXHUwMDNlYWRkcl9vZmZzZXQpO1xcbiA1NjY6XFx0XFx0XFx0c2luLVxcdTAwM2VzaW5fcG9ydCA9IHNlcnItXFx1MDAzZXBvcnQ7XFxuIDU2NzpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNpbi1cXHUwMDNlc2luX3plcm8sIDAsIHNpemVvZihzaW4tXFx1MDAzZXNpbl96ZXJvKSk7XFxuIDU2ODpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lbGVuID0gc2l6ZW9mKCpzaW4pO1xcbiA1Njk6XFx0XFx0fVxcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRtZW1jcHkoXFx1MDAyNmVycmhkci5lZSwgXFx1MDAyNnNlcnItXFx1MDAzZWVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7XFxuIDU3MjpcXHRcXHRzaW4gPSBcXHUwMDI2ZXJyaGRyLm9mZmVuZGVyO1xcbiA1NzM6XFx0XFx0bWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0aWYgKGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9jbXNnKHNrLCBza2IsIHNlcnItXFx1MDAzZWVlLmVlX29yaWdpbikpIHtcXG4gNTc2OlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuIDU3NzpcXHRcXHRcXHRzaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4gNTc4OlxcdFxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxcbiA1Nzk6XFx0XFx0XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG4gNTgwOlxcdFxcdH1cXG4gNTgxOlxcdFxcbiA1ODI6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFQ1ZFUlIsIHNpemVvZihlcnJoZHIpLCBcXHUwMDI2ZXJyaGRyKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0LyogTm93IHdlIGNvdWxkIHRyeSB0byBkdW1wIG9mZmVuZGVkIHBhY2tldCBvcHRpb25zICovXFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FUlJRVUVVRTtcXG4gNTg3OlxcdFxcdGVyciA9IGNvcGllZDtcXG4gNTg4OlxcdFxcbiA1ODk6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gNTkwOlxcdG91dDpcXG4gNTkxOlxcdFxcdHJldHVybiBlcnI7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHZvaWQgX19pcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbiA1OTU6XFx0e1xcbiA1OTY6XFx0XFx0dTggb2xkX3RvcyA9IGluZXRfc2soc2spLVxcdTAwM2V0b3M7XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xcbiA1OTk6XFx0XFx0XFx0dmFsIFxcdTAwMjY9IH5JTkVUX0VDTl9NQVNLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMy45MzM3NzY5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkxMzk1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBJUHY2IHNvY2tldCBvcHRpb25zIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkLiBMZXQncyBzZWUuLi5JIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgc2V0c29ja29wdGAgYW5kIElQdjYuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uLi4uIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJJ2xsIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MCB0byA2NTAgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdGhvc2UgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCBpbiB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBTSU9DYCBjb21tYW5kIGNvZGVzIGdldCBwcm9jZXNzZWQsIG9wdGlvbiB2YWxpZGF0aW9uIG9jY3VycywgYW5kIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YWNrIGNhbGxzIGFyZSBkaXNwYXRjaGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYXNzb2NpYXRlZCBJUHY2IHNvY2tldCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjI2LjMyNTE3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxcbiA1ODE6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHRjYXNlIElQVjZfQUREUkZPUk06XFxuIDU4NjpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU4NzpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU4ODpcXHRcXHRcXHRpZiAodmFsID09IFBGX0lORVQpIHtcXG4gNTg5OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcXG4gNTkwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuIDU5MzpcXHRcXHRcXHRcXHRcXHRpZiAodWRwX3NrKHNrKS1cXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xcbiA1OTQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTk1OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTY6XFx0XFx0XFx0XFx0XFx0fVxcbiA1OTc6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTk4OlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1OTk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNjAwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDE6XFx0XFx0XFx0XFx0XFx0fVxcbiA2MDI6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDQ6XFx0XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FTk9UQ09OTjtcXG4gNjA4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDk6XFx0XFx0XFx0XFx0fVxcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XFxuIDYxMjpcXHRcXHRcXHRcXHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbiA2MTM6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xcbiA2MTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYxNTpcXHRcXHRcXHRcXHR9XFxuIDYxNjpcXHRcXG4gNjE3OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG4gNjE4OlxcdFxcdFxcdFxcdFxcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XFxuIDYxOTpcXHRcXHRcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdFxcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xcbiA2MjE6XFx0XFx0XFx0XFx0XFx0XFx0dWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spO1xcbiA2MjI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MjQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA2MjU6XFx0XFx0XFx0XFx0fVxcbiA2MjY6XFx0XFxuIDYyNzpcXHRcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIDYyODpcXHRcXHRcXHRcXHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0XFx0XFx0XFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVxcdTAwM2Vza19wcm90LCAtMSk7XFxuIDYzNDpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgXFx1MDAyNnRjcF9wcm90LCAxKTtcXG4gNjM1OlxcdFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9zdHJlYW1fb3BzICovXFxuIDYzNzpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19wcm90LCBcXHUwMDI2dGNwX3Byb3QpO1xcbiA2Mzg6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gdGNwXyhnZXR8c2V0KXNvY2tvcHQoKSAqL1xcbiA2Mzk6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2FmX29wcywgXFx1MDAyNmlwdjRfc3BlY2lmaWMpO1xcbiA2NDA6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMsIFxcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xcbiA2NDE6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5LCBQRl9JTkVUKTtcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHRjcF9zeW5jX21zcyhzaywgaWNzay1cXHUwMDNlaWNza19wbXR1X2Nvb2tpZSk7XFxuIDY0MzpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVxcdTAwM2Vza19wcm90LCAtMSk7XFxuIDY0NTpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgXFx1MDAyNnVkcF9wcm90LCAxKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QsIFxcdTAwMjZ1ZHBfcHJvdCk7XFxuIDY0OTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcywgXFx1MDAyNmluZXRfZGdyYW1fb3BzKTtcXG4gNjUwOlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XFxuIDY1MTpcXHRcXHRcXHRcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdFxcdFxcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxcbiA2NTQ6XFx0XFx0XFx0XFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxcbiA2NTU6XFx0XFx0XFx0XFx0ICogaW4gdWRwdjZfc2VuZG1zZygpIGFuZCBpcHY2X2xvY2FsX3J4cG10dSgpLlxcbiA2NTY6XFx0XFx0XFx0XFx0ICovXFxuIDY1NzpcXHRcXHRcXHRcXHRucC1cXHUwMDNlcnhvcHQuYWxsID0gMDtcXG4gNjU4OlxcdFxcbiA2NTk6XFx0XFx0XFx0XFx0aW5ldDZfY2xlYW51cF9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MjYuMzI1MzE0MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcwMDQxNjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkcmVzc2luZyBVRFAgU29ja2V0IFByb3RvY29sIENvbnZlcnNpb24gUmlza3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdpdGhpbiB0aGlzIHBhdGNoLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXM6IGB1ZHAuaGAsIGBpcF9zb2NrZ2x1ZS5jYCwgYGlwdjZfc29ja2dsdWUuY2AsIGFuZCBgdWRwLmNgLlxuXG5GaXJzdCwgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGBJUFY2X0FERFJGT1JNYCBmdW5jdGlvbmFsaXR5IG9uIFVEUCBzb2NrZXRzLCBlc3NlbnRpYWxseSBzd2l0Y2hpbmcgYW4gSVB2NiBzb2NrZXQgdG8gSVB2NC4gVGhlIGNoYW5nZXMgYXBwZWFyIGRlc2lnbmVkIHRvIHByZXZlbnQgYW5kIGZpeCBhIHR5cGUgY29uZnVzaW9uIHZ1bG5lcmFiaWxpdHkgYW5kIHJhY2UgY29uZGl0aW9ucywgYSBnb29kIHRoaW5nLlxuXG5JJ20gemVyb2luZyBpbiBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBhc3BlY3RzOlxuXG4xLiAgKipEYXRhIHNlbnQgdG8gdXNlcnNwYWNlOioqIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIG9sZCBgaXBfcmVjdl9lcnJvcigpYCBpc3N1ZSB0aGF0IGludGVycHJldGVkIElQdjYgYXMgSVB2NCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkcyBiZXlvbmQgYnVmZmVycyBvciBpbnZhbGlkIGhlYWRlcnMsIGlzIGFkZHJlc3NlZC4gVGhlIHBhdGNoIG5vdyBwcm9wZXJseSBkcm9wcyB0aGUgSVB2NiBza2IuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogSSdtIG1ha2luZyBzdXJlIHRoYXQgdGhlIHBhdGNoIGxvZ2ljIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBWYXJpYWJsZXMgbGlrZSBgdXAtXHUwMDNldWRwX2ZsYWdzYCwgYHNrYi1cdTAwM2Vwcm90b2NvbGAgYW5kIGBmb3VuZGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBMb29rcyBnb29kLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGxhdGVyIGFjY2Vzc2VkLlxuNC4gICoqQm91bmRzIGNoZWNrczoqKiBJJ20gY2hlY2tpbmcgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBsb29zZW4gYW55IGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuIE5vIGNoYW5nZSB0aGVyZS5cblxuU28sIGluIG15IGFzc2Vzc21lbnQsIHRoZSBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIHNlZWluZyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbnZvbHZpbmcgdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChgSVBWNl9BRERSRk9STWApIG9uIFVEUCBzb2NrZXRzLiBDb25jdXJyZW50IG9yIHF1ZXVlZCBJUHY2IHBhY2tldHMgY291bGQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gd2l0aCBvbGQgaGFuZGxlcnMsIGJ1dCBub3cgd2UncmUgc3luY2hyb25pemluZywgY2hlY2tpbmcgcXVldWVzLCBhbmQgZHJvcHBpbmcgdGhlIHJvZ3VlIHBhY2tldHMuXG5cblNpbmNlIHRoaXMgcGF0Y2ggKmZpeGVzKiBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aHJvdWdoIGJldHRlciBjb250cm9sLWZsb3csIGFuZCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBzdWZmaWNlIGZvciB0ZXN0aW5nLiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gaGVyZS4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSB0eXBlIGNvbmZ1c2lvbiBhbmQgcmFjZSBjb25kaXRpb25zLCB0aGluZ3MgS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2guXG5cbk15IGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOYDogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODYsIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjM1LjAyNTczMjg0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCBwcm90b2NvbC90eXBlIGNvbmZ1c2lvbiBkdXJpbmcgSVB2NiB0byBJUHY0IGFkZHJlc3MgdHJhbnNmb3JtYXRpb24gKElQVjZfQUREUkZPUk0pIG9uIFVEUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgKGBVRFBfRkxBR1NfQUREUkZPUk1gKSwgc3luY2hyb25pemVzIG5ldHdvcmsgcHJvY2Vzc2luZyAoYHN5bmNocm9uaXplX25ldCgpYCksIGluc3BlY3RzIHJlY2VpdmUgYW5kIHJlYWRlciBxdWV1ZXMgZm9yIHBlbmRpbmcgSVB2NiBwYWNrZXRzLCBhbmQgZHJvcHMgb3IgZGlzY2FyZHMgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIG9yIHF1ZXVlZCBvbiBjb252ZXJ0ZWQgc29ja2V0cy5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cXHUwMDNlcHJvdG9jb2xgKSBhbmQgc29ja2V0IGZsYWdzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gUG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwcm90b2NvbCB0cmFuc2l0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHR5cGUgY29uZnVzaW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBwYWNrZXQgaGVhZGVycykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCBwcm90b2NvbC90eXBlIGNvbmZ1c2lvbiBkdXJpbmcgSVB2NiB0byBJUHY0IGFkZHJlc3MgdHJhbnNmb3JtYXRpb24gKElQVjZfQUREUkZPUk0pIG9uIFVEUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgKGBVRFBfRkxBR1NfQUREUkZPUk1gKSwgc3luY2hyb25pemVzIG5ldHdvcmsgcHJvY2Vzc2luZyAoYHN5bmNocm9uaXplX25ldCgpYCksIGluc3BlY3RzIHJlY2VpdmUgYW5kIHJlYWRlciBxdWV1ZXMgZm9yIHBlbmRpbmcgSVB2NiBwYWNrZXRzLCBhbmQgZHJvcHMgb3IgZGlzY2FyZHMgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIG9yIHF1ZXVlZCBvbiBjb252ZXJ0ZWQgc29ja2V0cy5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cXHUwMDNlcHJvdG9jb2xgKSBhbmQgc29ja2V0IGZsYWdzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gUG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwcm90b2NvbCB0cmFuc2l0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHR5cGUgY29uZnVzaW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBwYWNrZXQgaGVhZGVycykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6f2nt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 03:41:20 +0000 UTC FinishedAt: 2026-09-05 03:44:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "0f19268e-6409-4430-99a0-aaa2f331d043" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "do_ipv6_setsockopt", "ipv6_setsockopt", "udp6_addrform_queue_has_ipv6", "ip_recv_error", "udpv6_queue_rcv_one_skb" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjZjNjBmYmNiOGE1MDg5Y2E3NzFhMWE4YjIwMGIxZGEyMzRjZjVjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDM6NDM6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmhcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgZW51bSB7XG4gXHRVRFBfRkxBR1NfQUNDRVBUX0ZSQUdMSVNULFxuIFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcbiBcdFVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovXG4mIzQzO1x0VURQX0ZMQUdTX0FERFJGT1JNLCAgICAgIC8qIEJsb2NrIElQdjYgcmVjZWl2ZSBkdXJpbmcvYWZ0ZXIgQUREUkZPUk0gKi9cbiB9O1xuIFxuIC8qIHBlciBOVU1BIHN0cnVjdHVyZSBmb3IgbG9ja2xlc3MgcHJvZHVjZXIgdXNhZ2UuICovXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLmZjZDEwMmFlOGJlZGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5AQCAtNTMzLDkgJiM0Mzs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4gXHRpbnQgY29waWVkO1xuIFxuIFx0ZXJyID0gLUVBR0FJTjtcbiYjNDM7YWdhaW46XG4gXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gXHRpZiAoIXNrYilcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7XG4mIzQzO1x0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHR9XG4gXG4gXHRjb3BpZWQgPSBza2ItXHUwMDNlbGVuO1xuIFx0aWYgKGNvcGllZCBcdTAwM2UgbGVuKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi5kMzA3Y2VhOWViYzVjIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0zNzMsNiAmIzQzOzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9IFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2I7XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xuJiM0MztcdHNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7XG4mIzQzO1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuJiM0MztcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuJiM0MztcdFx0XHRmb3VuZCA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7dW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbkBAIC01ODcsNiAmIzQzOzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbiYjNDM7XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4mIzQzO1x0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbiYjNDM7XHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiYjNDM7XHRcdFx0XHRpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHtcbiYjNDM7XHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbiYjNDM7XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4mIzQzO1x0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0XHR9XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4gXHRcdFx0X19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spO1xuIFx0XHRcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jXG5pbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdWRwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jXG5AQCAtODIyLDYgJiM0Mzs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbiYjNDM7XHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4mIzQzO1x0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT19TT0NLRVQ7XG4mIzQzO1x0XHRnb3RvIGRyb3A7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xuIFx0XHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcbiBcdFx0Z290byBkcm9wO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjZjNjBmYmNiOGE1MDg5Y2E3NzFhMWE4YjIwMGIxZGEyMzRjZjVjOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDM6NDM6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCA5OTg5MDZlYzNiMzJhLi5mNzc1Zjc4ZDZiZjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIGVudW0gewogCVVEUF9GTEFHU19BQ0NFUFRfRlJBR0xJU1QsCiAJVURQX0ZMQUdTX0FDQ0VQVF9MNCwKIAlVRFBfRkxBR1NfRU5DQVBfRU5BQkxFRCwgLyogVGhpcyBzb2NrZXQgZW5hYmxlZCBlbmNhcCAqLwomIzQzOwlVRFBfRkxBR1NfQUREUkZPUk0sICAgICAgLyogQmxvY2sgSVB2NiByZWNlaXZlIGR1cmluZy9hZnRlciBBRERSRk9STSAqLwogfTsKIAogLyogcGVyIE5VTUEgc3RydWN0dXJlIGZvciBsb2NrbGVzcyBwcm9kdWNlciB1c2FnZS4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLmZjZDEwMmFlOGJlZGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtNTMzLDkgJiM0Mzs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pCiAJaW50IGNvcGllZDsKIAogCWVyciA9IC1FQUdBSU47CiYjNDM7YWdhaW46CiAJc2tiID0gc29ja19kZXF1ZXVlX2Vycl9za2Ioc2spOwogCWlmICghc2tiKQogCQlnb3RvIG91dDsKJiM0MzsJaWYgKHVubGlrZWx5KHNrLSZndDtza190eXBlID09IFNPQ0tfREdSQU0gJmFtcDsmYW1wOwomIzQzOwkJICAgICBzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOwomIzQzOwkJICAgICB1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJZ290byBhZ2FpbjsKJiM0MzsJfQogCiAJY29waWVkID0gc2tiLSZndDtsZW47CiAJaWYgKGNvcGllZCAmZ3Q7IGxlbikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IGI0Yzk3NzQzNGMyZTAuLmQzMDdjZWE5ZWJjNWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTM3Myw2ICYjNDM7MzczLDMzIEBAIHN0YXRpYyBpbnQgaXB2Nl9zZXRfb3B0X2hkcihzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLAogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9ICZhbXA7dWRwX3NrKHNrKS0mZ3Q7cmVhZGVyX3F1ZXVlOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3JlYWRlcl9xdWV1ZS0mZ3Q7bG9jayk7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzOwlza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikgewomIzQzOwkJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKJiM0MzsJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJc2tiX3F1ZXVlX3dhbGsoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKSB7CiYjNDM7CQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtyZWFkZXJfcXVldWUtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwogaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNTg3LDYgJiM0Mzs2MTQsMTYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkJYnJlYWs7CiAJCQl9CiAKJiM0MzsJCQlpZiAoc2stJmd0O3NrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7CiYjNDM7CQkJCXVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7CiYjNDM7CQkJCXN5bmNocm9uaXplX25ldCgpOwomIzQzOwkJCQlpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHsKJiM0MzsJCQkJCXVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTsKJiM0MzsJCQkJCXJldHYgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCX0KJiM0MzsKIAkJCV9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTsKIAkJCV9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtODIyLDYgJiM0Mzs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCiYjNDM7CWlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHsKJiM0MzsJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDsKJiM0MzsJCWdvdG8gZHJvcDsKJiM0MzsJfQomIzQzOwogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewogCQlkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTsKIAkJZ290byBkcm9wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDM2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHJlbGF0ZWQgdG8gVURQIGFuZCBJUHY2LCBzcGVjaWZpY2FsbHkgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHNhZmV0eSwgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZS4gVGhpcyBzZWVtcyB0byBmYWxsIHVuZGVyIHRoZSAmIzM0O2Jlbmlnbi9kZWZlbnNpdmUgc2VjdXJpdHkvcXVhbGl0eSBhc3N1cmFuY2UmIzM0OyBjYXRlZ29yeSwgd2hpY2ggaXMgZ29vZC4gSXQmIzM5O3MgYWJvdXQgaGFyZGVuaW5nIHRoZSBrZXJuZWwsIG5vdCBpbnRyb2R1Y2luZyBhIGNvbXBsZXRlbHkgbmV3IGZlYXR1cmUuIFRoZSBwcmltYXJ5IHRhc2sgaXMgdHJpYWdlOiB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGhvdy4gVGhhdCBtZWFucyBhdWRpdGluZyB0aGUgY29kZSwgZGVjaWRpbmcgaWYgaXQgc2hvdWxkIGJlIGZ1enplZCwgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGUgbmVjZXNzYXJ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEZyb20gdGhlIGRpZmYsIEkgc2VlIHRoZSBmb2xsb3dpbmcgY2hhbmdlczoKCjEuICBBIG5ldyBgVURQX0ZMQUdTX0FERFJGT1JNYCBmbGFnIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3VkcC5oYC4gT2theSwgYSBuZXcgYml0IGZsYWcuIE1ha2VzIHNlbnNlIGluIGNvbnRleHQuCjIuICBJbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIHRoZSBgaXBfcmVjdl9lcnJvcmAgZnVuY3Rpb24gaXMgdXBkYXRlZC4gSXQgbG9va3MgbGlrZSBpdOKAmXMgZHJvcHBpbmcgSVB2NiBza2JzIGlmIGBVRFBfRkxBR1NfQUREUkZPUk1gIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaXMgbGlrZWx5IGFuIElQdjQtc3BlY2lmaWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyBkcm9wcGluZyBJUHY2IHBhY2tldHMgd2hlbiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcywgd2hldGhlciBpdCYjMzk7cyBkcm9wcGluZyB0aGVtIGZvciB0aGUgcmlnaHQgcmVhc29ucywgb3IgaWYgd2UgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCjMuICBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBub3cgaGFzIGEgaGVscGVyIGZ1bmN0aW9uIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YC4gVGhlIGtleSBjaGFuZ2UgaGVyZSBzZWVtcyB0byBiZSBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgdGhlIGBJUFY2X0FERFJGT1JNYCBvcHRpb24uIFdoZW4gYSBVRFAgc29ja2V0JiMzOTtzIGBBRERSRk9STWAgYml0IGlzIHNldCwgaXQgY2hlY2tzIGlmIHRoZSBxdWV1ZSBoYXMgSVB2NiBza2JzLiBJZiBpdCBkb2VzLCBpdCByZXR1cm5zIGAtRUJVU1lgIGFuZCBjbGVhcnMgdGhlIGJpdC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCByYWNlIG9yIHN0YXRlIGlzc3VlLCBhbmQgYHN5bmNocm9uaXplX25ldCgpYCBpcyBjYWxsZWQgc28gdGhlIGlzc3VlIGlzIGRlYWx0IHdpdGguIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guIFRoaXMgaXMgd2hlcmUgbW9zdCBvZiB0aGUgcmVsZXZhbnQgZnV6emluZyBtaWdodCBuZWVkIHRvIGJlIGNvbmNlbnRyYXRlZCB0byBmaW5kIGJ1Z3MgaW4gdGhlIGVkZ2UgY2FzZS4KNC4gIEZpbmFsbHksIGBuZXQvaXB2Ni91ZHAuY2AsIGluIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAsIGlmIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQgb24gdGhlIHNvY2tldCwgdGhlIHBhY2tldCBpcyBkcm9wcGVkLiBUaGlzIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgbG9naWMuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhwZXJ0aXNlIGFuZCB0b29scy4gSSYjMzk7bSBnb2luZyB0byB1c2UgbXkgZ3JlcCBza2lsbHMgYW5kIGNvZGUtcmVhZGluZyBrbm93bGVkZ2UgdG8gaW5zcGVjdCB0aGVzZSBmaWxlcywgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gd2l0aCByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgQUREUkZPUk1gIGZsYWcgY29tcGxldGVseSwgd2hhdCBzaXR1YXRpb25zIHRyaWdnZXIgaXQsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBkcm9wcGluZyBwYWNrZXRzIG9yIHJldHVybmluZyBgLUVCVVNZYC4gSSB3aWxsIGFsc28gY2hlY2sgd2hhdCBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgYXJlIHVzaW5nIHRoaXMgbmV3IGZsYWcgb3IgdGhlIGZ1bmN0aW9ucy92YXJpYWJsZXMgdGhhdCBhcmUgYmVpbmcgYWRkZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGFuZCB3aGV0aGVyIGl0JiMzOTtzIGFwcHJvcHJpYXRlIGZvciBzeXprYWxsZXIuIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSBpZiBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkLCBpZiBhbnkgYEZvY3VzU3ltYm9sc2AgbmVlZCB0byBiZSBzZXQsIGFuZCB3aGF0IG15IGZpbmFsIHJlY29tbWVuZGF0aW9uIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBWNl9BRERSRk9STSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZl9pbmV0Ni5jPTQyNj1pbnQgaW5ldDZfYmluZF9zayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMxLVxubmV0L2lwdjYvYWZfaW5ldDYuYzo0MzI6XHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cbm5ldC9pcHY2L2FmX2luZXQ2LmMtNDMzLVx0cHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTU0Nz1pbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYy01NjktXHRkZWZhdWx0OlxubmV0L2lwdjYvYWZfaW5ldDYuYzo1NzA6XHRcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xubmV0L2lwdjYvYWZfaW5ldDYuYy01NzEtXHRcdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTYzOC1cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjM5Olx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02NDU9aW50IGluZXQ2X3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSxcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1My1cbm5ldC9pcHY2L2FmX2luZXQ2LmM6NjU0Olx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY1NS1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTQwMz1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc3LVx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NTc4Olx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc5LVx0ICovXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU4NC1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo1ODU6XHRjYXNlIElQVjZfQUREUkZPUk06XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTg2LVx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTExNT1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTEyNy1cdHN3aXRjaCAob3B0bmFtZSkge1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMjg6XHRjYXNlIElQVjZfQUREUkZPUk06XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTEyOS1cdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IFNvY2tldCBHbHVlKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgbXkgZXhwZXJ0aXNlIGFuZCBpbnN0aXR1dGlvbmFsIGtub3dsZWRnZSB0byBuYXZpZ2F0ZSB0byB0aGUgdmljaW5pdHkgb2YgbGluZSA1ODUgd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bGwgZW1wbG95IHRoZSB0cnVzdHkgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBpbW1lZGlhdGVseSBhY2Nlc3MgYW5kIGV4YW1pbmUgdGhlIGNvZGUuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBxdWlja2x5IGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHN0YXJ0IHRyYWNpbmcgdGhlIGxvZ2ljIEkgYW0gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU4MDpcdFx0aWYgKHVubGlrZWx5KHNrLVx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXG4gNTgxOlx0XHRcdGdvdG8gdW5sb2NrO1xuIDU4MjpcdFxuIDU4MzpcdFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gNTg0Olx0XG4gNTg1Olx0XHRjYXNlIElQVjZfQUREUkZPUk06XG4gNTg2Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpKVxuIDU4NzpcdFx0XHRcdGdvdG8gZV9pbnZhbDtcbiA1ODg6XHRcdFx0aWYgKHZhbCA9PSBQRl9JTkVUKSB7XG4gNTg5Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19SQVcpXG4gNTkwOlx0XHRcdFx0XHRicmVhaztcbiA1OTE6XHRcbiA1OTI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbiA1OTM6XHRcdFx0XHRcdGlmICh1ZHBfc2soc2spLVx1MDAzZXBlbmRpbmcgPT0gQUZfSU5FVDYpIHtcbiA1OTQ6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1OTU6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTk2Olx0XHRcdFx0XHR9XG4gNTk3Olx0XHRcdFx0fSBlbHNlIGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU5ODpcdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QgIT0gXHUwMDI2dGNwdjZfcHJvdCkge1xuIDU5OTpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDYwMDpcdFx0XHRcdFx0XHRicmVhaztcbiA2MDE6XHRcdFx0XHRcdH1cbiA2MDI6XHRcdFx0XHR9IGVsc2Uge1xuIDYwMzpcdFx0XHRcdFx0YnJlYWs7XG4gNjA0Olx0XHRcdFx0fVxuIDYwNTpcdFxuIDYwNjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiA2MDc6XHRcdFx0XHRcdHJldHYgPSAtRU5PVENPTk47XG4gNjA4Olx0XHRcdFx0XHRicmVhaztcbiA2MDk6XHRcdFx0XHR9XG4gNjEwOlx0XG4gNjExOlx0XHRcdFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxuIDYxMjpcdFx0XHRcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSkge1xuIDYxMzpcdFx0XHRcdFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xuIDYxNDpcdFx0XHRcdFx0YnJlYWs7XG4gNjE1Olx0XHRcdFx0fVxuIDYxNjpcdFxuIDYxNzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuIDYxODpcdFx0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbiA2MTk6XHRcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuIDYyMDpcdFx0XHRcdFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XG4gNjIxOlx0XHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbiA2MjI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MjM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjI0Olx0XHRcdFx0XHR9XG4gNjI1Olx0XHRcdFx0fVxuIDYyNjpcdFxuIDYyNzpcdFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiA2Mjg6XHRcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gNjI5Olx0XG4gNjMwOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4gNjMxOlx0XHRcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4gNjMyOlx0XG4gNjMzOlx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDYzNDpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnRjcF9wcm90LCAxKTtcbiA2MzU6XHRcbiA2MzY6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9zdHJlYW1fb3BzICovXG4gNjM3Olx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX3Byb3QsIFx1MDAyNnRjcF9wcm90KTtcbiA2Mzg6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRSgpIGluIHRjcF8oZ2V0fHNldClzb2Nrb3B0KCkgKi9cbiA2Mzk6XHRcdFx0XHRcdFdSSVRFX09OQ0UoaWNzay1cdTAwM2VpY3NrX2FmX29wcywgXHUwMDI2aXB2NF9zcGVjaWZpYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIElQdjYgVURQIEFkZHJlc3MgRm9ybSBIYW5kbGluZyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIFVEUCBhZGRyZXNzIGZvcm0gaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZSBhbmQgZm9jdXMgb24gbGluZXMgNjQwIHRvIDcwMC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyB0aGF0IGRlZmluZXMgaG93IFVEUCBzb2NrZXQgYWRkcmVzc2luZyBpcyBtYW5hZ2VkIHdpdGggSVB2Ni4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgYWRkcmVzcyBmb3JtYXRzIGFuZCBob3cgdGhlIHRyYW5zaXRpb24gaXMgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyB3aGF0IEkgZXhwZWN0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhbmQgbWFrZSBzdXJlIGl0IGlzIHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY0MDpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xuIDY0MTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xuIDY0MjpcdFx0XHRcdFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVx1MDAzZWljc2tfcG10dV9jb29raWUpO1xuIDY0MzpcdFx0XHRcdH0gZWxzZSB7XG4gNjQ0Olx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDY0NTpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnVkcF9wcm90LCAxKTtcbiA2NDY6XHRcbiA2NDc6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cbiA2NDg6XHRcdFx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCwgXHUwMDI2dWRwX3Byb3QpO1xuIDY0OTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X2RncmFtX29wcyk7XG4gNjUwOlx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XG4gNjUxOlx0XHRcdFx0fVxuIDY1MjpcdFxuIDY1MzpcdFx0XHRcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxuIDY1NDpcdFx0XHRcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcbiA2NTU6XHRcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG4gNjU2Olx0XHRcdFx0ICovXG4gNjU3Olx0XHRcdFx0bnAtXHUwMDNlcnhvcHQuYWxsID0gMDtcbiA2NTg6XHRcbiA2NTk6XHRcdFx0XHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xuIDY2MDpcdFxuIDY2MTpcdFx0XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIDY2MjpcdFx0XHRcdHJldHYgPSAwO1xuIDY2MzpcdFx0XHRcdGJyZWFrO1xuIDY2NDpcdFx0XHR9XG4gNjY1Olx0XHRcdGdvdG8gZV9pbnZhbDtcbiA2NjY6XHRcbiA2Njc6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNjY4Olx0XHRcdGlmIChvcHRsZW4gXHUwMDNjIHNpemVvZihpbnQpIHx8XG4gNjY5Olx0XHRcdCAgICBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X251bSlcbiA2NzA6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNjcxOlx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gdmFsYm9vbDtcbiA2NzI6XHRcdFx0cmV0diA9IDA7XG4gNjczOlx0XHRcdGJyZWFrO1xuIDY3NDpcdFxuIDY3NTpcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDY3NjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA2Nzc6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNjc4Olx0XHRcdG5wLVx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcbiA2Nzk6XHRcdFx0cmV0diA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgaXBfc29ja2dsdWUuY2AqKgoKT2theSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JraW5nIGlzc3VlLCBhbmQgaXQmIzM5O3MgdGltZSB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGUgcHJvYmxlbSBtaWdodCBiZSByZWxhdGVkIHRvIGhvdyBzb2NrZXRzIGFyZSBnbHVlZCB0b2dldGhlciwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgSVAgbGF5ZXIuIEkmIzM5O20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDUzMyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBzb21lIGtleSBzb2NrZXQgb3BlcmF0aW9ucyBvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIGFtIGludmVzdGlnYXRpbmcgYW4gSVAtcmVsYXRlZCBwcm9ibGVtIGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyNTpcdFx0c3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2VycjtcbiA1MjY6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNTI3Olx0XHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaW4sIG1zZy1cdTAwM2Vtc2dfbmFtZSk7XG4gNTI4Olx0XHRzdHJ1Y3Qge1xuIDUyOTpcdFx0XHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgZWU7XG4gNTMwOlx0XHRcdHN0cnVjdCBzb2NrYWRkcl9pblx0IG9mZmVuZGVyO1xuIDUzMTpcdFx0fSBlcnJoZHI7XG4gNTMyOlx0XHRpbnQgZXJyO1xuIDUzMzpcdFx0aW50IGNvcGllZDtcbiA1MzQ6XHRcbiA1MzU6XHRcdGVyciA9IC1FQUdBSU47XG4gNTM2Olx0YWdhaW46XG4gNTM3Olx0XHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gNTM4Olx0XHRpZiAoIXNrYilcbiA1Mzk6XHRcdFx0Z290byBvdXQ7XG4gNTQwOlx0XHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFx1MDAyNlx1MDAyNlxuIDU0MTpcdFx0XHQgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuIDU0MjpcdFx0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuIDU0MzpcdFx0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcbiA1NDQ6XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA1NDU6XHRcdFx0Z290byBhZ2FpbjtcbiA1NDY6XHRcdH1cbiA1NDc6XHRcbiA1NDg6XHRcdGNvcGllZCA9IHNrYi1cdTAwM2VsZW47XG4gNTQ5Olx0XHRpZiAoY29waWVkIFx1MDAzZSBsZW4pIHtcbiA1NTA6XHRcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfVFJVTkM7XG4gNTUxOlx0XHRcdGNvcGllZCA9IGxlbjtcbiA1NTI6XHRcdH1cbiA1NTM6XHRcdGVyciA9IHNrYl9jb3B5X2RhdGFncmFtX21zZyhza2IsIDAsIG1zZywgY29waWVkKTtcbiA1NTQ6XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4gNTU1Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDU1NjpcdFx0XHRyZXR1cm4gZXJyO1xuIDU1NzpcdFx0fVxuIDU1ODpcdFx0c29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpO1xuIDU1OTpcdFxuIDU2MDpcdFx0c2VyciA9IFNLQl9FWFRfRVJSKHNrYik7XG4gNTYxOlx0XG4gNTYyOlx0XHRpZiAoc2luIFx1MDAyNlx1MDAyNiBpcHY0X2RhdGFncmFtX3N1cHBvcnRfYWRkcihzZXJyKSkge1xuIDU2MzpcdFx0XHRzaW4tXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4gNTY0Olx0XHRcdHNpbi1cdTAwM2VzaW5fYWRkci5zX2FkZHIgPSAqKF9fYmUzMiAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSAmIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Nzk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgVURQdjYgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gemVybyBpbiBvbiBgbmV0L2lwdjYvdWRwLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgODIyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhhbmRsaW5nIG9mLCBsZXQmIzM5O3Mgc2F5LCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgb3IgbWF5YmUgc29tZSBmcmFnbWVudGF0aW9uIGlzc3VlcyB3aXRoaW4gdGhlIFVEUHY2IGltcGxlbWVudGF0aW9uLiBJIHJlY2FsbCBzb21lIHN1YnRsZXRpZXMgdGhlcmUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZWl0aGVyIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBJUHY2IGhlYWRlciBvciBwZXJoYXBzIHNvbWUgb2YgdGhlIG9mZmxvYWQgZmVhdHVyZXMuIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoZSBwbGFjZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMgYXJlIGluIHBsYWNlIGFuZCB0aGF0IHRoZSBwYWNrZXQgZ2V0cyByb3V0ZWQgY29ycmVjdGx5IGFmdGVyIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiwgYnV0IEkmIzM5O2xsIHNlZSB3aGVyZSB0aGlzIHRha2VzIG1lLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRcbiA4MTY6XHRcdHJldHVybiAwO1xuIDgxNzpcdH1cbiA4MTg6XHRcbiA4MTk6XHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA4MjA6XHR7XG4gODIxOlx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiBkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9OT1RfU1BFQ0lGSUVEO1xuIDgyMjpcdFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gODIzOlx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gODI0Olx0XG4gODI1Olx0XHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4gODI2Olx0XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbiA4Mjc6XHRcdFx0Z290byBkcm9wO1xuIDgyODpcdFx0fVxuIDgyOTpcdFxuIDgzMDpcdFx0aWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gODMxOlx0XHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xuIDgzMjpcdFx0XHRnb3RvIGRyb3A7XG4gODMzOlx0XHR9XG4gODM0Olx0XHRuZl9yZXNldF9jdChza2IpO1xuIDgzNTpcdFxuIDgzNjpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2dWRwdjZfZW5jYXBfbmVlZGVkX2tleSkgXHUwMDI2XHUwMDI2XG4gODM3Olx0XHQgICAgUkVBRF9PTkNFKHVwLVx1MDAzZWVuY2FwX3R5cGUpKSB7XG4gODM4Olx0XHRcdGludCAoKmVuY2FwX3Jjdikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiA4Mzk6XHRcbiA4NDA6XHRcdFx0LypcbiA4NDE6XHRcdFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cbiA4NDI6XHRcdFx0ICogdGhlIHNvY2tldCYjMzk7cyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XG4gODQzOlx0XHRcdCAqIGZhbGwgdGhyb3VnaCBhbmQgcGFzcyB0aGlzIHVwIHRoZSBVRFAgc29ja2V0LlxuIDg0NDpcdFx0XHQgKiB1cC1cdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XG4gODQ1Olx0XHRcdCAqID0wIGlmIHNrYiB3YXMgc3VjY2Vzc2Z1bGx5IHBhc3NlZCB0byB0aGUgZW5jYXBcbiA4NDY6XHRcdFx0ICogICAgaGFuZGxlciBvciB3YXMgZGlzY2FyZGVkIGJ5IGl0LlxuIDg0NzpcdFx0XHQgKiBcdTAwM2UwIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC5cbiA4NDg6XHRcdFx0ICogXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXG4gODQ5Olx0XHRcdCAqL1xuIDg1MDpcdFxuIDg1MTpcdFx0XHQvKiBpZiB3ZSYjMzk7cmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xuIDg1MjpcdFx0XHRlbmNhcF9yY3YgPSBSRUFEX09OQ0UodXAtXHUwMDNlZW5jYXBfcmN2KTtcbiA4NTM6XHRcdFx0aWYgKGVuY2FwX3Jjdikge1xuIDg1NDpcdFx0XHRcdGludCByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBJUHY2IHRvIElQdjQgQWRkcmVzcyBDb252ZXJzaW9uIG9uIFVEUCBTb2NrZXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBuZXR3b3JrIHNvY2tldCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBjb252ZXJzaW9uIG9mIElQdjYgdG8gSVB2NCBhZGRyZXNzIGZvcm1hdHMgb24gVURQIHNvY2tldHMgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5PyBUaGUgYWltIGlzIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgZXJyb25lb3VzbHkgcHJvY2Vzc2VkIG9yLCB3b3JzZSwgZGVxdWV1ZWQgYXMgSVB2NCBlcnJvcnMgYWZ0ZXIgYSBVRFAgc29ja2V0IGlzIHN3aXRjaGVkIHRvIElQdjQgdmlhIGBJUFY2X0FERFJGT1JNYC4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIHNldHMgYW4gYEFERFJGT1JNYCBmbGFnLCBjYWxscyBgc3luY2hyb25pemVfbmV0KClgLCBhbmQgdGhlbiBjaGVja3MgaWYgSVB2NiBwYWNrZXRzIGFyZSBzdGlsbCBsaW5nZXJpbmcgYXJvdW5kIGluIHRoZSByZWNlaXZlIHF1ZXVlcyAoYHJlYWRlcl9xdWV1ZWAgb3IgYHNrX3JlY2VpdmVfcXVldWVgKS4gSW4gYG5ldC9pcHY2L3VkcC5jYCwgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBwcm9hY3RpdmVseSBkcm9wcyBJUHY2IHBhY2tldHMgaWYgdGhlIGBBRERSRk9STWAgZmxhZyBpcyBzZXQuIFRoZW4sIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCwgYGlwX3JlY3ZfZXJyb3JgIGZ1cnRoZXIgZW5mb3JjZXMgdGhpcyBieSBkcm9wcGluZyBJUHY2IHNrYnMgaWYgdGhlIGBBRERSRk9STWAgZmxhZyBpcyBzZXQgb24gYSBVRFAgc29ja2V0LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBhcmVhIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZz8gVGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgWUVTISBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbnZvbHZlZCBpbiBBRl9JTkVUNi9BRl9JTkVUIHNvY2tldCBvcHRpb25zLCB0aGUgVURQIHNvY2tldCByZWNlaXZlIHBhdGgsIGFuZCBlcnJvciBxdWV1ZSBoYW5kbGluZy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHM6IGBzZXRzb2Nrb3B0KC4uLiwgSVBQUk9UT19JUFY2LCBJUFY2X0FERFJGT1JNLCAuLi4pYCwgYHJlY3Ztc2coLi4uLCBNU0dfRVJSUVVFVUUpYCwgYW5kIGJhc2ljIFVEUCBwYWNrZXQgcmVjZXB0aW9uLiBUaGlzIGlzIHRleHRib29rIGZ1enppbmcgdGVycml0b3J5IQoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGZ1enppbmcgc3RyYXRlZ3ksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMuIE9idmlvdXNseSwgSVB2NiBuZWVkcyB0byBiZSBlbmFibGVkLCBzbyB3ZSBuZWVkIGBDT05GSUdfSVBWNmAgKG9yIGp1c3QgYElQVjZgIHdpdGhvdXQgdGhlIHByZWZpeCkuIGBDT05GSUdfSU5FVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBmb3IgYW55IG5ldHdvcmtpbmctcmVsYXRlZCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gYElQVjZgIG9yIHRoZXNlIHNwZWNpZmljIGZpbGVzIChgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBgdWRwLmNgKSwgYnV0IHRoZSBjb3JlIGVsZW1lbnRzIGxvb2sgcHJvbWlzaW5nIGZvciBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfc29ja2dsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtNy1cdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTktXHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgSVB2NiBJbmZyYXN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciBgaXB2Nl9zb2NrZ2x1ZS5vYCBhbmQgYHVkcC5vYC4gV2hlcmUgd291bGQgSSBmaW5kIHRoZSBtb3N0IHJlbGlhYmxlIGJ1aWxkIGluZm9ybWF0aW9uPyBUaGUga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyB0aGUgcGxhY2UgdG8gYmUsIG9mIGNvdXJzZS4gU28sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgbmV0L2lwdjYvTWFrZWZpbGVgLiBUaGlzIGlzIHdoZXJlIHRoZSBidWlsZCBwcm9jZXNzIGRlZmluZXMgaG93IHRoZXNlIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGxpbmtlZCwgd2hpY2ggc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBJIG5lZWQuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBidWlsZCBjb250ZXh0IGZvciB0aGVzZSBjcnVjaWFsIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc29ja2dsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgSVBWNmAgKGFuZCBhbHNvIGBJTkVUYCwgb2YgY291cnNlKS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGVyZSB3ZSYjMzk7dmUgbWFkZSBjaGFuZ2VzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHN5bWJvbHMgaW52b2x2ZWQuIE15IGluaXRpYWwgc2NhbiBoYXMgdHVybmVkIHVwIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGVpdGhlciBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byB3aGVyZSB0aGVzZSBhcHBlYXIgaW4gdGhlIGtlcm5lbDoKCiogICBXZSBoYXZlIGBkb19pcHY2X3NldHNvY2tvcHRgLCBvciBwb3RlbnRpYWxseSBpdHMgdmFyaWFudHMgYGlwdjZfc2V0c29ja29wdGAgb3IgYW5vdGhlciBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobmVlZCB0byBjbGFyaWZ5IHRoZSBkaWZmZXJlbmNlcyBhbmQgdGhlaXIgY2FsbHMpLgoqICAgVGhlbiB0aGVyZSBpcyBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAsIHdoaWNoIGlzIHN0YXRpYywgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgaXQmIzM5O3MgdXNlZCBhbmQgaWYgaXQgZ2V0cyBpbmxpbmVkLCBvciBpZiBpdCBoYXMgc29tZSBleHRlcm5hbCBkZXBlbmRlbmNpZXMuCiogICBBbHNvLCBgaXBfcmVjdl9lcnJvcmAgc2hvdWxkIGJlIGltcG9ydGFudCB0byBzdHVkeS4KKiAgIFRoZW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYC4KKiAgIEFuZCBmaW5hbGx5LCBgdWRwdjZfcmVjdm1zZ2Agb3IgYWdhaW4gYGlwdjZfc2V0c29ja29wdGAuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hpY2ggb2YgdGhlc2UgYXJlIGFjdHVhbGx5ICpkZWZpbmVkKiBub24tc3RhdGljYWxseSwgb3IgYXQgbGVhc3QgaG93IG1hbnkgZGlzdGluY3Qgc3RhdGljIHN5bWJvbHMgd2UgaGF2ZS4gSXQgbG9va3MgbGlrZToKCiogICBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBpcyBub24tc3RhdGljIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBHb29kLgoqICAgYGlwX3JlY3ZfZXJyb3JgIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJbnRlcmVzdGluZywgdGhpcyBsb29rcyBsaWtlIGFuIElQdjQgZnVuY3Rpb24sIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkLgoqICAgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBpcyBzdGF0aWMgaW4gYG5ldC9pcHY2L3VkcC5jYCwgc28gd2UgaGF2ZSB0byB3YXRjaCBob3cgdGhhdCBnZXRzIHVzZWQuCiogICBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAgaXMgc3RhdGljIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBPa2F5LgoqICAgQW5kIGZpbmFsbHksIGBpcHY2X3NldHNvY2tvcHRgLCB3aGljaCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgaW4gYGlwdjZfc29ja2dsdWUuY2AgYW5kIGNhbGxzIGBkb19pcHY2X3NldHNvY2tvcHRgLiBUaGF0IG1ha2VzIHNlbnNlLgoKU28gbmV4dCwgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGF0LCBwYXJ0aWN1bGFybHksIGlmIHRoZSBmdW5jdGlvbnMgbWFrZSB0aGVpciB3YXkgaW50byBzb21lIG1vZHVsZSBleHBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTM3Nj1zdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNDAyLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjQwMzppbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDQtXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy05OTAtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6OTkxOmludCBpcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTk5Mi1cdFx0ICAgIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDEtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwMjpcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDAzLSNpZmRlZiBDT05GSUdfTkVURklMVEVSXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTAtfVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwMTE6RVhQT1JUX1NZTUJPTChpcHY2X3NldHNvY2tvcHQpO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDA3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIENhbGxlcnMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L3VkcC5jYC4gSXQmIzM5O3MgY3J1Y2lhbCwgYW5kIHRoZSBiZXN0IHdheSB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5ICpjYWxsKiB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgcmV2ZWFsIHRoZSBleGVjdXRpb24gY29udGV4dCBhbmQgdGhlIHR5cGVzIG9mIHNpdHVhdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgY3JpdGljYWwgcGF0aC4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cgb2YgdGhlIElQdjYgVURQIHN0YWNrLiBUaW1lIHRvIGNoZWNrIHRoZSBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTc4NT1zdGF0aWMgaW50IF9fdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdWRwLmMtODE4LVxubmV0L2lwdjYvdWRwLmM6ODE5OnN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjYvdWRwLmMtODIwLXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz04OTU9c3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni91ZHAuYy05MDAtXHRpZiAobGlrZWx5KCF1ZHBfdW5leHBlY3RlZF9nc28oc2ssIHNrYikpKVxubmV0L2lwdjYvdWRwLmM6OTAxOlx0XHRyZXR1cm4gdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc2ssIHNrYik7XG5uZXQvaXB2Ni91ZHAuYy05MDItXG4tLVxubmV0L2lwdjYvdWRwLmMtOTA4LVx0XHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XG5uZXQvaXB2Ni91ZHAuYzo5MDk6XHRcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xubmV0L2lwdjYvdWRwLmMtOTEwLVx0XHRpZiAocmV0IFx1MDAzZSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgVURQdjYgcmVjZXB0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgY3JvcHBpbmcgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgcmVjZWl2ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgX191ZHA2X2xpYl9yY3ZgLCBgdWRwdjZfcXVldWVfcmN2X3NrYmAsIGFuZCBgdWRwdjZfcmN2YCB3aXRoaW4gdGhlIGBuZXQvaXB2Ni91ZHAuY2AgZmlsZS4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBkZWJ1Z2dpbmcgVURQdjYgcmVjZXB0aW9uIGlzc3VlcywgYW5kIHRoZXkmIzM5O3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCB0cmFjaW5nIHBhY2tldCBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIHF1ZXVlaW5nIHByb2JsZW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5IHdoZXJlIEkgY2FuIGdldCBzb21lIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcHY2X3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3VkcC5jPTEwNTU9c3RhdGljIGludCB1ZHA2X2NzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aClcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xMDg2LVxubmV0L2lwdjYvdWRwLmM6MTA4NzpJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni91ZHAuYy0xMDg4LXtcbi0tXG5uZXQvaXB2Ni91ZHAuYz0xOTU3PWludCBfX2luaXQgdWRwdjZfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY2L3VkcC5jLTE5NjEtXHRuZXRfaG90ZGF0YS51ZHB2Nl9wcm90b2NvbCA9IChzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wpIHtcbm5ldC9pcHY2L3VkcC5jOjE5NjI6XHRcdC5oYW5kbGVyICAgICA9IHVkcHY2X3Jjdixcbm5ldC9pcHY2L3VkcC5jLTE5NjMtXHRcdC5lcnJfaGFuZGxlciA9IHVkcHY2X2VycixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NDgKCQkJCQkJCW91dHB1dDogMjMzCgkJCQkJCQl0aG91Z2h0czogNDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgSVB2NiB0byBJUHY0IEFkZHJlc3MgRmFtaWx5IENvbnZlcnNpb24qKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHMuIEkgc2VlOiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCwgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLCBgaXBfcmVjdl9lcnJvcmAsIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAsIGFuZCBgaXB2Nl9zZXRzb2Nrb3B0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgY2FuIHRlbGwgdGhlc2UgYXJlbiYjMzk7dCBnZW5lcmljIGhvdHNwb3RzIGxpa2UgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBUaGV5IGFyZSBhbGwgcHJldHR5IHNwZWNpZmljLiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBhbmQgYGlwdjZfc2V0c29ja29wdGAgYXJlIGZvciBJUHY2IHNvY2tldCBvcHRpb25zIG9ubHkuIGBpcF9yZWN2X2Vycm9yYCBpcyBhYm91dCB0aGUgZXJyb3IgcXVldWUgZm9yIElQdjQsIG5vdCB0aGUgaG90IHBhdGguIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgc3BlY2lmaWNhbGx5IGFib3V0IHJlY2VpdmluZyBVRFB2NiBwYWNrZXRzLCBhbmQgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgIGlzIHRoYXQgbmV3IGhlbHBlciB3ZSBhZGRlZCBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSB0aGUgY29uZmlncywgd2UgaGF2ZSBgSVBWNmAgYW5kIGBJTkVUYCwgc28gdGhhdCYjMzk7cyBnb29kLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBVRFAgaGFuZGxpbmcgdGhhdCBvY2N1ciB3aGVuIHdlIGNvbnZlcnQgYSBzb2NrZXQgZnJvbSBJUHY2IHRvIElQdjQgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzb2NrZXQgb3B0aW9uLiBXZSYjMzk7cmUgYWRkaW5nIHRoZSBgVURQX0ZMQUdTX0FERFJGT1JNYCBiaXQgdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyByZWNlaXZlZCB2aWEgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgYW5kIHdlJiMzOTtyZSBkcm9wcGluZyBsZWZ0b3ZlciBJUHY2IHBhY2tldHMgdGhhdCBlbmQgdXAgaW4gdGhlIGVycm9yIHF1ZXVlIHVzaW5nIGBpcF9yZWN2X2Vycm9yYC4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCB3ZSYjMzk7cmUgYWRkaW5nIGNoZWNrcyB0byBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aXRoIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCB0byBtYWtlIHN1cmUgd2UgcmVqZWN0IHRoZSBjb252ZXJzaW9uIGlmIHRoZXJlIGFyZSBhbnkgSVB2NiBwYWNrZXRzIHN0aWxsIHdhaXRpbmcgaW4gdGhlIFVEUCByZWFkZXIgb3IgcmVjZWl2ZSBxdWV1ZXMuIFNvLCBlc3NlbnRpYWxseSwgd2UmIzM5O3JlIG1vZGlmeWluZyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgc3VjaCBhcyBgc2V0c29ja29wdGAgYW5kIGByZWN2bXNnYC4KCkFscmlnaHQsIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2JiMzNDssCiAgICAmIzM0O2lwX3JlY3ZfZXJyb3ImIzM0OywKICAgICYjMzQ7dWRwdjZfcXVldWVfcmN2X29uZV9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgdG8gaGFuZGxlIFVEUCBJUHY2LXRvLUlQdjQgY29udmVyc2lvbiB2aWEgdGhlIElQVjZfQUREUkZPUk0gc29ja2V0IG9wdGlvbi4gSXQgaW50cm9kdWNlcyBVRFBfRkxBR1NfQUREUkZPUk0gdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKSBhbmQgZHJvcHMgdW5leHBlY3RlZCBJUHY2IHNrYnMgZnJvbSB0aGUgZXJyb3IgcXVldWUgKGlwX3JlY3ZfZXJyb3IpLiBJdCBhbHNvIGFkZHMgcXVldWUgaW5zcGVjdGlvbiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NikgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0IGJlZm9yZSBhbGxvd2luZyB0aGUgYWRkcmVzcyBmb3JtIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiBVRFAgYW5kIHNvY2tldCBvcHRpb25zLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcHY2X3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7dWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NiYjMzQ7LAogICAgJiMzNDtpcF9yZWN2X2Vycm9yJiMzNDssCiAgICAmIzM0O3VkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNmM2MGZiY2I4YTUwODljYTc3MWExYThiMjAwYjFkYTIzNGNmNWM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oCmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWRwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91ZHAuaApAQCAtNjcsNiAmIzQzOzY3LDcgQEAgZW51bSB7CiAJVURQX0ZMQUdTX0FDQ0VQVF9GUkFHTElTVCwKIAlVRFBfRkxBR1NfQUNDRVBUX0w0LAogCVVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovCiYjNDM7CVVEUF9GTEFHU19BRERSRk9STSwgICAgICAvKiBCbG9jayBJUHY2IHJlY2VpdmUgZHVyaW5nL2FmdGVyIEFERFJGT1JNICovCiB9OwogCiAvKiBwZXIgTlVNQSBzdHJ1Y3R1cmUgZm9yIGxvY2tsZXNzIHByb2R1Y2VyIHVzYWdlLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC01MzMsOSAmIzQzOzUzMywxNyBAQCBpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbikKIAlpbnQgY29waWVkOwogCiAJZXJyID0gLUVBR0FJTjsKJiM0MzthZ2FpbjoKIAlza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7CiAJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwomIzQzOwlpZiAodW5saWtlbHkoc2stJmd0O3NrX3R5cGUgPT0gU09DS19ER1JBTSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHsKJiM0MzsJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwl9CiAKIAljb3BpZWQgPSBza2ItJmd0O2xlbjsKIAlpZiAoY29waWVkICZndDsgbGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMzczLDYgJiM0MzszNzMsMzMgQEAgc3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcmVhZGVyX3F1ZXVlID0gJmFtcDt1ZHBfc2soc2spLSZndDtyZWFkZXJfcXVldWU7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7cmVhZGVyX3F1ZXVlLSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7c2stJmd0O3NrX3JlY2VpdmVfcXVldWUubG9jayk7CiYjNDM7CXNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7CiYjNDM7CQlpZiAoc2tiLSZndDtwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewomIzQzOwkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlza2JfcXVldWVfd2FsaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLCBza2IpIHsKJiM0MzsJCWlmIChza2ItJmd0O3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CiYjNDM7CQkJZm91bmQgPSB0cnVlOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlLmxvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3JlYWRlcl9xdWV1ZS0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CkBAIC01ODcsNiAmIzQzOzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCWlmIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKJiM0MzsJCQkJdWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTsKJiM0MzsJCQkJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CQkJCWlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkgewomIzQzOwkJCQkJdWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spOwomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwogCQkJX19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spOwogCQkJX19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDkzNDc4ZDFhZDU3NjkuLmNjZDhhZTkyZjUyYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3VkcC5jCkBAIC04MjIsNiAmIzQzOzgyMiwxMSBAQCBzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spKSkgewomIzQzOwkJZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUOwomIzQzOwkJZ290byBkcm9wOwomIzQzOwl9CiYjNDM7CiAJaWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7CiAJCWRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZOwogCQlnb3RvIGRyb3A7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjQ4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVURQIEFkZHJlc3MgRm9ybSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHRodXMgbmVjZXNzaXRhdGluZyBLTVNBTiBhbmFseXNpcy4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGFjdHVhbGx5IGRvZXMuCgpJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGZvciBVRFAgc29ja2V0cyBhbmQgaG93IHdlIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIElQdjYgYW5kIElQdjQuCgpIZXJlJiMzOTtzIHRoZSBicmVha2Rvd246CgoxLiAgQSBuZXcgZmxhZywgYFVEUF9GTEFHU19BRERSRk9STWAsIGlzIGludHJvZHVjZWQgaW4gYGluY2x1ZGUvbGludXgvdWRwLmhgLgoyLiAgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgIG5vdyBoYXMgc29tZSBjb25kaXRpb25hbCBsb2dpYyBpbiBgaXBfcmVjdl9lcnJvcigpYC4gSWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFVEUCBkYXRhZ3JhbSBzb2NrZXQsIHRoZSBVRFAgYEFERFJGT1JNYCBmbGFnIGlzIHNldCwgYW5kIHRoZSBwYWNrZXQgaXMgSVB2NiwgdGhlIGNvZGUgY29uc3VtZXMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgbG9vcHMsIGZldGNoaW5nIGFub3RoZXIgYHNrYmAuIEVmZmVjdGl2ZWx5LCB0aGlzIGRpc2NhcmRzIHRoZSBJUHY2IHBhY2tldC4KMy4gIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24sIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KClgLCB3aGljaCBjaGVja3MgdGhlIHJlY2VpdmUgcXVldWVzIG9mIHRoZSBzb2NrZXQgZm9yIGFueSBsaW5nZXJpbmcgSVB2NiBwYWNrZXRzIHdoZW4gdGhlIGBJUFY2X0FERFJGT1JNYCBvcHRpb24gaXMgdXNlZC4gVGhlIGZ1bmN0aW9uIGFjcXVpcmVzIGxvY2tzIHRvIHNhZmVseSB0cmF2ZXJzZSB0aGUgcXVldWVzLiBJbiB0aGUgYGRvX2lwdjZfc2V0c29ja29wdCgpYCBmdW5jdGlvbiwgd2hlbiBgSVBWNl9BRERSRk9STWAgaXMgc2V0IG9uIGEgVURQIHNvY2tldCwgdGhlIGBBRERSRk9STWAgYml0IGlzIHNldCwgYHN5bmNocm9uaXplX25ldCgpYCBpcyBjYWxsZWQgKGxpa2VseSB0byBlbnN1cmUgcHJvcGVyIG1lbW9yeSBvcmRlcmluZyksIGFuZCB0aGVuIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KClgIGlzIGNoZWNrZWQuIElmIGFueSBJUHY2IHBhY2tldHMgYXJlIHN0aWxsIHByZXNlbnQsIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBjbGVhcmVkLCBhbmQgYW4gYC1FQlVTWWAgZXJyb3IgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdG8gcHJldmVudCBhIHR5cGUgY29uZnVzaW9uIHNpdHVhdGlvbi4KNC4gIGBuZXQvaXB2Ni91ZHAuY2Agbm93IGluY2x1ZGVzIGEgY2hlY2sgaW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKClgLiBJZiB0aGUgYEFERFJGT1JNYCBiaXQgaXMgc2V0LCBhbnkgYXJyaXZpbmcgSVB2NiBwYWNrZXRzIGFyZSBkcm9wcGVkIHdpdGggdGhlIHJlYXNvbiBgU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVGAuCgpTbywgaXQgc2VlbXMgbGlrZSB0aGUgaW50ZW50aW9uIGlzIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBvciB0eXBlIGNvbmZ1c2lvbiB3aGVuIGNvbnZlcnRpbmcgYW4gSVB2NiBVRFAgc29ja2V0IHRvIGFuIElQdjQgb25lIHVzaW5nIGBJUFY2X0FERFJGT1JNYC4gSVB2NiBwYWNrZXRzIG1pZ2h0IGJlIGluLWZsaWdodCBvciBxdWV1ZWQgd2hlbiB0aGUgY29udmVyc2lvbiBoYXBwZW5zLCBhbmQgdGhlIHBhdGNoIGlzIGRlc2lnbmVkIHRvIGZsdXNoIHRoZW0uIElmIG5vdCBmbHVzaGVkLCB0aGUgSVB2NCBjb2RlIGNvdWxkIG1pc2hhbmRsZSBJUHY2IHBhY2tldHMgYW5kIHZpY2UgdmVyc2EuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYXR0ZW1wdGluZyB0byBhdm9pZCBhIHBvdGVudGlhbCBVc2UtQWZ0ZXItRnJlZSwgb3Igb3RoZXIgaXNzdWVzIHJlbGF0ZWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpJIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gV2hhdCB3YXMgdGhlICpwcm9ibGVtKiB0aGF0IG1vdGl2YXRlZCB0aGlzPyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB1c2VmdWwgaGVyZS4gQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgbmVlZCBmb3IgdGhlIHBhdGNoLCBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseSBhdCBgaXBfcmVjdl9lcnJvcmAgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBJUHY2IHNrYnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgbG9vayBhdCBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIFRoaXMgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpcF9yZWN2X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfc29ja2dsdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTQ5NT1zdGF0aWMgYm9vbCBpcHY0X2RhdGFncmFtX3N1cHBvcnRfY21zZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjItICovXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjUyMzppbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kLCBhcyBhbiBleHBlcnQgZmFtaWxpYXIgd2l0aCBuZXR3b3JraW5nIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpZWQgbGluZXMgb2YgYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgOgoKKipEZWVwIERpdmUgaW50byBJUCBTb2NrZXQgR2x1ZSBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYSBzcGVjaWZpYyBjaHVuayBvZiB0aGUgSVAgc29ja2V0IGdsdWUgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVxdWVzdCBpcyB0byBmb2N1cyBvbiBsaW5lcyA1MjAgdG8gNjAwIG9mIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyBhIGtleSBhcmVhIGZvciBzb2NrZXQtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIGxheWVyLiYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHNvY2tldCBvcGVyYXRpb25zLCBsaWtlIGBzZW5kbXNnYCBvciBgcmVjdm1zZ2AsIGFyZSBoYW5kbGVkIGF0IHRoZSBJUCBsZXZlbC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGNvbnN0cnVjdGluZyBJUCBoZWFkZXJzLCBwb3NzaWJseSBoYW5kbGluZyBJUCBvcHRpb25zLCBvciBtYXliZSBkZWFsaW5nIHdpdGggZnJhZ21lbnRhdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBzZWdtZW50IHdvcmtpbmcgY2xvc2VseSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhhdCBpcyBrZXkgd2hlbiBuYXZpZ2F0aW5nIHRoaXMgY29kZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBwb3RlbnRpYWwgZGlzY3Vzc2lvbnMgb246CgoqICAgKipIZWFkZXIgY29uc3RydWN0aW9uOioqIEhvdyBhcmUgSVAgaGVhZGVycyAoc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MsIFRUTCwgcHJvdG9jb2wsIGV0Yy4pIGJlaW5nIGJ1aWx0IGJhc2VkIG9uIHRoZSBzb2NrZXQmIzM5O3MgY29uZmlndXJhdGlvbiBhbmQgdGhlIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBmb2xsb3cgdGhlIGZsb3cgZnJvbSBzb2NrZXQgY2FsbHMgaW50byBjYWxscyB0aGF0IGNyZWF0ZSB0aGUgaGVhZGVyIGRhdGEuCiogICAqKkNoZWNrc3VtIENhbGN1bGF0aW9uOioqIEhvdyBpcyB0aGUgSVAgaGVhZGVyIGNoZWNrc3VtIGJlaW5nIGNhbGN1bGF0ZWQ/IElzIGl0IGRvbmUgaW5saW5lIG9yIGhhbmRsZWQgc2VwYXJhdGVseT8gRWZmaWNpZW5jeSB3aWxsIGJlIGtleSBoZXJlLgoqICAgKipGcmFnbWVudGF0aW9uOioqIE1pZ2h0IHRoaXMgc2VjdGlvbiBoYW5kbGUgb3IgaW50ZXJmYWNlIHdpdGggSVAgZnJhZ21lbnRhdGlvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGBpcF9mcmFnYCBkYXRhIHN0cnVjdHVyZXMgb3IgZnJhZ21lbnRhdGlvbi1yZWxhdGVkIGZ1bmN0aW9ucy4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSYjMzk7bGwgYmUgY3VyaW91cyBhYm91dCBlcnJvciBjb25kaXRpb25zLCBlc3BlY2lhbGx5IGhvdyBJUC1sZXZlbCBlcnJvcnMgYXJlIHJlcG9ydGVkIGJhY2sgdG8gdGhlIHNvY2tldCBsYXllciwgYW5kIGhvdyB0aGluZ3MgbGlrZSBJQ01QIGVycm9ycyBhcmUgaGFuZGxlZC4KKiAgICoqU2VjdXJpdHk6KiogVGhpcyBiZWluZyBhIGNyaXRpY2FsIHBhdGgsIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjYWxscyB0byBmdW5jdGlvbnMgbGlrZSBgaXBfYnVpbGRfaGVhZGVyKClgLCBgaXBfc2VuZF9jaGVjaygpYCwgYGlwX2ZyYWdtZW50KClgLCBvciBhbnl0aGluZyBpbnZvbHZpbmcgYHNrYmAgKHNvY2tldCBidWZmZXIpIG1hbmlwdWxhdGlvbi4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBwcmV0dHkgZGVuc2UsIGJ1dCBJJiMzOTttIHJlYWR5IHRvIHBhcnNlIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUsIHRvIHNlZSB3aGF0IHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciB3YXMuIExldCYjMzk7cyBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdC8qXG4gNTIxOlx0ICpcdEhhbmRsZSBNU0dfRVJSUVVFVUVcbiA1MjI6XHQgKi9cbiA1MjM6XHRpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcbiA1MjQ6XHR7XG4gNTI1Olx0XHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xuIDUyNjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA1Mjc6XHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHNpbiwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiA1Mjg6XHRcdHN0cnVjdCB7XG4gNTI5Olx0XHRcdHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciBlZTtcbiA1MzA6XHRcdFx0c3RydWN0IHNvY2thZGRyX2luXHQgb2ZmZW5kZXI7XG4gNTMxOlx0XHR9IGVycmhkcjtcbiA1MzI6XHRcdGludCBlcnI7XG4gNTMzOlx0XHRpbnQgY29waWVkO1xuIDUzNDpcdFxuIDUzNTpcdFx0ZXJyID0gLUVBR0FJTjtcbiA1MzY6XHRhZ2FpbjpcbiA1Mzc6XHRcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcbiA1Mzg6XHRcdGlmICghc2tiKVxuIDUzOTpcdFx0XHRnb3RvIG91dDtcbiA1NDA6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2XG4gNTQxOlx0XHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4gNTQyOlx0XHRcdCAgICAgdWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykgXHUwMDI2XHUwMDI2XG4gNTQzOlx0XHRcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xuIDU0NDpcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuIDU0NTpcdFx0XHRnb3RvIGFnYWluO1xuIDU0NjpcdFx0fVxuIDU0NzpcdFxuIDU0ODpcdFx0Y29waWVkID0gc2tiLVx1MDAzZWxlbjtcbiA1NDk6XHRcdGlmIChjb3BpZWQgXHUwMDNlIGxlbikge1xuIDU1MDpcdFx0XHRtc2ctXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19UUlVOQztcbiA1NTE6XHRcdFx0Y29waWVkID0gbGVuO1xuIDU1MjpcdFx0fVxuIDU1MzpcdFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgMCwgbXNnLCBjb3BpZWQpO1xuIDU1NDpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiA1NTU6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNTU2Olx0XHRcdHJldHVybiBlcnI7XG4gNTU3Olx0XHR9XG4gNTU4Olx0XHRzb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7XG4gNTU5Olx0XG4gNTYwOlx0XHRzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTtcbiA1NjE6XHRcbiA1NjI6XHRcdGlmIChzaW4gXHUwMDI2XHUwMDI2IGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9hZGRyKHNlcnIpKSB7XG4gNTYzOlx0XHRcdHNpbi1cdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcbiA1NjQ6XHRcdFx0c2luLVx1MDAzZXNpbl9hZGRyLnNfYWRkciA9ICooX19iZTMyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICYjNDM7XG4gNTY1Olx0XHRcdFx0XHRcdFx0ICAgc2Vyci1cdTAwM2VhZGRyX29mZnNldCk7XG4gNTY2Olx0XHRcdHNpbi1cdTAwM2VzaW5fcG9ydCA9IHNlcnItXHUwMDNlcG9ydDtcbiA1Njc6XHRcdFx0bWVtc2V0KFx1MDAyNnNpbi1cdTAwM2VzaW5femVybywgMCwgc2l6ZW9mKHNpbi1cdTAwM2VzaW5femVybykpO1xuIDU2ODpcdFx0XHRtc2ctXHUwMDNlbXNnX25hbWVsZW4gPSBzaXplb2YoKnNpbik7XG4gNTY5Olx0XHR9XG4gNTcwOlx0XG4gNTcxOlx0XHRtZW1jcHkoXHUwMDI2ZXJyaGRyLmVlLCBcdTAwMjZzZXJyLVx1MDAzZWVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7XG4gNTcyOlx0XHRzaW4gPSBcdTAwMjZlcnJoZHIub2ZmZW5kZXI7XG4gNTczOlx0XHRtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpO1xuIDU3NDpcdFxuIDU3NTpcdFx0aWYgKGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9jbXNnKHNrLCBza2IsIHNlcnItXHUwMDNlZWUuZWVfb3JpZ2luKSkge1xuIDU3NjpcdFx0XHRzaW4tXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4gNTc3Olx0XHRcdHNpbi1cdTAwM2VzaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS1cdTAwM2VzYWRkcjtcbiA1Nzg6XHRcdFx0aWYgKGluZXRfY21zZ19mbGFncyhpbmV0X3NrKHNrKSkpXG4gNTc5Olx0XHRcdFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcbiA1ODA6XHRcdH1cbiA1ODE6XHRcbiA1ODI6XHRcdHB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRUNWRVJSLCBzaXplb2YoZXJyaGRyKSwgXHUwMDI2ZXJyaGRyKTtcbiA1ODM6XHRcbiA1ODQ6XHRcdC8qIE5vdyB3ZSBjb3VsZCB0cnkgdG8gZHVtcCBvZmZlbmRlZCBwYWNrZXQgb3B0aW9ucyAqL1xuIDU4NTpcdFxuIDU4NjpcdFx0bXNnLVx1MDAzZW1zZ19mbGFncyB8PSBNU0dfRVJSUVVFVUU7XG4gNTg3Olx0XHRlcnIgPSBjb3BpZWQ7XG4gNTg4Olx0XG4gNTg5Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDU5MDpcdG91dDpcbiA1OTE6XHRcdHJldHVybiBlcnI7XG4gNTkyOlx0fVxuIDU5MzpcdFxuIDU5NDpcdHZvaWQgX19pcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuIDU5NTpcdHtcbiA1OTY6XHRcdHU4IG9sZF90b3MgPSBpbmV0X3NrKHNrKS1cdTAwM2V0b3M7XG4gNTk3Olx0XG4gNTk4Olx0XHRpZiAoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xuIDU5OTpcdFx0XHR2YWwgXHUwMDI2PSB+SU5FVF9FQ05fTUFTSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwMwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBJUHY2IFNvY2tldCBPcHRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSVB2NiBzb2NrZXQgb3B0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQuIExldCYjMzk7cyBzZWUuLi5JIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgc2V0c29ja29wdGAgYW5kIElQdjYuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uLi4uIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJJiMzOTtsbCB3YW50IHRvIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1ODAgdG8gNjUwIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGZvciBzZXR0aW5nIHRob3NlIElQdjYtc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIGluIHRoZXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgYFNJT0NgIGNvbW1hbmQgY29kZXMgZ2V0IHByb2Nlc3NlZCwgb3B0aW9uIHZhbGlkYXRpb24gb2NjdXJzLCBhbmQgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgc3RhY2sgY2FsbHMgYXJlIGRpc3BhdGNoZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYXNzb2NpYXRlZCBJUHY2IHNvY2tldCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1ODA6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxuIDU4MTpcdFx0XHRnb3RvIHVubG9jaztcbiA1ODI6XHRcbiA1ODM6XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDU4NDpcdFxuIDU4NTpcdFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxuIDU4NjpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1ODc6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTg4Olx0XHRcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xuIDU4OTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxuIDU5MDpcdFx0XHRcdFx0YnJlYWs7XG4gNTkxOlx0XG4gNTkyOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4gNTkzOlx0XHRcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XG4gNTk0Olx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNTk1Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDU5NjpcdFx0XHRcdFx0fVxuIDU5NzpcdFx0XHRcdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiA1OTg6XHRcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90ICE9IFx1MDAyNnRjcHY2X3Byb3QpIHtcbiA1OTk6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MDA6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjAxOlx0XHRcdFx0XHR9XG4gNjAyOlx0XHRcdFx0fSBlbHNlIHtcbiA2MDM6XHRcdFx0XHRcdGJyZWFrO1xuIDYwNDpcdFx0XHRcdH1cbiA2MDU6XHRcbiA2MDY6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XG4gNjA3Olx0XHRcdFx0XHRyZXR2ID0gLUVOT1RDT05OO1xuIDYwODpcdFx0XHRcdFx0YnJlYWs7XG4gNjA5Olx0XHRcdFx0fVxuIDYxMDpcdFxuIDYxMTpcdFx0XHRcdGlmIChpcHY2X29ubHlfc29jayhzaykgfHxcbiA2MTI6XHRcdFx0XHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcikpIHtcbiA2MTM6XHRcdFx0XHRcdHJldHYgPSAtRUFERFJOT1RBVkFJTDtcbiA2MTQ6XHRcdFx0XHRcdGJyZWFrO1xuIDYxNTpcdFx0XHRcdH1cbiA2MTY6XHRcbiA2MTc6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbiA2MTg6XHRcdFx0XHRcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XG4gNjE5Olx0XHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbiA2MjA6XHRcdFx0XHRcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xuIDYyMTpcdFx0XHRcdFx0XHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XG4gNjIyOlx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNjIzOlx0XHRcdFx0XHRcdGJyZWFrO1xuIDYyNDpcdFx0XHRcdFx0fVxuIDYyNTpcdFx0XHRcdH1cbiA2MjY6XHRcbiA2Mjc6XHRcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gNjI4Olx0XHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIDYyOTpcdFxuIDYzMDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDYzMTpcdFx0XHRcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDYzMjpcdFxuIDYzMzpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVx1MDAzZXNrX3Byb3QsIC0xKTtcbiA2MzQ6XHRcdFx0XHRcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcdTAwMjZ0Y3BfcHJvdCwgMSk7XG4gNjM1Olx0XG4gNjM2Olx0XHRcdFx0XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCkgaW4gaW5ldDZfc3RyZWFtX29wcyAqL1xuIDYzNzpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19wcm90LCBcdTAwMjZ0Y3BfcHJvdCk7XG4gNjM4Olx0XHRcdFx0XHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiB0Y3BfKGdldHxzZXQpc29ja29wdCgpICovXG4gNjM5Olx0XHRcdFx0XHRXUklURV9PTkNFKGljc2stXHUwMDNlaWNza19hZl9vcHMsIFx1MDAyNmlwdjRfc3BlY2lmaWMpO1xuIDY0MDpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xuIDY0MTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xuIDY0MjpcdFx0XHRcdFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVx1MDAzZWljc2tfcG10dV9jb29raWUpO1xuIDY0MzpcdFx0XHRcdH0gZWxzZSB7XG4gNjQ0Olx0XHRcdFx0XHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXHUwMDNlc2tfcHJvdCwgLTEpO1xuIDY0NTpcdFx0XHRcdFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIFx1MDAyNnVkcF9wcm90LCAxKTtcbiA2NDY6XHRcbiA2NDc6XHRcdFx0XHRcdC8qIFBhaXJlZCB3aXRoIFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cbiA2NDg6XHRcdFx0XHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCwgXHUwMDI2dWRwX3Byb3QpO1xuIDY0OTpcdFx0XHRcdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlb3BzLCBcdTAwMjZpbmV0X2RncmFtX29wcyk7XG4gNjUwOlx0XHRcdFx0XHRXUklURV9PTkNFKHNrLVx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XG4gNjUxOlx0XHRcdFx0fVxuIDY1MjpcdFxuIDY1MzpcdFx0XHRcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxuIDY1NDpcdFx0XHRcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcbiA2NTU6XHRcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG4gNjU2Olx0XHRcdFx0ICovXG4gNjU3Olx0XHRcdFx0bnAtXHUwMDNlcnhvcHQuYWxsID0gMDtcbiA2NTg6XHRcbiA2NTk6XHRcdFx0XHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg2CgkJCQkJCQlvdXRwdXQ6IDIxMgoJCQkJCQkJdGhvdWdodHM6IDEwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEFkZHJlc3NpbmcgVURQIFNvY2tldCBQcm90b2NvbCBDb252ZXJzaW9uIFJpc2tzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdpdGhpbiB0aGlzIHBhdGNoLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzOiBgdWRwLmhgLCBgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBhbmQgYHVkcC5jYC4KCkZpcnN0LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyIHNlZW1zIHRvIGJlIGFyb3VuZCB0aGUgYElQVjZfQUREUkZPUk1gIGZ1bmN0aW9uYWxpdHkgb24gVURQIHNvY2tldHMsIGVzc2VudGlhbGx5IHN3aXRjaGluZyBhbiBJUHY2IHNvY2tldCB0byBJUHY0LiBUaGUgY2hhbmdlcyBhcHBlYXIgZGVzaWduZWQgdG8gcHJldmVudCBhbmQgZml4IGEgdHlwZSBjb25mdXNpb24gdnVsbmVyYWJpbGl0eSBhbmQgcmFjZSBjb25kaXRpb25zLCBhIGdvb2QgdGhpbmcuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gd2hldGhlciB0aGlzIHBhdGNoICppbnRyb2R1Y2VzKiBvciAqZXhwb3NlcyogYW55IG5ldyBvcHBvcnR1bml0aWVzIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGFzcGVjdHM6CgoxLiAgKipEYXRhIHNlbnQgdG8gdXNlcnNwYWNlOioqIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyBuZXcgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmLiBUaGUgb2xkIGBpcF9yZWN2X2Vycm9yKClgIGlzc3VlIHRoYXQgaW50ZXJwcmV0ZWQgSVB2NiBhcyBJUHY0LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHJlYWRzIGJleW9uZCBidWZmZXJzIG9yIGludmFsaWQgaGVhZGVycywgaXMgYWRkcmVzc2VkLiBUaGUgcGF0Y2ggbm93IHByb3Blcmx5IGRyb3BzIHRoZSBJUHY2IHNrYi4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIEkmIzM5O20gbWFraW5nIHN1cmUgdGhhdCB0aGUgcGF0Y2ggbG9naWMgZG9lc24mIzM5O3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBWYXJpYWJsZXMgbGlrZSBgdXAtJmd0O3VkcF9mbGFnc2AsIGBza2ItJmd0O3Byb3RvY29sYCBhbmQgYGZvdW5kYCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExvb2tzIGdvb2QuCjMuICAqKkRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uOioqIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBsYXRlciBhY2Nlc3NlZC4KNC4gICoqQm91bmRzIGNoZWNrczoqKiBJJiMzOTttIGNoZWNraW5nIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGxvb3NlbiBhbnkgZXhpc3RpbmcgYm91bmRzIGNoZWNrcywgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm8gY2hhbmdlIHRoZXJlLgoKU28sIGluIG15IGFzc2Vzc21lbnQsIHRoZSBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSYjMzk7bSBzZWVpbmcgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW52b2x2aW5nIHR5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoYElQVjZfQUREUkZPUk1gKSBvbiBVRFAgc29ja2V0cy4gQ29uY3VycmVudCBvciBxdWV1ZWQgSVB2NiBwYWNrZXRzIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIHdpdGggb2xkIGhhbmRsZXJzLCBidXQgbm93IHdlJiMzOTtyZSBzeW5jaHJvbml6aW5nLCBjaGVja2luZyBxdWV1ZXMsIGFuZCBkcm9wcGluZyB0aGUgcm9ndWUgcGFja2V0cy4KClNpbmNlIHRoaXMgcGF0Y2ggKmZpeGVzKiBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aHJvdWdoIGJldHRlciBjb250cm9sLWZsb3csIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHN0YW5kYXJkIHNhbml0aXplcnMgKEtBU0FOLCBMT0NLREVQLCBhbmQgZGVidWdnaW5nIHRvb2xzKSBzaG91bGQgc3VmZmljZSBmb3IgdGVzdGluZy4gSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIGZvciBLTVNBTiBoZXJlLiBUaGUgYnVncyBhZGRyZXNzZWQgYXJlIHR5cGUgY29uZnVzaW9uIGFuZCByYWNlIGNvbmRpdGlvbnMsIHRoaW5ncyBLQVNBTiBpcyBidWlsdCB0byBjYXRjaC4KCk15IGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOYDogZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBhbmQgcHJvdG9jb2wvdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChJUFY2X0FERFJGT1JNKSBvbiBVRFAgc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmbGFnIChgVURQX0ZMQUdTX0FERFJGT1JNYCksIHN5bmNocm9uaXplcyBuZXR3b3JrIHByb2Nlc3NpbmcgKGBzeW5jaHJvbml6ZV9uZXQoKWApLCBpbnNwZWN0cyByZWNlaXZlIGFuZCByZWFkZXIgcXVldWVzIGZvciBwZW5kaW5nIElQdjYgcGFja2V0cywgYW5kIGRyb3BzIG9yIGRpc2NhcmRzIElQdjYgcGFja2V0cyByZWNlaXZlZCBvciBxdWV1ZWQgb24gY29udmVydGVkIHNvY2tldHMuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVx1MDAzZXByb3RvY29sYCkgYW5kIHNvY2tldCBmbGFncyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQuIFBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcHJvdG9jb2wgdHJhbnNpdGlvbnMgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCB0eXBlIGNvbmZ1c2lvbiwgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb24gcGFja2V0IGhlYWRlcnMpIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjI2Ljc2NzI5NjMyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjU4NDcyMzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVxcdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBjb2RlIHRvIGhhbmRsZSBVRFAgSVB2Ni10by1JUHY0IGNvbnZlcnNpb24gdmlhIHRoZSBJUFY2X0FERFJGT1JNIHNvY2tldCBvcHRpb24uIEl0IGludHJvZHVjZXMgVURQX0ZMQUdTX0FERFJGT1JNIHRvIHByZXZlbnQgSVB2NiBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICh1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYikgYW5kIGRyb3BzIHVuZXhwZWN0ZWQgSVB2NiBza2JzIGZyb20gdGhlIGVycm9yIHF1ZXVlIChpcF9yZWN2X2Vycm9yKS4gSXQgYWxzbyBhZGRzIHF1ZXVlIGluc3BlY3Rpb24gKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYpIGluIGRvX2lwdjZfc2V0c29ja29wdCBiZWZvcmUgYWxsb3dpbmcgdGhlIGFkZHJlc3MgZm9ybSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gVURQIGFuZCBzb2NrZXQgb3B0aW9ucywgbWFraW5nIGl0IHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNi43NjczMDE5MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODk1NjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI2YzYwZmJjYjhhNTA4OWNhNzcxYTFhOGIyMDBiMWRhMjM0Y2Y1YzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaFxcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmhcXG5AQCAtNjcsNiArNjcsNyBAQCBlbnVtIHtcXG4gXFx0VURQX0ZMQUdTX0FDQ0VQVF9GUkFHTElTVCxcXG4gXFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcXG4gXFx0VURQX0ZMQUdTX0VOQ0FQX0VOQUJMRUQsIC8qIFRoaXMgc29ja2V0IGVuYWJsZWQgZW5jYXAgKi9cXG4rXFx0VURQX0ZMQUdTX0FERFJGT1JNLCAgICAgIC8qIEJsb2NrIElQdjYgcmVjZWl2ZSBkdXJpbmcvYWZ0ZXIgQUREUkZPUk0gKi9cXG4gfTtcXG4gXFxuIC8qIHBlciBOVU1BIHN0cnVjdHVyZSBmb3IgbG9ja2xlc3MgcHJvZHVjZXIgdXNhZ2UuICovXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXFxuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbkBAIC01MzMsOSArNTMzLDE3IEBAIGludCBpcF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxcbiBcXHRpbnQgY29waWVkO1xcbiBcXG4gXFx0ZXJyID0gLUVBR0FJTjtcXG4rYWdhaW46XFxuIFxcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcXG4gXFx0aWYgKCFza2IpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX3R5cGUgPT0gU09DS19ER1JBTSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAgc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcXG4rXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0Z290byBhZ2FpbjtcXG4rXFx0fVxcbiBcXG4gXFx0Y29waWVkID0gc2tiLVxcdTAwM2VsZW47XFxuIFxcdGlmIChjb3BpZWQgXFx1MDAzZSBsZW4pIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXFxuaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG4rKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5AQCAtMzczLDYgKzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcmVhZGVyX3F1ZXVlID0gXFx1MDAyNnVkcF9zayhzayktXFx1MDAzZXJlYWRlcl9xdWV1ZTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZyZWFkZXJfcXVldWUtXFx1MDAzZWxvY2spO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikge1xcbitcXHRcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbitcXHRcXHRcXHRmb3VuZCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpIHtcXG4rXFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4rXFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cmVhZGVyX3F1ZXVlLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiB7XFxuQEAgLTU4Nyw2ICs2MTQsMTYgQEAgaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcbitcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuK1xcdFxcdFxcdFxcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XFxuK1xcdFxcdFxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbitcXHRcXHRcXHRcXHRpZiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NihzaykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0dWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcXG5pbmRleCA5MzQ3OGQxYWQ1NzY5Li5jY2Q4YWU5MmY1MmJhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3VkcC5jXFxuKysrIGIvbmV0L2lwdjYvdWRwLmNcXG5AQCAtODIyLDYgKzgyMiwxMSBAQCBzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gXFxuK1xcdGlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHtcXG4rXFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbitcXHRcXHRnb3RvIGRyb3A7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkge1xcbiBcXHRcXHRkcm9wX3JlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9YRlJNX1BPTElDWTtcXG4gXFx0XFx0Z290byBkcm9wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNy4xODY5NzMxNzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQyNzc0NDE0NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0byBoYW5kbGUgVURQIElQdjYtdG8tSVB2NCBjb252ZXJzaW9uIHZpYSB0aGUgSVBWNl9BRERSRk9STSBzb2NrZXQgb3B0aW9uLiBJdCBpbnRyb2R1Y2VzIFVEUF9GTEFHU19BRERSRk9STSB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHF1ZXVlZCAodWRwdjZfcXVldWVfcmN2X29uZV9za2IpIGFuZCBkcm9wcyB1bmV4cGVjdGVkIElQdjYgc2ticyBmcm9tIHRoZSBlcnJvciBxdWV1ZSAoaXBfcmVjdl9lcnJvcikuIEl0IGFsc28gYWRkcyBxdWV1ZSBpbnNwZWN0aW9uICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KSBpbiBkb19pcHY2X3NldHNvY2tvcHQgYmVmb3JlIGFsbG93aW5nIHRoZSBhZGRyZXNzIGZvcm0gY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIFVEUCBhbmQgc29ja2V0IG9wdGlvbnMsIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNmM2MGZiY2I4YTUwODljYTc3MWExYThiMjAwYjFkYTIzNGNmNWM5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwMzo0MzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWRwLmggYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5pbmRleCA5OTg5MDZlYzNiMzJhLi5mNzc1Zjc4ZDZiZjQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaFxuKysrIGIvaW5jbHVkZS9saW51eC91ZHAuaFxuQEAgLTY3LDYgKzY3LDcgQEAgZW51bSB7XG4gXHRVRFBfRkxBR1NfQUNDRVBUX0ZSQUdMSVNULFxuIFx0VURQX0ZMQUdTX0FDQ0VQVF9MNCxcbiBcdFVEUF9GTEFHU19FTkNBUF9FTkFCTEVELCAvKiBUaGlzIHNvY2tldCBlbmFibGVkIGVuY2FwICovXG4rXHRVRFBfRkxBR1NfQUREUkZPUk0sICAgICAgLyogQmxvY2sgSVB2NiByZWNlaXZlIGR1cmluZy9hZnRlciBBRERSRk9STSAqL1xuIH07XG4gXG4gLyogcGVyIE5VTUEgc3RydWN0dXJlIGZvciBsb2NrbGVzcyBwcm9kdWNlciB1c2FnZS4gKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uZmNkMTAyYWU4YmVkYiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC01MzMsOSArNTMzLDE3IEBAIGludCBpcF9yZWN2X2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKVxuIFx0aW50IGNvcGllZDtcbiBcbiBcdGVyciA9IC1FQUdBSU47XG4rYWdhaW46XG4gXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XG4gXHRpZiAoIXNrYilcbiBcdFx0Z290byBvdXQ7XG4rXHRpZiAodW5saWtlbHkoc2stXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkpIHtcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0Z290byBhZ2FpbjtcbitcdH1cbiBcbiBcdGNvcGllZCA9IHNrYi1cdTAwM2VsZW47XG4gXHRpZiAoY29waWVkIFx1MDAzZSBsZW4pIHtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLmQzMDdjZWE5ZWJjNWMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTM3Myw2ICszNzMsMzMgQEAgc3RhdGljIGludCBpcHY2X3NldF9vcHRfaGRyKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpyZWFkZXJfcXVldWUgPSBcdTAwMjZ1ZHBfc2soc2spLVx1MDAzZXJlYWRlcl9xdWV1ZTtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRib29sIGZvdW5kID0gZmFsc2U7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2cmVhZGVyX3F1ZXVlLVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRza2JfcXVldWVfd2FsayhyZWFkZXJfcXVldWUsIHNrYikge1xuK1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHR9XG4rXHRza2JfcXVldWVfd2FsayhcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLCBza2IpIHtcbitcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuK1x0XHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZyZWFkZXJfcXVldWUtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZm91bmQ7XG4rfVxuK1xuIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNTg3LDYgKzYxNCwxNiBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbitcdFx0XHRcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9uZXQoKTtcbitcdFx0XHRcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xuK1x0XHRcdFx0XHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmNcbmluZGV4IDkzNDc4ZDFhZDU3NjkuLmNjZDhhZTkyZjUyYmEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni91ZHAuY1xuKysrIGIvbmV0L2lwdjYvdWRwLmNcbkBAIC04MjIsNiArODIyLDExIEBAIHN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X29uZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4gXG4rXHRpZiAodW5saWtlbHkodWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykpKSB7XG4rXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PX1NPQ0tFVDtcbitcdFx0Z290byBkcm9wO1xuK1x0fVxuK1xuIFx0aWYgKCF4ZnJtNl9wb2xpY3lfY2hlY2soc2ssIFhGUk1fUE9MSUNZX0lOLCBza2IpKSB7XG4gXHRcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xuIFx0XHRnb3RvIGRyb3A7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0MzoyNy4xODY5NzYxODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjc2MTgwOTU0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgcmVsYXRlZCB0byBVRFAgYW5kIElQdjYsIHNwZWNpZmljYWxseSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgc2FmZXR5LCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgdGhlcmUuIFRoaXMgc2VlbXMgdG8gZmFsbCB1bmRlciB0aGUgXCJiZW5pZ24vZGVmZW5zaXZlIHNlY3VyaXR5L3F1YWxpdHkgYXNzdXJhbmNlXCIgY2F0ZWdvcnksIHdoaWNoIGlzIGdvb2QuIEl0J3MgYWJvdXQgaGFyZGVuaW5nIHRoZSBrZXJuZWwsIG5vdCBpbnRyb2R1Y2luZyBhIGNvbXBsZXRlbHkgbmV3IGZlYXR1cmUuIFRoZSBwcmltYXJ5IHRhc2sgaXMgdHJpYWdlOiB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBhbmQgaWYgc28sIGhvdy4gVGhhdCBtZWFucyBhdWRpdGluZyB0aGUgY29kZSwgZGVjaWRpbmcgaWYgaXQgc2hvdWxkIGJlIGZ1enplZCwgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGUgbmVjZXNzYXJ5IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBGcm9tIHRoZSBkaWZmLCBJIHNlZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6XG5cbjEuICBBIG5ldyBgVURQX0ZMQUdTX0FERFJGT1JNYCBmbGFnIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3VkcC5oYC4gT2theSwgYSBuZXcgYml0IGZsYWcuIE1ha2VzIHNlbnNlIGluIGNvbnRleHQuXG4yLiAgSW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCB0aGUgYGlwX3JlY3ZfZXJyb3JgIGZ1bmN0aW9uIGlzIHVwZGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXTigJlzIGRyb3BwaW5nIElQdjYgc2ticyBpZiBgVURQX0ZMQUdTX0FERFJGT1JNYCBpcyBzZXQgb24gYSBVRFAgc29ja2V0LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGlzIGlzIGxpa2VseSBhbiBJUHY0LXNwZWNpZmljIGZ1bmN0aW9uLCBidXQgaXQncyBkcm9wcGluZyBJUHY2IHBhY2tldHMgd2hlbiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcywgd2hldGhlciBpdCdzIGRyb3BwaW5nIHRoZW0gZm9yIHRoZSByaWdodCByZWFzb25zLCBvciBpZiB3ZSBuZWVkIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuMy4gIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIG5vdyBoYXMgYSBoZWxwZXIgZnVuY3Rpb24gYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLiBUaGUga2V5IGNoYW5nZSBoZXJlIHNlZW1zIHRvIGJlIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciB0aGUgYElQVjZfQUREUkZPUk1gIG9wdGlvbi4gV2hlbiBhIFVEUCBzb2NrZXQncyBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGl0IGNoZWNrcyBpZiB0aGUgcXVldWUgaGFzIElQdjYgc2ticy4gSWYgaXQgZG9lcywgaXQgcmV0dXJucyBgLUVCVVNZYCBhbmQgY2xlYXJzIHRoZSBiaXQuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgcmFjZSBvciBzdGF0ZSBpc3N1ZSwgYW5kIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgY2FsbGVkIHNvIHRoZSBpc3N1ZSBpcyBkZWFsdCB3aXRoLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLiBUaGlzIGlzIHdoZXJlIG1vc3Qgb2YgdGhlIHJlbGV2YW50IGZ1enppbmcgbWlnaHQgbmVlZCB0byBiZSBjb25jZW50cmF0ZWQgdG8gZmluZCBidWdzIGluIHRoZSBlZGdlIGNhc2UuXG40LiAgRmluYWxseSwgYG5ldC9pcHY2L3VkcC5jYCwgaW4gYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgaWYgdGhlIGBBRERSRk9STWAgYml0IGlzIHNldCBvbiB0aGUgc29ja2V0LCB0aGUgcGFja2V0IGlzIGRyb3BwZWQuIFRoaXMgZnVydGhlciByZWluZm9yY2VzIHRoZSBsb2dpYy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXhwZXJ0aXNlIGFuZCB0b29scy4gSSdtIGdvaW5nIHRvIHVzZSBteSBncmVwIHNraWxscyBhbmQgY29kZS1yZWFkaW5nIGtub3dsZWRnZSB0byBpbnNwZWN0IHRoZXNlIGZpbGVzLCBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBBRERSRk9STWAgZmxhZyBjb21wbGV0ZWx5LCB3aGF0IHNpdHVhdGlvbnMgdHJpZ2dlciBpdCwgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIGRyb3BwaW5nIHBhY2tldHMgb3IgcmV0dXJuaW5nIGAtRUJVU1lgLiBJIHdpbGwgYWxzbyBjaGVjayB3aGF0IG90aGVyIHBsYWNlcyBpbiB0aGUgY29kZSBhcmUgdXNpbmcgdGhpcyBuZXcgZmxhZyBvciB0aGUgZnVuY3Rpb25zL3ZhcmlhYmxlcyB0aGF0IGFyZSBiZWluZyBhZGRlZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgYW5kIHdoZXRoZXIgaXQncyBhcHByb3ByaWF0ZSBmb3Igc3l6a2FsbGVyLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCwgaWYgYW55IGBGb2N1c1N5bWJvbHNgIG5lZWQgdG8gYmUgc2V0LCBhbmQgd2hhdCBteSBmaW5hbCByZWNvbW1lbmRhdGlvbiB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6MzkuOTQ4Nzg4NzA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzk4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQVjZfQUREUkZPUk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FmX2luZXQ2LmM9NDI2PWludCBpbmV0Nl9iaW5kX3NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTQzMS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjQzMjpcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy00MzMtXFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTU0Nz1pbnQgaW5ldDZfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU2OS1cXHRkZWZhdWx0Olxcbm5ldC9pcHY2L2FmX2luZXQ2LmM6NTcwOlxcdFxcdC8qIElQVjZfQUREUkZPUk0gY2FuIGNoYW5nZSBzay1cXHUwMDNlc2tfcHJvdCB1bmRlciB1cy4gKi9cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTU3MS1cXHRcXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjMxPWludCBpbmV0Nl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTYzOC1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjYzOTpcXHQvKiBJUFY2X0FERFJGT1JNIGNhbiBjaGFuZ2Ugc2stXFx1MDAzZXNrX3Byb3QgdW5kZXIgdXMuICovXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NDAtXFx0cHJvdCA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfcHJvdCk7XFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jPTY0NT1pbnQgaW5ldDZfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxcbi0tXFxubmV0L2lwdjYvYWZfaW5ldDYuYy02NTMtXFxubmV0L2lwdjYvYWZfaW5ldDYuYzo2NTQ6XFx0LyogSVBWNl9BRERSRk9STSBjYW4gY2hhbmdlIHNrLVxcdTAwM2Vza19wcm90IHVuZGVyIHVzLiAqL1xcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjU1LVxcdHByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTQwMz1pbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy01NzctXFx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjU3ODpcXHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTc5LVxcdCAqL1xcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTU4NC1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NTg1OlxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNTg2LVxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMTE1PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMjctXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMjg6XFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMTI5LVxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDAuMDAyNTk1MDM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNzQxMTczOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NiBTb2NrZXQgR2x1ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGlzIGlzc3VlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIGFyZWEgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSB0aGUgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHVzZSBteSBleHBlcnRpc2UgYW5kIGluc3RpdHV0aW9uYWwga25vd2xlZGdlIHRvIG5hdmlnYXRlIHRvIHRoZSB2aWNpbml0eSBvZiBsaW5lIDU4NSB3aXRoaW4gdGhhdCBmaWxlLiBJJ2xsIGVtcGxveSB0aGUgdHJ1c3R5IGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gaW1tZWRpYXRlbHkgYWNjZXNzIGFuZCBleGFtaW5lIHRoZSBjb2RlLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gcXVpY2tseSBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBzdGFydCB0cmFjaW5nIHRoZSBsb2dpYyBJIGFtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDIuNDIwMDA4NjEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU4MDpcXHRcXHRpZiAodW5saWtlbHkoc2stXFx1MDAzZXNrX2ZhbWlseSAhPSBBRl9JTkVUNikpXFxuIDU4MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gNTgyOlxcdFxcbiA1ODM6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDU4NDpcXHRcXG4gNTg1OlxcdFxcdGNhc2UgSVBWNl9BRERSRk9STTpcXG4gNTg2OlxcdFxcdFxcdGlmIChvcHRsZW4gXFx1MDAzYyBzaXplb2YoaW50KSlcXG4gNTg3OlxcdFxcdFxcdFxcdGdvdG8gZV9pbnZhbDtcXG4gNTg4OlxcdFxcdFxcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xcbiA1ODk6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxcbiA1OTA6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5MTpcXHRcXG4gNTkyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG4gNTkzOlxcdFxcdFxcdFxcdFxcdGlmICh1ZHBfc2soc2spLVxcdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XFxuIDU5NDpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA1OTU6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5NjpcXHRcXHRcXHRcXHRcXHR9XFxuIDU5NzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbiA1OTg6XFx0XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90ICE9IFxcdTAwMjZ0Y3B2Nl9wcm90KSB7XFxuIDU5OTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA2MDA6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwMTpcXHRcXHRcXHRcXHRcXHR9XFxuIDYwMjpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA2MDM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwNDpcXHRcXHRcXHRcXHR9XFxuIDYwNTpcXHRcXG4gNjA2OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XFxuIDYwNzpcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVOT1RDT05OO1xcbiA2MDg6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYwOTpcXHRcXHRcXHRcXHR9XFxuIDYxMDpcXHRcXG4gNjExOlxcdFxcdFxcdFxcdGlmIChpcHY2X29ubHlfc29jayhzaykgfHxcXG4gNjEyOlxcdFxcdFxcdFxcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHIpKSB7XFxuIDYxMzpcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVBRERSTk9UQVZBSUw7XFxuIDYxNDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNjE1OlxcdFxcdFxcdFxcdH1cXG4gNjE2OlxcdFxcbiA2MTc6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbiA2MTg6XFx0XFx0XFx0XFx0XFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcXG4gNjE5OlxcdFxcdFxcdFxcdFxcdHN5bmNocm9uaXplX25ldCgpO1xcbiA2MjA6XFx0XFx0XFx0XFx0XFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XFxuIDYyMTpcXHRcXHRcXHRcXHRcXHRcXHR1ZHBfY2xlYXJfYml0KEFERFJGT1JNLCBzayk7XFxuIDYyMjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA2MjM6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYyNDpcXHRcXHRcXHRcXHRcXHR9XFxuIDYyNTpcXHRcXHRcXHRcXHR9XFxuIDYyNjpcXHRcXG4gNjI3OlxcdFxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG4gNjI4OlxcdFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbiA2MzE6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXFx1MDAzZXNrX3Byb3QsIC0xKTtcXG4gNjM0OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcXHUwMDI2dGNwX3Byb3QsIDEpO1xcbiA2MzU6XFx0XFxuIDYzNjpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpIGluIGluZXQ2X3N0cmVhbV9vcHMgKi9cXG4gNjM3OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QsIFxcdTAwMjZ0Y3BfcHJvdCk7XFxuIDYzODpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0UoKSBpbiB0Y3BfKGdldHxzZXQpc29ja29wdCgpICovXFxuIDYzOTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKGljc2stXFx1MDAzZWljc2tfYWZfb3BzLCBcXHUwMDI2aXB2NF9zcGVjaWZpYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjQyLjQyMDEwMzQ5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTU2Mzk2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIElQdjYgVURQIEFkZHJlc3MgRm9ybSBIYW5kbGluZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2YgVURQIGFkZHJlc3MgZm9ybSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgIGZpbGUgYW5kIGZvY3VzIG9uIGxpbmVzIDY0MCB0byA3MDAuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgbG9naWMgdGhhdCBkZWZpbmVzIGhvdyBVRFAgc29ja2V0IGFkZHJlc3NpbmcgaXMgbWFuYWdlZCB3aXRoIElQdjYuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBkaWZmZXJlbnQgYWRkcmVzcyBmb3JtYXRzIGFuZCBob3cgdGhlIHRyYW5zaXRpb24gaXMgbWFuYWdlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgY29yZSBsb2dpYyBpcyB3aGF0IEkgZXhwZWN0LiBMZXQncyBzZWUgaG93IHRoaW5ncyBhcmUgc2V0IHVwIGFuZCBtYWtlIHN1cmUgaXQgaXMgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDUuMjc1NzQ2MDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0MDpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcywgXFx1MDAyNmluZXRfc3RyZWFtX29wcyk7XFxuIDY0MTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19mYW1pbHksIFBGX0lORVQpO1xcbiA2NDI6XFx0XFx0XFx0XFx0XFx0dGNwX3N5bmNfbXNzKHNrLCBpY3NrLVxcdTAwM2VpY3NrX3BtdHVfY29va2llKTtcXG4gNjQzOlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuIDY0NDpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgc2stXFx1MDAzZXNrX3Byb3QsIC0xKTtcXG4gNjQ1OlxcdFxcdFxcdFxcdFxcdHNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCBcXHUwMDI2dWRwX3Byb3QsIDEpO1xcbiA2NDY6XFx0XFxuIDY0NzpcXHRcXHRcXHRcXHRcXHQvKiBQYWlyZWQgd2l0aCBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpIGluIGluZXQ2X2RncmFtX29wcyAqL1xcbiA2NDg6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfcHJvdCwgXFx1MDAyNnVkcF9wcm90KTtcXG4gNjQ5OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlb3BzLCBcXHUwMDI2aW5ldF9kZ3JhbV9vcHMpO1xcbiA2NTA6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5LCBQRl9JTkVUKTtcXG4gNjUxOlxcdFxcdFxcdFxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0XFx0XFx0XFx0LyogRGlzYWJsZSBhbGwgb3B0aW9ucyBub3QgdG8gYWxsb2NhdGUgbWVtb3J5IGFueW1vcmUsXFxuIDY1NDpcXHRcXHRcXHRcXHQgKiBidXQgdGhlcmUgaXMgc3RpbGwgYSByYWNlLiAgU2VlIHRoZSBsb2NrbGVzcyBwYXRoXFxuIDY1NTpcXHRcXHRcXHRcXHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXFxuIDY1NjpcXHRcXHRcXHRcXHQgKi9cXG4gNjU3OlxcdFxcdFxcdFxcdG5wLVxcdTAwM2VyeG9wdC5hbGwgPSAwO1xcbiA2NTg6XFx0XFxuIDY1OTpcXHRcXHRcXHRcXHRpbmV0Nl9jbGVhbnVwX3NvY2soc2spO1xcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4gNjYyOlxcdFxcdFxcdFxcdHJldHYgPSAwO1xcbiA2NjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDY2NDpcXHRcXHRcXHR9XFxuIDY2NTpcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdGNhc2UgSVBWNl9WNk9OTFk6XFxuIDY2ODpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkgfHxcXG4gNjY5OlxcdFxcdFxcdCAgICBpbmV0X3NrKHNrKS1cXHUwMDNlaW5ldF9udW0pXFxuIDY3MDpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDY3MTpcXHRcXHRcXHRzay1cXHUwMDNlc2tfaXB2Nm9ubHkgPSB2YWxib29sO1xcbiA2NzI6XFx0XFx0XFx0cmV0diA9IDA7XFxuIDY3MzpcXHRcXHRcXHRicmVhaztcXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxcbiA2NzY6XFx0XFx0XFx0aWYgKG9wdGxlbiBcXHUwMDNjIHNpemVvZihpbnQpKVxcbiA2Nzc6XFx0XFx0XFx0XFx0Z290byBlX2ludmFsO1xcbiA2Nzg6XFx0XFx0XFx0bnAtXFx1MDAzZXJ4b3B0LmJpdHMucnhpbmZvID0gdmFsYm9vbDtcXG4gNjc5OlxcdFxcdFxcdHJldHYgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo0NS4yNzU4Mzk4MjZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODc2MTY0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwX3NvY2tnbHVlLmNgKipcblxuT2theSwgSSdtIGRpZ2dpbmcgaW50byB0aGlzIG5ldHdvcmtpbmcgaXNzdWUsIGFuZCBpdCdzIHRpbWUgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGh1bmNoIGlzIHRoYXQgdGhlIHByb2JsZW0gbWlnaHQgYmUgcmVsYXRlZCB0byBob3cgc29ja2V0cyBhcmUgZ2x1ZWQgdG9nZXRoZXIsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIElQIGxheWVyLiBJJ20gZ29pbmcgdG8ganVtcCB0byBsaW5lIDUzMyBhcyBhIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlY3Rpb24gcHJvYmFibHkgaGFuZGxlcyBzb21lIGtleSBzb2NrZXQgb3BlcmF0aW9ucyBvciBzdGF0ZSB0cmFuc2l0aW9ucywgYW5kIHRoYXQncyB1c3VhbGx5IGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIEkgYW0gaW52ZXN0aWdhdGluZyBhbiBJUC1yZWxhdGVkIHByb2JsZW0gaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDcuMTUyMDA2NDc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyNTpcXHRcXHRzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyO1xcbiA1MjY6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gNTI3OlxcdFxcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2luICosIHNpbiwgbXNnLVxcdTAwM2Vtc2dfbmFtZSk7XFxuIDUyODpcXHRcXHRzdHJ1Y3Qge1xcbiA1Mjk6XFx0XFx0XFx0c3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyIGVlO1xcbiA1MzA6XFx0XFx0XFx0c3RydWN0IHNvY2thZGRyX2luXFx0IG9mZmVuZGVyO1xcbiA1MzE6XFx0XFx0fSBlcnJoZHI7XFxuIDUzMjpcXHRcXHRpbnQgZXJyO1xcbiA1MzM6XFx0XFx0aW50IGNvcGllZDtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4gNTM2OlxcdGFnYWluOlxcbiA1Mzc6XFx0XFx0c2tiID0gc29ja19kZXF1ZXVlX2Vycl9za2Ioc2spO1xcbiA1Mzg6XFx0XFx0aWYgKCFza2IpXFxuIDUzOTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTQwOlxcdFxcdGlmICh1bmxpa2VseShzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX0RHUkFNIFxcdTAwMjZcXHUwMDI2XFxuIDU0MTpcXHRcXHRcXHQgICAgIHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCBcXHUwMDI2XFx1MDAyNlxcbiA1NDI6XFx0XFx0XFx0ICAgICB1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSBcXHUwMDI2XFx1MDAyNlxcbiA1NDM6XFx0XFx0XFx0ICAgICBza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xcbiA1NDQ6XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gNTQ1OlxcdFxcdFxcdGdvdG8gYWdhaW47XFxuIDU0NjpcXHRcXHR9XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdGNvcGllZCA9IHNrYi1cXHUwMDNlbGVuO1xcbiA1NDk6XFx0XFx0aWYgKGNvcGllZCBcXHUwMDNlIGxlbikge1xcbiA1NTA6XFx0XFx0XFx0bXNnLVxcdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX1RSVU5DO1xcbiA1NTE6XFx0XFx0XFx0Y29waWVkID0gbGVuO1xcbiA1NTI6XFx0XFx0fVxcbiA1NTM6XFx0XFx0ZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgMCwgbXNnLCBjb3BpZWQpO1xcbiA1NTQ6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4gNTU1OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA1NTY6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTU3OlxcdFxcdH1cXG4gNTU4OlxcdFxcdHNvY2tfcmVjdl90aW1lc3RhbXAobXNnLCBzaywgc2tiKTtcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0c2VyciA9IFNLQl9FWFRfRVJSKHNrYik7XFxuIDU2MTpcXHRcXG4gNTYyOlxcdFxcdGlmIChzaW4gXFx1MDAyNlxcdTAwMjYgaXB2NF9kYXRhZ3JhbV9zdXBwb3J0X2FkZHIoc2VycikpIHtcXG4gNTYzOlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuIDU2NDpcXHRcXHRcXHRzaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9ICooX19iZTMyICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDcuMTUyMTEzMjA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NDI4MjY2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFVEUHY2IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2Ni91ZHAuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA4MjIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaGFuZGxpbmcgb2YsIGxldCdzIHNheSwgY2hlY2tzdW0gY2FsY3VsYXRpb25zIG9yIG1heWJlIHNvbWUgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBVRFB2NiBpbXBsZW1lbnRhdGlvbi4gSSByZWNhbGwgc29tZSBzdWJ0bGV0aWVzIHRoZXJlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGVpdGhlciB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgSVB2NiBoZWFkZXIgb3IgcGVyaGFwcyBzb21lIG9mIHRoZSBvZmZsb2FkIGZlYXR1cmVzLiBJJ20gYmV0dGluZyB0aGF0IHRoZSBwbGFjZSBJJ20gaW50ZXJlc3RlZCBpbiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgYXBwcm9wcmlhdGUgaGVhZGVycyBhcmUgaW4gcGxhY2UgYW5kIHRoYXQgdGhlIHBhY2tldCBnZXRzIHJvdXRlZCBjb3JyZWN0bHkgYWZ0ZXIgY2hlY2tzdW0gdmVyaWZpY2F0aW9uLCBidXQgSSdsbCBzZWUgd2hlcmUgdGhpcyB0YWtlcyBtZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo0OS45OTQ5NDE5NTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3VkcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgxNTpcXHRcXG4gODE2OlxcdFxcdHJldHVybiAwO1xcbiA4MTc6XFx0fVxcbiA4MTg6XFx0XFxuIDgxOTpcXHRzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gODIwOlxcdHtcXG4gODIxOlxcdFxcdGVudW0gc2tiX2Ryb3BfcmVhc29uIGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX05PVF9TUEVDSUZJRUQ7XFxuIDgyMjpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcXG4gODIzOlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0aWYgKHVubGlrZWx5KHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spKSkge1xcbiA4MjY6XFx0XFx0XFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xcbiA4Mjc6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA4Mjg6XFx0XFx0fVxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcXG4gODMxOlxcdFxcdFxcdGRyb3BfcmVhc29uID0gU0tCX0RST1BfUkVBU09OX1hGUk1fUE9MSUNZO1xcbiA4MzI6XFx0XFx0XFx0Z290byBkcm9wO1xcbiA4MzM6XFx0XFx0fVxcbiA4MzQ6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnVkcHY2X2VuY2FwX25lZWRlZF9rZXkpIFxcdTAwMjZcXHUwMDI2XFxuIDgzNzpcXHRcXHQgICAgUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF90eXBlKSkge1xcbiA4Mzg6XFx0XFx0XFx0aW50ICgqZW5jYXBfcmN2KShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRcXHQvKlxcbiA4NDE6XFx0XFx0XFx0ICogVGhpcyBpcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCBzbyBwYXNzIHRoZSBza2IgdG9cXG4gODQyOlxcdFxcdFxcdCAqIHRoZSBzb2NrZXQncyB1ZHBfZW5jYXBfcmN2KCkgaG9vay4gT3RoZXJ3aXNlLCBqdXN0XFxuIDg0MzpcXHRcXHRcXHQgKiBmYWxsIHRocm91Z2ggYW5kIHBhc3MgdGhpcyB1cCB0aGUgVURQIHNvY2tldC5cXG4gODQ0OlxcdFxcdFxcdCAqIHVwLVxcdTAwM2VlbmNhcF9yY3YoKSByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6XFxuIDg0NTpcXHRcXHRcXHQgKiA9MCBpZiBza2Igd2FzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgdG8gdGhlIGVuY2FwXFxuIDg0NjpcXHRcXHRcXHQgKiAgICBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuXFxuIDg0NzpcXHRcXHRcXHQgKiBcXHUwMDNlMCBpZiBza2Igc2hvdWxkIGJlIHBhc3NlZCBvbiB0byBVRFAuXFxuIDg0ODpcXHRcXHRcXHQgKiBcXHUwMDNjMCBpZiBza2Igc2hvdWxkIGJlIHJlc3VibWl0dGVkIGFzIHByb3RvIC1OXFxuIDg0OTpcXHRcXHRcXHQgKi9cXG4gODUwOlxcdFxcbiA4NTE6XFx0XFx0XFx0LyogaWYgd2UncmUgb3Zlcmx5IHNob3J0LCBsZXQgVURQIGhhbmRsZSBpdCAqL1xcbiA4NTI6XFx0XFx0XFx0ZW5jYXBfcmN2ID0gUkVBRF9PTkNFKHVwLVxcdTAwM2VlbmNhcF9yY3YpO1xcbiA4NTM6XFx0XFx0XFx0aWYgKGVuY2FwX3Jjdikge1xcbiA4NTQ6XFx0XFx0XFx0XFx0aW50IHJldDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NDkuOTk1MDU4MTYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MTY5ODI5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBJUHY2IHRvIElQdjQgQWRkcmVzcyBDb252ZXJzaW9uIG9uIFVEUCBTb2NrZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29yayBzb2NrZXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgY29udmVyc2lvbiBvZiBJUHY2IHRvIElQdjQgYWRkcmVzcyBmb3JtYXRzIG9uIFVEUCBzb2NrZXRzIHVzaW5nIHRoZSBgSVBWNl9BRERSRk9STWAgc2V0c29ja29wdC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eT8gVGhlIGFpbSBpcyB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIGVycm9uZW91c2x5IHByb2Nlc3NlZCBvciwgd29yc2UsIGRlcXVldWVkIGFzIElQdjQgZXJyb3JzIGFmdGVyIGEgVURQIHNvY2tldCBpcyBzd2l0Y2hlZCB0byBJUHY0IHZpYSBgSVBWNl9BRERSRk9STWAuXG5cbkhlcmUncyB0aGUgZ2lzdDogYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2Agc2V0cyBhbiBgQUREUkZPUk1gIGZsYWcsIGNhbGxzIGBzeW5jaHJvbml6ZV9uZXQoKWAsIGFuZCB0aGVuIGNoZWNrcyBpZiBJUHY2IHBhY2tldHMgYXJlIHN0aWxsIGxpbmdlcmluZyBhcm91bmQgaW4gdGhlIHJlY2VpdmUgcXVldWVzIChgcmVhZGVyX3F1ZXVlYCBvciBgc2tfcmVjZWl2ZV9xdWV1ZWApLiBJbiBgbmV0L2lwdjYvdWRwLmNgLCBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIHByb2FjdGl2ZWx5IGRyb3BzIElQdjYgcGFja2V0cyBpZiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldC4gVGhlbiwgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLCBgaXBfcmVjdl9lcnJvcmAgZnVydGhlciBlbmZvcmNlcyB0aGlzIGJ5IGRyb3BwaW5nIElQdjYgc2ticyBpZiB0aGUgYEFERFJGT1JNYCBmbGFnIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgYXJlYSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIFlFUyEgV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbnZvbHZlZCBpbiBBRl9JTkVUNi9BRl9JTkVUIHNvY2tldCBvcHRpb25zLCB0aGUgVURQIHNvY2tldCByZWNlaXZlIHBhdGgsIGFuZCBlcnJvciBxdWV1ZSBoYW5kbGluZy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHM6IGBzZXRzb2Nrb3B0KC4uLiwgSVBQUk9UT19JUFY2LCBJUFY2X0FERFJGT1JNLCAuLi4pYCwgYHJlY3Ztc2coLi4uLCBNU0dfRVJSUVVFVUUpYCwgYW5kIGJhc2ljIFVEUCBwYWNrZXQgcmVjZXB0aW9uLiBUaGlzIGlzIHRleHRib29rIGZ1enppbmcgdGVycml0b3J5IVxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZnV6emluZyBzdHJhdGVneSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgcmVxdWlyZW1lbnRzLiBPYnZpb3VzbHksIElQdjYgbmVlZHMgdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBgQ09ORklHX0lQVjZgIChvciBqdXN0IGBJUFY2YCB3aXRob3V0IHRoZSBwcmVmaXgpLiBgQ09ORklHX0lORVRgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gZm9yIGFueSBuZXR3b3JraW5nLXJlbGF0ZWQgY29kZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gYElQVjZgIG9yIHRoZXNlIHNwZWNpZmljIGZpbGVzIChgaXBfc29ja2dsdWUuY2AsIGBpcHY2X3NvY2tnbHVlLmNgLCBgdWRwLmNgKSwgYnV0IHRoZSBjb3JlIGVsZW1lbnRzIGxvb2sgcHJvbWlzaW5nIGZvciBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcwOCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjU0LjkxMjA0Mzk1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDc1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQzOjU1LjE5MzUyNTY4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjUzMTAzMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgSVB2NiBJbmZyYXN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBpcHY2X3NvY2tnbHVlLm9gIGFuZCBgdWRwLm9gLiBXaGVyZSB3b3VsZCBJIGZpbmQgdGhlIG1vc3QgcmVsaWFibGUgYnVpbGQgaW5mb3JtYXRpb24/IFRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlzIHRoZSBwbGFjZSB0byBiZSwgb2YgY291cnNlLiBTbywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYG5ldC9pcHY2L01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgYnVpbGQgcHJvY2VzcyBkZWZpbmVzIGhvdyB0aGVzZSBvYmplY3RzIGFyZSBjcmVhdGVkIGFuZCBsaW5rZWQsIHdoaWNoIHNob3VsZCBnaXZlIG1lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgSSBuZWVkLiBJdCdzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBidWlsZCBjb250ZXh0IGZvciB0aGVzZSBjcnVjaWFsIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDM6NTYuODQ2NjMxNTM4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjYxNzg0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0Mzo1Ni44OTMyNTU0MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkwOTg2ODk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgSVBWNmAgKGFuZCBhbHNvIGBJTkVUYCwgb2YgY291cnNlKS4gTGV0J3MgZGl2ZSBpbiBhbmQgc2VlIHdoZXJlIHdlJ3ZlIG1hZGUgY2hhbmdlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkLiBNeSBpbml0aWFsIHNjYW4gaGFzIHR1cm5lZCB1cCBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgaGF2ZSBlaXRoZXIgYmVlbiBtb2RpZmllZCBvciBhZGRlZC4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gd2hlcmUgdGhlc2UgYXBwZWFyIGluIHRoZSBrZXJuZWw6XG5cbiogICBXZSBoYXZlIGBkb19pcHY2X3NldHNvY2tvcHRgLCBvciBwb3RlbnRpYWxseSBpdHMgdmFyaWFudHMgYGlwdjZfc2V0c29ja29wdGAgb3IgYW5vdGhlciBgZG9faXB2Nl9zZXRzb2Nrb3B0YCAobmVlZCB0byBjbGFyaWZ5IHRoZSBkaWZmZXJlbmNlcyBhbmQgdGhlaXIgY2FsbHMpLlxuKiAgIFRoZW4gdGhlcmUgaXMgYHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZgLCB3aGljaCBpcyBzdGF0aWMsIHNvIEknbGwgbmVlZCB0byBjaGVjayBob3cgaXQncyB1c2VkIGFuZCBpZiBpdCBnZXRzIGlubGluZWQsIG9yIGlmIGl0IGhhcyBzb21lIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiogICBBbHNvLCBgaXBfcmVjdl9lcnJvcmAgc2hvdWxkIGJlIGltcG9ydGFudCB0byBzdHVkeS5cbiogICBUaGVuIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAuXG4qICAgQW5kIGZpbmFsbHksIGB1ZHB2Nl9yZWN2bXNnYCBvciBhZ2FpbiBgaXB2Nl9zZXRzb2Nrb3B0YC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gd2hpY2ggb2YgdGhlc2UgYXJlIGFjdHVhbGx5ICpkZWZpbmVkKiBub24tc3RhdGljYWxseSwgb3IgYXQgbGVhc3QgaG93IG1hbnkgZGlzdGluY3Qgc3RhdGljIHN5bWJvbHMgd2UgaGF2ZS4gSXQgbG9va3MgbGlrZTpcblxuKiAgIGBkb19pcHY2X3NldHNvY2tvcHRgIGlzIG5vbi1zdGF0aWMgYW5kIGRlZmluZWQgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIEdvb2QuXG4qICAgYGlwX3JlY3ZfZXJyb3JgIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBJbnRlcmVzdGluZywgdGhpcyBsb29rcyBsaWtlIGFuIElQdjQgZnVuY3Rpb24sIHNvIGl0IHNob3VsZCBiZSBjaGVja2VkLlxuKiAgIGB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYmAgaXMgc3RhdGljIGluIGBuZXQvaXB2Ni91ZHAuY2AsIHNvIHdlIGhhdmUgdG8gd2F0Y2ggaG93IHRoYXQgZ2V0cyB1c2VkLlxuKiAgIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCBpcyBzdGF0aWMgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIE9rYXkuXG4qICAgQW5kIGZpbmFsbHksIGBpcHY2X3NldHNvY2tvcHRgLCB3aGljaCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCBpbiBgaXB2Nl9zb2NrZ2x1ZS5jYCBhbmQgY2FsbHMgYGRvX2lwdjZfc2V0c29ja29wdGAuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cblNvIG5leHQsIGxldCdzIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zZXRzb2Nrb3B0YCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgZGVmaW5lZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gR290dGEgZ2V0IGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGF0LCBwYXJ0aWN1bGFybHksIGlmIHRoZSBmdW5jdGlvbnMgbWFrZSB0aGVpciB3YXkgaW50byBzb21lIG1vZHVsZSBleHBvcnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDowMC44MDMxMjc4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNDY0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9zZXRzb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PXN0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTQwMi1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NDAzOmludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy00MDQtXFx0XFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtOTkwLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzo5OTE6aW50IGlwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTk5Mi1cXHRcXHQgICAgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDAxLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDAyOlxcdGVyciA9IGRvX2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwMy0jaWZkZWYgQ09ORklHX05FVEZJTFRFUlxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTAtfVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDExOkVYUE9SVF9TWU1CT0woaXB2Nl9zZXRzb2Nrb3B0KTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAxMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDAuODQ5MjAwOTY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTk0MDY2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBDYWxsZXJzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9pcHY2L3VkcC5jYC4gSXQncyBjcnVjaWFsLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgaW1wYWN0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgKmNhbGwqIHRoaXMgZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCByZXZlYWwgdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGFuZCB0aGUgdHlwZXMgb2Ygc2l0dWF0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjcml0aWNhbCBwYXRoLiBUaGlzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdyBvZiB0aGUgSVB2NiBVRFAgc3RhY2suIFRpbWUgdG8gY2hlY2sgdGhlIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDIuNzQ4NjExNzM0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1NjIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni91ZHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni91ZHAuYz03ODU9c3RhdGljIGludCBfX3VkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtODE4LVxcbm5ldC9pcHY2L3VkcC5jOjgxOTpzdGF0aWMgaW50IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy04MjAte1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9ODk1PXN0YXRpYyBpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy05MDAtXFx0aWYgKGxpa2VseSghdWRwX3VuZXhwZWN0ZWRfZ3NvKHNrLCBza2IpKSlcXG5uZXQvaXB2Ni91ZHAuYzo5MDE6XFx0XFx0cmV0dXJuIHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbm5ldC9pcHY2L3VkcC5jLTkwMi1cXG4tLVxcbm5ldC9pcHY2L3VkcC5jLTkwOC1cXHRcXHR1ZHBfcG9zdF9zZWdtZW50X2ZpeF9jc3VtKHNrYik7XFxubmV0L2lwdjYvdWRwLmM6OTA5OlxcdFxcdHJldCA9IHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKHNrLCBza2IpO1xcbm5ldC9pcHY2L3VkcC5jLTkxMC1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDIuNzk1Nzc0MjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjAyOTQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgVURQdjYgcmVjZXB0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgaXNzdWUgbWlnaHQgYmUgY3JvcHBpbmcgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvcmUgcmVjZWl2ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGV4YW1pbmUgYF9fdWRwNl9saWJfcmN2YCwgYHVkcHY2X3F1ZXVlX3Jjdl9za2JgLCBhbmQgYHVkcHY2X3JjdmAgd2l0aGluIHRoZSBgbmV0L2lwdjYvdWRwLmNgIGZpbGUuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gZGVidWdnaW5nIFVEUHY2IHJlY2VwdGlvbiBpc3N1ZXMsIGFuZCB0aGV5J3JlIHRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCB0cmFjaW5nIHBhY2tldCBoYW5kbGluZyBhbmQgYW55IHBvc3NpYmxlIHF1ZXVlaW5nIHByb2JsZW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaG9wZWZ1bGx5IHdoZXJlIEkgY2FuIGdldCBzb21lIGFuc3dlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDQuODExODA2ODM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHB2Nl9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdWRwLmM9MTA1NT1zdGF0aWMgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTA4Ni1cXG5uZXQvaXB2Ni91ZHAuYzoxMDg3OklORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB1ZHB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni91ZHAuYy0xMDg4LXtcXG4tLVxcbm5ldC9pcHY2L3VkcC5jPTE5NTc9aW50IF9faW5pdCB1ZHB2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xOTYxLVxcdG5ldF9ob3RkYXRhLnVkcHY2X3Byb3RvY29sID0gKHN0cnVjdCBpbmV0Nl9wcm90b2NvbCkge1xcbm5ldC9pcHY2L3VkcC5jOjE5NjI6XFx0XFx0LmhhbmRsZXIgICAgID0gdWRwdjZfcmN2LFxcbm5ldC9pcHY2L3VkcC5jLTE5NjMtXFx0XFx0LmVycl9oYW5kbGVyID0gdWRwdjZfZXJyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDowNC44NjA0MjE0MTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMDYwMjc3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIElQdjYgdG8gSVB2NCBBZGRyZXNzIEZhbWlseSBDb252ZXJzaW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlc2UgZm9jdXMgc3ltYm9scy4gSSBzZWU6IGBkb19pcHY2X3NldHNvY2tvcHRgLCBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NmAsIGBpcF9yZWN2X2Vycm9yYCwgYHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiYCwgYW5kIGBpcHY2X3NldHNvY2tvcHRgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBjYW4gdGVsbCB0aGVzZSBhcmVuJ3QgZ2VuZXJpYyBob3RzcG90cyBsaWtlIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbi4gVGhleSBhcmUgYWxsIHByZXR0eSBzcGVjaWZpYy4gYGRvX2lwdjZfc2V0c29ja29wdGAgYW5kIGBpcHY2X3NldHNvY2tvcHRgIGFyZSBmb3IgSVB2NiBzb2NrZXQgb3B0aW9ucyBvbmx5LiBgaXBfcmVjdl9lcnJvcmAgaXMgYWJvdXQgdGhlIGVycm9yIHF1ZXVlIGZvciBJUHY0LCBub3QgdGhlIGhvdCBwYXRoLiBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgIGlzIHNwZWNpZmljYWxseSBhYm91dCByZWNlaXZpbmcgVURQdjYgcGFja2V0cywgYW5kIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCBpcyB0aGF0IG5ldyBoZWxwZXIgd2UgYWRkZWQgaW4gYGlwdjZfc29ja2dsdWUuY2AuXG5cbk5vdywgbGV0J3MganVzdCBjb25maXJtIHRoZSBjb25maWdzLCB3ZSBoYXZlIGBJUFY2YCBhbmQgYElORVRgLCBzbyB0aGF0J3MgZ29vZC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgaGVyZS4gRnJvbSB3aGF0IEkgc2VlLCB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBVRFAgaGFuZGxpbmcgdGhhdCBvY2N1ciB3aGVuIHdlIGNvbnZlcnQgYSBzb2NrZXQgZnJvbSBJUHY2IHRvIElQdjQgdXNpbmcgdGhlIGBJUFY2X0FERFJGT1JNYCBzb2NrZXQgb3B0aW9uLiBXZSdyZSBhZGRpbmcgdGhlIGBVRFBfRkxBR1NfQUREUkZPUk1gIGJpdCB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHJlY2VpdmVkIHZpYSBgdWRwdjZfcXVldWVfcmN2X29uZV9za2JgLCBhbmQgd2UncmUgZHJvcHBpbmcgbGVmdG92ZXIgSVB2NiBwYWNrZXRzIHRoYXQgZW5kIHVwIGluIHRoZSBlcnJvciBxdWV1ZSB1c2luZyBgaXBfcmVjdl9lcnJvcmAuIEFsc28sIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgd2UncmUgYWRkaW5nIGNoZWNrcyB0byBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aXRoIGB1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2YCB0byBtYWtlIHN1cmUgd2UgcmVqZWN0IHRoZSBjb252ZXJzaW9uIGlmIHRoZXJlIGFyZSBhbnkgSVB2NiBwYWNrZXRzIHN0aWxsIHdhaXRpbmcgaW4gdGhlIFVEUCByZWFkZXIgb3IgcmVjZWl2ZSBxdWV1ZXMuIFNvLCBlc3NlbnRpYWxseSwgd2UncmUgbW9kaWZ5aW5nIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgdGhhdCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscyBzdWNoIGFzIGBzZXRzb2Nrb3B0YCBhbmQgYHJlY3Ztc2dgLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIGl0LiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OCwiT3V0cHV0VG9rZW5zIjoyMzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MDkuODgxMDI2MzY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAzNTgyNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIixcbiAgICBcImlwdjZfc2V0c29ja29wdFwiLFxuICAgIFwidWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NlwiLFxuICAgIFwiaXBfcmVjdl9lcnJvclwiLFxuICAgIFwidWRwdjZfcXVldWVfcmN2X29uZV9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgY29kZSB0byBoYW5kbGUgVURQIElQdjYtdG8tSVB2NCBjb252ZXJzaW9uIHZpYSB0aGUgSVBWNl9BRERSRk9STSBzb2NrZXQgb3B0aW9uLiBJdCBpbnRyb2R1Y2VzIFVEUF9GTEFHU19BRERSRk9STSB0byBwcmV2ZW50IElQdjYgcGFja2V0cyBmcm9tIGJlaW5nIHF1ZXVlZCAodWRwdjZfcXVldWVfcmN2X29uZV9za2IpIGFuZCBkcm9wcyB1bmV4cGVjdGVkIElQdjYgc2ticyBmcm9tIHRoZSBlcnJvciBxdWV1ZSAoaXBfcmVjdl9lcnJvcikuIEl0IGFsc28gYWRkcyBxdWV1ZSBpbnNwZWN0aW9uICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KSBpbiBkb19pcHY2X3NldHNvY2tvcHQgYmVmb3JlIGFsbG93aW5nIHRoZSBhZGRyZXNzIGZvcm0gY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhbHRlciByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIFVEUCBhbmQgc29ja2V0IG9wdGlvbnMsIG1ha2luZyBpdCB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcHY2X3NldHNvY2tvcHRcIixcbiAgICBcInVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjZcIixcbiAgICBcImlwX3JlY3ZfZXJyb3JcIixcbiAgICBcInVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIGNvZGUgdG8gaGFuZGxlIFVEUCBJUHY2LXRvLUlQdjQgY29udmVyc2lvbiB2aWEgdGhlIElQVjZfQUREUkZPUk0gc29ja2V0IG9wdGlvbi4gSXQgaW50cm9kdWNlcyBVRFBfRkxBR1NfQUREUkZPUk0gdG8gcHJldmVudCBJUHY2IHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKHVkcHY2X3F1ZXVlX3Jjdl9vbmVfc2tiKSBhbmQgZHJvcHMgdW5leHBlY3RlZCBJUHY2IHNrYnMgZnJvbSB0aGUgZXJyb3IgcXVldWUgKGlwX3JlY3ZfZXJyb3IpLiBJdCBhbHNvIGFkZHMgcXVldWUgaW5zcGVjdGlvbiAodWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NikgaW4gZG9faXB2Nl9zZXRzb2Nrb3B0IGJlZm9yZSBhbGxvd2luZyB0aGUgYWRkcmVzcyBmb3JtIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWx0ZXIgcmVhY2hhYmxlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiBVRFAgYW5kIHNvY2tldCBvcHRpb25zLCBtYWtpbmcgaXQgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTM5MjI1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA2NDM2NjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTkyMDk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwNjM4MzMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgYW5kIHByb3RvY29sL3R5cGUgY29uZnVzaW9uIGR1cmluZyBJUHY2IHRvIElQdjQgYWRkcmVzcyB0cmFuc2Zvcm1hdGlvbiAoSVBWNl9BRERSRk9STSkgb24gVURQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZmxhZyAoYFVEUF9GTEFHU19BRERSRk9STWApLCBzeW5jaHJvbml6ZXMgbmV0d29yayBwcm9jZXNzaW5nIChgc3luY2hyb25pemVfbmV0KClgKSwgaW5zcGVjdHMgcmVjZWl2ZSBhbmQgcmVhZGVyIHF1ZXVlcyBmb3IgcGVuZGluZyBJUHY2IHBhY2tldHMsIGFuZCBkcm9wcyBvciBkaXNjYXJkcyBJUHY2IHBhY2tldHMgcmVjZWl2ZWQgb3IgcXVldWVkIG9uIGNvbnZlcnRlZCBzb2NrZXRzLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBidWZmZXJzLCBvciBtb2RpZnkgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQWxsIGNvbnRyb2wgZmxvdyB2YXJpYWJsZXMgKHN1Y2ggYXMgbG9jYWwgYGZvdW5kYCBib29sZWFuIGFuZCBgc2tiLVxcdTAwM2Vwcm90b2NvbGApIGFuZCBzb2NrZXQgZmxhZ3MgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBQb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHByb3RvY29sIHRyYW5zaXRpb25zIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgdHlwZSBjb25mdXNpb24sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9uIHBhY2tldCBoZWFkZXJzKSBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2YzYwZmJjYjhhNTA4OWNhNzcxYTFhOGIyMDBiMWRhMjM0Y2Y1YzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAzOjQzOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmhcbmluZGV4IDk5ODkwNmVjM2IzMmEuLmY3NzVmNzhkNmJmNDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oXG5AQCAtNjcsNiArNjcsNyBAQCBlbnVtIHtcbiBcdFVEUF9GTEFHU19BQ0NFUFRfRlJBR0xJU1QsXG4gXHRVRFBfRkxBR1NfQUNDRVBUX0w0LFxuIFx0VURQX0ZMQUdTX0VOQ0FQX0VOQUJMRUQsIC8qIFRoaXMgc29ja2V0IGVuYWJsZWQgZW5jYXAgKi9cbitcdFVEUF9GTEFHU19BRERSRk9STSwgICAgICAvKiBCbG9jayBJUHY2IHJlY2VpdmUgZHVyaW5nL2FmdGVyIEFERFJGT1JNICovXG4gfTtcbiBcbiAvKiBwZXIgTlVNQSBzdHJ1Y3R1cmUgZm9yIGxvY2tsZXNzIHByb2R1Y2VyIHVzYWdlLiAqL1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXG5pbmRleCBhNTVlZjMyN2VjOTMyLi5mY2QxMDJhZThiZWRiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuQEAgLTUzMyw5ICs1MzMsMTcgQEAgaW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXG4gXHRpbnQgY29waWVkO1xuIFxuIFx0ZXJyID0gLUVBR0FJTjtcbithZ2FpbjpcbiBcdHNrYiA9IHNvY2tfZGVxdWV1ZV9lcnJfc2tiKHNrKTtcbiBcdGlmICghc2tiKVxuIFx0XHRnb3RvIG91dDtcbitcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFAgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgdWRwX3Rlc3RfYml0KEFERFJGT1JNLCBzaykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkge1xuK1x0XHRjb25zdW1lX3NrYihza2IpO1xuK1x0XHRnb3RvIGFnYWluO1xuK1x0fVxuIFxuIFx0Y29waWVkID0gc2tiLVx1MDAzZWxlbjtcbiBcdGlmIChjb3BpZWQgXHUwMDNlIGxlbikge1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uZDMwN2NlYTllYmM1YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtMzczLDYgKzM3MywzMyBAQCBzdGF0aWMgaW50IGlwdjZfc2V0X29wdF9oZHIoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBib29sIHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBza19idWZmX2hlYWQgKnJlYWRlcl9xdWV1ZSA9IFx1MDAyNnVkcF9zayhzayktXHUwMDNlcmVhZGVyX3F1ZXVlO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZyZWFkZXJfcXVldWUtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNrYl9xdWV1ZV93YWxrKHJlYWRlcl9xdWV1ZSwgc2tiKSB7XG4rXHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbitcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUsIHNrYikge1xuK1x0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4rXHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2soXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJlYWRlcl9xdWV1ZS1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4gaW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gXHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIHtcbkBAIC01ODcsNiArNjE0LDE2IEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuK1x0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuK1x0XHRcdFx0dWRwX3NldF9iaXQoQUREUkZPUk0sIHNrKTtcbitcdFx0XHRcdHN5bmNocm9uaXplX25ldCgpO1xuK1x0XHRcdFx0aWYgKHVkcDZfYWRkcmZvcm1fcXVldWVfaGFzX2lwdjYoc2spKSB7XG4rXHRcdFx0XHRcdHVkcF9jbGVhcl9iaXQoQUREUkZPUk0sIHNrKTtcbitcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1xuIFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiBcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuY1xuaW5kZXggOTM0NzhkMWFkNTc2OS4uY2NkOGFlOTJmNTJiYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3VkcC5jXG4rKysgYi9uZXQvaXB2Ni91ZHAuY1xuQEAgLTgyMiw2ICs4MjIsMTEgQEAgc3RhdGljIGludCB1ZHB2Nl9xdWV1ZV9yY3Zfb25lX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTtcbiBcbitcdGlmICh1bmxpa2VseSh1ZHBfdGVzdF9iaXQoQUREUkZPUk0sIHNrKSkpIHtcbitcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUO1xuK1x0XHRnb3RvIGRyb3A7XG4rXHR9XG4rXG4gXHRpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHtcbiBcdFx0ZHJvcF9yZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fWEZSTV9QT0xJQ1k7XG4gXHRcdGdvdG8gZHJvcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjA5Ljk2MTkyMjA2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMzQ4MzY5NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVURQIEFkZHJlc3MgRm9ybSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCB0aHVzIG5lY2Vzc2l0YXRpbmcgS01TQU4gYW5hbHlzaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBhY3R1YWxseSBkb2VzLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGZvciBVRFAgc29ja2V0cyBhbmQgaG93IHdlIGhhbmRsZSB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIElQdjYgYW5kIElQdjQuXG5cbkhlcmUncyB0aGUgYnJlYWtkb3duOlxuXG4xLiAgQSBuZXcgZmxhZywgYFVEUF9GTEFHU19BRERSRk9STWAsIGlzIGludHJvZHVjZWQgaW4gYGluY2x1ZGUvbGludXgvdWRwLmhgLlxuMi4gIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBub3cgaGFzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgaW4gYGlwX3JlY3ZfZXJyb3IoKWAuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIFVEUCBkYXRhZ3JhbSBzb2NrZXQsIHRoZSBVRFAgYEFERFJGT1JNYCBmbGFnIGlzIHNldCwgYW5kIHRoZSBwYWNrZXQgaXMgSVB2NiwgdGhlIGNvZGUgY29uc3VtZXMgdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBhbmQgbG9vcHMsIGZldGNoaW5nIGFub3RoZXIgYHNrYmAuIEVmZmVjdGl2ZWx5LCB0aGlzIGRpc2NhcmRzIHRoZSBJUHY2IHBhY2tldC5cbjMuICBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uLCBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NigpYCwgd2hpY2ggY2hlY2tzIHRoZSByZWNlaXZlIHF1ZXVlcyBvZiB0aGUgc29ja2V0IGZvciBhbnkgbGluZ2VyaW5nIElQdjYgcGFja2V0cyB3aGVuIHRoZSBgSVBWNl9BRERSRk9STWAgb3B0aW9uIGlzIHVzZWQuIFRoZSBmdW5jdGlvbiBhY3F1aXJlcyBsb2NrcyB0byBzYWZlbHkgdHJhdmVyc2UgdGhlIHF1ZXVlcy4gSW4gdGhlIGBkb19pcHY2X3NldHNvY2tvcHQoKWAgZnVuY3Rpb24sIHdoZW4gYElQVjZfQUREUkZPUk1gIGlzIHNldCBvbiBhIFVEUCBzb2NrZXQsIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGBzeW5jaHJvbml6ZV9uZXQoKWAgaXMgY2FsbGVkIChsaWtlbHkgdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcpLCBhbmQgdGhlbiBgdWRwNl9hZGRyZm9ybV9xdWV1ZV9oYXNfaXB2NigpYCBpcyBjaGVja2VkLiBJZiBhbnkgSVB2NiBwYWNrZXRzIGFyZSBzdGlsbCBwcmVzZW50LCB0aGUgYEFERFJGT1JNYCBiaXQgaXMgY2xlYXJlZCwgYW5kIGFuIGAtRUJVU1lgIGVycm9yIGlzIHJldHVybmVkLiBUaGlzIGlzIHRvIHByZXZlbnQgYSB0eXBlIGNvbmZ1c2lvbiBzaXR1YXRpb24uXG40LiAgYG5ldC9pcHY2L3VkcC5jYCBub3cgaW5jbHVkZXMgYSBjaGVjayBpbiBgdWRwdjZfcXVldWVfcmN2X29uZV9za2IoKWAuIElmIHRoZSBgQUREUkZPUk1gIGJpdCBpcyBzZXQsIGFueSBhcnJpdmluZyBJUHY2IHBhY2tldHMgYXJlIGRyb3BwZWQgd2l0aCB0aGUgcmVhc29uIGBTS0JfRFJPUF9SRUFTT05fTk9fU09DS0VUYC5cblxuU28sIGl0IHNlZW1zIGxpa2UgdGhlIGludGVudGlvbiBpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgdHlwZSBjb25mdXNpb24gd2hlbiBjb252ZXJ0aW5nIGFuIElQdjYgVURQIHNvY2tldCB0byBhbiBJUHY0IG9uZSB1c2luZyBgSVBWNl9BRERSRk9STWAuIElQdjYgcGFja2V0cyBtaWdodCBiZSBpbi1mbGlnaHQgb3IgcXVldWVkIHdoZW4gdGhlIGNvbnZlcnNpb24gaGFwcGVucywgYW5kIHRoZSBwYXRjaCBpcyBkZXNpZ25lZCB0byBmbHVzaCB0aGVtLiBJZiBub3QgZmx1c2hlZCwgdGhlIElQdjQgY29kZSBjb3VsZCBtaXNoYW5kbGUgSVB2NiBwYWNrZXRzIGFuZCB2aWNlIHZlcnNhLiBJdCBsb29rcyBsaWtlIGl0IGlzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYSBwb3RlbnRpYWwgVXNlLUFmdGVyLUZyZWUsIG9yIG90aGVyIGlzc3VlcyByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzLlxuXG5JIHNob3VsZCBwcm9iYWJseSBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHJlbGV2YW50IGRvY3VtZW50YXRpb24gaW4gdGhlIGtlcm5lbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gV2hhdCB3YXMgdGhlICpwcm9ibGVtKiB0aGF0IG1vdGl2YXRlZCB0aGlzPyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB1c2VmdWwgaGVyZS4gQWZ0ZXIgdW5kZXJzdGFuZGluZyB0aGUgbmVlZCBmb3IgdGhlIHBhdGNoLCBJIHNob3VsZCBsb29rIG1vcmUgY2xvc2VseSBhdCBgaXBfcmVjdl9lcnJvcmAgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBJUHY2IHNrYnMuIExldCdzIHN0YXJ0IHdpdGggYSBsb29rIGF0IGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gVGhpcyBtaWdodCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjIwLjMxMDI5NDYwMloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MzEzODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBpcF9yZWN2X2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuYz00OTU9c3RhdGljIGJvb2wgaXB2NF9kYXRhZ3JhbV9zdXBwb3J0X2Ntc2coY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjItICovXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo1MjM6aW50IGlwX3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy01MjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMC40Njg3MTYzN1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY0OTE4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCwgYXMgYW4gZXhwZXJ0IGZhbWlsaWFyIHdpdGggbmV0d29ya2luZyBjb2RlLCBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWVkIGxpbmVzIG9mIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYDpcblxuKipEZWVwIERpdmUgaW50byBJUCBTb2NrZXQgR2x1ZSBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBhIHNwZWNpZmljIGNodW5rIG9mIHRoZSBJUCBzb2NrZXQgZ2x1ZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIHJlcXVlc3QgaXMgdG8gZm9jdXMgb24gbGluZXMgNTIwIHRvIDYwMCBvZiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyBhIGtleSBhcmVhIGZvciBzb2NrZXQtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIElQIGxheWVyLlwiIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIG1lY2hhbmljcyBvZiBob3cgc29ja2V0IG9wZXJhdGlvbnMsIGxpa2UgYHNlbmRtc2dgIG9yIGByZWN2bXNnYCwgYXJlIGhhbmRsZWQgYXQgdGhlIElQIGxldmVsLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgSVAgaGVhZGVycywgcG9zc2libHkgaGFuZGxpbmcgSVAgb3B0aW9ucywgb3IgbWF5YmUgZGVhbGluZyB3aXRoIGZyYWdtZW50YXRpb24uIFRoZXJlJ3MgYWxzbyB0aGUgcG9zc2liaWxpdHkgb2YgdGhpcyBzZWdtZW50IHdvcmtpbmcgY2xvc2VseSB3aXRoIHRoZSBgaW5ldF9zb2NrYCBzdHJ1Y3R1cmUuIEtub3dpbmcgdGhhdCBpcyBrZXkgd2hlbiBuYXZpZ2F0aW5nIHRoaXMgY29kZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgcG90ZW50aWFsIGRpc2N1c3Npb25zIG9uOlxuXG4qICAgKipIZWFkZXIgY29uc3RydWN0aW9uOioqIEhvdyBhcmUgSVAgaGVhZGVycyAoc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MsIFRUTCwgcHJvdG9jb2wsIGV0Yy4pIGJlaW5nIGJ1aWx0IGJhc2VkIG9uIHRoZSBzb2NrZXQncyBjb25maWd1cmF0aW9uIGFuZCB0aGUgZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZm9sbG93IHRoZSBmbG93IGZyb20gc29ja2V0IGNhbGxzIGludG8gY2FsbHMgdGhhdCBjcmVhdGUgdGhlIGhlYWRlciBkYXRhLlxuKiAgICoqQ2hlY2tzdW0gQ2FsY3VsYXRpb246KiogSG93IGlzIHRoZSBJUCBoZWFkZXIgY2hlY2tzdW0gYmVpbmcgY2FsY3VsYXRlZD8gSXMgaXQgZG9uZSBpbmxpbmUgb3IgaGFuZGxlZCBzZXBhcmF0ZWx5PyBFZmZpY2llbmN5IHdpbGwgYmUga2V5IGhlcmUuXG4qICAgKipGcmFnbWVudGF0aW9uOioqIE1pZ2h0IHRoaXMgc2VjdGlvbiBoYW5kbGUgb3IgaW50ZXJmYWNlIHdpdGggSVAgZnJhZ21lbnRhdGlvbj8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBpbiB0aGUgYGlwX2ZyYWdgIGRhdGEgc3RydWN0dXJlcyBvciBmcmFnbWVudGF0aW9uLXJlbGF0ZWQgZnVuY3Rpb25zLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSSdsbCBiZSBjdXJpb3VzIGFib3V0IGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgaG93IElQLWxldmVsIGVycm9ycyBhcmUgcmVwb3J0ZWQgYmFjayB0byB0aGUgc29ja2V0IGxheWVyLCBhbmQgaG93IHRoaW5ncyBsaWtlIElDTVAgZXJyb3JzIGFyZSBoYW5kbGVkLlxuKiAgICoqU2VjdXJpdHk6KiogVGhpcyBiZWluZyBhIGNyaXRpY2FsIHBhdGgsIGl0IGNvdWxkIGhhdmUgc29tZSBpbnRlcmVzdGluZyBzZWN1cml0eSBpbXBsaWNhdGlvbnMuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGxpa2UgYGlwX2J1aWxkX2hlYWRlcigpYCwgYGlwX3NlbmRfY2hlY2soKWAsIGBpcF9mcmFnbWVudCgpYCwgb3IgYW55dGhpbmcgaW52b2x2aW5nIGBza2JgIChzb2NrZXQgYnVmZmVyKSBtYW5pcHVsYXRpb24uIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgcHJldHR5IGRlbnNlLCBidXQgSSdtIHJlYWR5IHRvIHBhcnNlIHRoZSBjb2RlLCBsaW5lIGJ5IGxpbmUsIHRvIHNlZSB3aGF0IHRoZSBpbnRlbnQgb2YgdGhlIGF1dGhvciB3YXMuIExldCdzIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMy45MzM2MzkwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjA6XFx0LypcXG4gNTIxOlxcdCAqXFx0SGFuZGxlIE1TR19FUlJRVUVVRVxcbiA1MjI6XFx0ICovXFxuIDUyMzpcXHRpbnQgaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbilcXG4gNTI0OlxcdHtcXG4gNTI1OlxcdFxcdHN0cnVjdCBzb2NrX2V4dGVycl9za2IgKnNlcnI7XFxuIDUyNjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA1Mjc6XFx0XFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc2luLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4gNTI4OlxcdFxcdHN0cnVjdCB7XFxuIDUyOTpcXHRcXHRcXHRzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIgZWU7XFxuIDUzMDpcXHRcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfaW5cXHQgb2ZmZW5kZXI7XFxuIDUzMTpcXHRcXHR9IGVycmhkcjtcXG4gNTMyOlxcdFxcdGludCBlcnI7XFxuIDUzMzpcXHRcXHRpbnQgY29waWVkO1xcbiA1MzQ6XFx0XFxuIDUzNTpcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbiA1MzY6XFx0YWdhaW46XFxuIDUzNzpcXHRcXHRza2IgPSBzb2NrX2RlcXVldWVfZXJyX3NrYihzayk7XFxuIDUzODpcXHRcXHRpZiAoIXNrYilcXG4gNTM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA1NDA6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfREdSQU0gXFx1MDAyNlxcdTAwMjZcXG4gNTQxOlxcdFxcdFxcdCAgICAgc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQIFxcdTAwMjZcXHUwMDI2XFxuIDU0MjpcXHRcXHRcXHQgICAgIHVkcF90ZXN0X2JpdChBRERSRk9STSwgc2spIFxcdTAwMjZcXHUwMDI2XFxuIDU0MzpcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7XFxuIDU0NDpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA1NDU6XFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gNTQ2OlxcdFxcdH1cXG4gNTQ3OlxcdFxcbiA1NDg6XFx0XFx0Y29waWVkID0gc2tiLVxcdTAwM2VsZW47XFxuIDU0OTpcXHRcXHRpZiAoY29waWVkIFxcdTAwM2UgbGVuKSB7XFxuIDU1MDpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19mbGFncyB8PSBNU0dfVFJVTkM7XFxuIDU1MTpcXHRcXHRcXHRjb3BpZWQgPSBsZW47XFxuIDU1MjpcXHRcXHR9XFxuIDU1MzpcXHRcXHRlcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7XFxuIDU1NDpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiA1NTU6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDU1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTc6XFx0XFx0fVxcbiA1NTg6XFx0XFx0c29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpO1xcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTtcXG4gNTYxOlxcdFxcbiA1NjI6XFx0XFx0aWYgKHNpbiBcXHUwMDI2XFx1MDAyNiBpcHY0X2RhdGFncmFtX3N1cHBvcnRfYWRkcihzZXJyKSkge1xcbiA1NjM6XFx0XFx0XFx0c2luLVxcdTAwM2VzaW5fZmFtaWx5ID0gQUZfSU5FVDtcXG4gNTY0OlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2FkZHIuc19hZGRyID0gKihfX2JlMzIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgK1xcbiA1NjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2Vyci1cXHUwMDNlYWRkcl9vZmZzZXQpO1xcbiA1NjY6XFx0XFx0XFx0c2luLVxcdTAwM2VzaW5fcG9ydCA9IHNlcnItXFx1MDAzZXBvcnQ7XFxuIDU2NzpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNpbi1cXHUwMDNlc2luX3plcm8sIDAsIHNpemVvZihzaW4tXFx1MDAzZXNpbl96ZXJvKSk7XFxuIDU2ODpcXHRcXHRcXHRtc2ctXFx1MDAzZW1zZ19uYW1lbGVuID0gc2l6ZW9mKCpzaW4pO1xcbiA1Njk6XFx0XFx0fVxcbiA1NzA6XFx0XFxuIDU3MTpcXHRcXHRtZW1jcHkoXFx1MDAyNmVycmhkci5lZSwgXFx1MDAyNnNlcnItXFx1MDAzZWVlLCBzaXplb2Yoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyKSk7XFxuIDU3MjpcXHRcXHRzaW4gPSBcXHUwMDI2ZXJyaGRyLm9mZmVuZGVyO1xcbiA1NzM6XFx0XFx0bWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0aWYgKGlwdjRfZGF0YWdyYW1fc3VwcG9ydF9jbXNnKHNrLCBza2IsIHNlcnItXFx1MDAzZWVlLmVlX29yaWdpbikpIHtcXG4gNTc2OlxcdFxcdFxcdHNpbi1cXHUwMDNlc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuIDU3NzpcXHRcXHRcXHRzaW4tXFx1MDAzZXNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLVxcdTAwM2VzYWRkcjtcXG4gNTc4OlxcdFxcdFxcdGlmIChpbmV0X2Ntc2dfZmxhZ3MoaW5ldF9zayhzaykpKVxcbiA1Nzk6XFx0XFx0XFx0XFx0aXBfY21zZ19yZWN2KG1zZywgc2tiKTtcXG4gNTgwOlxcdFxcdH1cXG4gNTgxOlxcdFxcbiA1ODI6XFx0XFx0cHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX1JFQ1ZFUlIsIHNpemVvZihlcnJoZHIpLCBcXHUwMDI2ZXJyaGRyKTtcXG4gNTgzOlxcdFxcbiA1ODQ6XFx0XFx0LyogTm93IHdlIGNvdWxkIHRyeSB0byBkdW1wIG9mZmVuZGVkIHBhY2tldCBvcHRpb25zICovXFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FUlJRVUVVRTtcXG4gNTg3OlxcdFxcdGVyciA9IGNvcGllZDtcXG4gNTg4OlxcdFxcbiA1ODk6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gNTkwOlxcdG91dDpcXG4gNTkxOlxcdFxcdHJldHVybiBlcnI7XFxuIDU5MjpcXHR9XFxuIDU5MzpcXHRcXG4gNTk0OlxcdHZvaWQgX19pcF9zb2NrX3NldF90b3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbiA1OTU6XFx0e1xcbiA1OTY6XFx0XFx0dTggb2xkX3RvcyA9IGluZXRfc2soc2spLVxcdTAwM2V0b3M7XFxuIDU5NzpcXHRcXG4gNTk4OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkge1xcbiA1OTk6XFx0XFx0XFx0dmFsIFxcdTAwMjY9IH5JTkVUX0VDTl9NQVNLO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMzo0NDoyMy45MzM3NzY5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzkxMzk1MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBJUHY2IFNvY2tldCBPcHRpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBJUHY2IHNvY2tldCBvcHRpb25zIGFuZCBob3cgdGhleSdyZSBoYW5kbGVkLiBMZXQncyBzZWUuLi5JIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgc2V0c29ja29wdGAgYW5kIElQdjYuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uLi4uIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJJ2xsIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDU4MCB0byA2NTAgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgZm9yIHNldHRpbmcgdGhvc2UgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCBpbiB0aGVyZS4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBTSU9DYCBjb21tYW5kIGNvZGVzIGdldCBwcm9jZXNzZWQsIG9wdGlvbiB2YWxpZGF0aW9uIG9jY3VycywgYW5kIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YWNrIGNhbGxzIGFyZSBkaXNwYXRjaGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoaW4gdGhhdCBzZWN0aW9uLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgYXNzb2NpYXRlZCBJUHY2IHNvY2tldCBzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGhvcGVmdWxseSBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MDMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjI2LjMyNTE3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1ODA6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxcbiA1ODE6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDU4MjpcXHRcXG4gNTgzOlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1ODQ6XFx0XFxuIDU4NTpcXHRcXHRjYXNlIElQVjZfQUREUkZPUk06XFxuIDU4NjpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU4NzpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU4ODpcXHRcXHRcXHRpZiAodmFsID09IFBGX0lORVQpIHtcXG4gNTg5OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcXG4gNTkwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTE6XFx0XFxuIDU5MjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuIDU5MzpcXHRcXHRcXHRcXHRcXHRpZiAodWRwX3NrKHNrKS1cXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xcbiA1OTQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTk1OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1OTY6XFx0XFx0XFx0XFx0XFx0fVxcbiA1OTc6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTk4OlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1OTk6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNjAwOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDE6XFx0XFx0XFx0XFx0XFx0fVxcbiA2MDI6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNjAzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDQ6XFx0XFx0XFx0XFx0fVxcbiA2MDU6XFx0XFxuIDYwNjpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcbiA2MDc6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FTk9UQ09OTjtcXG4gNjA4OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MDk6XFx0XFx0XFx0XFx0fVxcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XFxuIDYxMjpcXHRcXHRcXHRcXHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbiA2MTM6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xcbiA2MTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDYxNTpcXHRcXHRcXHRcXHR9XFxuIDYxNjpcXHRcXG4gNjE3OlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG4gNjE4OlxcdFxcdFxcdFxcdFxcdHVkcF9zZXRfYml0KEFERFJGT1JNLCBzayk7XFxuIDYxOTpcXHRcXHRcXHRcXHRcXHRzeW5jaHJvbml6ZV9uZXQoKTtcXG4gNjIwOlxcdFxcdFxcdFxcdFxcdGlmICh1ZHA2X2FkZHJmb3JtX3F1ZXVlX2hhc19pcHY2KHNrKSkge1xcbiA2MjE6XFx0XFx0XFx0XFx0XFx0XFx0dWRwX2NsZWFyX2JpdChBRERSRk9STSwgc2spO1xcbiA2MjI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA2MjQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA2MjU6XFx0XFx0XFx0XFx0fVxcbiA2MjY6XFx0XFxuIDYyNzpcXHRcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIDYyODpcXHRcXHRcXHRcXHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gNjMyOlxcdFxcbiA2MzM6XFx0XFx0XFx0XFx0XFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVxcdTAwM2Vza19wcm90LCAtMSk7XFxuIDYzNDpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgXFx1MDAyNnRjcF9wcm90LCAxKTtcXG4gNjM1OlxcdFxcbiA2MzY6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9zdHJlYW1fb3BzICovXFxuIDYzNzpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19wcm90LCBcXHUwMDI2dGNwX3Byb3QpO1xcbiA2Mzg6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKCkgaW4gdGNwXyhnZXR8c2V0KXNvY2tvcHQoKSAqL1xcbiA2Mzk6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShpY3NrLVxcdTAwM2VpY3NrX2FmX29wcywgXFx1MDAyNmlwdjRfc3BlY2lmaWMpO1xcbiA2NDA6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VvcHMsIFxcdTAwMjZpbmV0X3N0cmVhbV9vcHMpO1xcbiA2NDE6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShzay1cXHUwMDNlc2tfZmFtaWx5LCBQRl9JTkVUKTtcXG4gNjQyOlxcdFxcdFxcdFxcdFxcdHRjcF9zeW5jX21zcyhzaywgaWNzay1cXHUwMDNlaWNza19wbXR1X2Nvb2tpZSk7XFxuIDY0MzpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbiA2NDQ6XFx0XFx0XFx0XFx0XFx0c29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLVxcdTAwM2Vza19wcm90LCAtMSk7XFxuIDY0NTpcXHRcXHRcXHRcXHRcXHRzb2NrX3Byb3RfaW51c2VfYWRkKG5ldCwgXFx1MDAyNnVkcF9wcm90LCAxKTtcXG4gNjQ2OlxcdFxcbiA2NDc6XFx0XFx0XFx0XFx0XFx0LyogUGFpcmVkIHdpdGggUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KSBpbiBpbmV0Nl9kZ3JhbV9vcHMgKi9cXG4gNjQ4OlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QsIFxcdTAwMjZ1ZHBfcHJvdCk7XFxuIDY0OTpcXHRcXHRcXHRcXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZW9wcywgXFx1MDAyNmluZXRfZGdyYW1fb3BzKTtcXG4gNjUwOlxcdFxcdFxcdFxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2ZhbWlseSwgUEZfSU5FVCk7XFxuIDY1MTpcXHRcXHRcXHRcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdFxcdFxcdFxcdC8qIERpc2FibGUgYWxsIG9wdGlvbnMgbm90IHRvIGFsbG9jYXRlIG1lbW9yeSBhbnltb3JlLFxcbiA2NTQ6XFx0XFx0XFx0XFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxcbiA2NTU6XFx0XFx0XFx0XFx0ICogaW4gdWRwdjZfc2VuZG1zZygpIGFuZCBpcHY2X2xvY2FsX3J4cG10dSgpLlxcbiA2NTY6XFx0XFx0XFx0XFx0ICovXFxuIDY1NzpcXHRcXHRcXHRcXHRucC1cXHUwMDNlcnhvcHQuYWxsID0gMDtcXG4gNjU4OlxcdFxcbiA2NTk6XFx0XFx0XFx0XFx0aW5ldDZfY2xlYW51cF9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDM6NDQ6MjYuMzI1MzE0MDdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcwMDQxNjQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQWRkcmVzc2luZyBVRFAgU29ja2V0IFByb3RvY29sIENvbnZlcnNpb24gUmlza3MqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdpdGhpbiB0aGlzIHBhdGNoLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXM6IGB1ZHAuaGAsIGBpcF9zb2NrZ2x1ZS5jYCwgYGlwdjZfc29ja2dsdWUuY2AsIGFuZCBgdWRwLmNgLlxuXG5GaXJzdCwgdGhlIGNvcmUgb2YgdGhlIG1hdHRlciBzZWVtcyB0byBiZSBhcm91bmQgdGhlIGBJUFY2X0FERFJGT1JNYCBmdW5jdGlvbmFsaXR5IG9uIFVEUCBzb2NrZXRzLCBlc3NlbnRpYWxseSBzd2l0Y2hpbmcgYW4gSVB2NiBzb2NrZXQgdG8gSVB2NC4gVGhlIGNoYW5nZXMgYXBwZWFyIGRlc2lnbmVkIHRvIHByZXZlbnQgYW5kIGZpeCBhIHR5cGUgY29uZnVzaW9uIHZ1bG5lcmFiaWxpdHkgYW5kIHJhY2UgY29uZGl0aW9ucywgYSBnb29kIHRoaW5nLlxuXG5JJ20gemVyb2luZyBpbiBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggKmludHJvZHVjZXMqIG9yICpleHBvc2VzKiBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgZm9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBmb2N1c2luZyBvbiB0aGVzZSBhc3BlY3RzOlxuXG4xLiAgKipEYXRhIHNlbnQgdG8gdXNlcnNwYWNlOioqIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIG5ldyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGF0J3MgYSBodWdlIHJlbGllZi4gVGhlIG9sZCBgaXBfcmVjdl9lcnJvcigpYCBpc3N1ZSB0aGF0IGludGVycHJldGVkIElQdjYgYXMgSVB2NCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byByZWFkcyBiZXlvbmQgYnVmZmVycyBvciBpbnZhbGlkIGhlYWRlcnMsIGlzIGFkZHJlc3NlZC4gVGhlIHBhdGNoIG5vdyBwcm9wZXJseSBkcm9wcyB0aGUgSVB2NiBza2IuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogSSdtIG1ha2luZyBzdXJlIHRoYXQgdGhlIHBhdGNoIGxvZ2ljIGRvZXNuJ3QgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBWYXJpYWJsZXMgbGlrZSBgdXAtXHUwMDNldWRwX2ZsYWdzYCwgYHNrYi1cdTAwM2Vwcm90b2NvbGAgYW5kIGBmb3VuZGAgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBMb29rcyBnb29kLlxuMy4gICoqRGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb246KiogTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGxhdGVyIGFjY2Vzc2VkLlxuNC4gICoqQm91bmRzIGNoZWNrczoqKiBJJ20gY2hlY2tpbmcgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBsb29zZW4gYW55IGV4aXN0aW5nIGJvdW5kcyBjaGVja3MsIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGRhdGEuIE5vIGNoYW5nZSB0aGVyZS5cblxuU28sIGluIG15IGFzc2Vzc21lbnQsIHRoZSBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIHNlZWluZyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbnZvbHZpbmcgdHlwZSBjb25mdXNpb24gZHVyaW5nIElQdjYgdG8gSVB2NCBhZGRyZXNzIHRyYW5zZm9ybWF0aW9uIChgSVBWNl9BRERSRk9STWApIG9uIFVEUCBzb2NrZXRzLiBDb25jdXJyZW50IG9yIHF1ZXVlZCBJUHY2IHBhY2tldHMgY291bGQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gd2l0aCBvbGQgaGFuZGxlcnMsIGJ1dCBub3cgd2UncmUgc3luY2hyb25pemluZywgY2hlY2tpbmcgcXVldWVzLCBhbmQgZHJvcHBpbmcgdGhlIHJvZ3VlIHBhY2tldHMuXG5cblNpbmNlIHRoaXMgcGF0Y2ggKmZpeGVzKiBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aHJvdWdoIGJldHRlciBjb250cm9sLWZsb3csIGFuZCBkb2Vzbid0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RhbmRhcmQgc2FuaXRpemVycyAoS0FTQU4sIExPQ0tERVAsIGFuZCBkZWJ1Z2dpbmcgdG9vbHMpIHNob3VsZCBzdWZmaWNlIGZvciB0ZXN0aW5nLiBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4gaGVyZS4gVGhlIGJ1Z3MgYWRkcmVzc2VkIGFyZSB0eXBlIGNvbmZ1c2lvbiBhbmQgcmFjZSBjb25kaXRpb25zLCB0aGluZ3MgS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2guXG5cbk15IGNvbmNsdXNpb24gaXM6IGBOZWVkc0tNU0FOYDogZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODYsIk91dHB1dFRva2VucyI6MjEyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAzOjQ0OjM1LjAyNTczMjg0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCBwcm90b2NvbC90eXBlIGNvbmZ1c2lvbiBkdXJpbmcgSVB2NiB0byBJUHY0IGFkZHJlc3MgdHJhbnNmb3JtYXRpb24gKElQVjZfQUREUkZPUk0pIG9uIFVEUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgKGBVRFBfRkxBR1NfQUREUkZPUk1gKSwgc3luY2hyb25pemVzIG5ldHdvcmsgcHJvY2Vzc2luZyAoYHN5bmNocm9uaXplX25ldCgpYCksIGluc3BlY3RzIHJlY2VpdmUgYW5kIHJlYWRlciBxdWV1ZXMgZm9yIHBlbmRpbmcgSVB2NiBwYWNrZXRzLCBhbmQgZHJvcHMgb3IgZGlzY2FyZHMgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIG9yIHF1ZXVlZCBvbiBjb252ZXJ0ZWQgc29ja2V0cy5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cXHUwMDNlcHJvdG9jb2xgKSBhbmQgc29ja2V0IGZsYWdzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gUG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwcm90b2NvbCB0cmFuc2l0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHR5cGUgY29uZnVzaW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBwYWNrZXQgaGVhZGVycykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGFuZCBwcm90b2NvbC90eXBlIGNvbmZ1c2lvbiBkdXJpbmcgSVB2NiB0byBJUHY0IGFkZHJlc3MgdHJhbnNmb3JtYXRpb24gKElQVjZfQUREUkZPUk0pIG9uIFVEUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcgKGBVRFBfRkxBR1NfQUREUkZPUk1gKSwgc3luY2hyb25pemVzIG5ldHdvcmsgcHJvY2Vzc2luZyAoYHN5bmNocm9uaXplX25ldCgpYCksIGluc3BlY3RzIHJlY2VpdmUgYW5kIHJlYWRlciBxdWV1ZXMgZm9yIHBlbmRpbmcgSVB2NiBwYWNrZXRzLCBhbmQgZHJvcHMgb3IgZGlzY2FyZHMgSVB2NiBwYWNrZXRzIHJlY2VpdmVkIG9yIHF1ZXVlZCBvbiBjb252ZXJ0ZWQgc29ja2V0cy5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGUgdW5pbml0aWFsaXplZCBtZW1vcnkgYnVmZmVycywgb3IgbW9kaWZ5IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFsbCBjb250cm9sIGZsb3cgdmFyaWFibGVzIChzdWNoIGFzIGxvY2FsIGBmb3VuZGAgYm9vbGVhbiBhbmQgYHNrYi1cXHUwMDNlcHJvdG9jb2xgKSBhbmQgc29ja2V0IGZsYWdzIGFyZSBmdWxseSBpbml0aWFsaXplZC4gUG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBwcm90b2NvbCB0cmFuc2l0aW9ucyAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIHR5cGUgY29uZnVzaW9uLCBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvbiBwYWNrZXQgaGVhZGVycykgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow6f2nt[1] Phase: Succeeded StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 03:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 03:44:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2] Phase: Succeeded StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 03:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 03:44:46 +0000 UTC FinishedAt: 2026-09-05 03:44:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6f2nt/series-workflow6f2nt-convert-artifact-2833751440/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 03:44:56 +0000 UTC FinishedAt: 2026-09-05 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 03:44:56 +0000 UTC FinishedAt: 2026-09-05 04:02:37 +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:*d71c3be1-d880-429a-b022-afff85a61893,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-workflow6f2nt/series-workflow6f2nt-convert-artifact-2833751440/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": "cb027db4-13df-45a9-8bd3-6906475d1c84", "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-workflow6f2nt/series-workflow6f2nt-build-action-2677062166/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 03:44:56 +0000 UTC FinishedAt: 2026-09-05 04:02:27 +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:*d71c3be1-d880-429a-b022-afff85a61893,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-workflow6f2nt/series-workflow6f2nt-convert-artifact-2833751440/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": "cb027db4-13df-45a9-8bd3-6906475d1c84", "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-workflow6f2nt/series-workflow6f2nt-build-action-2677062166/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 04:02:37 +0000 UTC FinishedAt: 2026-09-05 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 04:02:37 +0000 UTC FinishedAt: 2026-09-05 04:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 04:02:37 +0000 UTC FinishedAt: 2026-09-05 04:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 04:02:37 +0000 UTC FinishedAt: 2026-09-05 04:02:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6f2nt/series-workflow6f2nt-convert-artifact-1385582839/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 04:02:47 +0000 UTC FinishedAt: 2026-09-05 04:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 04:02:47 +0000 UTC FinishedAt: 2026-09-05 04:04:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb027db4-13df-45a9-8bd3-6906475d1c84,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-workflow6f2nt/series-workflow6f2nt-build-action-2677062166/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-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 04:04:50 +0000 UTC FinishedAt: 2026-09-05 04:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 04:04:50 +0000 UTC FinishedAt: 2026-09-05 04:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 04:04:50 +0000 UTC FinishedAt: 2026-09-05 04:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 04:04:50 +0000 UTC FinishedAt: 2026-09-05 04:20:45 +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:*d71c3be1-d880-429a-b022-afff85a61893,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-workflow6f2nt/series-workflow6f2nt-convert-artifact-1385582839/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": "b5e5343f-8636-4dc2-ab23-1385a328fbe6", "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-workflow6f2nt/series-workflow6f2nt-build-action-572466107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 04:04:50 +0000 UTC FinishedAt: 2026-09-05 04:20:35 +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:*d71c3be1-d880-429a-b022-afff85a61893,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-workflow6f2nt/series-workflow6f2nt-convert-artifact-1385582839/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": "b5e5343f-8636-4dc2-ab23-1385a328fbe6", "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-workflow6f2nt/series-workflow6f2nt-build-action-572466107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 04:20:45 +0000 UTC FinishedAt: 2026-09-05 04:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 04:20:45 +0000 UTC FinishedAt: 2026-09-05 04:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 04:20:45 +0000 UTC FinishedAt: 2026-09-05 04:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 04:20:45 +0000 UTC FinishedAt: 2026-09-05 04:22:31 +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:*b5e5343f-8636-4dc2-ab23-1385a328fbe6,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-workflow6f2nt/series-workflow6f2nt-build-action-572466107/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-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +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":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"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:*cb027db4-13df-45a9-8bd3-6906475d1c84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5e5343f-8636-4dc2-ab23-1385a328fbe6,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-workflow6f2nt/series-workflow6f2nt-build-action-2677062166/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-workflow6f2nt/series-workflow6f2nt-build-action-572466107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 04:22:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 04:22:45 +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":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"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-workflow6f2nt/series-workflow6f2nt-convert-artifact-3234549040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 04:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 04:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 04:22:40 +0000 UTC FinishedAt: 2026-09-05 04:22:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 04:22:51 +0000 UTC FinishedAt: 2026-09-05 07:24:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6f2nt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["do_ipv6_setsockopt","ipv6_setsockopt","udp6_addrform_queue_has_ipv6","ip_recv_error","udpv6_queue_rcv_one_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66817a9794263cd2a5dc4e99bf8e5fcc5ff7181e","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"0f19268e-6409-4430-99a0-aaa2f331d043","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 04:22:51 +0000 UTC FinishedAt: 2026-09-05 07:24:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cb027db4-13df-45a9-8bd3-6906475d1c84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5e5343f-8636-4dc2-ab23-1385a328fbe6,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-workflow6f2nt/series-workflow6f2nt-build-action-2677062166/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-workflow6f2nt/series-workflow6f2nt-build-action-572466107/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-workflow6f2nt/series-workflow6f2nt-convert-artifact-3234549040/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,}