Name: series-workflowph984 Phase: Succeeded StartedAt: 2026-09-11 23:16:56 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[0] Phase: Succeeded StartedAt: 2026-09-11 23:16:56 +0000 UTC FinishedAt: 2026-09-11 23:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 23:16:56 +0000 UTC FinishedAt: 2026-09-11 23:19:47 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_RPL_LWTUNNEL" ], "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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_RPL_LWTUNNEL" ], "series_id": "fb6f198b-b7a2-4ce7-a8e0-d29122926759" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_chk_rpl_srh_loop", "ipv6_rpl_srh_rcv", "rpl_validate_srh", "rpl_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9SUExfTFdUVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9ycGxfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtycGxfdmFsaWRhdGVfc3JoJiMzNDssCiAgICAmIzM0O3JwbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBjb25kaXRpb24gaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpYCAoYG5ldC9pcHY2L2FkZHJjb25mLmNgKSB1c2VkIHRvIHZhbGlkYXRlIElQdjYgUlBMIFNlZ21lbnQgUm91dGluZyBIZWFkZXJzIGFnYWluc3Qgcm91dGluZyBsb29wcyBpbnZvbHZpbmcgbG9jYWwgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgYGlmIChmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKWAgdG8gYGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKWAsIGVuc3VyaW5nIHRoYXQgYSBzaW5nbGUgcHJldmlvdXNseSBzZWVuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgbm9uLWxvY2FsIGFkZHJlc3MgYW5kIHRoZW4gYW5vdGhlciBsb2NhbCBhZGRyZXNzIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIGEgbG9vcC5cblxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IDlkODliZTdlMDU0NGIuLmY2NzhmYjdmYTU3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtNDYyMSw3ICYjNDM7NDYyMSw3IEBAIGludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGhhc2hfZm91bmQpIHtcbi1cdFx0XHRpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuJiM0MztcdFx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuIFx0XHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdHJldXNlcG9ydF9hZGRyX2FueS5zaCBcXFxuIFx0cm91dGVfaGludC5zaCBcXFxuIFx0cm91dGVfbG9jYWxuZXQuc2ggXFxcbiYjNDM7XHRycGxfc3JoX2xvb3Auc2ggXFxcbiBcdHJwc19kZWZhdWx0X21hc2suc2ggXFxcbiBcdHJ0bmV0bGluay5weSBcXFxuIFx0cnRuZXRsaW5rLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hMmU5OTkxZDc4OWQ2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXG5AQCAtMCwwICYjNDM7MSwzOCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgbGliLnNoXG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdGNsZWFudXBfbnMgXCYjMzQ7JE5TXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztyZXF1aXJlX2NvbW1hbmQgaXBcbiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IC02IGFkZHJlc3MgYWRkIDIwMDE6ZGI4OjE6OjEvMTI4IGRldiBsbyBub2RhZFxuJiM0MztpcCAtbiBcJiMzNDskTlNcJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6Mzo6MS8xMjggZGV2IGxvIG5vZGFkXG4mIzQzO1xuJiM0MztpZiAhIGlwIC1uIFwmIzM0OyROU1wmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTA6Oi82NCBcXFxuJiM0MztcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjQ6OjEgZGV2IGxvIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IFJQTCBsaWdodHdlaWdodCB0dW5uZWwgc3VwcG9ydCBub3QgYXZhaWxhYmxlXCYjMzQ7XG4mIzQzO1x0ZXhpdCAka3NmdF9za2lwXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztSRVQ9MFxuJiM0MztpcCAtbiBcJiMzNDskTlNcJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjExOjovNjQgXFxcbiYjNDM7XHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXG4mIzQzO2NoZWNrX2VyciAkPyBcJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZFwmIzM0O1xuJiM0Mztsb2dfdGVzdCBcJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXNcJiMzNDtcbiYjNDM7XG4mIzQzO1JFVD0wXG4mIzQzO2lwIC1uIFwmIzM0OyROU1wmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcXFxuJiM0MztcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxuJiM0MztcdDJcdTAwM2UvZGV2L251bGxcbiYjNDM7Y2hlY2tfZmFpbCAkPyBcJiMzNDtTZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgYWNjZXB0ZWRcJiMzNDtcbiYjNDM7bG9nX3Rlc3QgXCYjMzQ7UlBMIHJlamVjdHMgc2VwYXJhdGVkIGxvY2FsIGFkZHJlc3Nlc1wmIzM0O1xuJiM0MztcbiYjNDM7ZXhpdCAkRVhJVF9TVEFUVVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUlBMX0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9jaGtfcnBsX3NyaF9sb29wJiMzNDssCiAgICAmIzM0O2lwdjZfcnBsX3NyaF9yY3YmIzM0OywKICAgICYjMzQ7cnBsX3ZhbGlkYXRlX3NyaCYjMzQ7LAogICAgJiMzNDtycGxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQ2MjEsNyAmIzQzOzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLAogCQl9CiAKIAkJaWYgKGhhc2hfZm91bmQpIHsKLQkJCWlmIChmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKJiM0MzsJCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKIAkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCXJldXNlcG9ydF9hZGRyX2FueS5zaCBcCiAJcm91dGVfaGludC5zaCBcCiAJcm91dGVfbG9jYWxuZXQuc2ggXAomIzQzOwlycGxfc3JoX2xvb3Auc2ggXAogCXJwc19kZWZhdWx0X21hc2suc2ggXAogCXJ0bmV0bGluay5weSBcCiAJcnRuZXRsaW5rLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCkBAIC0wLDAgJiM0MzsxLDM4IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9ucyAmIzM0OyROUyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7cmVxdWlyZV9jb21tYW5kIGlwCiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkPwomIzQzOwomIzQzO2lwIC1uICYjMzQ7JE5TJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWQKJiM0MzsKJiM0MztpZiAhIGlwIC1uICYjMzQ7JE5TJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXAomIzQzOwllbmNhcCBycGwgc2VncyAyMDAxOmRiODo0OjoxIGRldiBsbyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGUmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8KJiM0MztjaGVja19lcnIgJD8gJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXMmIzM0OwomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcCiYjNDM7CTImZ3Q7L2Rldi9udWxsCiYjNDM7Y2hlY2tfZmFpbCAkPyAmIzM0O1NlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgcmVqZWN0cyBzZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzJiMzNDsKJiM0MzsKJiM0MztleGl0ICRFWElUX1NUQVRVUwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGludGVudCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbiB3aXRoaW4gYGFkZHJjb25mLmNgLgoKVGhlIGRpZmYgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gdGhlIGxvb3BpbmcgYmVoYXZpb3Igd2l0aGluIHRoZSBmdW5jdGlvbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSBpZGVudGlmaWVkIHdoZW4gbXVsdGlwbGUgbG9vcHMgd2VyZSBkaXNjb3ZlcmVkIGFuZCBub3cgdGhlIGNvbmRpdGlvbiBgZm91bmQgJmd0OyAxYCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHNpbXBseSBgZm91bmRgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgdGhpcyBpcyBhbiBvdXRyaWdodCBidWcgZml4IG9yIGEgYmVoYXZpb3IgY2hhbmdlLgoKR2l2ZW4gdGhlIGNoYW5nZSBpbnZvbHZlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uLiBMb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaGAgYW5kIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0ZXN0IGlzIGludGVncmF0ZWQgd2l0aCB0aGUgYE1ha2VmaWxlYC4gCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBsaW5lIGJ5IGxpbmUsIGNvbXBhcmluZyB0aGUgb3JpZ2luYWwgbG9naWMgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGFkZHJlc3Nlcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIOKAkyB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgYW5kIHdoYXQgZG9lcyBgc2VwYXJhdGVkYCBzaWduaWZ5PyBUaGUgdGVzdCBjYXNlcyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmQgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRob3NlIHNoZWxsIHNjcmlwdHMgY2FyZWZ1bGx5IHRvIHNlZSBleGFjdGx5IHdoYXQgc2NlbmFyaW9zIGFyZSBiZWluZyBjb3ZlcmVkIGFuZCBob3cgdGhlIGNoYW5nZWQgY29uZGl0aW9uIGFmZmVjdHMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU5MDpcdCAqIGNoZWNraW5nIGlmIHRoZSBzZWdtZW50cyBjb250YWlucyBhbnkgb2YgYSBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cbjQ1OTE6XHQgKlxuNDU5MjpcdCAqIFF1b3RlOlxuNDU5MzpcdCAqXG40NTk0Olx0ICogVG8gZGV0ZWN0IGxvb3BzIGluIHRoZSBTUkgsIGEgcm91dGVyIE1VU1QgZGV0ZXJtaW5lIGlmIHRoZSBTUkhcbjQ1OTU6XHQgKiBpbmNsdWRlcyBtdWx0aXBsZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gYW55IGludGVyZmFjZSBvbiB0aGF0IHJvdXRlci5cbjQ1OTY6XHQgKiBJZiBzdWNoIGFkZHJlc3NlcyBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3RcbjQ1OTc6XHQgKiBvbmUgYWRkcmVzcyBub3QgYXNzaWduZWQgdG8gdGhhdCByb3V0ZXIuXG40NTk4Olx0ICovXG40NTk5Olx0aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcbjQ2MDA6XHRcdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyO1xuNDYwMzpcdFx0aW50IGksIHJldCA9IDAsIGZvdW5kID0gMDtcbjQ2MDQ6XHRcdHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDtcbjQ2MDU6XHRcdGJvb2wgc2VwYXJhdGVkID0gZmFsc2U7XG40NjA2Olx0XHR1bnNpZ25lZCBpbnQgaGFzaDtcbjQ2MDc6XHRcdGJvb2wgaGFzaF9mb3VuZDtcbjQ2MDg6XHRcbjQ2MDk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ2MTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zZWdzOyBpJiM0MzsmIzQzOykge1xuNDYxMTpcdFx0XHRhZGRyID0gXHUwMDI2c2Vnc1tpXTtcbjQ2MTI6XHRcdFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xuNDYxMzpcdFxuNDYxNDpcdFx0XHRoYXNoX2ZvdW5kID0gZmFsc2U7XG40NjE1Olx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xuNDYxNjpcdFxuNDYxNzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2aWZwLVx1MDAzZWFkZHIsIGFkZHIpKSB7XG40NjE4Olx0XHRcdFx0XHRoYXNoX2ZvdW5kID0gdHJ1ZTtcbjQ2MTk6XHRcdFx0XHRcdGJyZWFrO1xuNDYyMDpcdFx0XHRcdH1cbjQ2MjE6XHRcdFx0fVxuNDYyMjpcdFxuNDYyMzpcdFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuNDYyNDpcdFx0XHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG40NjI1Olx0XHRcdFx0XHRyZXQgPSAxO1xuNDYyNjpcdFx0XHRcdFx0YnJlYWs7XG40NjI3Olx0XHRcdFx0fVxuNDYyODpcdFxuNDYyOTpcdFx0XHRcdHNlcGFyYXRlZCA9IGZhbHNlO1xuNDYzMDpcdFx0XHRcdGZvdW5kJiM0MzsmIzQzOztcbjQ2MzE6XHRcdFx0fSBlbHNlIHtcbjQ2MzI6XHRcdFx0XHRzZXBhcmF0ZWQgPSB0cnVlO1xuNDYzMzpcdFx0XHR9XG40NjM0Olx0XHR9XG40NjM1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ2MzY6XHRcbjQ2Mzc6XHRcdHJldHVybiByZXQ7XG40NjM4Olx0fVxuNDYzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIEhlYWRlciBMb29wIERldGVjdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgbG9vcCBkZXRlY3Rpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LXBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgYW5kIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgbG9vcCBkZXRlY3Rpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJZGVudGlmeWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBzY2VuYXJpb3Mgd2hlcmUgcG90ZW50aWFsIHJvdXRpbmcgbG9vcHMgYXJlIGNvbnNpZGVyZWQsIGFuZCBob3cgYWdncmVzc2l2ZWx5LCBvciBkZWZlbnNpdmVseSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1lZC4gSSB3aWxsIHN0YXJ0IGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIHRvIHRyYXZlcnNlIHRoZSBjYWxsIGdyYXBoIGFuZCBpc29sYXRlIHRoZSBwZXJ0aW5lbnQgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xMjM9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjUtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjEyNjppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXHRcdFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ1NzA9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ1OTgtICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ1OTk6aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2Vncyxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTY5LVxubmV0L2lwdjYvZXh0aGRycy5jOjU3MDpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXHUwMDNlcnBsX3NlZ2FkZHIsIG4gJiM0MzsgMSk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTcxLVx0aWYgKGVycikge1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM5PXN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo1NTpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIHNyaC1cdTAwM2VycGxfc2VnYWRkcixcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTU2LVx0XHRcdFx0ICAgIHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSUEwgU1JIIExvb3AgRGV0ZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGluIHR3byBrZXkgbG9jYXRpb25zOiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXB2Nl9ycGxfc3JoX3JjdmAsIHdoaWNoIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgUlBMIFNSSCBleHRlbnNpb24gaGVhZGVycy4gVGhhdCBtYWtlcyBzZW5zZTsgbG9vcCBkZXRlY3Rpb24gaXMgY3JpdGljYWwgdGhlcmUuIFRoZSBzZWNvbmQgcGxhY2UgaXMgaW4gYG5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jYCwgd2l0aGluIGBycGxfdmFsaWRhdGVfc3JoYCwgd2hpY2ggaGFzIHRvIGRvIHdpdGggdmFsaWRhdGluZyBTUkhzIHdoZW4gY29uZmlndXJpbmcgcm91dGVzIHZpYSBuZXRsaW5rICh1c2luZyBgUlRNX05FV1JPVVRFYCkuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcm91dGUgY29uZmlndXJhdGlvbiBpbnZvbHZpbmcgUlBMIFNSSCBoZWFkZXJzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBUaGlzIHVzdWFsbHkgbWVhbnMgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGxvb2sgZm9yIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGl0c2VsZiwgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGlzYWJsZWQgc29tZWhvdy4gQnV0IEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgdG8gY2hlY2sgZm9yIGFueSByZWxldmFudCBnbG9iYWwgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kIG9mIGNvdXJzZSBJJiMzOTtsbCByZXZpc2l0IGBpcHY2X3JwbF9zcmhfcmN2YCBhbmQgYHJwbF9pcHR1bm5lbC5jYCBpbiBLY29uZmlnLCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncyBpbmZsdWVuY2UgaG93IGxvb3AgZGV0ZWN0aW9uIGlzIGhhbmRsZWQgaW4gdGhvc2UgYXJlYXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgbG9vcCBkZXRlY3Rpb24gbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwbF9pcHR1bm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgJiM0Mzs9IHJwbF9pcHR1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICYjNDM7PSBpb2FtNl9pcHR1bm5lbC5vXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNi1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvcnBsX2lwdHVubmVsLmhcdTAwM2Vcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgtXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxNTpzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwIHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE2LVx0REVDTEFSRV9GTEVYX0FSUkFZKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIsIHNyaCk7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MTk9c3RydWN0IHJwbF9sd3Qge1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjAtXHRzdHJ1Y3QgZHN0X2NhY2hlIGNhY2hlO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MjE6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwIHR1bmluZm87XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0yMi19O1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJwbF9sd3QgKnJwbF9sd3RfbHd0dW5uZWwoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjgtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKlxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzAtcnBsX2VuY2FwX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJwbF9pcHR1bm5lbF9wb2xpY3lbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2LVx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODEtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBSUExfSVBUVU5ORUxfTUFYLCBubGEsXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4MjpcdFx0XHQgICAgICAgcnBsX2lwdHVubmVsX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgzLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0xOTA9c3RhdGljIGludCBycGxfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBycGxfbHd0ICpybHd0LFxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE5My1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjE5NDpcdHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKnRpbmZvO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTk1LVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTMyND1zdGF0aWMgaW50IG5sYV9wdXRfcnBsX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjU6XHRcdFx0ICAgc3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbylcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMyNi17XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjc6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpkYXRhO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzI4LVx0c3RydWN0IG5sYXR0ciAqbmxhO1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IHJwbF9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDUte1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzQ2Olx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHJwbF9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzU0PXN0YXRpYyBpbnQgcnBsX2VuY2FwX25sc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU1LXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1NjpcdHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBycGxfZW5jYXBfbHd0dW5uZWwobHd0c3RhdGUpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU3LVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM2MT1zdGF0aWMgaW50IHJwbF9lbmNhcF9jbXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjIte1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzYzOlx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYV9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjQ6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2NS1cdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY2IFJQTCB3aXRoIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGV4dGhkcnMuY2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgQ09ORklHX0lQVjZfUlBMX1NSSGAgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCB0aGF0IG1pZ2h0IGhhbmRsZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCB0aGF0IGZpbGUgY29udGFpbmluZyB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGNvZGUsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGxpbmUgbnVtYmVycyB3aXRoaW4gdGhhdCBmaWxlIHN1Z2dlc3RzIGxpbmUgNDgxIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHNwZWNpZmljIGludmVzdGlnYXRpb24uIEkgd2lsbCBzdGFydCB0aGVyZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB1c2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBrZXJuZWwgY29kZSB0byBldmFsdWF0ZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4gNTAwOlx0XG4gNTAxOlx0bG9vcGVkX2JhY2s6XG4gNTAyOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNTAzOlx0XG4gNTA0Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDUwNTpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2KSB7XG4gNTA2Olx0XHRcdFx0aW50IG9mZnNldCA9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDUwNzpcdFxuIDUwODpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDUwOTpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDUxMDpcdFx0XHRcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcbiA1MTE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxuIDUxMjpcdFx0XHRcdFx0XHQgICBvZmZzZXQpO1xuIDUxMzpcdFxuIDUxNDpcdFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgUlBMIEtjb25maWcgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIFJQTCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSSBrbm93IEkmIzM5O3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgdGhlbSBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgSVB2Ni1yZWxhdGVkIHNldHRpbmdzIGFyZSBnZW5lcmFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjb250cm9sbGFibGUgYXQgY29tcGlsZSB0aW1lIHdpdGggcmVzcGVjdCB0byBSUEwgLSAgYXJlIHRoZXJlIGRpZmZlcmVudCBSUEwgaW1wbGVtZW50YXRpb25zLCBmZWF0dXJlcywgb3Igb3B0aW1pemF0aW9uIG9wdGlvbnMgSSBjYW4gc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBuZWVkIHR3ZWFraW5nIGZvciBteSB1c2UgY2FzZT8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBJIHNob3VsZCBiZSBhd2FyZSBvZiBmb3IgY3VzdG9taXppbmcgdGhlIFJQTCBiZWhhdmlvciB3aXRoaW4gbXkgdGFyZ2V0IHN5c3RlbS4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBvcHRpb25zIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgUlBMIHN1cHBvcnQgZW50aXJlbHksIHBlcmhhcHMgZGlmZmVyZW50IFJQTCBtb2Rlcywgb3IgcG9zc2libHkgZXZlbiBmbGFncyByZWxhdGVkIHRvIHNwZWNpZmljIHJvdXRpbmcgbWV0cmljcyBvciBwYXRoIHNlbGVjdGlvbiBjcml0ZXJpYS4gSXTigJlzIGFsbCBpbiB0aGUgYEtjb25maWdgIGFmdGVyIGFsbC4gVGltZSB0byBnZXQgdGhlIGNvbXBpbGVyIGJ1aWxkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSUEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTMxMj1jb25maWcgSVBWNl9TRUc2X0JQRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjMxODpcdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnLTMxOS1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzIyLVx0aGVscFxubmV0L2lwdjYvS2NvbmZpZzozMjM6XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbm5ldC9pcHY2L0tjb25maWctMzI0LVx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0yNj1pcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI3OmlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjgtaXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0NS1cdGFycmF5W0RFVkNPTkZfTkRJU0NfVENMQVNTXSA9IFJFQURfT05DRShjbmYtXHUwMDNlbmRpc2NfdGNsYXNzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTc0NjpcdGFycmF5W0RFVkNPTkZfUlBMX1NFR19FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlcnBsX3NlZ19lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0Ny1cdGFycmF5W0RFVkNPTkZfSU9BTTZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZWlvYW02X2VuYWJsZWQpO1xuLS1cbm5ldC9pcHY2L2ljbXAuYz00MTk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wNl9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtNDMwLVxubmV0L2lwdjYvaWNtcC5jOjQzMTpcdFx0LyogVGhlIGRlc3RpbmF0aW9uIGNvdWxkIGJlIGFuIGV4dGVybmFsIElQIGluIEV4dCBIZHIgKFNSdjYsIFJQTCwgZXRjLiksXG5uZXQvaXB2Ni9pY21wLmMtNDMyLVx0XHQgKiBhbmQgaXA2X251bGxfZW50cnkgY291bGQgYmUgc2V0IHRvIHNrYiBpZiBubyByb3V0ZSBpcyBmb3VuZC5cbi0tXG5uZXQvaXB2Ni9ycGwuYy0xMC0jZGVmaW5lIElQVjZfUEZYVEFJTF9MRU4oeCkgKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIC0gKHgpKVxubmV0L2lwdjYvcnBsLmM6MTE6I2RlZmluZSBJUFY2X1JQTF9CRVNUX0FERFJfQ09NUFJFU1NJT04gMTVcbm5ldC9pcHY2L3JwbC5jLTEyLVxuLS1cbm5ldC9pcHY2L3JwbC5jPTU2PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJpKGNvbnN0IHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmluaGRyLFxuLS1cbm5ldC9pcHY2L3JwbC5jLTcwLVxubmV0L2lwdjYvcnBsLmM6NzE6XHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xubmV0L2lwdjYvcnBsLmMtNzItfVxuLS1cbm5ldC9pcHY2L3JwbC5jPTc0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4tLVxubmV0L2lwdjYvcnBsLmMtODMtXG5uZXQvaXB2Ni9ycGwuYzo4NDpcdHJldHVybiBJUFY2X1JQTF9CRVNUX0FERFJfQ09NUFJFU1NJT047XG5uZXQvaXB2Ni9ycGwuYy04NS19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzA9cnBsX2VuY2FwX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJwbF9pcHR1bm5lbF9wb2xpY3lbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2Olx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNy19O1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTY3PXN0YXRpYyBpbnQgcnBsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTcxLXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjcyOlx0c3RydWN0IG5sYXR0ciAqdGJbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTczLVx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXd0cztcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04MC1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjgxOlx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgUlBMX0lQVFVOTkVMX01BWCwgbmxhLFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODItXHRcdFx0ICAgICAgIHJwbF9pcHR1bm5lbF9wb2xpY3ksIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODUtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4NjpcdGlmICghdGJbUlBMX0lQVFVOTkVMX1NSSF0pXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04OC1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjg5Olx0c3JoID0gbmxhX2RhdGEodGJbUlBMX0lQVFVOTkVMX1NSSF0pO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6OTA6XHRzcmhfbGVuID0gbmxhX2xlbih0YltSUExfSVBUVU5ORUxfU1JIXSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy05MS1cbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0xMTItXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxMTM6XHRuZXd0cy1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfUlBMO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTE0LVx0bmV3dHMtXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfSU5QVVRfUkVESVJFQ1Q7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMzAtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMzE6XHRsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cdTAwM2VzcmgpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzMyLVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IHJwbF9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNDg6XHRpZiAobmxhX3B1dF9ycGxfc3JoKHNrYiwgUlBMX0lQVFVOTkVMX1NSSCwgdHVuaW5mbykpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDktXHRcdHJldHVybiAtRU1TR1NJWkU7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzU0PXN0YXRpYyBpbnQgcnBsX2VuY2FwX25sc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM1Ny1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1ODpcdHJldHVybiBubGFfdG90YWxfc2l6ZShSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cdTAwM2VzcmgpKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM1OS19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzYxPXN0YXRpYyBpbnQgcnBsX2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjQtXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NTpcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2Ni1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NzpcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVx1MDAzZXNyaCkpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjgtXHRcdHJldHVybiAxO1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM4ND1pbnQgX19pbml0IHJwbF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6Mzg4Olx0ZXJyID0gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg5LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zOTEtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozOTI6XHRwcl9pbmZvKFwmIzM0O1JQTCBTZWdtZW50IFJvdXRpbmcgd2l0aCBJUHY2XFxuXCYjMzQ7KTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM5My1cbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz00MDA9dm9pZCBycGxfZXhpdCh2b2lkKVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNDAxLXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjQwMjpcdGx3dHVubmVsX2VuY2FwX2RlbF9vcHMoXHUwMDI2cnBsX29wcywgTFdUVU5ORUxfRU5DQVBfUlBMKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTQwMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY2IEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIGZpbGVzLiBJIGtub3cgYGFkZHJjb25mLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgYHJwbC5jYC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gVG8gZmlndXJlIGl0IG91dCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgcmVnYXJkaW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpdGhpbiB0aGUgSVB2NiBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwbFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMi1cdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMzpcdFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJUHY2IFJQTCBEZWR1Y3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBvYmplY3QgZmlsZXM6IGBycGwub2AsIGBleHRoZHJzLm9gLCBhbmQgYGFkZHJjb25mLm9gLiBUaGV5JiMzOTtyZSBhbGwgbmVzdGVkIHdpdGhpbiB0aGUgYGlwdjYteWAgY29uZmlndXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgYnVpbHQgYXV0b21hdGljYWxseSBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgdHVybmVkIG9uLiBNYWtlcyBzZW5zZS4gTm93LCBgcnBsX2lwdHVubmVsLm9gIHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS4gTGV0IG1lIGdvIG92ZXIgdG8gYG5ldC9pcHY2L0tjb25maWdgIHJlYWwgcXVpY2suLi4gWWVwLCBhcyBleHBlY3RlZCwgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgZGVwZW5kcyBkaXJlY3RseSBvbiBgSVBWNmAsIGFuZCB0aGF0IGNoZWNrcyBvdXQgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbi4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoZSBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIGlmIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBycGxfaXB0dW5uZWwuY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCBsaW5lcyAzNS03MCBvZiB0aGF0IGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnBsX2lwdHVubmVsX3BvbGljeVtSUExfSVBUVU5ORUxfTUFYICYjNDM7IDFdID0ge1xuICAzNjpcdFx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG4gIDM3Olx0fTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxuICA0MDpcdFx0XHRcdCAgICAgc2l6ZV90IHNlZ2xlbilcbiAgNDE6XHR7XG4gIDQyOlx0XHRpbnQgZXJyO1xuICA0MzpcdFxuICA0NDpcdFx0aWYgKChzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzKSAhPSBzZWdsZW4pXG4gIDQ1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDY6XHRcbiAgNDc6XHRcdC8qIGNoZWNrIGF0IGxlYXN0IG9uZSBzZWdtZW50IGFuZCBzZWdsZW4gZml0IHdpdGggc2VnbWVudHNfbGVmdCAqL1xuICA0ODpcdFx0aWYgKCFzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCB8fFxuICA0OTpcdFx0ICAgIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSAhPSBzZWdsZW4pXG4gIDUwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNTE6XHRcbiAgNTI6XHRcdGlmIChzcmgtXHUwMDNlY21wcmkgfHwgc3JoLVx1MDAzZWNtcHJlKVxuICA1MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDU0Olx0XG4gIDU1Olx0XHRlcnIgPSBpcHY2X2Noa19ycGxfc3JoX2xvb3AobmV0LCBzcmgtXHUwMDNlcnBsX3NlZ2FkZHIsXG4gIDU2Olx0XHRcdFx0XHQgICAgc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQpO1xuICA1NzpcdFx0aWYgKGVycilcbiAgNTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA1OTpcdFxuICA2MDpcdFx0aWYgKGlwdjZfYWRkcl90eXBlKFx1MDAyNnNyaC1cdTAwM2VycGxfc2VnYWRkcltzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDFdKSBcdTAwMjZcbiAgNjE6XHRcdCAgICBJUFY2X0FERFJfTVVMVElDQVNUKVxuICA2MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gIDY4Olx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuICA2OTpcdFx0XHRcdCAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuICA3MDpcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltSUExfSVBUVU5ORUxfTUFYICYjNDM7IDFdO1xuICA3MzpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXd0cztcbiAgNzQ6XHRcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKnNyaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUEwgU1JIIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LVBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBycGxfYnVpbGRfc3RhdGVgLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgcnBsX3ZhbGlkYXRlX3NyaGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHJwbF92YWxpZGF0ZV9zcmhgIHRoZW4gY2FsbHMgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBzZXJpZXMgb2YgY2FsbHMgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIFJQTCBTUkggdmFsaWRhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBsb29wcyBhbmQgZW5zdXJpbmcgY29ycmVjdCByb3V0aW5nLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5ib3VuZCBwYXRoLiBgaXB2Nl9ycGxfc3JoX3JjdmAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBmb3IgKnJlY2VpdmluZyogdGhlc2UgU1JIIHBhY2tldHMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyB2ZXJ5IGRlc2NyaXB0aXZlLiBJIGFscmVhZHkga25vdyB0aGlzIGlzIGZvdW5kIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBoYW5kbGluZyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhbiBJUHY2IHBhY2tldCBjb21lcyBpbiB0aGF0IGhhcyBhbiBSUEwgU1JIOyBpdCYjMzk7cyBpZGVudGlmaWVkIGJ5IGhlYWRlciB0eXBlIDMuIFNvIG5vdyBJIHdhbnQgdG8gdHJhY2UgaG93IGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBpbnZva2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24gdG8gY29tcGxldGUgdGhlIHBpY3R1cmUgb2YgZGF0YSBmbG93IGFuZCB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy00ODAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDgxOnN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTQ4Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY4OC1cdFx0XHRnb3RvIGRpc2FibGVkO1xubmV0L2lwdjYvZXh0aGRycy5jOjY4OTpcdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTAtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBJUHY2IFJQTCBMb29wIERldGVjdGlvbiBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBpcHY2X3JwbF9zcmhfcmN2YCBmb3IgUlBMIHJvdXRpbmcgaGVhZGVycy4gIEkgYWxzbyBzZWUgdGhhdCBgcnBsX2J1aWxkX3N0YXRlYCBwbGF5cyBhIHJvbGUgaW4gaGFuZGxpbmcgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciBsaWdodHdlaWdodCB0dW5uZWxzLCBwYXJ0aWN1bGFybHkgYGVuY2FwIHJwbGAuICBNeSBmb2N1cyBpcyBvbiBhIHJlY2VudCBjb21taXQgdGhhdCB0b3VjaGVzIGBuZXQvaXB2Ni9hZGRyY29uZi5jYC4gIEkgc2VlIGEgY29kZSBtb2RpZmljYXRpb24gd2l0aGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLCBhIGZ1bmN0aW9uIGNydWNpYWwgZm9yIGRldGVjdGluZyBsb29wcyB3aXRoaW4gUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlcnMgKFNSSCkuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29uZGl0aW9uYWwgYWx0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKGZvdW5kICZndDsgMSAmYW1wOyZhbXA7IHNlcGFyYXRlZClgLCBtZWFuaW5nIHRoZXJlIGhhZCB0byBiZSBtb3JlIHRoYW4gb25lIGxvY2FsIGFkZHJlc3MgKmFuZCogdGhleSB3ZXJlIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGUgdXBkYXRlZCB2ZXJzaW9uIHVzZXMgYGlmIChmb3VuZCAmYW1wOyZhbXA7IHNlcGFyYXRlZClgLiBUaGlzIGluZGljYXRlcyBhIGNoYW5nZSB0byBkZXRlY3QgbG9vcHMgbW9yZSBlZmZpY2llbnRseS4KCkxldCYjMzk7cyBkaXNzZWN0IHRoaXMgbG9naWMgYmFzZWQgb24gUkZDIDY1NTQsIHdoaWNoIG1hbmRhdGVzIGxvb3AgZGV0ZWN0aW9uIGluIFNSSHMuIFRoZSByb3V0ZXIgKm11c3QqIGRldGVybWluZSBpZiB0aGUgU1JIIGNvbnRhaW5zIG11bHRpcGxlIGFkZHJlc3NlcyBhc3NpZ25lZCB0byBpdHMgaW50ZXJmYWNlcy4gSWYgYW4gaW50ZXJmYWNlJiMzOTtzIGFkZHJlc3MgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IG9uZSBvdGhlciBhZGRyZXNzIG5vdCBvbiB0aGUgcm91dGVyLCBpdCYjMzk7cyBhIGxvb3AuICBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyB0b28gc3RyaWN0OyBpdCByZXF1aXJlZCAqdGhyZWUqIGxvY2FsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgbm9uLWxvY2FscyB0byB0cmlnZ2VyIGxvb3AgZGV0ZWN0aW9uLgoKVGhlIGNvcnJlY3RlZCBjb2RlIG5vdyBjb3JyZWN0bHkgZmxhZ3MgdGhlIGxvb3AgYXMgc29vbiBhcyBpdCBzZWVzICpvbmUqIGxvY2FsIGFkZHJlc3MsIHRoZW4gYSBub24tbG9jYWwsIGZvbGxvd2VkIGJ5IGFub3RoZXIgbG9jYWwgYWRkcmVzcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50LiBJIGJlbGlldmUgdGhpcyBmaXggaXMgY3J1Y2lhbCBmb3Igcm9idXN0IFJQTCBvcGVyYXRpb24uCgpOb3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBwYXJ0IG9mIHRoZSBJUHY2IHN0YWNrLiAgSXQmIzM5O3MgcmVhY2hhYmxlIGluIGEgY291cGxlIG9mIGtleSB3YXlzOgoKKiAgIE5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiAodXNpbmcgYFJUTV9ORVdST1VURWAgd2l0aCBgUlRBX0VOQ0FQYCBhbmQgYFJUQV9FTkNBUF9UWVBFID09IExXVFVOTkVMX0VOQ0FQX1JQTGApLiAgVGhpcyBjYW4gY29uZmlndXJlIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgYmFzZWQgb24gUlBMLgoqICAgRGlyZWN0bHkgdGhyb3VnaCBzZW5kaW5nIElQdjYgcGFja2V0cyB3aXRoIGFuIFJQTCByb3V0aW5nIGhlYWRlciwgaWYgdGhlIGludGVyZmFjZSBvciBuZXQgaGFzIGBycGxfc2VnX2VuYWJsZWRgIHNldC4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGlzIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuICBNeSBjcml0ZXJpYSBhcmU6CgoqICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCB0aGlzIGlzIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIElQdjYgcGFja2V0L3JvdXRlIHByb2Nlc3NpbmcuCiogICAqKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6KiogWWVzLCBib3RoIG5ldGxpbmsgYW5kIElQdjYgcGFja2V0cyBhcmUgcmVhY2hhYmxlLgoKVGhlcmVmb3JlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIHRydWUuIFRoaXMgY2hhbmdlIGFmZmVjdHMgY3JpdGljYWwgbmV0d29yayBmdW5jdGlvbiBhbmQgcm91dGUgcHJvY2Vzc2luZyBsb2dpYy4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gIGBDT05GSUdfSVBWNmAgaXMgY2xlYXJseSByZXF1aXJlZCwgc2luY2UgYGFkZHJjb25mLmNgIGFuZCBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCByZXNpZGUgd2l0aGluIHRoZSBJUHY2IHN1YnN5c3RlbS4gYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgaXMgcHJvYmFibHkgYSBmYWN0b3IgZm9yIFJQTCB0dW5uZWwgc3VwcG9ydC4gSSB3aWxsIGRvdWJsZS1jaGVjay4gSW5kZWVkLCBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCBkZXBlbmRzIG9uIGBJUFY2YC4KCk5vdywgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgbGltaXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYD8gIEkgbmVlZCB0byByZXZpZXcgYGV4dGhkcnMuY2AuIEkgaGF2ZSB0byBjb25maXJtIHdoZXRoZXIgYGlwdjZfcnBsX3NyaF9yY3ZgICh0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFJQTCBoZWFkZXJzKSBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSYjMzk7bGwgc2NhbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDgwLTU3NSBhbmQgNjgwLTY5NSBpbiBgZXh0aGRycy5jYC4gIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHJlZ2FyZGluZyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIDY4MTpcdFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODI6XHRcdFx0aWYgKCFpZGV2KVxuIDY4MzpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg0Olx0XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiA2ODU6XHRcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gNjg2Olx0XHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODc6XHRcdFx0aWYgKCFpZGV2KVxuIDY4ODpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg5Olx0XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gNjkwOlx0XHRkZWZhdWx0OlxuIDY5MTpcdFx0XHRicmVhaztcbiA2OTI6XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRsb29wZWRfYmFjazpcbiA2OTU6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XG4gNjk2Olx0XHRcdHN3aXRjaCAoaGRyLVx1MDAzZXR5cGUpIHtcbiA2OTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NSVA2KVxuIDY5ODpcdFx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV8yOlxuIDY5OTpcdFx0XHRcdC8qIFNpbGVudGx5IGRpc2NhcmQgdHlwZSAyIGhlYWRlciB1bmxlc3MgaXQgd2FzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSUEwgU1JIIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb24gaW4gYGV4dGhkcnMuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGNvZGUgaXMgKmFsd2F5cyogY29tcGlsZWQgaWYgSVB2NiBpcyBlbmFibGVkLCBhbmQgbm90IGp1c3Qgd2hlbiB0aGUgTGlnaHR3ZWlnaHQgVHVubmVsaW5nIGZlYXR1cmUgZm9yIFJQTCBpcyBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCBpcyByZWxhdGVkIHRvIHJvdXRlIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgZGlmZmVyZW50IGFzcGVjdCwgaXQgZW5hYmxlcyB0aGUgcm91dGUgY29uZmlndXJhdGlvbiBwYXRoIHRoYXQgdGhpcyBzcGVjaWZpYyB0ZXN0IHNjcmlwdCBpcyB1c2luZy4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19JUFY2YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgaXQgZW5hYmxlcyB0aGUgY29yZSBJUHY2IHN0YWNrIGFuZCB0aGUgdW5kZXJseWluZyBwYWNrZXQgcGFyc2luZy4KCk5vdywgbGV0IG1lIHNlZS4uLiB3aGljaCBmdW5jdGlvbnMgd2VyZSBhY3R1YWxseSB0b3VjaGVkIGluIHRoZSBjb2RlPyBJJiMzOTt2ZSBnb3QgaXQ6IGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbj8gVGhhdCB3b3VsZCBiZSBgaXB2Nl9ycGxfc3JoX3JjdmAgaXRzZWxmLCBvYnZpb3VzbHksIGFsb25nIHdpdGggYHJwbF92YWxpZGF0ZV9zcmhgLCBhbmQgYHJwbF9idWlsZF9zdGF0ZWAuCgpPa2F5LCBhcmUgYHJwbF92YWxpZGF0ZV9zcmhgIGFuZCBgcnBsX2J1aWxkX3N0YXRlYCBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGlubGluZWQ/IExvb2tpbmcgYXQgbGluZSAzOSBpbiBgcnBsX2lwdHVubmVsLmNgLCBgcnBsX3ZhbGlkYXRlX3NyaGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gQW5kIGBycGxfYnVpbGRfc3RhdGVgIGlzIHN0YXRpYyBhcyB3ZWxsLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIElmIHRoZXkmIzM5O3JlIHN0YXRpYywgaG93IGlzIGBycGxfYnVpbGRfc3RhdGVgIHJlZ2lzdGVyZWQgYW5kIGV4cG9zZWQgZm9yIHVzZT8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGFyb3VuZCBsaW5lIDM3MCBpbiBgbmV0L2lwdjYvcnBsX2lwdHVubmVsLmNgIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3JwbF9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVx1MDAzZXNyaCkpXG4gMzY4Olx0XHRcdHJldHVybiAxO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHJwbF9vcHMgPSB7XG4gMzc0Olx0XHQuYnVpbGRfc3RhdGVcdD0gcnBsX2J1aWxkX3N0YXRlLFxuIDM3NTpcdFx0LmRlc3Ryb3lfc3RhdGVcdD0gcnBsX2Rlc3Ryb3lfc3RhdGUsXG4gMzc2Olx0XHQub3V0cHV0XHRcdD0gcnBsX291dHB1dCxcbiAzNzc6XHRcdC5pbnB1dFx0XHQ9IHJwbF9pbnB1dCxcbiAzNzg6XHRcdC5maWxsX2VuY2FwXHQ9IHJwbF9maWxsX2VuY2FwX2luZm8sXG4gMzc5Olx0XHQuZ2V0X2VuY2FwX3NpemVcdD0gcnBsX2VuY2FwX25sc2l6ZSxcbiAzODA6XHRcdC5jbXBfZW5jYXBcdD0gcnBsX2VuY2FwX2NtcCxcbiAzODE6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDM4MjpcdH07XG4gMzgzOlx0XG4gMzg0Olx0aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxuIDM4NTpcdHtcbiAzODY6XHRcdGludCBlcnI7XG4gMzg3Olx0XG4gMzg4Olx0XHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnJwbF9vcHMsIExXVFVOTkVMX0VOQ0FQX1JQTCk7XG4gMzg5Olx0XHRpZiAoZXJyKVxuIDM5MDpcdFx0XHRnb3RvIG91dDtcbiAzOTE6XHRcbiAzOTI6XHRcdHByX2luZm8oXCYjMzQ7UlBMIFNlZ21lbnQgUm91dGluZyB3aXRoIElQdjZcXG5cJiMzNDspO1xuIDM5MzpcdFxuIDM5NDpcdFx0cmV0dXJuIDA7XG4gMzk1Olx0XG4gMzk2Olx0b3V0OlxuIDM5NzpcdFx0cmV0dXJuIGVycjtcbiAzOTg6XHR9XG4gMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDI1CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBpcHY2X2Noa19ycGxfc3JoX2xvb3AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIC0gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgZXhwb3J0ZWQgYW5kIGRlZmluZWQgd2l0aGluIHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBjb2RlLiBBIHF1aWNrIGNoZWNrIG9mIGBrYWxsc3ltc2AgY29uZmlybXMgaXQmIzM5O3Mgbm90IHN0YXRpYy4gR29vZC4gQWxzbywgYGlwdjZfcnBsX3NyaF9yY3ZgIGlzIGFsc28gdGhlcmUsIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLiBXZSYjMzk7dmUgYWxyZWFkeSBncmVwcGVkIHRvIGZpbmQgaXRzIGNhbGxlcnM6IGJlc2lkZXMgYGlwdjZfcnBsX3NyaF9yY3ZgLCB3ZSBoYXZlIGBycGxfdmFsaWRhdGVfc3JoYC4KCk5vdywgbGV0JiMzOTtzIHJlZmVyIHRvIFNlY3Rpb24gNC4gV2Ugd2FudCB0byBiZSBzcGVjaWZpYyBoZXJlLiBXZSBzaG91bGQgTk9UIGxpc3QgdGhlIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBXZSBtdXN0IGZvY3VzIG91ciB0YXJnZXRzIG9uIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cywgY29ycmVjdD8KClJpZ2h0LiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAqaXMqIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGxvb3AgZGV0ZWN0aW9uLiBUaGUgcGFja2V0IHJlY2VpdmUgaGFuZGxlciBmb3IgUlBMIFNSSCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBjYWxscyBpdC4gU2ltaWxhcmx5LCBgcnBsX3ZhbGlkYXRlX3NyaGAgd2hpY2ggaXMgcGFydCBvZiB0aGUgcm91dGUgdmFsaWRhdGlvbiBsb2dpYywgaXMgYWxzbyBhIGNhbGxlciwgYW5kIHRoYXQmIzM5O3MgY2FsbGVkIGJ5IGBycGxfYnVpbGRfc3RhdGVgIGZyb20gdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBzaWRlLiBQZXJmZWN0LgoKVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBgSVBWNmAgaXMgb2J2aW91c2x5IG5lZWRlZCwgYXMgYXJlIGBhZGRyY29uZi5jYCBhbmQgYGV4dGhkcnMuY2AuIEFsc28sIGBJUFY2X1JQTF9MV1RVTk5FTGAgZW5hYmxlcyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgYHJwbF9pcHR1bm5lbC5jYCwgc28gdGhhdCYjMzk7cyBhbHNvIG5lZWRlZC4KClNvLCB0aGUgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgZml4aW5nIGxvb3AgZGV0ZWN0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZvciBSUEwgU1JIcywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRoZSBzY2VuYXJpbyB3aGVyZSBsb2NhbCBhZGRyZXNzZXMgYXJlIHNlcGFyYXRlZCBieSBhdCBsZWFzdCBvbmUgbm9uLWxvY2FsIGFkZHJlc3MuIFRoZSBmdW5jdGlvbiBpcyBjcml0aWNhbCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIElQdjYgY29yZSwgYW5kIGlzIHJlYWNoYWJsZSBib3RoIHZpYSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gaW52YWxpZCByb3V0ZXMgb3IgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLgoKVGhpcyBhbGwgc2VlbXMgc29saWQuIFdlIGFyZSBnb29kIHRvIGdvLCBhbGwgb2YgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGlzIHRoZXJlLgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JQTF9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfY2hrX3JwbF9zcmhfbG9vcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDssCiAgICAmIzM0O3JwbF92YWxpZGF0ZV9zcmgmIzM0OywKICAgICYjMzQ7cnBsX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljIGluIGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpIHdpdGhpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIElQdjYgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCBSUEwgU1JIIChpcHY2X3JwbF9zcmhfcmN2KSBhbmQgdmlhIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiB1c2luZyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyAocnBsX2J1aWxkX3N0YXRlIC1cdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUlBMX0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9jaGtfcnBsX3NyaF9sb29wJiMzNDssCiAgICAmIzM0O2lwdjZfcnBsX3NyaF9yY3YmIzM0OywKICAgICYjMzQ7cnBsX3ZhbGlkYXRlX3NyaCYjMzQ7LAogICAgJiMzNDtycGxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQ2MjEsNyAmIzQzOzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLAogCQl9CiAKIAkJaWYgKGhhc2hfZm91bmQpIHsKLQkJCWlmIChmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKJiM0MzsJCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKIAkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCXJldXNlcG9ydF9hZGRyX2FueS5zaCBcCiAJcm91dGVfaGludC5zaCBcCiAJcm91dGVfbG9jYWxuZXQuc2ggXAomIzQzOwlycGxfc3JoX2xvb3Auc2ggXAogCXJwc19kZWZhdWx0X21hc2suc2ggXAogCXJ0bmV0bGluay5weSBcCiAJcnRuZXRsaW5rLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCkBAIC0wLDAgJiM0MzsxLDM4IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9ucyAmIzM0OyROUyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7cmVxdWlyZV9jb21tYW5kIGlwCiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkPwomIzQzOwomIzQzO2lwIC1uICYjMzQ7JE5TJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWQKJiM0MzsKJiM0MztpZiAhIGlwIC1uICYjMzQ7JE5TJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXAomIzQzOwllbmNhcCBycGwgc2VncyAyMDAxOmRiODo0OjoxIGRldiBsbyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGUmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8KJiM0MztjaGVja19lcnIgJD8gJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXMmIzM0OwomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcCiYjNDM7CTImZ3Q7L2Rldi9udWxsCiYjNDM7Y2hlY2tfZmFpbCAkPyAmIzM0O1NlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgcmVqZWN0cyBzZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzJiMzNDsKJiM0MzsKJiM0MztleGl0ICRFWElUX1NUQVRVUwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBOZXR3b3JrIFBlcmZvcm1hbmNlIEVuaGFuY2VtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgcGF0Y2ggdG91Y2hpbmcgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGNvZGUgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3IgbG9vcHMgaW4gUlBML1NSSCBwYWNrZXRzLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBgZm91bmQgJmd0OyAxICZhbXA7JmFtcDsgc2VwYXJhdGVkYCB0byBqdXN0IGBmb3VuZCAmYW1wOyZhbXA7IHNlcGFyYXRlZGAuIEhtbSwgc28gdGhlIG9yaWdpbmFsIGxvZ2ljIHNlZW1lZCB0byBjYXJlIGFib3V0IGhvdyBtYW55IHRpbWVzIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uIHdhcyBtZXQuIE5vdywgdGhlIGNvbmRpdGlvbiBzZWVtcyB0byBiZSBzYXRpc2ZpZWQgYXMgbG9uZyBhcyBpdCYjMzk7cyBiZWVuIGZvdW5kIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZm91bmRgIGFuZCBgc2VwYXJhdGVkYCByZXByZXNlbnQgaW4gdGhpcyBjb250ZXh0LiAgQXJlIHRoZXkgY291bnRlcnMsIGZsYWdzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQgYW5kIG5lZWRzIHRvIGJlIGFuYWx5emVkIGNhcmVmdWxseTsgd2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvcj8gV2hhdCBlZGdlIGNhc2VzIGRvZXMgdGhpcyBuZXcgbG9naWMgYWRkcmVzcz8gCgpBbmQgdGhlIGFkZGVkIHNlbGZ0ZXN0Li4uIHRoYXQmIzM5O3MgYSBnb29kIHNpZ24uICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hgIHNjcmlwdCBzdWdnZXN0cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UuICBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHJldmlldyBhZnRlciBJJiMzOTt2ZSBkZXZlbG9wZWQgYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcnVuIHRoaXMgYW5kIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVzdWx0cy4gT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjaGFuZ2UgcmVsYXRlZCB0byBuZXR3b3JrIHN0YWJpbGl0eSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjb3JyZWN0IGFuZCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MDA6XHRcdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyO1xuNDYwMzpcdFx0aW50IGksIHJldCA9IDAsIGZvdW5kID0gMDtcbjQ2MDQ6XHRcdHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDtcbjQ2MDU6XHRcdGJvb2wgc2VwYXJhdGVkID0gZmFsc2U7XG40NjA2Olx0XHR1bnNpZ25lZCBpbnQgaGFzaDtcbjQ2MDc6XHRcdGJvb2wgaGFzaF9mb3VuZDtcbjQ2MDg6XHRcbjQ2MDk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ2MTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zZWdzOyBpJiM0MzsmIzQzOykge1xuNDYxMTpcdFx0XHRhZGRyID0gXHUwMDI2c2Vnc1tpXTtcbjQ2MTI6XHRcdFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xuNDYxMzpcdFxuNDYxNDpcdFx0XHRoYXNoX2ZvdW5kID0gZmFsc2U7XG40NjE1Olx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xuNDYxNjpcdFxuNDYxNzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2aWZwLVx1MDAzZWFkZHIsIGFkZHIpKSB7XG40NjE4Olx0XHRcdFx0XHRoYXNoX2ZvdW5kID0gdHJ1ZTtcbjQ2MTk6XHRcdFx0XHRcdGJyZWFrO1xuNDYyMDpcdFx0XHRcdH1cbjQ2MjE6XHRcdFx0fVxuNDYyMjpcdFxuNDYyMzpcdFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuNDYyNDpcdFx0XHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG40NjI1Olx0XHRcdFx0XHRyZXQgPSAxO1xuNDYyNjpcdFx0XHRcdFx0YnJlYWs7XG40NjI3Olx0XHRcdFx0fVxuNDYyODpcdFxuNDYyOTpcdFx0XHRcdHNlcGFyYXRlZCA9IGZhbHNlO1xuNDYzMDpcdFx0XHRcdGZvdW5kJiM0MzsmIzQzOztcbjQ2MzE6XHRcdFx0fSBlbHNlIHtcbjQ2MzI6XHRcdFx0XHRzZXBhcmF0ZWQgPSB0cnVlO1xuNDYzMzpcdFx0XHR9XG40NjM0Olx0XHR9XG40NjM1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ2MzY6XHRcbjQ2Mzc6XHRcdHJldHVybiByZXQ7XG40NjM4Olx0fVxuNDYzOTpcdFxuNDY0MDpcdC8qXG40NjQxOlx0ICpcdFBlcmlvZGljIGFkZHJlc3Mgc3RhdHVzIHZlcmlmaWNhdGlvblxuNDY0MjpcdCAqL1xuNDY0MzpcdFxuNDY0NDpcdHN0YXRpYyB2b2lkIGFkZHJjb25mX3ZlcmlmeV9ydG5sKHN0cnVjdCBuZXQgKm5ldClcbjQ2NDU6XHR7XG40NjQ2Olx0XHR1bnNpZ25lZCBsb25nIG5vdywgbmV4dCwgbmV4dF9zZWMsIG5leHRfc2NoZWQ7XG40NjQ3Olx0XHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XG40NjQ4Olx0XHRpbnQgaTtcbjQ2NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRpbmcgSGVhZGVyIExvb3AgRGV0ZWN0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBsb29wIGRldGVjdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgUlBMIChSb3V0aW5nIFByb3RvY29sIGZvciBMb3ctcG93ZXIgYW5kIExvc3N5IE5ldHdvcmtzKSBhbmQgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBsb29wIGRldGVjdGlvbiBsb2dpYyBpcyB0cmlnZ2VyZWQuIElkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHRzIGludG8gdGhlIHNjZW5hcmlvcyB3aGVyZSBwb3RlbnRpYWwgcm91dGluZyBsb29wcyBhcmUgY29uc2lkZXJlZCwgYW5kIGhvdyBhZ2dyZXNzaXZlbHksIG9yIGRlZmVuc2l2ZWx5LCB0aGUgY2hlY2sgaXMgcGVyZm9ybWVkLiBJIHdpbGwgc3RhcnQgYnkgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbHMgdG8gdHJhdmVyc2UgdGhlIGNhbGwgZ3JhcGggYW5kIGlzb2xhdGUgdGhlIHBlcnRpbmVudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xMjM9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjUtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjEyNjppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXHRcdFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ1NzA9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ1OTgtICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ1OTk6aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2Vncyxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTY5LVxubmV0L2lwdjYvZXh0aGRycy5jOjU3MDpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXHUwMDNlcnBsX3NlZ2FkZHIsIG4gJiM0MzsgMSk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTcxLVx0aWYgKGVycikge1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM5PXN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo1NTpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIHNyaC1cdTAwM2VycGxfc2VnYWRkcixcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTU2LVx0XHRcdFx0ICAgIHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA4NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBJdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgbG9vcHMgd2l0aGluIGFuIFJQTCBTUkguIFRoZSBjdXJyZW50IGxvZ2ljLCBhcyBpdCBzdGFuZHMsIGhhcyBhIGZsYXc6IGl0IGluY29ycmVjdGx5IGlkZW50aWZpZXMgbG9vcHMuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIG9ubHkgZmxhZ2dpbmcgYSBsb29wIGlmIGl0IGVuY291bnRlcmVkICptb3JlIHRoYW4gb25lKiBsb2NhbCBhZGRyZXNzIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGlzIGlzIGluY29ycmVjdCEgQSBsb29wIGV4aXN0cyBpZiAqYW55KiBsb2NhbCBhZGRyZXNzIGlzIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGZvbGxvd2VkIGJ5ICphbm90aGVyKiBsb2NhbCBhZGRyZXNzLCBldmVuIGlmIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UuIFNvLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBmbGF3ZWQgY29uZGl0aW9uIGJ5IGNoYW5naW5nIHRoZSBsb2dpYyBmcm9tIGBmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWRgIHRvIGp1c3QgYGZvdW5kICZhbXA7JmFtcDsgc2VwYXJhdGVkYC4gVGhpcyBlbnN1cmVzIHRoYXQgYSBsb29wIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGluIHRoZSBzaW5nbGUgY2FzZSBhcyB3ZWxsLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBmaXggaW50cm9kdWNlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCB0aGluZyBJIGNoZWNrIGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBOb3BlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHNpbXBsZSBpbnRlZ2VyICgwIG9yIDEpLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBsZWFrZWQuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSB2YXJpYWJsZXMgYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGFuZCBgaGFzaF9mb3VuZGAgYXJlIGFsbCBpbml0aWFsaXplZCBsb2NhbGx5LiBTcGVjaWZpY2FsbHksIGBpYCBhbmQgYHJldGAgYXJlIGluaXRpYWxpemVkLiBBbmQgYGZvdW5kYCBpcyBpbml0aWFsaXplZCB0byAwLiBgc2VwYXJhdGVkYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYGhhc2hfZm91bmRgIGlzIGFzc2lnbmVkIGEgdmFsdWUgb2YgYGZhbHNlYCAoaW4gdGhlIGNvZGUpLCBzbyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW4gcGxheS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXM6KiogVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMgb2YgYW55IGRhdGEgc3RydWN0dXJlcyBoZXJlLgo0LiAgKipCb3VuZHMgY2hlY2tzOioqIFRoaXMgcGF0Y2ggKnN0cmVuZ3RoZW5zKiB0aGUgYm91bmRzLWNoZWNraW5nIGxvZ2ljLCBub3Qgd2Vha2VucyBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgYWNjZXNzaW5nIG91dC1vZi1ib3VuZHMgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZpeCBtYWtlcyB0aGUgY2hlY2sgc3RyaWN0ZXIuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZml4IGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZywgYSBsb2dpYyBlcnJvci4gV2hpbGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgd29ydGggbWVudGlvbmluZyBnZW5lcmFsbHksIHRoaXMgZml4IHdvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtBU0FOIGlzc3VlcyBlaXRoZXIgKGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpLgoKVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIHNob3VsZCBhbHNvIHdyaXRlIHVwIGEgY2xlYXIgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gYW5kIEtNU0FOOiB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCB0aGF0IHdhcyBub3QgZGV0ZWN0aW5nIGxvb3BzIGlmIGBmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWRgIGFuZCBjb250cmFzdGluZyB0aGF0IHRoZSBmaXggZG9lcyBub3QgaW50cm9kdWNlIEtNU0FOIGlzc3VlcyBiZWNhdXNlIG9ubHkgbG9jYWwgdmFyaWFibGVzIGFyZSB1c2VkLCBhbmQgdGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvcGllcyBvZiBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IHNob3VsZCBlbXBoYXNpemUgdGhhdCB0aGUgZml4IGRvZXMgbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjMxLjc0MDUyOTYwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDc2OTgyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBjb25kaXRpb24gaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpYCAoYG5ldC9pcHY2L2FkZHJjb25mLmNgKSB1c2VkIHRvIHZhbGlkYXRlIElQdjYgUlBMIFNlZ21lbnQgUm91dGluZyBIZWFkZXJzIGFnYWluc3Qgcm91dGluZyBsb29wcyBpbnZvbHZpbmcgbG9jYWwgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgYGlmIChmb3VuZCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKWAgdG8gYGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCwgZW5zdXJpbmcgdGhhdCBhIHNpbmdsZSBwcmV2aW91c2x5IHNlZW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcyBhbmQgdGhlbiBhbm90aGVyIGxvY2FsIGFkZHJlc3MgaXMgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBsb29wLlxcblxcbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVxcdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMS43NDA1Mzk2NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQzNzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjNWM3MTg1OTM5ZDg5NTBhNTNhNmY4YTZjYWViZWJkMWY3ZDc5ZDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTQ2MjEsNyArNDYyMSw3IEBAIGludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChoYXNoX2ZvdW5kKSB7XFxuLVxcdFxcdFxcdGlmIChmb3VuZCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKSB7XFxuK1xcdFxcdFxcdGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpIHtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gMTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuaW5kZXggM2VlMzM3OGY4YjI2ZS4uN2ZlN2UzOGI5YzZjMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5AQCAtODAsNiArODAsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0cmV1c2Vwb3J0X2FkZHJfYW55LnNoIFxcXFxcXG4gXFx0cm91dGVfaGludC5zaCBcXFxcXFxuIFxcdHJvdXRlX2xvY2FsbmV0LnNoIFxcXFxcXG4rXFx0cnBsX3NyaF9sb29wLnNoIFxcXFxcXG4gXFx0cnBzX2RlZmF1bHRfbWFzay5zaCBcXFxcXFxuIFxcdHJ0bmV0bGluay5weSBcXFxcXFxuIFxcdHJ0bmV0bGluay5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hMmU5OTkxZDc4OWQ2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcXG5AQCAtMCwwICsxLDM4IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK3NvdXJjZSBsaWIuc2hcXG4rXFxuK2NsZWFudXAoKVxcbit7XFxuK1xcdGNsZWFudXBfbnMgXFxcIiROU1xcXCJcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK3JlcXVpcmVfY29tbWFuZCBpcFxcbitzZXR1cF9ucyBOUyB8fCBleGl0ICQ/XFxuK1xcbitpcCAtbiBcXFwiJE5TXFxcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODoxOjoxLzEyOCBkZXYgbG8gbm9kYWRcXG4raXAgLW4gXFxcIiROU1xcXCIgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6Mzo6MS8xMjggZGV2IGxvIG5vZGFkXFxuK1xcbitpZiAhIGlwIC1uIFxcXCIkTlNcXFwiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMDo6LzY0IFxcXFxcXG4rXFx0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6NDo6MSBkZXYgbG8gMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGVcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rUkVUPTBcXG4raXAgLW4gXFxcIiROU1xcXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjExOjovNjQgXFxcXFxcbitcXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXFxuK2NoZWNrX2VyciAkPyBcXFwiQWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgcmVqZWN0ZWRcXFwiXFxuK2xvZ190ZXN0IFxcXCJSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXNcXFwiXFxuK1xcbitSRVQ9MFxcbitpcCAtbiBcXFwiJE5TXFxcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcXFxcXFxuK1xcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxcXFxuK1xcdDJcXHUwMDNlL2Rldi9udWxsXFxuK2NoZWNrX2ZhaWwgJD8gXFxcIlNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZFxcXCJcXG4rbG9nX3Rlc3QgXFxcIlJQTCByZWplY3RzIHNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXNcXFwiXFxuK1xcbitleGl0ICRFWElUX1NUQVRVU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMi4yNTU1NTMyOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4NTEyODkyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldGVjdGlvbiBsb2dpYyBpbiBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUlBMIFNSSCAoaXB2Nl9ycGxfc3JoX3JjdikgYW5kIHZpYSBuZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgKHJwbF9idWlsZF9zdGF0ZSAtXFx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmM1YzcxODU5MzlkODk1MGE1M2E2ZjhhNmNhZWJlYmQxZjdkNzlkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIzOjE4OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IDlkODliZTdlMDU0NGIuLmY2NzhmYjdmYTU3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtNDYyMSw3ICs0NjIxLDcgQEAgaW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuLVx0XHRcdGlmIChmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG4rXHRcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpIHtcbiBcdFx0XHRcdHJldCA9IDE7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCAzZWUzMzc4ZjhiMjZlLi43ZmU3ZTM4YjljNmMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC04MCw2ICs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdHJldXNlcG9ydF9hZGRyX2FueS5zaCBcXFxuIFx0cm91dGVfaGludC5zaCBcXFxuIFx0cm91dGVfbG9jYWxuZXQuc2ggXFxcbitcdHJwbF9zcmhfbG9vcC5zaCBcXFxuIFx0cnBzX2RlZmF1bHRfbWFzay5zaCBcXFxuIFx0cnRuZXRsaW5rLnB5IFxcXG4gXHRydG5ldGxpbmsuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcbkBAIC0wLDAgKzEsMzggQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgbGliLnNoXG4rXG4rY2xlYW51cCgpXG4re1xuK1x0Y2xlYW51cF9ucyBcIiROU1wiXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rcmVxdWlyZV9jb21tYW5kIGlwXG4rc2V0dXBfbnMgTlMgfHwgZXhpdCAkP1xuK1xuK2lwIC1uIFwiJE5TXCIgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkXG4raXAgLW4gXCIkTlNcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWRcbitcbitpZiAhIGlwIC1uIFwiJE5TXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXFxcbitcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjQ6OjEgZGV2IGxvIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBSUEwgbGlnaHR3ZWlnaHQgdHVubmVsIHN1cHBvcnQgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK1xuK1JFVD0wXG4raXAgLW4gXCIkTlNcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcXFxuK1x0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6MTo6MSwyMDAxOmRiODozOjoxIGRldiBsb1xuK2NoZWNrX2VyciAkPyBcIkFkamFjZW50IGxvY2FsIGFkZHJlc3NlcyB3ZXJlIHJlamVjdGVkXCJcbitsb2dfdGVzdCBcIlJQTCBhY2NlcHRzIGFkamFjZW50IGxvY2FsIGFkZHJlc3Nlc1wiXG4rXG4rUkVUPTBcbitpcCAtbiBcIiROU1wiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMjo6LzY0IFxcXG4rXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjI6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8gXFxcbitcdDJcdTAwM2UvZGV2L251bGxcbitjaGVja19mYWlsICQ/IFwiU2VwYXJhdGVkIGxvY2FsIGFkZHJlc3NlcyB3ZXJlIGFjY2VwdGVkXCJcbitsb2dfdGVzdCBcIlJQTCByZWplY3RzIHNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXNcIlxuK1xuK2V4aXQgJEVYSVRfU1RBVFVTXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMi4yNTU1NTUxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjY4MTM0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlbnQgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbiB3aXRoaW4gYGFkZHJjb25mLmNgLlxuXG5UaGUgZGlmZiBzdWdnZXN0cyBhIGNoYW5nZSBpbiB0aGUgbG9vcGluZyBiZWhhdmlvciB3aXRoaW4gdGhlIGZ1bmN0aW9uIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgcG90ZW50aWFsIGlzc3VlIGlkZW50aWZpZWQgd2hlbiBtdWx0aXBsZSBsb29wcyB3ZXJlIGRpc2NvdmVyZWQgYW5kIG5vdyB0aGUgY29uZGl0aW9uIGBmb3VuZCBcdTAwM2UgMWAgaGFzIGJlZW4gY2hhbmdlZCB0byBzaW1wbHkgYGZvdW5kYC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgaXMgYW4gb3V0cmlnaHQgYnVnIGZpeCBvciBhIGJlaGF2aW9yIGNoYW5nZS5cblxuR2l2ZW4gdGhlIGNoYW5nZSBpbnZvbHZlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uLiBMb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaGAgYW5kIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0ZXN0IGlzIGludGVncmF0ZWQgd2l0aCB0aGUgYE1ha2VmaWxlYC4gXG5cbk5vdywgSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgbGluZSBieSBsaW5lLCBjb21wYXJpbmcgdGhlIG9yaWdpbmFsIGxvZ2ljIHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhpcyBhZGRyZXNzZXMuIEknbGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIOKAkyB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgYW5kIHdoYXQgZG9lcyBgc2VwYXJhdGVkYCBzaWduaWZ5PyBUaGUgdGVzdCBjYXNlcyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmQgdGhpcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhvc2Ugc2hlbGwgc2NyaXB0cyBjYXJlZnVsbHkgdG8gc2VlIGV4YWN0bHkgd2hhdCBzY2VuYXJpb3MgYXJlIGJlaW5nIGNvdmVyZWQgYW5kIGhvdyB0aGUgY2hhbmdlZCBjb25kaXRpb24gYWZmZWN0cyB0aGUgbG9vcCBkZXRlY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo0MS41MjM2OTMzOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTkwOlxcdCAqIGNoZWNraW5nIGlmIHRoZSBzZWdtZW50cyBjb250YWlucyBhbnkgb2YgYSBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cXG40NTkxOlxcdCAqXFxuNDU5MjpcXHQgKiBRdW90ZTpcXG40NTkzOlxcdCAqXFxuNDU5NDpcXHQgKiBUbyBkZXRlY3QgbG9vcHMgaW4gdGhlIFNSSCwgYSByb3V0ZXIgTVVTVCBkZXRlcm1pbmUgaWYgdGhlIFNSSFxcbjQ1OTU6XFx0ICogaW5jbHVkZXMgbXVsdGlwbGUgYWRkcmVzc2VzIGFzc2lnbmVkIHRvIGFueSBpbnRlcmZhY2Ugb24gdGhhdCByb3V0ZXIuXFxuNDU5NjpcXHQgKiBJZiBzdWNoIGFkZHJlc3NlcyBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3RcXG40NTk3OlxcdCAqIG9uZSBhZGRyZXNzIG5vdCBhc3NpZ25lZCB0byB0aGF0IHJvdXRlci5cXG40NTk4OlxcdCAqL1xcbjQ1OTk6XFx0aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcXG40NjAwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgY2hhciBuc2VncylcXG40NjAxOlxcdHtcXG40NjAyOlxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG40NjAzOlxcdFxcdGludCBpLCByZXQgPSAwLCBmb3VuZCA9IDA7XFxuNDYwNDpcXHRcXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XFxuNDYwNTpcXHRcXHRib29sIHNlcGFyYXRlZCA9IGZhbHNlO1xcbjQ2MDY6XFx0XFx0dW5zaWduZWQgaW50IGhhc2g7XFxuNDYwNzpcXHRcXHRib29sIGhhc2hfZm91bmQ7XFxuNDYwODpcXHRcXG40NjA5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG40NjEwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuc2VnczsgaSsrKSB7XFxuNDYxMTpcXHRcXHRcXHRhZGRyID0gXFx1MDAyNnNlZ3NbaV07XFxuNDYxMjpcXHRcXHRcXHRoYXNoID0gaW5ldDZfYWRkcl9oYXNoKG5ldCwgYWRkcik7XFxuNDYxMzpcXHRcXG40NjE0OlxcdFxcdFxcdGhhc2hfZm91bmQgPSBmYWxzZTtcXG40NjE1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaW5ldDZfYWRkcl9sc3RbaGFzaF0sIGFkZHJfbHN0KSB7XFxuNDYxNjpcXHRcXG40NjE3OlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmlmcC1cXHUwMDNlYWRkciwgYWRkcikpIHtcXG40NjE4OlxcdFxcdFxcdFxcdFxcdGhhc2hfZm91bmQgPSB0cnVlO1xcbjQ2MTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyMDpcXHRcXHRcXHRcXHR9XFxuNDYyMTpcXHRcXHRcXHR9XFxuNDYyMjpcXHRcXG40NjIzOlxcdFxcdFxcdGlmIChoYXNoX2ZvdW5kKSB7XFxuNDYyNDpcXHRcXHRcXHRcXHRpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKSB7XFxuNDYyNTpcXHRcXHRcXHRcXHRcXHRyZXQgPSAxO1xcbjQ2MjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyNzpcXHRcXHRcXHRcXHR9XFxuNDYyODpcXHRcXG40NjI5OlxcdFxcdFxcdFxcdHNlcGFyYXRlZCA9IGZhbHNlO1xcbjQ2MzA6XFx0XFx0XFx0XFx0Zm91bmQrKztcXG40NjMxOlxcdFxcdFxcdH0gZWxzZSB7XFxuNDYzMjpcXHRcXHRcXHRcXHRzZXBhcmF0ZWQgPSB0cnVlO1xcbjQ2MzM6XFx0XFx0XFx0fVxcbjQ2MzQ6XFx0XFx0fVxcbjQ2MzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDYzNjpcXHRcXG40NjM3OlxcdFxcdHJldHVybiByZXQ7XFxuNDYzODpcXHR9XFxuNDYzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NDEuNTIzOTgxOTI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzk0MDAwNjE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIElQdjYgUm91dGluZyBIZWFkZXIgTG9vcCBEZXRlY3Rpb24gRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgbG9vcCBkZXRlY3Rpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IHRoZSBSUEwgKFJvdXRpbmcgUHJvdG9jb2wgZm9yIExvdy1wb3dlciBhbmQgTG9zc3kgTmV0d29ya3MpIGFuZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljIGlzIHRyaWdnZXJlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgc2NlbmFyaW9zIHdoZXJlIHBvdGVudGlhbCByb3V0aW5nIGxvb3BzIGFyZSBjb25zaWRlcmVkLCBhbmQgaG93IGFnZ3Jlc3NpdmVseSwgb3IgZGVmZW5zaXZlbHksIHRoZSBjaGVjayBpcyBwZXJmb3JtZWQuIEkgd2lsbCBzdGFydCBieSB1c2luZyBteSBzdGFuZGFyZCB0b29scyB0byB0cmF2ZXJzZSB0aGUgY2FsbCBncmFwaCBhbmQgaXNvbGF0ZSB0aGUgcGVydGluZW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjQ1LjQ2Mzk5MTMxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0NjMyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTEyMz1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTI1LVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTI2OmludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXFx0XFx0XFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDU3MD1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NTk4LSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDU5OTppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDgxPXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTU2OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTcwOlxcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXFx1MDAzZXJwbF9zZWdhZGRyLCBuICsgMSk7XFxubmV0L2lwdjYvZXh0aGRycy5jLTU3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zOT1zdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NTU6XFx0ZXJyID0gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKG5ldCwgc3JoLVxcdTAwM2VycGxfc2VnYWRkcixcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy01Ni1cXHRcXHRcXHRcXHQgICAgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NDcuMTY4NjI5NDY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE0Nzg5NTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUlBMIFNSSCBMb29wIERldGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGluIHR3byBrZXkgbG9jYXRpb25zOiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXB2Nl9ycGxfc3JoX3JjdmAsIHdoaWNoIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgUlBMIFNSSCBleHRlbnNpb24gaGVhZGVycy4gVGhhdCBtYWtlcyBzZW5zZTsgbG9vcCBkZXRlY3Rpb24gaXMgY3JpdGljYWwgdGhlcmUuIFRoZSBzZWNvbmQgcGxhY2UgaXMgaW4gYG5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jYCwgd2l0aGluIGBycGxfdmFsaWRhdGVfc3JoYCwgd2hpY2ggaGFzIHRvIGRvIHdpdGggdmFsaWRhdGluZyBTUkhzIHdoZW4gY29uZmlndXJpbmcgcm91dGVzIHZpYSBuZXRsaW5rICh1c2luZyBgUlRNX05FV1JPVVRFYCkuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCByb3V0ZSBjb25maWd1cmF0aW9uIGludm9sdmluZyBSUEwgU1JIIGhlYWRlcnMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyB1c3VhbGx5IG1lYW5zIGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBsb29rIGZvciBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBpdHNlbGYsIHRvIHNlZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGlzYWJsZWQgc29tZWhvdy4gQnV0IEknbGwgYWxzbyB3YW50IHRvIGxvb2sgaW4gYG5ldC9pcHY2L2FkZHJjb25mLmNgLCB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGdsb2JhbCBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgb2YgY291cnNlIEknbGwgcmV2aXNpdCBgaXB2Nl9ycGxfc3JoX3JjdmAgYW5kIGBycGxfaXB0dW5uZWwuY2AgaW4gS2NvbmZpZywgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb21waWxlLXRpbWUgZmxhZ3MgaW5mbHVlbmNlIGhvdyBsb29wIGRldGVjdGlvbiBpcyBoYW5kbGVkIGluIHRob3NlIGFyZWFzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGxvb3AgZGV0ZWN0aW9uIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo1MC4zMTY1MjY5NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBsX2lwdHVubmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTYtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvcnBsX2lwdHVubmVsLmhcXHUwMDNlXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtOC1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE0LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjE1OnN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAge1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE2LVxcdERFQ0xBUkVfRkxFWF9BUlJBWShzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyLCBzcmgpO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MTk9c3RydWN0IHJwbF9sd3Qge1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTIwLVxcdHN0cnVjdCBkc3RfY2FjaGUgY2FjaGU7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MjE6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCB0dW5pbmZvO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTIyLX07XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0yND1zdGF0aWMgaW5saW5lIHN0cnVjdCBycGxfbHd0ICpycGxfbHd0X2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjgtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMC1ycGxfZW5jYXBfbHd0dW5uZWwoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnBsX2lwdHVubmVsX3BvbGljeVtSUExfSVBUVU5ORUxfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzYtXFx0W1JQTF9JUFRVTk5FTF9TUkhdXFx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04MS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBSUExfSVBUVU5ORUxfTUFYLCBubGEsXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODI6XFx0XFx0XFx0ICAgICAgIHJwbF9pcHR1bm5lbF9wb2xpY3ksIGV4dGFjayk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0xOTA9c3RhdGljIGludCBycGxfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBycGxfbHd0ICpybHd0LFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTkzLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxOTQ6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdGluZm87XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTk1LVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjU6XFx0XFx0XFx0ICAgc3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbylcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMjYte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjMyNzpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpkYXRhO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMyOC1cXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNDM9c3RhdGljIGludCBycGxfZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDUte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM0NjpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICp0dW5pbmZvID0gcnBsX2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNTQ9c3RhdGljIGludCBycGxfZW5jYXBfbmxzaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU1LXtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNTY6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHJwbF9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU3LVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzYxPXN0YXRpYyBpbnQgcnBsX2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjIte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2MzpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICphX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChhKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjQ6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYl9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzY1LVxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjUwLjM2NDU0MTMxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMTU3NTU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgUlBMIHdpdGggU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgZXh0aGRycy5jYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfSVBWNl9SUExfU1JIYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBvciBzb21ldGhpbmcgY2xvc2VseSByZWxhdGVkIHRoYXQgbWlnaHQgaGFuZGxlIHNpbWlsYXIgY29uZmlndXJhdGlvbnMuIEkgcmVjYWxsIHRoYXQgZmlsZSBjb250YWluaW5nIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgY29kZSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgbGluZSBudW1iZXJzIHdpdGhpbiB0aGF0IGZpbGUgc3VnZ2VzdHMgbGluZSA0ODEgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgaW52ZXN0aWdhdGlvbi4gSSB3aWxsIHN0YXJ0IHRoZXJlLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2Yga2VybmVsIGNvZGUgdG8gZXZhbHVhdGUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhhdCBsaW5lIGZvciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTIuMzgwMzAwMDEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDc3OlxcdFxcbiA0Nzg6XFx0XFx0cmV0dXJuIC0xO1xcbiA0Nzk6XFx0fVxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gNDgyOlxcdHtcXG4gNDgzOlxcdFxcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmhkciwgKm9oZHIsICpjaGRyO1xcbiA0ODQ6XFx0XFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiA0ODU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuIDQ4NjpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xcbiA0ODc6XFx0XFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xcbiA0ODg6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiA0ODk6XFx0XFx0aW50IGFjY2VwdF9ycGxfc2VnO1xcbiA0OTA6XFx0XFx0aW50IGksIGVycjtcXG4gNDkxOlxcdFxcdHU2NCBuID0gMDtcXG4gNDkyOlxcdFxcdHUzMiByO1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xcbiA0OTY6XFx0XFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xcbiA0OTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ5ODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdGxvb3BlZF9iYWNrOlxcbiA1MDI6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHRpZiAoaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcXG4gNTA1OlxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2KSB7XFxuIDUwNjpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDUwOTpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA1MTA6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA1MTE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDUxMzpcXHRcXG4gNTE0OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo1Mi4zODA0MDA1MjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNDA2MzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgUlBMIEtjb25maWcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBSUEwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIHRoZW0gaW4gYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIElQdjYtcmVsYXRlZCBzZXR0aW5ncyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb250cm9sbGFibGUgYXQgY29tcGlsZSB0aW1lIHdpdGggcmVzcGVjdCB0byBSUEwgLSAgYXJlIHRoZXJlIGRpZmZlcmVudCBSUEwgaW1wbGVtZW50YXRpb25zLCBmZWF0dXJlcywgb3Igb3B0aW1pemF0aW9uIG9wdGlvbnMgSSBjYW4gc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBuZWVkIHR3ZWFraW5nIGZvciBteSB1c2UgY2FzZT8gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxldmFudCBwYXJhbWV0ZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIGZvciBjdXN0b21pemluZyB0aGUgUlBMIGJlaGF2aW9yIHdpdGhpbiBteSB0YXJnZXQgc3lzdGVtLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBSUEwgc3VwcG9ydCBlbnRpcmVseSwgcGVyaGFwcyBkaWZmZXJlbnQgUlBMIG1vZGVzLCBvciBwb3NzaWJseSBldmVuIGZsYWdzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgcm91dGluZyBtZXRyaWNzIG9yIHBhdGggc2VsZWN0aW9uIGNyaXRlcmlhLiBJdOKAmXMgYWxsIGluIHRoZSBgS2NvbmZpZ2AgYWZ0ZXIgYWxsLiBUaW1lIHRvIGdldCB0aGUgY29tcGlsZXIgYnVpbGRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU0LjY4NDQ2NzQwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlBMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MzEyPWNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnOjMxODpcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjYvS2NvbmZpZy0zMTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyMi1cXHRoZWxwXFxubmV0L2lwdjYvS2NvbmZpZzozMjM6XFx0ICBTdXBwb3J0IGZvciBSRkM2NTU0IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxubmV0L2lwdjYvS2NvbmZpZy0zMjQtXFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzQ1LVxcdGFycmF5W0RFVkNPTkZfTkRJU0NfVENMQVNTXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZW5kaXNjX3RjbGFzcyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzQ2OlxcdGFycmF5W0RFVkNPTkZfUlBMX1NFR19FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzQ3LVxcdGFycmF5W0RFVkNPTkZfSU9BTTZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2Vpb2FtNl9lbmFibGVkKTtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz00MTk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wNl9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy00MzAtXFxubmV0L2lwdjYvaWNtcC5jOjQzMTpcXHRcXHQvKiBUaGUgZGVzdGluYXRpb24gY291bGQgYmUgYW4gZXh0ZXJuYWwgSVAgaW4gRXh0IEhkciAoU1J2NiwgUlBMLCBldGMuKSxcXG5uZXQvaXB2Ni9pY21wLmMtNDMyLVxcdFxcdCAqIGFuZCBpcDZfbnVsbF9lbnRyeSBjb3VsZCBiZSBzZXQgdG8gc2tiIGlmIG5vIHJvdXRlIGlzIGZvdW5kLlxcbi0tXFxubmV0L2lwdjYvcnBsLmMtMTAtI2RlZmluZSBJUFY2X1BGWFRBSUxfTEVOKHgpIChzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAtICh4KSlcXG5uZXQvaXB2Ni9ycGwuYzoxMTojZGVmaW5lIElQVjZfUlBMX0JFU1RfQUREUl9DT01QUkVTU0lPTiAxNVxcbm5ldC9pcHY2L3JwbC5jLTEyLVxcbi0tXFxubmV0L2lwdjYvcnBsLmM9NTY9c3RhdGljIHVuc2lnbmVkIGNoYXIgaXB2Nl9ycGxfc3JoX2NhbGNfY21wcmkoY29uc3Qgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaW5oZHIsXFxuLS1cXG5uZXQvaXB2Ni9ycGwuYy03MC1cXG5uZXQvaXB2Ni9ycGwuYzo3MTpcXHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xcbm5ldC9pcHY2L3JwbC5jLTcyLX1cXG4tLVxcbm5ldC9pcHY2L3JwbC5jPTc0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9ycGwuYy04My1cXG5uZXQvaXB2Ni9ycGwuYzo4NDpcXHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xcbm5ldC9pcHY2L3JwbC5jLTg1LX1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTMwPXJwbF9lbmNhcF9sd3R1bm5lbChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBycGxfaXB0dW5uZWxfcG9saWN5W1JQTF9JUFRVTk5FTF9NQVggKyAxXSA9IHtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjpcXHRbUlBMX0lQVFVOTkVMX1NSSF1cXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzctfTtcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTY3PXN0YXRpYyBpbnQgcnBsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNzEte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjcyOlxcdHN0cnVjdCBubGF0dHIgKnRiW1JQTF9JUFRVTk5FTF9NQVggKyAxXTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy03My1cXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKm5ld3RzO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODAtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODE6XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgUlBMX0lQVFVOTkVMX01BWCwgbmxhLFxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgyLVxcdFxcdFxcdCAgICAgICBycGxfaXB0dW5uZWxfcG9saWN5LCBleHRhY2spO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODUtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODY6XFx0aWYgKCF0YltSUExfSVBUVU5ORUxfU1JIXSlcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04OC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4OTpcXHRzcmggPSBubGFfZGF0YSh0YltSUExfSVBUVU5ORUxfU1JIXSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6OTA6XFx0c3JoX2xlbiA9IG5sYV9sZW4odGJbUlBMX0lQVFVOTkVMX1NSSF0pO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTkxLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTEyLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjExMzpcXHRuZXd0cy1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX1JQTDtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0xMTQtXFx0bmV3dHMtXFx1MDAzZWZsYWdzIHw9IExXVFVOTkVMX1NUQVRFX0lOUFVUX1JFRElSRUNUO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMzMC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMzE6XFx0bGVuID0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKHR1bmluZm8tXFx1MDAzZXNyaCk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzMyLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzQzPXN0YXRpYyBpbnQgcnBsX2ZpbGxfZW5jYXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzQ3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM0ODpcXHRpZiAobmxhX3B1dF9ycGxfc3JoKHNrYiwgUlBMX0lQVFVOTkVMX1NSSCwgdHVuaW5mbykpXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzQ5LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNTQ9c3RhdGljIGludCBycGxfZW5jYXBfbmxzaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNTctXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU4OlxcdHJldHVybiBubGFfdG90YWxfc2l6ZShSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cXHUwMDNlc3JoKSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU5LX1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM2MT1zdGF0aWMgaW50IHJwbF9lbmNhcF9jbXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjQtXFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYl9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzY1OlxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzY2LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NzpcXHRpZiAobGVuICE9IFJQTF9JUFRVTk5FTF9TUkhfU0laRShiX2hkci1cXHUwMDNlc3JoKSlcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjgtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zODQ9aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM4ODpcXHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM4OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzkxLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM5MjpcXHRwcl9pbmZvKFxcXCJSUEwgU2VnbWVudCBSb3V0aW5nIHdpdGggSVB2NlxcXFxuXFxcIik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzkzLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9NDAwPXZvaWQgcnBsX2V4aXQodm9pZClcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy00MDEte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjQwMjpcXHRsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTQwMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU0LjczMjQwNTY3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4Mzg2NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NiBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb2Ygc3BlY2lmaWMgZmlsZXMuIEkga25vdyBgYWRkcmNvbmYuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSdtIGN1cmlvdXMgYWJvdXQgYHJwbC5jYC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gVG8gZmlndXJlIGl0IG91dCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgcmVnYXJkaW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpdGhpbiB0aGUgSVB2NiBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTYuNTAwNzk1MTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycGxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMi1cXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEzOlxcdFxcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU2LjU0NzI5MDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjEyODc1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IElQdjYgUlBMIERlZHVjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBvYmplY3QgZmlsZXM6IGBycGwub2AsIGBleHRoZHJzLm9gLCBhbmQgYGFkZHJjb25mLm9gLiBUaGV5J3JlIGFsbCBuZXN0ZWQgd2l0aGluIHRoZSBgaXB2Ni15YCBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyB0aGV5J3JlIGJ1aWx0IGF1dG9tYXRpY2FsbHkgYXMgbG9uZyBhcyBgQ09ORklHX0lQVjZgIGlzIHR1cm5lZCBvbi4gTWFrZXMgc2Vuc2UuIE5vdywgYHJwbF9pcHR1bm5lbC5vYCBzZWVtcyB0byBiZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuIExldCBtZSBnbyBvdmVyIHRvIGBuZXQvaXB2Ni9LY29uZmlnYCByZWFsIHF1aWNrLi4uIFllcCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGRlcGVuZHMgZGlyZWN0bHkgb24gYElQVjZgLCBhbmQgdGhhdCBjaGVja3Mgb3V0IHdpdGggdGhlIGRvY3VtZW50YXRpb24uXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoZSBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIGlmIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBycGxfaXB0dW5uZWwuY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCBsaW5lcyAzNS03MCBvZiB0aGF0IGZpbGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTkuMTYwMTcyODE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBycGxfaXB0dW5uZWxfcG9saWN5W1JQTF9JUFRVTk5FTF9NQVggKyAxXSA9IHtcXG4gIDM2OlxcdFxcdFtSUExfSVBUVU5ORUxfU1JIXVxcdD0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXFxuICA0MDpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBzZWdsZW4pXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRpbnQgZXJyO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRpZiAoKHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDMpICE9IHNlZ2xlbilcXG4gIDQ1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0LyogY2hlY2sgYXQgbGVhc3Qgb25lIHNlZ21lbnQgYW5kIHNlZ2xlbiBmaXQgd2l0aCBzZWdtZW50c19sZWZ0ICovXFxuICA0ODpcXHRcXHRpZiAoIXNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCB8fFxcbiAgNDk6XFx0XFx0ICAgIChzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgIT0gc2VnbGVuKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoc3JoLVxcdTAwM2VjbXByaSB8fCBzcmgtXFx1MDAzZWNtcHJlKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRlcnIgPSBpcHY2X2Noa19ycGxfc3JoX2xvb3AobmV0LCBzcmgtXFx1MDAzZXJwbF9zZWdhZGRyLFxcbiAgNTY6XFx0XFx0XFx0XFx0XFx0ICAgIHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCk7XFxuICA1NzpcXHRcXHRpZiAoZXJyKVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRpZiAoaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNnNyaC1cXHUwMDNlcnBsX3NlZ2FkZHJbc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IC0gMV0pIFxcdTAwMjZcXG4gIDYxOlxcdFxcdCAgICBJUFY2X0FERFJfTVVMVElDQVNUKVxcbiAgNjI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuICA2ODpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXFxuICA2OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcXG4gIDcwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1JQTF9JUFRVTk5FTF9NQVggKyAxXTtcXG4gIDczOlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XFxuICA3NDpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU5LjE2MDI2OTY4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDgxMzA0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlBMIFNSSCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgUlBMIChSb3V0aW5nIFByb3RvY29sIGZvciBMb3ctUG93ZXIgYW5kIExvc3N5IE5ldHdvcmtzKSBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJ20gc3RhcnRpbmcgd2l0aCBgcnBsX2J1aWxkX3N0YXRlYCwgYW5kIGl0J3MgY2FsbGluZyBgcnBsX3ZhbGlkYXRlX3NyaGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHJwbF92YWxpZGF0ZV9zcmhgIHRoZW4gY2FsbHMgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBzZXJpZXMgb2YgY2FsbHMgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIFJQTCBTUkggdmFsaWRhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBsb29wcyBhbmQgZW5zdXJpbmcgY29ycmVjdCByb3V0aW5nLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmJvdW5kIHBhdGguIGBpcHY2X3JwbF9zcmhfcmN2YCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIGZvciAqcmVjZWl2aW5nKiB0aGVzZSBTUkggcGFja2V0cy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHZlcnkgZGVzY3JpcHRpdmUuIEkgYWxyZWFkeSBrbm93IHRoaXMgaXMgZm91bmQgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGhhbmRsaW5nIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYW4gSVB2NiBwYWNrZXQgY29tZXMgaW4gdGhhdCBoYXMgYW4gUlBMIFNSSDsgaXQncyBpZGVudGlmaWVkIGJ5IGhlYWRlciB0eXBlIDMuIFNvIG5vdyBJIHdhbnQgdG8gdHJhY2UgaG93IGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBpbnZva2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBvZiBkYXRhIGZsb3cgYW5kIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MDIuMjQxNTc2MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwMzgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00ODAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4MTpzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDgyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4OC1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODk6XFx0XFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjAyLjI4OTM4NTU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDk5ODg3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgSVB2NiBSUEwgTG9vcCBEZXRlY3Rpb24gQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGlwdjZfcnRoZHJfcmN2YCwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgaXB2Nl9ycGxfc3JoX3JjdmAgZm9yIFJQTCByb3V0aW5nIGhlYWRlcnMuICBJIGFsc28gc2VlIHRoYXQgYHJwbF9idWlsZF9zdGF0ZWAgcGxheXMgYSByb2xlIGluIGhhbmRsaW5nIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiBmb3IgbGlnaHR3ZWlnaHQgdHVubmVscywgcGFydGljdWxhcmx5IGBlbmNhcCBycGxgLiAgTXkgZm9jdXMgaXMgb24gYSByZWNlbnQgY29tbWl0IHRoYXQgdG91Y2hlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuICBJIHNlZSBhIGNvZGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCwgYSBmdW5jdGlvbiBjcnVjaWFsIGZvciBkZXRlY3RpbmcgbG9vcHMgd2l0aGluIFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXJzIChTUkgpLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29uZGl0aW9uYWwgYWx0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKGZvdW5kIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpYCwgbWVhbmluZyB0aGVyZSBoYWQgdG8gYmUgbW9yZSB0aGFuIG9uZSBsb2NhbCBhZGRyZXNzICphbmQqIHRoZXkgd2VyZSBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcy4gVGhlIHVwZGF0ZWQgdmVyc2lvbiB1c2VzIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLiBUaGlzIGluZGljYXRlcyBhIGNoYW5nZSB0byBkZXRlY3QgbG9vcHMgbW9yZSBlZmZpY2llbnRseS5cblxuTGV0J3MgZGlzc2VjdCB0aGlzIGxvZ2ljIGJhc2VkIG9uIFJGQyA2NTU0LCB3aGljaCBtYW5kYXRlcyBsb29wIGRldGVjdGlvbiBpbiBTUkhzLiBUaGUgcm91dGVyICptdXN0KiBkZXRlcm1pbmUgaWYgdGhlIFNSSCBjb250YWlucyBtdWx0aXBsZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gaXRzIGludGVyZmFjZXMuIElmIGFuIGludGVyZmFjZSdzIGFkZHJlc3MgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IG9uZSBvdGhlciBhZGRyZXNzIG5vdCBvbiB0aGUgcm91dGVyLCBpdCdzIGEgbG9vcC4gIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIHRvbyBzdHJpY3Q7IGl0IHJlcXVpcmVkICp0aHJlZSogbG9jYWwgYWRkcmVzc2VzIHNlcGFyYXRlZCBieSBub24tbG9jYWxzIHRvIHRyaWdnZXIgbG9vcCBkZXRlY3Rpb24uXG5cblRoZSBjb3JyZWN0ZWQgY29kZSBub3cgY29ycmVjdGx5IGZsYWdzIHRoZSBsb29wIGFzIHNvb24gYXMgaXQgc2VlcyAqb25lKiBsb2NhbCBhZGRyZXNzLCB0aGVuIGEgbm9uLWxvY2FsLCBmb2xsb3dlZCBieSBhbm90aGVyIGxvY2FsIGFkZHJlc3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBpbXByb3ZlbWVudC4gSSBiZWxpZXZlIHRoaXMgZml4IGlzIGNydWNpYWwgZm9yIHJvYnVzdCBSUEwgb3BlcmF0aW9uLlxuXG5Ob3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBwYXJ0IG9mIHRoZSBJUHY2IHN0YWNrLiAgSXQncyByZWFjaGFibGUgaW4gYSBjb3VwbGUgb2Yga2V5IHdheXM6XG5cbiogICBOZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gKHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYFJUQV9FTkNBUGAgYW5kIGBSVEFfRU5DQVBfVFlQRSA9PSBMV1RVTk5FTF9FTkNBUF9SUExgKS4gIFRoaXMgY2FuIGNvbmZpZ3VyZSBsaWdodHdlaWdodCB0dW5uZWxzIGJhc2VkIG9uIFJQTC5cbiogICBEaXJlY3RseSB0aHJvdWdoIHNlbmRpbmcgSVB2NiBwYWNrZXRzIHdpdGggYW4gUlBMIHJvdXRpbmcgaGVhZGVyLCBpZiB0aGUgaW50ZXJmYWNlIG9yIG5ldCBoYXMgYHJwbF9zZWdfZW5hYmxlZGAgc2V0LlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyBcIldvcnRoRnV6emluZ1wiLiAgTXkgY3JpdGVyaWEgYXJlOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCB0aGlzIGlzIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIElQdjYgcGFja2V0L3JvdXRlIHByb2Nlc3NpbmcuXG4qICAgKipSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOioqIFllcywgYm90aCBuZXRsaW5rIGFuZCBJUHY2IHBhY2tldHMgYXJlIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBcIldvcnRoRnV6emluZ1wiIGlzIHRydWUuIFRoaXMgY2hhbmdlIGFmZmVjdHMgY3JpdGljYWwgbmV0d29yayBmdW5jdGlvbiBhbmQgcm91dGUgcHJvY2Vzc2luZyBsb2dpYy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuICBgQ09ORklHX0lQVjZgIGlzIGNsZWFybHkgcmVxdWlyZWQsIHNpbmNlIGBhZGRyY29uZi5jYCBhbmQgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAgcmVzaWRlIHdpdGhpbiB0aGUgSVB2NiBzdWJzeXN0ZW0uIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGlzIHByb2JhYmx5IGEgZmFjdG9yIGZvciBSUEwgdHVubmVsIHN1cHBvcnQuIEkgd2lsbCBkb3VibGUtY2hlY2suIEluZGVlZCwgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAuXG5cbk5vdywgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgbGltaXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYD8gIEkgbmVlZCB0byByZXZpZXcgYGV4dGhkcnMuY2AuIEkgaGF2ZSB0byBjb25maXJtIHdoZXRoZXIgYGlwdjZfcnBsX3NyaF9yY3ZgICh0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFJQTCBoZWFkZXJzKSBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSdsbCBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA0ODAtNTc1IGFuZCA2ODAtNjk1IGluIGBleHRoZHJzLmNgLiAgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgcmVnYXJkaW5nIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWx3YXlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxMC43ODkyNzQ3NTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxcbiA2ODE6XFx0XFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxuIDY4MjpcXHRcXHRcXHRpZiAoIWlkZXYpXFxuIDY4MzpcXHRcXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2ODU6XFx0XFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG4gNjg2OlxcdFxcdFxcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cXG4gNjg3OlxcdFxcdFxcdGlmICghaWRldilcXG4gNjg4OlxcdFxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2OTA6XFx0XFx0ZGVmYXVsdDpcXG4gNjkxOlxcdFxcdFxcdGJyZWFrO1xcbiA2OTI6XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRsb29wZWRfYmFjazpcXG4gNjk1OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiA2OTY6XFx0XFx0XFx0c3dpdGNoIChoZHItXFx1MDAzZXR5cGUpIHtcXG4gNjk3OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXFxuIDY5ODpcXHRcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8yOlxcbiA2OTk6XFx0XFx0XFx0XFx0LyogU2lsZW50bHkgZGlzY2FyZCB0eXBlIDIgaGVhZGVyIHVubGVzcyBpdCB3YXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MTAuNzg5MzY2MjkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2MjU1Nzg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJQTCBTUkggQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb24gaW4gYGV4dGhkcnMuY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgY29kZSBpcyAqYWx3YXlzKiBjb21waWxlZCBpZiBJUHY2IGlzIGVuYWJsZWQsIGFuZCBub3QganVzdCB3aGVuIHRoZSBMaWdodHdlaWdodCBUdW5uZWxpbmcgZmVhdHVyZSBmb3IgUlBMIGlzIGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGlzIHJlbGF0ZWQgdG8gcm91dGUgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgYXNwZWN0LCBpdCBlbmFibGVzIHRoZSByb3V0ZSBjb25maWd1cmF0aW9uIHBhdGggdGhhdCB0aGlzIHNwZWNpZmljIHRlc3Qgc2NyaXB0IGlzIHVzaW5nLiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGFsc28gcmVsZXZhbnQgYmVjYXVzZSBpdCBlbmFibGVzIHRoZSBjb3JlIElQdjYgc3RhY2sgYW5kIHRoZSB1bmRlcmx5aW5nIHBhY2tldCBwYXJzaW5nLlxuXG5Ob3csIGxldCBtZSBzZWUuLi4gd2hpY2ggZnVuY3Rpb25zIHdlcmUgYWN0dWFsbHkgdG91Y2hlZCBpbiB0aGUgY29kZT8gSSd2ZSBnb3QgaXQ6IGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbj8gVGhhdCB3b3VsZCBiZSBgaXB2Nl9ycGxfc3JoX3JjdmAgaXRzZWxmLCBvYnZpb3VzbHksIGFsb25nIHdpdGggYHJwbF92YWxpZGF0ZV9zcmhgLCBhbmQgYHJwbF9idWlsZF9zdGF0ZWAuXG5cbk9rYXksIGFyZSBgcnBsX3ZhbGlkYXRlX3NyaGAgYW5kIGBycGxfYnVpbGRfc3RhdGVgIHN0YXRpY2FsbHkgZGVmaW5lZCwgb3IgaW5saW5lZD8gTG9va2luZyBhdCBsaW5lIDM5IGluIGBycGxfaXB0dW5uZWwuY2AsIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBBbmQgYHJwbF9idWlsZF9zdGF0ZWAgaXMgc3RhdGljIGFzIHdlbGwuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJZiB0aGV5J3JlIHN0YXRpYywgaG93IGlzIGBycGxfYnVpbGRfc3RhdGVgIHJlZ2lzdGVyZWQgYW5kIGV4cG9zZWQgZm9yIHVzZT8gSSdsbCBuZWVkIHRvIGxvb2sgYXJvdW5kIGxpbmUgMzcwIGluIGBuZXQvaXB2Ni9ycGxfaXB0dW5uZWwuY2AgdG8gc2VlIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxNS40MTQ5NDc4MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvcnBsX2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdFxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVxcdTAwM2VzcmgpKVxcbiAzNjg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtZW1jbXAoYV9oZHIsIGJfaGRyLCBsZW4pO1xcbiAzNzE6XFx0fVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBycGxfb3BzID0ge1xcbiAzNzQ6XFx0XFx0LmJ1aWxkX3N0YXRlXFx0PSBycGxfYnVpbGRfc3RhdGUsXFxuIDM3NTpcXHRcXHQuZGVzdHJveV9zdGF0ZVxcdD0gcnBsX2Rlc3Ryb3lfc3RhdGUsXFxuIDM3NjpcXHRcXHQub3V0cHV0XFx0XFx0PSBycGxfb3V0cHV0LFxcbiAzNzc6XFx0XFx0LmlucHV0XFx0XFx0PSBycGxfaW5wdXQsXFxuIDM3ODpcXHRcXHQuZmlsbF9lbmNhcFxcdD0gcnBsX2ZpbGxfZW5jYXBfaW5mbyxcXG4gMzc5OlxcdFxcdC5nZXRfZW5jYXBfc2l6ZVxcdD0gcnBsX2VuY2FwX25sc2l6ZSxcXG4gMzgwOlxcdFxcdC5jbXBfZW5jYXBcXHQ9IHJwbF9lbmNhcF9jbXAsXFxuIDM4MTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzODI6XFx0fTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbiAzODU6XFx0e1xcbiAzODY6XFx0XFx0aW50IGVycjtcXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0ZXJyID0gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2cnBsX29wcywgTFdUVU5ORUxfRU5DQVBfUlBMKTtcXG4gMzg5OlxcdFxcdGlmIChlcnIpXFxuIDM5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cHJfaW5mbyhcXFwiUlBMIFNlZ21lbnQgUm91dGluZyB3aXRoIElQdjZcXFxcblxcXCIpO1xcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRyZXR1cm4gMDtcXG4gMzk1OlxcdFxcbiAzOTY6XFx0b3V0OlxcbiAzOTc6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxNS40MTUwNDI5NzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI3MTc5ODQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBpcHY2X2Noa19ycGxfc3JoX2xvb3AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAtIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoLCBleHBvcnRlZCBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uIGNvZGUuIEEgcXVpY2sgY2hlY2sgb2YgYGthbGxzeW1zYCBjb25maXJtcyBpdCdzIG5vdCBzdGF0aWMuIEdvb2QuIEFsc28sIGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBhbHNvIHRoZXJlLCBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycy4gV2UndmUgYWxyZWFkeSBncmVwcGVkIHRvIGZpbmQgaXRzIGNhbGxlcnM6IGJlc2lkZXMgYGlwdjZfcnBsX3NyaF9yY3ZgLCB3ZSBoYXZlIGBycGxfdmFsaWRhdGVfc3JoYC5cblxuTm93LCBsZXQncyByZWZlciB0byBTZWN0aW9uIDQuIFdlIHdhbnQgdG8gYmUgc3BlY2lmaWMgaGVyZS4gV2Ugc2hvdWxkIE5PVCBsaXN0IHRoZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gV2UgbXVzdCBmb2N1cyBvdXIgdGFyZ2V0cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBBUEkgZW50cnlwb2ludHMsIGNvcnJlY3Q/XG5cblJpZ2h0LiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAqaXMqIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbi4gSXQncyB0aGUgbG9vcCBkZXRlY3Rpb24uIFRoZSBwYWNrZXQgcmVjZWl2ZSBoYW5kbGVyIGZvciBSUEwgU1JILCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGNhbGxzIGl0LiBTaW1pbGFybHksIGBycGxfdmFsaWRhdGVfc3JoYCB3aGljaCBpcyBwYXJ0IG9mIHRoZSByb3V0ZSB2YWxpZGF0aW9uIGxvZ2ljLCBpcyBhbHNvIGEgY2FsbGVyLCBhbmQgdGhhdCdzIGNhbGxlZCBieSBgcnBsX2J1aWxkX3N0YXRlYCBmcm9tIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gc2lkZS4gUGVyZmVjdC5cblxuVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBgSVBWNmAgaXMgb2J2aW91c2x5IG5lZWRlZCwgYXMgYXJlIGBhZGRyY29uZi5jYCBhbmQgYGV4dGhkcnMuY2AuIEFsc28sIGBJUFY2X1JQTF9MV1RVTk5FTGAgZW5hYmxlcyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgYHJwbF9pcHR1bm5lbC5jYCwgc28gdGhhdCdzIGFsc28gbmVlZGVkLlxuXG5TbywgdGhlIHJhdGlvbmFsZTogdGhlIHBhdGNoIGlzIGZpeGluZyBsb29wIGRldGVjdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmb3IgUlBMIFNSSHMsIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gd2hlcmUgbG9jYWwgYWRkcmVzc2VzIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3Qgb25lIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGUgZnVuY3Rpb24gaXMgY3JpdGljYWwgYmVjYXVzZSBpdCdzIHBhcnQgb2YgdGhlIElQdjYgY29yZSwgYW5kIGlzIHJlYWNoYWJsZSBib3RoIHZpYSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gaW52YWxpZCByb3V0ZXMgb3IgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5UaGlzIGFsbCBzZWVtcyBzb2xpZC4gV2UgYXJlIGdvb2QgdG8gZ28sIGFsbCBvZiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gaXMgdGhlcmUuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDI1LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjY4Njg0NDU0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTk3Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JQTF9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiLFxuICAgIFwiaXB2Nl9ycGxfc3JoX3JjdlwiLFxuICAgIFwicnBsX3ZhbGlkYXRlX3NyaFwiLFxuICAgIFwicnBsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVxcdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldGVjdGlvbiBsb2dpYyBpbiBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUlBMIFNSSCAoaXB2Nl9ycGxfc3JoX3JjdikgYW5kIHZpYSBuZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgKHJwbF9idWlsZF9zdGF0ZSAtXFx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjc2ODQ0OTgzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDkwNTI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToyMC43Njg5NDE5MjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjQ0ODU1NjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKClgIChgbmV0L2lwdjYvYWRkcmNvbmYuY2ApIHVzZWQgdG8gdmFsaWRhdGUgSVB2NiBSUEwgU2VnbWVudCBSb3V0aW5nIEhlYWRlcnMgYWdhaW5zdCByb3V0aW5nIGxvb3BzIGludm9sdmluZyBsb2NhbCBhZGRyZXNzZXMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBgaWYgKGZvdW5kIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCB0byBgaWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXFxuXFxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggOWQ4OWJlN2UwNTQ0Yi4uZjY3OGZiN2ZhNTc0YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC00NjIxLDcgKzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChoYXNoX2ZvdW5kKSB7XG4tXHRcdFx0aWYgKGZvdW5kIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpIHtcbitcdFx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuIFx0XHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTgwLDYgKzgwLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0cmV1c2Vwb3J0X2FkZHJfYW55LnNoIFxcXG4gXHRyb3V0ZV9oaW50LnNoIFxcXG4gXHRyb3V0ZV9sb2NhbG5ldC5zaCBcXFxuK1x0cnBsX3NyaF9sb29wLnNoIFxcXG4gXHRycHNfZGVmYXVsdF9tYXNrLnNoIFxcXG4gXHRydG5ldGxpbmsucHkgXFxcbiBcdHJ0bmV0bGluay5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTJlOTk5MWQ3ODlkNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaFxuQEAgLTAsMCArMSwzOCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuK3NvdXJjZSBsaWIuc2hcbitcbitjbGVhbnVwKClcbit7XG4rXHRjbGVhbnVwX25zIFwiJE5TXCJcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbityZXF1aXJlX2NvbW1hbmQgaXBcbitzZXR1cF9ucyBOUyB8fCBleGl0ICQ/XG4rXG4raXAgLW4gXCIkTlNcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODoxOjoxLzEyOCBkZXYgbG8gbm9kYWRcbitpcCAtbiBcIiROU1wiIC02IGFkZHJlc3MgYWRkIDIwMDE6ZGI4OjM6OjEvMTI4IGRldiBsbyBub2RhZFxuK1xuK2lmICEgaXAgLW4gXCIkTlNcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTA6Oi82NCBcXFxuK1x0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6NDo6MSBkZXYgbG8gMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IFJQTCBsaWdodHdlaWdodCB0dW5uZWwgc3VwcG9ydCBub3QgYXZhaWxhYmxlXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rUkVUPTBcbitpcCAtbiBcIiROU1wiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMTo6LzY0IFxcXG4rXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXG4rY2hlY2tfZXJyICQ/IFwiQWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgcmVqZWN0ZWRcIlxuK2xvZ190ZXN0IFwiUlBMIGFjY2VwdHMgYWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzXCJcbitcbitSRVQ9MFxuK2lwIC1uIFwiJE5TXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEyOjovNjQgXFxcbitcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxuK1x0Mlx1MDAzZS9kZXYvbnVsbFxuK2NoZWNrX2ZhaWwgJD8gXCJTZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgYWNjZXB0ZWRcIlxuK2xvZ190ZXN0IFwiUlBMIHJlamVjdHMgc2VwYXJhdGVkIGxvY2FsIGFkZHJlc3Nlc1wiXG4rXG4rZXhpdCAkRVhJVF9TVEFUVVNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjc2ODk0Mjc0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjE3NjMwNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJUHY2IE5ldHdvcmsgUGVyZm9ybWFuY2UgRW5oYW5jZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgcGF0Y2ggdG91Y2hpbmcgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGNvZGUgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNoZWNrIGZvciBsb29wcyBpbiBSUEwvU1JIIHBhY2tldHMuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgSXQncyBtb3ZpbmcgZnJvbSBgZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAgdG8ganVzdCBgZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAuIEhtbSwgc28gdGhlIG9yaWdpbmFsIGxvZ2ljIHNlZW1lZCB0byBjYXJlIGFib3V0IGhvdyBtYW55IHRpbWVzIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uIHdhcyBtZXQuIE5vdywgdGhlIGNvbmRpdGlvbiBzZWVtcyB0byBiZSBzYXRpc2ZpZWQgYXMgbG9uZyBhcyBpdCdzIGJlZW4gZm91bmQgYXQgYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBmb3VuZGAgYW5kIGBzZXBhcmF0ZWRgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuICBBcmUgdGhleSBjb3VudGVycywgZmxhZ3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWVudHMgd2lsbCBiZSBjcnVjaWFsIGhlcmUuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBzaWduaWZpY2FudCBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgY2FyZWZ1bGx5OyB3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yPyBXaGF0IGVkZ2UgY2FzZXMgZG9lcyB0aGlzIG5ldyBsb2dpYyBhZGRyZXNzPyBcblxuQW5kIHRoZSBhZGRlZCBzZWxmdGVzdC4uLiB0aGF0J3MgYSBnb29kIHNpZ24uICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hgIHNjcmlwdCBzdWdnZXN0cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UuICBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHJldmlldyBhZnRlciBJJ3ZlIGRldmVsb3BlZCBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHJ1biB0aGlzIGFuZCBsb29rIGNsb3NlbHkgYXQgdGhlIHJlc3VsdHMuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgY2hhbmdlIHJlbGF0ZWQgdG8gbmV0d29yayBzdGFiaWxpdHkgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjb3JyZWN0IGFuZCBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjUuMzg2NTc2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYwMDpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuNDYwMTpcXHR7XFxuNDYwMjpcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XFxuNDYwMzpcXHRcXHRpbnQgaSwgcmV0ID0gMCwgZm91bmQgPSAwO1xcbjQ2MDQ6XFx0XFx0c3RydWN0IGluZXQ2X2lmYWRkciAqaWZwO1xcbjQ2MDU6XFx0XFx0Ym9vbCBzZXBhcmF0ZWQgPSBmYWxzZTtcXG40NjA2OlxcdFxcdHVuc2lnbmVkIGludCBoYXNoO1xcbjQ2MDc6XFx0XFx0Ym9vbCBoYXNoX2ZvdW5kO1xcbjQ2MDg6XFx0XFxuNDYwOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDYxMDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNlZ3M7IGkrKykge1xcbjQ2MTE6XFx0XFx0XFx0YWRkciA9IFxcdTAwMjZzZWdzW2ldO1xcbjQ2MTI6XFx0XFx0XFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xcbjQ2MTM6XFx0XFxuNDYxNDpcXHRcXHRcXHRoYXNoX2ZvdW5kID0gZmFsc2U7XFxuNDYxNTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZwLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xcbjQ2MTY6XFx0XFxuNDYxNzpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZpZnAtXFx1MDAzZWFkZHIsIGFkZHIpKSB7XFxuNDYxODpcXHRcXHRcXHRcXHRcXHRoYXNoX2ZvdW5kID0gdHJ1ZTtcXG40NjE5OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2MjA6XFx0XFx0XFx0XFx0fVxcbjQ2MjE6XFx0XFx0XFx0fVxcbjQ2MjI6XFx0XFxuNDYyMzpcXHRcXHRcXHRpZiAoaGFzaF9mb3VuZCkge1xcbjQ2MjQ6XFx0XFx0XFx0XFx0aWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZCkge1xcbjQ2MjU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gMTtcXG40NjI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2Mjc6XFx0XFx0XFx0XFx0fVxcbjQ2Mjg6XFx0XFxuNDYyOTpcXHRcXHRcXHRcXHRzZXBhcmF0ZWQgPSBmYWxzZTtcXG40NjMwOlxcdFxcdFxcdFxcdGZvdW5kKys7XFxuNDYzMTpcXHRcXHRcXHR9IGVsc2Uge1xcbjQ2MzI6XFx0XFx0XFx0XFx0c2VwYXJhdGVkID0gdHJ1ZTtcXG40NjMzOlxcdFxcdFxcdH1cXG40NjM0OlxcdFxcdH1cXG40NjM1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ2MzY6XFx0XFxuNDYzNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjQ2Mzg6XFx0fVxcbjQ2Mzk6XFx0XFxuNDY0MDpcXHQvKlxcbjQ2NDE6XFx0ICpcXHRQZXJpb2RpYyBhZGRyZXNzIHN0YXR1cyB2ZXJpZmljYXRpb25cXG40NjQyOlxcdCAqL1xcbjQ2NDM6XFx0XFxuNDY0NDpcXHRzdGF0aWMgdm9pZCBhZGRyY29uZl92ZXJpZnlfcnRubChzdHJ1Y3QgbmV0ICpuZXQpXFxuNDY0NTpcXHR7XFxuNDY0NjpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdywgbmV4dCwgbmV4dF9zZWMsIG5leHRfc2NoZWQ7XFxuNDY0NzpcXHRcXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XFxuNDY0ODpcXHRcXHRpbnQgaTtcXG40NjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToyNS4zODcwNDU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjEzNjgxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIEhlYWRlciBMb29wIERldGVjdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBsb29wIGRldGVjdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LXBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgYW5kIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgbG9vcCBkZXRlY3Rpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJZGVudGlmeWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBzY2VuYXJpb3Mgd2hlcmUgcG90ZW50aWFsIHJvdXRpbmcgbG9vcHMgYXJlIGNvbnNpZGVyZWQsIGFuZCBob3cgYWdncmVzc2l2ZWx5LCBvciBkZWZlbnNpdmVseSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1lZC4gSSB3aWxsIHN0YXJ0IGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIHRvIHRyYXZlcnNlIHRoZSBjYWxsIGdyYXBoIGFuZCBpc29sYXRlIHRoZSBwZXJ0aW5lbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjguMDAwNzMxNTI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3MTk3MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTEyMz1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTI1LVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTI2OmludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXFx0XFx0XFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDU3MD1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NTk4LSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDU5OTppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDgxPXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTU2OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTcwOlxcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXFx1MDAzZXJwbF9zZWdhZGRyLCBuICsgMSk7XFxubmV0L2lwdjYvZXh0aGRycy5jLTU3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zOT1zdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NTU6XFx0ZXJyID0gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKG5ldCwgc3JoLVxcdTAwM2VycGxfc2VnYWRkcixcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy01Ni1cXHRcXHRcXHRcXHQgICAgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjkuNjc3OTM3MDcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1Mzk1Mzk3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIGxvb3BzIHdpdGhpbiBhbiBSUEwgU1JILiBUaGUgY3VycmVudCBsb2dpYywgYXMgaXQgc3RhbmRzLCBoYXMgYSBmbGF3OiBpdCBpbmNvcnJlY3RseSBpZGVudGlmaWVzIGxvb3BzLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHdhcyBvbmx5IGZsYWdnaW5nIGEgbG9vcCBpZiBpdCBlbmNvdW50ZXJlZCAqbW9yZSB0aGFuIG9uZSogbG9jYWwgYWRkcmVzcyBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcy4gVGhpcyBpcyBpbmNvcnJlY3QhIEEgbG9vcCBleGlzdHMgaWYgKmFueSogbG9jYWwgYWRkcmVzcyBpcyBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcyBhbmQgdGhlbiBmb2xsb3dlZCBieSAqYW5vdGhlciogbG9jYWwgYWRkcmVzcywgZXZlbiBpZiB0aGF0J3MgdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UuIFNvLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBmbGF3ZWQgY29uZGl0aW9uIGJ5IGNoYW5naW5nIHRoZSBsb2dpYyBmcm9tIGBmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkYCB0byBqdXN0IGBmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkYC4gVGhpcyBlbnN1cmVzIHRoYXQgYSBsb29wIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGluIHRoZSBzaW5nbGUgY2FzZSBhcyB3ZWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIGZpeCBpbnRyb2R1Y2UgYW55IHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2sgYXJlIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm9wZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW1wbGUgaW50ZWdlciAoMCBvciAxKS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGVha2VkLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIHZhcmlhYmxlcyBgZm91bmRgLCBgc2VwYXJhdGVkYCwgYW5kIGBoYXNoX2ZvdW5kYCBhcmUgYWxsIGluaXRpYWxpemVkIGxvY2FsbHkuIFNwZWNpZmljYWxseSwgYGlgIGFuZCBgcmV0YCBhcmUgaW5pdGlhbGl6ZWQuIEFuZCBgZm91bmRgIGlzIGluaXRpYWxpemVkIHRvIDAuIGBzZXBhcmF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgaGFzaF9mb3VuZGAgaXMgYXNzaWduZWQgYSB2YWx1ZSBvZiBgZmFsc2VgIChpbiB0aGUgY29kZSksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbiBwbGF5LlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXM6KiogVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMgb2YgYW55IGRhdGEgc3RydWN0dXJlcyBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrczoqKiBUaGlzIHBhdGNoICpzdHJlbmd0aGVucyogdGhlIGJvdW5kcy1jaGVja2luZyBsb2dpYywgbm90IHdlYWtlbnMgaXQuIFNvLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5IGFjY2Vzc2luZyBvdXQtb2YtYm91bmRzIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBmaXggbWFrZXMgdGhlIGNoZWNrIHN0cmljdGVyLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZml4IGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZywgYSBsb2dpYyBlcnJvci4gV2hpbGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgd29ydGggbWVudGlvbmluZyBnZW5lcmFsbHksIHRoaXMgZml4IHdvdWxkbid0IGludHJvZHVjZSBhbnkgS0FTQU4gaXNzdWVzIGVpdGhlciAobGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgYWxzbyB3cml0ZSB1cCBhIGNsZWFyIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIGFuZCBLTVNBTjogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAgdGhhdCB3YXMgbm90IGRldGVjdGluZyBsb29wcyBpZiBgZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAgYW5kIGNvbnRyYXN0aW5nIHRoYXQgdGhlIGZpeCBkb2VzIG5vdCBpbnRyb2R1Y2UgS01TQU4gaXNzdWVzIGJlY2F1c2Ugb25seSBsb2NhbCB2YXJpYWJsZXMgYXJlIHVzZWQsIGFuZCB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgY29waWVzIG9mIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgc2hvdWxkIGVtcGhhc2l6ZSB0aGF0IHRoZSBmaXggZG9lcyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTcsIk91dHB1dFRva2VucyI6MjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjM3LjIxNzQ4MDQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKClgIChgbmV0L2lwdjYvYWRkcmNvbmYuY2ApIHVzZWQgdG8gdmFsaWRhdGUgSVB2NiBSUEwgU2VnbWVudCBSb3V0aW5nIEhlYWRlcnMgYWdhaW5zdCByb3V0aW5nIGxvb3BzIGludm9sdmluZyBsb2NhbCBhZGRyZXNzZXMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBgaWYgKGZvdW5kIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCB0byBgaWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXFxuXFxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKWAsIGVuc3VyaW5nIHRoYXQgYSBzaW5nbGUgcHJldmlvdXNseSBzZWVuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgbm9uLWxvY2FsIGFkZHJlc3MgYW5kIHRoZW4gYW5vdGhlciBsb2NhbCBhZGRyZXNzIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIGEgbG9vcC5cXG5cXG5LTVNBTiBkZXRlY3RzIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSkuIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhlIGNoYW5nZWQgbG9naWMgKGBmb3VuZGAsIGBzZXBhcmF0ZWRgLCBgaGFzaF9mb3VuZGAsIGByZXRgKSBhcmUgbG9jYWwgc2NhbGFycyBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwL2ZhbHNlIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFRodXMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 23:16:56 +0000 UTC FinishedAt: 2026-09-11 23:19:38 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_RPL_LWTUNNEL" ], "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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_RPL_LWTUNNEL" ], "series_id": "fb6f198b-b7a2-4ce7-a8e0-d29122926759" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_chk_rpl_srh_loop", "ipv6_rpl_srh_rcv", "rpl_validate_srh", "rpl_build_state" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9SUExfTFdUVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0OywKICAgICYjMzQ7aXB2Nl9ycGxfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtycGxfdmFsaWRhdGVfc3JoJiMzNDssCiAgICAmIzM0O3JwbF9idWlsZF9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBjb25kaXRpb24gaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpYCAoYG5ldC9pcHY2L2FkZHJjb25mLmNgKSB1c2VkIHRvIHZhbGlkYXRlIElQdjYgUlBMIFNlZ21lbnQgUm91dGluZyBIZWFkZXJzIGFnYWluc3Qgcm91dGluZyBsb29wcyBpbnZvbHZpbmcgbG9jYWwgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgYGlmIChmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKWAgdG8gYGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKWAsIGVuc3VyaW5nIHRoYXQgYSBzaW5nbGUgcHJldmlvdXNseSBzZWVuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgbm9uLWxvY2FsIGFkZHJlc3MgYW5kIHRoZW4gYW5vdGhlciBsb2NhbCBhZGRyZXNzIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIGEgbG9vcC5cblxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IDlkODliZTdlMDU0NGIuLmY2NzhmYjdmYTU3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtNDYyMSw3ICYjNDM7NDYyMSw3IEBAIGludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXG4gXHRcdH1cbiBcbiBcdFx0aWYgKGhhc2hfZm91bmQpIHtcbi1cdFx0XHRpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuJiM0MztcdFx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuIFx0XHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdHJldXNlcG9ydF9hZGRyX2FueS5zaCBcXFxuIFx0cm91dGVfaGludC5zaCBcXFxuIFx0cm91dGVfbG9jYWxuZXQuc2ggXFxcbiYjNDM7XHRycGxfc3JoX2xvb3Auc2ggXFxcbiBcdHJwc19kZWZhdWx0X21hc2suc2ggXFxcbiBcdHJ0bmV0bGluay5weSBcXFxuIFx0cnRuZXRsaW5rLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hMmU5OTkxZDc4OWQ2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXG5AQCAtMCwwICYjNDM7MSwzOCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0Mztzb3VyY2UgbGliLnNoXG4mIzQzO1xuJiM0MztjbGVhbnVwKClcbiYjNDM7e1xuJiM0MztcdGNsZWFudXBfbnMgXCYjMzQ7JE5TXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3RyYXAgY2xlYW51cCBFWElUXG4mIzQzO1xuJiM0MztyZXF1aXJlX2NvbW1hbmQgaXBcbiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkP1xuJiM0MztcbiYjNDM7aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IC02IGFkZHJlc3MgYWRkIDIwMDE6ZGI4OjE6OjEvMTI4IGRldiBsbyBub2RhZFxuJiM0MztpcCAtbiBcJiMzNDskTlNcJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6Mzo6MS8xMjggZGV2IGxvIG5vZGFkXG4mIzQzO1xuJiM0MztpZiAhIGlwIC1uIFwmIzM0OyROU1wmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTA6Oi82NCBcXFxuJiM0MztcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjQ6OjEgZGV2IGxvIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6IFJQTCBsaWdodHdlaWdodCB0dW5uZWwgc3VwcG9ydCBub3QgYXZhaWxhYmxlXCYjMzQ7XG4mIzQzO1x0ZXhpdCAka3NmdF9za2lwXG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztSRVQ9MFxuJiM0MztpcCAtbiBcJiMzNDskTlNcJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjExOjovNjQgXFxcbiYjNDM7XHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXG4mIzQzO2NoZWNrX2VyciAkPyBcJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZFwmIzM0O1xuJiM0Mztsb2dfdGVzdCBcJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXNcJiMzNDtcbiYjNDM7XG4mIzQzO1JFVD0wXG4mIzQzO2lwIC1uIFwmIzM0OyROU1wmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcXFxuJiM0MztcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxuJiM0MztcdDJcdTAwM2UvZGV2L251bGxcbiYjNDM7Y2hlY2tfZmFpbCAkPyBcJiMzNDtTZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgYWNjZXB0ZWRcJiMzNDtcbiYjNDM7bG9nX3Rlc3QgXCYjMzQ7UlBMIHJlamVjdHMgc2VwYXJhdGVkIGxvY2FsIGFkZHJlc3Nlc1wmIzM0O1xuJiM0MztcbiYjNDM7ZXhpdCAkRVhJVF9TVEFUVVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUlBMX0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9jaGtfcnBsX3NyaF9sb29wJiMzNDssCiAgICAmIzM0O2lwdjZfcnBsX3NyaF9yY3YmIzM0OywKICAgICYjMzQ7cnBsX3ZhbGlkYXRlX3NyaCYjMzQ7LAogICAgJiMzNDtycGxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQ2MjEsNyAmIzQzOzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLAogCQl9CiAKIAkJaWYgKGhhc2hfZm91bmQpIHsKLQkJCWlmIChmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKJiM0MzsJCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKIAkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCXJldXNlcG9ydF9hZGRyX2FueS5zaCBcCiAJcm91dGVfaGludC5zaCBcCiAJcm91dGVfbG9jYWxuZXQuc2ggXAomIzQzOwlycGxfc3JoX2xvb3Auc2ggXAogCXJwc19kZWZhdWx0X21hc2suc2ggXAogCXJ0bmV0bGluay5weSBcCiAJcnRuZXRsaW5rLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCkBAIC0wLDAgJiM0MzsxLDM4IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9ucyAmIzM0OyROUyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7cmVxdWlyZV9jb21tYW5kIGlwCiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkPwomIzQzOwomIzQzO2lwIC1uICYjMzQ7JE5TJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWQKJiM0MzsKJiM0MztpZiAhIGlwIC1uICYjMzQ7JE5TJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXAomIzQzOwllbmNhcCBycGwgc2VncyAyMDAxOmRiODo0OjoxIGRldiBsbyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGUmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8KJiM0MztjaGVja19lcnIgJD8gJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXMmIzM0OwomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcCiYjNDM7CTImZ3Q7L2Rldi9udWxsCiYjNDM7Y2hlY2tfZmFpbCAkPyAmIzM0O1NlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgcmVqZWN0cyBzZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzJiMzNDsKJiM0MzsKJiM0MztleGl0ICRFWElUX1NUQVRVUwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGludGVudCBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbiB3aXRoaW4gYGFkZHJjb25mLmNgLgoKVGhlIGRpZmYgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gdGhlIGxvb3BpbmcgYmVoYXZpb3Igd2l0aGluIHRoZSBmdW5jdGlvbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSBpZGVudGlmaWVkIHdoZW4gbXVsdGlwbGUgbG9vcHMgd2VyZSBkaXNjb3ZlcmVkIGFuZCBub3cgdGhlIGNvbmRpdGlvbiBgZm91bmQgJmd0OyAxYCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHNpbXBseSBgZm91bmRgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaWYgdGhpcyBpcyBhbiBvdXRyaWdodCBidWcgZml4IG9yIGEgYmVoYXZpb3IgY2hhbmdlLgoKR2l2ZW4gdGhlIGNoYW5nZSBpbnZvbHZlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uLiBMb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaGAgYW5kIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0ZXN0IGlzIGludGVncmF0ZWQgd2l0aCB0aGUgYE1ha2VmaWxlYC4gCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY2hhbmdlcyBsaW5lIGJ5IGxpbmUsIGNvbXBhcmluZyB0aGUgb3JpZ2luYWwgbG9naWMgd2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGFkZHJlc3Nlcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIOKAkyB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgYW5kIHdoYXQgZG9lcyBgc2VwYXJhdGVkYCBzaWduaWZ5PyBUaGUgdGVzdCBjYXNlcyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmQgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRob3NlIHNoZWxsIHNjcmlwdHMgY2FyZWZ1bGx5IHRvIHNlZSBleGFjdGx5IHdoYXQgc2NlbmFyaW9zIGFyZSBiZWluZyBjb3ZlcmVkIGFuZCBob3cgdGhlIGNoYW5nZWQgY29uZGl0aW9uIGFmZmVjdHMgdGhlIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvYWRkcmNvbmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU5MDpcdCAqIGNoZWNraW5nIGlmIHRoZSBzZWdtZW50cyBjb250YWlucyBhbnkgb2YgYSBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cbjQ1OTE6XHQgKlxuNDU5MjpcdCAqIFF1b3RlOlxuNDU5MzpcdCAqXG40NTk0Olx0ICogVG8gZGV0ZWN0IGxvb3BzIGluIHRoZSBTUkgsIGEgcm91dGVyIE1VU1QgZGV0ZXJtaW5lIGlmIHRoZSBTUkhcbjQ1OTU6XHQgKiBpbmNsdWRlcyBtdWx0aXBsZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gYW55IGludGVyZmFjZSBvbiB0aGF0IHJvdXRlci5cbjQ1OTY6XHQgKiBJZiBzdWNoIGFkZHJlc3NlcyBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3RcbjQ1OTc6XHQgKiBvbmUgYWRkcmVzcyBub3QgYXNzaWduZWQgdG8gdGhhdCByb3V0ZXIuXG40NTk4Olx0ICovXG40NTk5Olx0aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcbjQ2MDA6XHRcdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyO1xuNDYwMzpcdFx0aW50IGksIHJldCA9IDAsIGZvdW5kID0gMDtcbjQ2MDQ6XHRcdHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDtcbjQ2MDU6XHRcdGJvb2wgc2VwYXJhdGVkID0gZmFsc2U7XG40NjA2Olx0XHR1bnNpZ25lZCBpbnQgaGFzaDtcbjQ2MDc6XHRcdGJvb2wgaGFzaF9mb3VuZDtcbjQ2MDg6XHRcbjQ2MDk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ2MTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zZWdzOyBpJiM0MzsmIzQzOykge1xuNDYxMTpcdFx0XHRhZGRyID0gXHUwMDI2c2Vnc1tpXTtcbjQ2MTI6XHRcdFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xuNDYxMzpcdFxuNDYxNDpcdFx0XHRoYXNoX2ZvdW5kID0gZmFsc2U7XG40NjE1Olx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xuNDYxNjpcdFxuNDYxNzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2aWZwLVx1MDAzZWFkZHIsIGFkZHIpKSB7XG40NjE4Olx0XHRcdFx0XHRoYXNoX2ZvdW5kID0gdHJ1ZTtcbjQ2MTk6XHRcdFx0XHRcdGJyZWFrO1xuNDYyMDpcdFx0XHRcdH1cbjQ2MjE6XHRcdFx0fVxuNDYyMjpcdFxuNDYyMzpcdFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuNDYyNDpcdFx0XHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG40NjI1Olx0XHRcdFx0XHRyZXQgPSAxO1xuNDYyNjpcdFx0XHRcdFx0YnJlYWs7XG40NjI3Olx0XHRcdFx0fVxuNDYyODpcdFxuNDYyOTpcdFx0XHRcdHNlcGFyYXRlZCA9IGZhbHNlO1xuNDYzMDpcdFx0XHRcdGZvdW5kJiM0MzsmIzQzOztcbjQ2MzE6XHRcdFx0fSBlbHNlIHtcbjQ2MzI6XHRcdFx0XHRzZXBhcmF0ZWQgPSB0cnVlO1xuNDYzMzpcdFx0XHR9XG40NjM0Olx0XHR9XG40NjM1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ2MzY6XHRcbjQ2Mzc6XHRcdHJldHVybiByZXQ7XG40NjM4Olx0fVxuNDYzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4OTEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIEhlYWRlciBMb29wIERldGVjdGlvbiBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgbG9vcCBkZXRlY3Rpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LXBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgYW5kIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgbG9vcCBkZXRlY3Rpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJZGVudGlmeWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBzY2VuYXJpb3Mgd2hlcmUgcG90ZW50aWFsIHJvdXRpbmcgbG9vcHMgYXJlIGNvbnNpZGVyZWQsIGFuZCBob3cgYWdncmVzc2l2ZWx5LCBvciBkZWZlbnNpdmVseSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1lZC4gSSB3aWxsIHN0YXJ0IGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIHRvIHRyYXZlcnNlIHRoZSBjYWxsIGdyYXBoIGFuZCBpc29sYXRlIHRoZSBwZXJ0aW5lbnQgY29kZSBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xMjM9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjUtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjEyNjppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXHRcdFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ1NzA9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ1OTgtICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ1OTk6aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2Vncyxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTY5LVxubmV0L2lwdjYvZXh0aGRycy5jOjU3MDpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXHUwMDNlcnBsX3NlZ2FkZHIsIG4gJiM0MzsgMSk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTcxLVx0aWYgKGVycikge1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM5PXN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo1NTpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIHNyaC1cdTAwM2VycGxfc2VnYWRkcixcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTU2LVx0XHRcdFx0ICAgIHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjQ5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSUEwgU1JIIExvb3AgRGV0ZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgY2FsbGVkIGluIHR3byBrZXkgbG9jYXRpb25zOiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXB2Nl9ycGxfc3JoX3JjdmAsIHdoaWNoIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgUlBMIFNSSCBleHRlbnNpb24gaGVhZGVycy4gVGhhdCBtYWtlcyBzZW5zZTsgbG9vcCBkZXRlY3Rpb24gaXMgY3JpdGljYWwgdGhlcmUuIFRoZSBzZWNvbmQgcGxhY2UgaXMgaW4gYG5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jYCwgd2l0aGluIGBycGxfdmFsaWRhdGVfc3JoYCwgd2hpY2ggaGFzIHRvIGRvIHdpdGggdmFsaWRhdGluZyBTUkhzIHdoZW4gY29uZmlndXJpbmcgcm91dGVzIHZpYSBuZXRsaW5rICh1c2luZyBgUlRNX05FV1JPVVRFYCkuIFNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgcm91dGUgY29uZmlndXJhdGlvbiBpbnZvbHZpbmcgUlBMIFNSSCBoZWFkZXJzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBjb250ZXh0LiBUaGlzIHVzdWFsbHkgbWVhbnMgY2hlY2tpbmcgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBuZWVkIHRvIGxvb2sgZm9yIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGl0c2VsZiwgdG8gc2VlIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGlzYWJsZWQgc29tZWhvdy4gQnV0IEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgdG8gY2hlY2sgZm9yIGFueSByZWxldmFudCBnbG9iYWwgSVB2NiBhZGRyZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW5kIG9mIGNvdXJzZSBJJiMzOTtsbCByZXZpc2l0IGBpcHY2X3JwbF9zcmhfcmN2YCBhbmQgYHJwbF9pcHR1bm5lbC5jYCBpbiBLY29uZmlnLCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncyBpbmZsdWVuY2UgaG93IGxvb3AgZGV0ZWN0aW9uIGlzIGhhbmRsZWQgaW4gdGhvc2UgYXJlYXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhYmlsaXR5IG9mIHRoaXMgbG9vcCBkZXRlY3Rpb24gbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwbF9pcHR1bm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICYjNDM7PSBzZWc2X2htYWMub1xubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgJiM0Mzs9IHJwbF9pcHR1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICYjNDM7PSBpb2FtNl9pcHR1bm5lbC5vXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNi1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjc6I2luY2x1ZGUgXHUwMDNjbGludXgvcnBsX2lwdHVubmVsLmhcdTAwM2Vcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgtXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxNTpzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwIHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE2LVx0REVDTEFSRV9GTEVYX0FSUkFZKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIsIHNyaCk7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MTk9c3RydWN0IHJwbF9sd3Qge1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjAtXHRzdHJ1Y3QgZHN0X2NhY2hlIGNhY2hlO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MjE6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwIHR1bmluZm87XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0yMi19O1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHJwbF9sd3QgKnJwbF9sd3RfbHd0dW5uZWwoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjgtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoyOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKlxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzAtcnBsX2VuY2FwX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJwbF9pcHR1bm5lbF9wb2xpY3lbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2LVx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODEtXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBSUExfSVBUVU5ORUxfTUFYLCBubGEsXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4MjpcdFx0XHQgICAgICAgcnBsX2lwdHVubmVsX3BvbGljeSwgZXh0YWNrKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgzLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0xOTA9c3RhdGljIGludCBycGxfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBycGxfbHd0ICpybHd0LFxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE5My1cdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjE5NDpcdHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKnRpbmZvO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTk1LVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTMyND1zdGF0aWMgaW50IG5sYV9wdXRfcnBsX3NyaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjU6XHRcdFx0ICAgc3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbylcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMyNi17XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjc6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpkYXRhO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzI4LVx0c3RydWN0IG5sYXR0ciAqbmxhO1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IHJwbF9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDUte1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzQ2Olx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHJwbF9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzU0PXN0YXRpYyBpbnQgcnBsX2VuY2FwX25sc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU1LXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1NjpcdHN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAgKnR1bmluZm8gPSBycGxfZW5jYXBfbHd0dW5uZWwobHd0c3RhdGUpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU3LVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM2MT1zdGF0aWMgaW50IHJwbF9lbmNhcF9jbXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjIte1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzYzOlx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYV9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjQ6XHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2NS1cdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjU3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBJUHY2IFJQTCB3aXRoIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYGV4dGhkcnMuY2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBgQ09ORklHX0lQVjZfUlBMX1NSSGAgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24gb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCB0aGF0IG1pZ2h0IGhhbmRsZSBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zLiBJIHJlY2FsbCB0aGF0IGZpbGUgY29udGFpbmluZyB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIGNvZGUsIHNvIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gQSBxdWljayBnbGFuY2UgYXQgdGhlIGxpbmUgbnVtYmVycyB3aXRoaW4gdGhhdCBmaWxlIHN1Z2dlc3RzIGxpbmUgNDgxIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHNwZWNpZmljIGludmVzdGlnYXRpb24uIEkgd2lsbCBzdGFydCB0aGVyZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB1c2UgbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBrZXJuZWwgY29kZSB0byBldmFsdWF0ZSB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgZm9yIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzU6XHRcbiA0NzY6XHRcdGRzdF9pbnB1dChza2IpO1xuIDQ3NzpcdFxuIDQ3ODpcdFx0cmV0dXJuIC0xO1xuIDQ3OTpcdH1cbiA0ODA6XHRcbiA0ODE6XHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiA0ODI6XHR7XG4gNDgzOlx0XHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcbiA0ODQ6XHRcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcbiA0ODU6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVx1MDAzZWRldik7XG4gNDg2Olx0XHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIDQ4NzpcdFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIDQ4ODpcdFx0dW5zaWduZWQgY2hhciAqYnVmO1xuIDQ4OTpcdFx0aW50IGFjY2VwdF9ycGxfc2VnO1xuIDQ5MDpcdFx0aW50IGksIGVycjtcbiA0OTE6XHRcdHU2NCBuID0gMDtcbiA0OTI6XHRcdHUzMiByO1xuIDQ5MzpcdFxuIDQ5NDpcdFx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG4gNDk1Olx0XHRcdFx0ICAgICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XG4gNDk2Olx0XHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XG4gNDk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQ5ODpcdFx0XHRyZXR1cm4gLTE7XG4gNDk5Olx0XHR9XG4gNTAwOlx0XG4gNTAxOlx0bG9vcGVkX2JhY2s6XG4gNTAyOlx0XHRoZHIgPSAoc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gNTAzOlx0XG4gNTA0Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDUwNTpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2KSB7XG4gNTA2Olx0XHRcdFx0aW50IG9mZnNldCA9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDUwNzpcdFxuIDUwODpcdFx0XHRcdHNrYl9wb3N0cHVsbF9yY3N1bShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLFxuIDUwOTpcdFx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xuIDUxMDpcdFx0XHRcdHNrYl9wdWxsKHNrYiwgb2Zmc2V0KTtcbiA1MTE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxuIDUxMjpcdFx0XHRcdFx0XHQgICBvZmZzZXQpO1xuIDUxMzpcdFxuIDUxNDpcdFx0XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYxCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgUlBMIEtjb25maWcgT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIFJQTCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSSBrbm93IEkmIzM5O3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgdGhlbSBpbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgSVB2Ni1yZWxhdGVkIHNldHRpbmdzIGFyZSBnZW5lcmFsbHkgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjb250cm9sbGFibGUgYXQgY29tcGlsZSB0aW1lIHdpdGggcmVzcGVjdCB0byBSUEwgLSAgYXJlIHRoZXJlIGRpZmZlcmVudCBSUEwgaW1wbGVtZW50YXRpb25zLCBmZWF0dXJlcywgb3Igb3B0aW1pemF0aW9uIG9wdGlvbnMgSSBjYW4gc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBuZWVkIHR3ZWFraW5nIGZvciBteSB1c2UgY2FzZT8gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcmVsZXZhbnQgcGFyYW1ldGVycyBJIHNob3VsZCBiZSBhd2FyZSBvZiBmb3IgY3VzdG9taXppbmcgdGhlIFJQTCBiZWhhdmlvciB3aXRoaW4gbXkgdGFyZ2V0IHN5c3RlbS4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBvcHRpb25zIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgUlBMIHN1cHBvcnQgZW50aXJlbHksIHBlcmhhcHMgZGlmZmVyZW50IFJQTCBtb2Rlcywgb3IgcG9zc2libHkgZXZlbiBmbGFncyByZWxhdGVkIHRvIHNwZWNpZmljIHJvdXRpbmcgbWV0cmljcyBvciBwYXRoIHNlbGVjdGlvbiBjcml0ZXJpYS4gSXTigJlzIGFsbCBpbiB0aGUgYEtjb25maWdgIGFmdGVyIGFsbC4gVGltZSB0byBnZXQgdGhlIGNvbXBpbGVyIGJ1aWxkaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSUEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTMxMj1jb25maWcgSVBWNl9TRUc2X0JQRlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjMxODpcdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnLTMxOS1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9pcHY2L0tjb25maWctMzIyLVx0aGVscFxubmV0L2lwdjYvS2NvbmZpZzozMjM6XHQgIFN1cHBvcnQgZm9yIFJGQzY1NTQgUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciB1c2luZyB0aGUgbGlnaHR3ZWlnaHRcbm5ldC9pcHY2L0tjb25maWctMzI0LVx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0yNj1pcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI3OmlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjgtaXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0NS1cdGFycmF5W0RFVkNPTkZfTkRJU0NfVENMQVNTXSA9IFJFQURfT05DRShjbmYtXHUwMDNlbmRpc2NfdGNsYXNzKTtcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTc0NjpcdGFycmF5W0RFVkNPTkZfUlBMX1NFR19FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXHUwMDNlcnBsX3NlZ19lbmFibGVkKTtcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTc0Ny1cdGFycmF5W0RFVkNPTkZfSU9BTTZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZWlvYW02X2VuYWJsZWQpO1xuLS1cbm5ldC9pcHY2L2ljbXAuYz00MTk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wNl9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pY21wLmMtNDMwLVxubmV0L2lwdjYvaWNtcC5jOjQzMTpcdFx0LyogVGhlIGRlc3RpbmF0aW9uIGNvdWxkIGJlIGFuIGV4dGVybmFsIElQIGluIEV4dCBIZHIgKFNSdjYsIFJQTCwgZXRjLiksXG5uZXQvaXB2Ni9pY21wLmMtNDMyLVx0XHQgKiBhbmQgaXA2X251bGxfZW50cnkgY291bGQgYmUgc2V0IHRvIHNrYiBpZiBubyByb3V0ZSBpcyBmb3VuZC5cbi0tXG5uZXQvaXB2Ni9ycGwuYy0xMC0jZGVmaW5lIElQVjZfUEZYVEFJTF9MRU4oeCkgKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIC0gKHgpKVxubmV0L2lwdjYvcnBsLmM6MTE6I2RlZmluZSBJUFY2X1JQTF9CRVNUX0FERFJfQ09NUFJFU1NJT04gMTVcbm5ldC9pcHY2L3JwbC5jLTEyLVxuLS1cbm5ldC9pcHY2L3JwbC5jPTU2PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJpKGNvbnN0IHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmluaGRyLFxuLS1cbm5ldC9pcHY2L3JwbC5jLTcwLVxubmV0L2lwdjYvcnBsLmM6NzE6XHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xubmV0L2lwdjYvcnBsLmMtNzItfVxuLS1cbm5ldC9pcHY2L3JwbC5jPTc0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4tLVxubmV0L2lwdjYvcnBsLmMtODMtXG5uZXQvaXB2Ni9ycGwuYzo4NDpcdHJldHVybiBJUFY2X1JQTF9CRVNUX0FERFJfQ09NUFJFU1NJT047XG5uZXQvaXB2Ni9ycGwuYy04NS19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzA9cnBsX2VuY2FwX2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJwbF9pcHR1bm5lbF9wb2xpY3lbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2Olx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNy19O1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTY3PXN0YXRpYyBpbnQgcnBsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTcxLXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjcyOlx0c3RydWN0IG5sYXR0ciAqdGJbUlBMX0lQVFVOTkVMX01BWCAmIzQzOyAxXTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTczLVx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXd0cztcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04MC1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjgxOlx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgUlBMX0lQVFVOTkVMX01BWCwgbmxhLFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODItXHRcdFx0ICAgICAgIHJwbF9pcHR1bm5lbF9wb2xpY3ksIGV4dGFjayk7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODUtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4NjpcdGlmICghdGJbUlBMX0lQVFVOTkVMX1NSSF0pXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04OC1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjg5Olx0c3JoID0gbmxhX2RhdGEodGJbUlBMX0lQVFVOTkVMX1NSSF0pO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6OTA6XHRzcmhfbGVuID0gbmxhX2xlbih0YltSUExfSVBUVU5ORUxfU1JIXSk7XG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy05MS1cbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0xMTItXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxMTM6XHRuZXd0cy1cdTAwM2V0eXBlID0gTFdUVU5ORUxfRU5DQVBfUlBMO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTE0LVx0bmV3dHMtXHUwMDNlZmxhZ3MgfD0gTFdUVU5ORUxfU1RBVEVfSU5QVVRfUkVESVJFQ1Q7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMzAtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMzE6XHRsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cdTAwM2VzcmgpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzMyLVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM0Mz1zdGF0aWMgaW50IHJwbF9maWxsX2VuY2FwX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNDg6XHRpZiAobmxhX3B1dF9ycGxfc3JoKHNrYiwgUlBMX0lQVFVOTkVMX1NSSCwgdHVuaW5mbykpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDktXHRcdHJldHVybiAtRU1TR1NJWkU7XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzU0PXN0YXRpYyBpbnQgcnBsX2VuY2FwX25sc2l6ZShzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dHN0YXRlKVxuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM1Ny1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1ODpcdHJldHVybiBubGFfdG90YWxfc2l6ZShSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cdTAwM2VzcmgpKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM1OS19XG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzYxPXN0YXRpYyBpbnQgcnBsX2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjQtXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpiX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChiKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NTpcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM2Ni1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NzpcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVx1MDAzZXNyaCkpXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjgtXHRcdHJldHVybiAxO1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM4ND1pbnQgX19pbml0IHJwbF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6Mzg4Olx0ZXJyID0gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg5LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zOTEtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozOTI6XHRwcl9pbmZvKFwmIzM0O1JQTCBTZWdtZW50IFJvdXRpbmcgd2l0aCBJUHY2XFxuXCYjMzQ7KTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM5My1cbi0tXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz00MDA9dm9pZCBycGxfZXhpdCh2b2lkKVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNDAxLXtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjQwMjpcdGx3dHVubmVsX2VuY2FwX2RlbF9vcHMoXHUwMDI2cnBsX29wcywgTFdUVU5ORUxfRU5DQVBfUlBMKTtcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTQwMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBJUHY2IEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5jbHVzaW9uIG9mIHNwZWNpZmljIGZpbGVzLiBJIGtub3cgYGFkZHJjb25mLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkIOKAkyB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBJJiMzOTttIGN1cmlvdXMgYWJvdXQgYHJwbC5jYC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gVG8gZmlndXJlIGl0IG91dCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgcmVnYXJkaW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpdGhpbiB0aGUgSVB2NiBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwbFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMi1cdFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMzpcdFx0dWRwX29mZmxvYWQubyBzZWc2Lm8gZmliNl9ub3RpZmllci5vIHJwbC5vIGlvYW02Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTE0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJUHY2IFJQTCBEZWR1Y3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBvYmplY3QgZmlsZXM6IGBycGwub2AsIGBleHRoZHJzLm9gLCBhbmQgYGFkZHJjb25mLm9gLiBUaGV5JiMzOTtyZSBhbGwgbmVzdGVkIHdpdGhpbiB0aGUgYGlwdjYteWAgY29uZmlndXJhdGlvbiwgd2hpY2ggbWVhbnMgdGhleSYjMzk7cmUgYnVpbHQgYXV0b21hdGljYWxseSBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgdHVybmVkIG9uLiBNYWtlcyBzZW5zZS4gTm93LCBgcnBsX2lwdHVubmVsLm9gIHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS4gTGV0IG1lIGdvIG92ZXIgdG8gYG5ldC9pcHY2L0tjb25maWdgIHJlYWwgcXVpY2suLi4gWWVwLCBhcyBleHBlY3RlZCwgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgZGVwZW5kcyBkaXJlY3RseSBvbiBgSVBWNmAsIGFuZCB0aGF0IGNoZWNrcyBvdXQgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbi4KCk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoZSBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIGlmIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBycGxfaXB0dW5uZWwuY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCBsaW5lcyAzNS03MCBvZiB0aGF0IGZpbGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnBsX2lwdHVubmVsX3BvbGljeVtSUExfSVBUVU5ORUxfTUFYICYjNDM7IDFdID0ge1xuICAzNjpcdFx0W1JQTF9JUFRVTk5FTF9TUkhdXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXG4gIDM3Olx0fTtcbiAgMzg6XHRcbiAgMzk6XHRzdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxuICA0MDpcdFx0XHRcdCAgICAgc2l6ZV90IHNlZ2xlbilcbiAgNDE6XHR7XG4gIDQyOlx0XHRpbnQgZXJyO1xuICA0MzpcdFxuICA0NDpcdFx0aWYgKChzcmgtXHUwMDNlaGRybGVuIFx1MDAzY1x1MDAzYyAzKSAhPSBzZWdsZW4pXG4gIDQ1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDY6XHRcbiAgNDc6XHRcdC8qIGNoZWNrIGF0IGxlYXN0IG9uZSBzZWdtZW50IGFuZCBzZWdsZW4gZml0IHdpdGggc2VnbWVudHNfbGVmdCAqL1xuICA0ODpcdFx0aWYgKCFzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCB8fFxuICA0OTpcdFx0ICAgIChzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAqIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSAhPSBzZWdsZW4pXG4gIDUwOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNTE6XHRcbiAgNTI6XHRcdGlmIChzcmgtXHUwMDNlY21wcmkgfHwgc3JoLVx1MDAzZWNtcHJlKVxuICA1MzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDU0Olx0XG4gIDU1Olx0XHRlcnIgPSBpcHY2X2Noa19ycGxfc3JoX2xvb3AobmV0LCBzcmgtXHUwMDNlcnBsX3NlZ2FkZHIsXG4gIDU2Olx0XHRcdFx0XHQgICAgc3JoLVx1MDAzZXNlZ21lbnRzX2xlZnQpO1xuICA1NzpcdFx0aWYgKGVycilcbiAgNTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA1OTpcdFxuICA2MDpcdFx0aWYgKGlwdjZfYWRkcl90eXBlKFx1MDAyNnNyaC1cdTAwM2VycGxfc2VnYWRkcltzcmgtXHUwMDNlc2VnbWVudHNfbGVmdCAtIDFdKSBcdTAwMjZcbiAgNjE6XHRcdCAgICBJUFY2X0FERFJfTVVMVElDQVNUKVxuICA2MjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gIDY4Olx0XHRcdFx0ICAgdW5zaWduZWQgaW50IGZhbWlseSwgY29uc3Qgdm9pZCAqY2ZnLFxuICA2OTpcdFx0XHRcdCAgIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqKnRzLFxuICA3MDpcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNzE6XHR7XG4gIDcyOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltSUExfSVBUVU5ORUxfTUFYICYjNDM7IDFdO1xuICA3MzpcdFx0c3RydWN0IGx3dHVubmVsX3N0YXRlICpuZXd0cztcbiAgNzQ6XHRcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKnNyaDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSUEwgU1JIIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LVBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgU291cmNlIFJvdXRpbmcgSGVhZGVyIChTUkgpIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBycGxfYnVpbGRfc3RhdGVgLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgcnBsX3ZhbGlkYXRlX3NyaGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHJwbF92YWxpZGF0ZV9zcmhgIHRoZW4gY2FsbHMgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBzZXJpZXMgb2YgY2FsbHMgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIFJQTCBTUkggdmFsaWRhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBsb29wcyBhbmQgZW5zdXJpbmcgY29ycmVjdCByb3V0aW5nLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5ib3VuZCBwYXRoLiBgaXB2Nl9ycGxfc3JoX3JjdmAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBmb3IgKnJlY2VpdmluZyogdGhlc2UgU1JIIHBhY2tldHMuIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiBpcyB2ZXJ5IGRlc2NyaXB0aXZlLiBJIGFscmVhZHkga25vdyB0aGlzIGlzIGZvdW5kIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBoYW5kbGluZyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLiBJdCYjMzk7cyB0cmlnZ2VyZWQgd2hlbiBhbiBJUHY2IHBhY2tldCBjb21lcyBpbiB0aGF0IGhhcyBhbiBSUEwgU1JIOyBpdCYjMzk7cyBpZGVudGlmaWVkIGJ5IGhlYWRlciB0eXBlIDMuIFNvIG5vdyBJIHdhbnQgdG8gdHJhY2UgaG93IGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBpbnZva2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIHRoYXQgZnVuY3Rpb24gdG8gY29tcGxldGUgdGhlIHBpY3R1cmUgb2YgZGF0YSBmbG93IGFuZCB2YWxpZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTM3MT1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy00ODAtXG5uZXQvaXB2Ni9leHRoZHJzLmM6NDgxOnN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTQ4Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY4OC1cdFx0XHRnb3RvIGRpc2FibGVkO1xubmV0L2lwdjYvZXh0aGRycy5jOjY4OTpcdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02OTAtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBJUHY2IFJQTCBMb29wIERldGVjdGlvbiBCdWcgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgaXB2Nl9ydGhkcl9yY3ZgLCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBpcHY2X3JwbF9zcmhfcmN2YCBmb3IgUlBMIHJvdXRpbmcgaGVhZGVycy4gIEkgYWxzbyBzZWUgdGhhdCBgcnBsX2J1aWxkX3N0YXRlYCBwbGF5cyBhIHJvbGUgaW4gaGFuZGxpbmcgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciBsaWdodHdlaWdodCB0dW5uZWxzLCBwYXJ0aWN1bGFybHkgYGVuY2FwIHJwbGAuICBNeSBmb2N1cyBpcyBvbiBhIHJlY2VudCBjb21taXQgdGhhdCB0b3VjaGVzIGBuZXQvaXB2Ni9hZGRyY29uZi5jYC4gIEkgc2VlIGEgY29kZSBtb2RpZmljYXRpb24gd2l0aGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLCBhIGZ1bmN0aW9uIGNydWNpYWwgZm9yIGRldGVjdGluZyBsb29wcyB3aXRoaW4gUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlcnMgKFNSSCkuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29uZGl0aW9uYWwgYWx0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKGZvdW5kICZndDsgMSAmYW1wOyZhbXA7IHNlcGFyYXRlZClgLCBtZWFuaW5nIHRoZXJlIGhhZCB0byBiZSBtb3JlIHRoYW4gb25lIGxvY2FsIGFkZHJlc3MgKmFuZCogdGhleSB3ZXJlIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGUgdXBkYXRlZCB2ZXJzaW9uIHVzZXMgYGlmIChmb3VuZCAmYW1wOyZhbXA7IHNlcGFyYXRlZClgLiBUaGlzIGluZGljYXRlcyBhIGNoYW5nZSB0byBkZXRlY3QgbG9vcHMgbW9yZSBlZmZpY2llbnRseS4KCkxldCYjMzk7cyBkaXNzZWN0IHRoaXMgbG9naWMgYmFzZWQgb24gUkZDIDY1NTQsIHdoaWNoIG1hbmRhdGVzIGxvb3AgZGV0ZWN0aW9uIGluIFNSSHMuIFRoZSByb3V0ZXIgKm11c3QqIGRldGVybWluZSBpZiB0aGUgU1JIIGNvbnRhaW5zIG11bHRpcGxlIGFkZHJlc3NlcyBhc3NpZ25lZCB0byBpdHMgaW50ZXJmYWNlcy4gSWYgYW4gaW50ZXJmYWNlJiMzOTtzIGFkZHJlc3MgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IG9uZSBvdGhlciBhZGRyZXNzIG5vdCBvbiB0aGUgcm91dGVyLCBpdCYjMzk7cyBhIGxvb3AuICBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyB0b28gc3RyaWN0OyBpdCByZXF1aXJlZCAqdGhyZWUqIGxvY2FsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgbm9uLWxvY2FscyB0byB0cmlnZ2VyIGxvb3AgZGV0ZWN0aW9uLgoKVGhlIGNvcnJlY3RlZCBjb2RlIG5vdyBjb3JyZWN0bHkgZmxhZ3MgdGhlIGxvb3AgYXMgc29vbiBhcyBpdCBzZWVzICpvbmUqIGxvY2FsIGFkZHJlc3MsIHRoZW4gYSBub24tbG9jYWwsIGZvbGxvd2VkIGJ5IGFub3RoZXIgbG9jYWwgYWRkcmVzcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGltcHJvdmVtZW50LiBJIGJlbGlldmUgdGhpcyBmaXggaXMgY3J1Y2lhbCBmb3Igcm9idXN0IFJQTCBvcGVyYXRpb24uCgpOb3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBwYXJ0IG9mIHRoZSBJUHY2IHN0YWNrLiAgSXQmIzM5O3MgcmVhY2hhYmxlIGluIGEgY291cGxlIG9mIGtleSB3YXlzOgoKKiAgIE5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiAodXNpbmcgYFJUTV9ORVdST1VURWAgd2l0aCBgUlRBX0VOQ0FQYCBhbmQgYFJUQV9FTkNBUF9UWVBFID09IExXVFVOTkVMX0VOQ0FQX1JQTGApLiAgVGhpcyBjYW4gY29uZmlndXJlIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgYmFzZWQgb24gUlBMLgoqICAgRGlyZWN0bHkgdGhyb3VnaCBzZW5kaW5nIElQdjYgcGFja2V0cyB3aXRoIGFuIFJQTCByb3V0aW5nIGhlYWRlciwgaWYgdGhlIGludGVyZmFjZSBvciBuZXQgaGFzIGBycGxfc2VnX2VuYWJsZWRgIHNldC4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBpZiB0aGlzIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsuICBNeSBjcml0ZXJpYSBhcmU6CgoqICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCB0aGlzIGlzIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIElQdjYgcGFja2V0L3JvdXRlIHByb2Nlc3NpbmcuCiogICAqKlJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6KiogWWVzLCBib3RoIG5ldGxpbmsgYW5kIElQdjYgcGFja2V0cyBhcmUgcmVhY2hhYmxlLgoKVGhlcmVmb3JlLCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGlzIHRydWUuIFRoaXMgY2hhbmdlIGFmZmVjdHMgY3JpdGljYWwgbmV0d29yayBmdW5jdGlvbiBhbmQgcm91dGUgcHJvY2Vzc2luZyBsb2dpYy4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gIGBDT05GSUdfSVBWNmAgaXMgY2xlYXJseSByZXF1aXJlZCwgc2luY2UgYGFkZHJjb25mLmNgIGFuZCBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCByZXNpZGUgd2l0aGluIHRoZSBJUHY2IHN1YnN5c3RlbS4gYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgaXMgcHJvYmFibHkgYSBmYWN0b3IgZm9yIFJQTCB0dW5uZWwgc3VwcG9ydC4gSSB3aWxsIGRvdWJsZS1jaGVjay4gSW5kZWVkLCBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCBkZXBlbmRzIG9uIGBJUFY2YC4KCk5vdywgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgbGltaXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYD8gIEkgbmVlZCB0byByZXZpZXcgYGV4dGhkcnMuY2AuIEkgaGF2ZSB0byBjb25maXJtIHdoZXRoZXIgYGlwdjZfcnBsX3NyaF9yY3ZgICh0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFJQTCBoZWFkZXJzKSBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSYjMzk7bGwgc2NhbiB0aGUgY29kZSBhcm91bmQgbGluZXMgNDgwLTU3NSBhbmQgNjgwLTY5NSBpbiBgZXh0aGRycy5jYC4gIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHJlZ2FyZGluZyB3aGV0aGVyIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjgwOlx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIDY4MTpcdFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODI6XHRcdFx0aWYgKCFpZGV2KVxuIDY4MzpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg0Olx0XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiA2ODU6XHRcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gNjg2Olx0XHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbiA2ODc6XHRcdFx0aWYgKCFpZGV2KVxuIDY4ODpcdFx0XHRcdGdvdG8gZGlzYWJsZWQ7XG4gNjg5Olx0XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gNjkwOlx0XHRkZWZhdWx0OlxuIDY5MTpcdFx0XHRicmVhaztcbiA2OTI6XHRcdH1cbiA2OTM6XHRcbiA2OTQ6XHRsb29wZWRfYmFjazpcbiA2OTU6XHRcdGlmIChoZHItXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XG4gNjk2Olx0XHRcdHN3aXRjaCAoaGRyLVx1MDAzZXR5cGUpIHtcbiA2OTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNl9NSVA2KVxuIDY5ODpcdFx0XHRjYXNlIElQVjZfU1JDUlRfVFlQRV8yOlxuIDY5OTpcdFx0XHRcdC8qIFNpbGVudGx5IGRpc2NhcmQgdHlwZSAyIGhlYWRlciB1bmxlc3MgaXQgd2FzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzIyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBSUEwgU1JIIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb24gaW4gYGV4dGhkcnMuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGNvZGUgaXMgKmFsd2F5cyogY29tcGlsZWQgaWYgSVB2NiBpcyBlbmFibGVkLCBhbmQgbm90IGp1c3Qgd2hlbiB0aGUgTGlnaHR3ZWlnaHQgVHVubmVsaW5nIGZlYXR1cmUgZm9yIFJQTCBpcyBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCBpcyByZWxhdGVkIHRvIHJvdXRlIGVuY2Fwc3VsYXRpb24sIHdoaWNoIGlzIGEgZGlmZmVyZW50IGFzcGVjdCwgaXQgZW5hYmxlcyB0aGUgcm91dGUgY29uZmlndXJhdGlvbiBwYXRoIHRoYXQgdGhpcyBzcGVjaWZpYyB0ZXN0IHNjcmlwdCBpcyB1c2luZy4gSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19JUFY2YCBpcyBhbHNvIHJlbGV2YW50IGJlY2F1c2UgaXQgZW5hYmxlcyB0aGUgY29yZSBJUHY2IHN0YWNrIGFuZCB0aGUgdW5kZXJseWluZyBwYWNrZXQgcGFyc2luZy4KCk5vdywgbGV0IG1lIHNlZS4uLiB3aGljaCBmdW5jdGlvbnMgd2VyZSBhY3R1YWxseSB0b3VjaGVkIGluIHRoZSBjb2RlPyBJJiMzOTt2ZSBnb3QgaXQ6IGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbj8gVGhhdCB3b3VsZCBiZSBgaXB2Nl9ycGxfc3JoX3JjdmAgaXRzZWxmLCBvYnZpb3VzbHksIGFsb25nIHdpdGggYHJwbF92YWxpZGF0ZV9zcmhgLCBhbmQgYHJwbF9idWlsZF9zdGF0ZWAuCgpPa2F5LCBhcmUgYHJwbF92YWxpZGF0ZV9zcmhgIGFuZCBgcnBsX2J1aWxkX3N0YXRlYCBzdGF0aWNhbGx5IGRlZmluZWQsIG9yIGlubGluZWQ/IExvb2tpbmcgYXQgbGluZSAzOSBpbiBgcnBsX2lwdHVubmVsLmNgLCBgcnBsX3ZhbGlkYXRlX3NyaGAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gQW5kIGBycGxfYnVpbGRfc3RhdGVgIGlzIHN0YXRpYyBhcyB3ZWxsLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIElmIHRoZXkmIzM5O3JlIHN0YXRpYywgaG93IGlzIGBycGxfYnVpbGRfc3RhdGVgIHJlZ2lzdGVyZWQgYW5kIGV4cG9zZWQgZm9yIHVzZT8gSSYjMzk7bGwgbmVlZCB0byBsb29rIGFyb3VuZCBsaW5lIDM3MCBpbiBgbmV0L2lwdjYvcnBsX2lwdHVubmVsLmNgIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L3JwbF9pcHR1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXHUwMDNlc3JoKTtcbiAzNjY6XHRcbiAzNjc6XHRcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVx1MDAzZXNyaCkpXG4gMzY4Olx0XHRcdHJldHVybiAxO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1lbWNtcChhX2hkciwgYl9oZHIsIGxlbik7XG4gMzcxOlx0fVxuIDM3MjpcdFxuIDM3MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbHd0dW5uZWxfZW5jYXBfb3BzIHJwbF9vcHMgPSB7XG4gMzc0Olx0XHQuYnVpbGRfc3RhdGVcdD0gcnBsX2J1aWxkX3N0YXRlLFxuIDM3NTpcdFx0LmRlc3Ryb3lfc3RhdGVcdD0gcnBsX2Rlc3Ryb3lfc3RhdGUsXG4gMzc2Olx0XHQub3V0cHV0XHRcdD0gcnBsX291dHB1dCxcbiAzNzc6XHRcdC5pbnB1dFx0XHQ9IHJwbF9pbnB1dCxcbiAzNzg6XHRcdC5maWxsX2VuY2FwXHQ9IHJwbF9maWxsX2VuY2FwX2luZm8sXG4gMzc5Olx0XHQuZ2V0X2VuY2FwX3NpemVcdD0gcnBsX2VuY2FwX25sc2l6ZSxcbiAzODA6XHRcdC5jbXBfZW5jYXBcdD0gcnBsX2VuY2FwX2NtcCxcbiAzODE6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDM4MjpcdH07XG4gMzgzOlx0XG4gMzg0Olx0aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxuIDM4NTpcdHtcbiAzODY6XHRcdGludCBlcnI7XG4gMzg3Olx0XG4gMzg4Olx0XHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFx1MDAyNnJwbF9vcHMsIExXVFVOTkVMX0VOQ0FQX1JQTCk7XG4gMzg5Olx0XHRpZiAoZXJyKVxuIDM5MDpcdFx0XHRnb3RvIG91dDtcbiAzOTE6XHRcbiAzOTI6XHRcdHByX2luZm8oXCYjMzQ7UlBMIFNlZ21lbnQgUm91dGluZyB3aXRoIElQdjZcXG5cJiMzNDspO1xuIDM5MzpcdFxuIDM5NDpcdFx0cmV0dXJuIDA7XG4gMzk1Olx0XG4gMzk2Olx0b3V0OlxuIDM5NzpcdFx0cmV0dXJuIGVycjtcbiAzOTg6XHR9XG4gMzk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDI1CgkJCQkJCQlvdXRwdXQ6IDE5NAoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBpcHY2X2Noa19ycGxfc3JoX2xvb3AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIC0gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgZXhwb3J0ZWQgYW5kIGRlZmluZWQgd2l0aGluIHRoZSBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBjb2RlLiBBIHF1aWNrIGNoZWNrIG9mIGBrYWxsc3ltc2AgY29uZmlybXMgaXQmIzM5O3Mgbm90IHN0YXRpYy4gR29vZC4gQWxzbywgYGlwdjZfcnBsX3NyaF9yY3ZgIGlzIGFsc28gdGhlcmUsIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLiBXZSYjMzk7dmUgYWxyZWFkeSBncmVwcGVkIHRvIGZpbmQgaXRzIGNhbGxlcnM6IGJlc2lkZXMgYGlwdjZfcnBsX3NyaF9yY3ZgLCB3ZSBoYXZlIGBycGxfdmFsaWRhdGVfc3JoYC4KCk5vdywgbGV0JiMzOTtzIHJlZmVyIHRvIFNlY3Rpb24gNC4gV2Ugd2FudCB0byBiZSBzcGVjaWZpYyBoZXJlLiBXZSBzaG91bGQgTk9UIGxpc3QgdGhlIHViaXF1aXRvdXMgZnVuY3Rpb25zLiBXZSBtdXN0IGZvY3VzIG91ciB0YXJnZXRzIG9uIHNwZWNpZmljIGZlYXR1cmUgbG9naWMgYW5kIEFQSSBlbnRyeXBvaW50cywgY29ycmVjdD8KClJpZ2h0LiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAqaXMqIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIGxvb3AgZGV0ZWN0aW9uLiBUaGUgcGFja2V0IHJlY2VpdmUgaGFuZGxlciBmb3IgUlBMIFNSSCwgYGlwdjZfcnBsX3NyaF9yY3ZgLCBjYWxscyBpdC4gU2ltaWxhcmx5LCBgcnBsX3ZhbGlkYXRlX3NyaGAgd2hpY2ggaXMgcGFydCBvZiB0aGUgcm91dGUgdmFsaWRhdGlvbiBsb2dpYywgaXMgYWxzbyBhIGNhbGxlciwgYW5kIHRoYXQmIzM5O3MgY2FsbGVkIGJ5IGBycGxfYnVpbGRfc3RhdGVgIGZyb20gdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBzaWRlLiBQZXJmZWN0LgoKVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBgSVBWNmAgaXMgb2J2aW91c2x5IG5lZWRlZCwgYXMgYXJlIGBhZGRyY29uZi5jYCBhbmQgYGV4dGhkcnMuY2AuIEFsc28sIGBJUFY2X1JQTF9MV1RVTk5FTGAgZW5hYmxlcyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgYHJwbF9pcHR1bm5lbC5jYCwgc28gdGhhdCYjMzk7cyBhbHNvIG5lZWRlZC4KClNvLCB0aGUgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgZml4aW5nIGxvb3AgZGV0ZWN0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZvciBSUEwgU1JIcywgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIHRoZSBzY2VuYXJpbyB3aGVyZSBsb2NhbCBhZGRyZXNzZXMgYXJlIHNlcGFyYXRlZCBieSBhdCBsZWFzdCBvbmUgbm9uLWxvY2FsIGFkZHJlc3MuIFRoZSBmdW5jdGlvbiBpcyBjcml0aWNhbCBiZWNhdXNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIElQdjYgY29yZSwgYW5kIGlzIHJlYWNoYWJsZSBib3RoIHZpYSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gaW52YWxpZCByb3V0ZXMgb3IgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLgoKVGhpcyBhbGwgc2VlbXMgc29saWQuIFdlIGFyZSBnb29kIHRvIGdvLCBhbGwgb2YgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGlzIHRoZXJlLgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JQTF9MV1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfY2hrX3JwbF9zcmhfbG9vcCYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDssCiAgICAmIzM0O3JwbF92YWxpZGF0ZV9zcmgmIzM0OywKICAgICYjMzQ7cnBsX2J1aWxkX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljIGluIGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpIHdpdGhpbiB0aGUgSVB2NiBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIElQdjYgcGFja2V0IHByb2Nlc3Npbmcgd2l0aCBSUEwgU1JIIChpcHY2X3JwbF9zcmhfcmN2KSBhbmQgdmlhIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiB1c2luZyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyAocnBsX2J1aWxkX3N0YXRlIC1cdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQVjZfUlBMX0xXVFVOTkVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXB2Nl9jaGtfcnBsX3NyaF9sb29wJiMzNDssCiAgICAmIzM0O2lwdjZfcnBsX3NyaF9yY3YmIzM0OywKICAgICYjMzQ7cnBsX3ZhbGlkYXRlX3NyaCYjMzQ7LAogICAgJiMzNDtycGxfYnVpbGRfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIzOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTQ2MjEsNyAmIzQzOzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLAogCQl9CiAKIAkJaWYgKGhhc2hfZm91bmQpIHsKLQkJCWlmIChmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKJiM0MzsJCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBzZXBhcmF0ZWQpIHsKIAkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTgwLDYgJiM0Mzs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCXJldXNlcG9ydF9hZGRyX2FueS5zaCBcCiAJcm91dGVfaGludC5zaCBcCiAJcm91dGVfbG9jYWxuZXQuc2ggXAomIzQzOwlycGxfc3JoX2xvb3Auc2ggXAogCXJwc19kZWZhdWx0X21hc2suc2ggXAogCXJ0bmV0bGluay5weSBcCiAJcnRuZXRsaW5rLnNoIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoCkBAIC0wLDAgJiM0MzsxLDM4IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7c291cmNlIGxpYi5zaAomIzQzOwomIzQzO2NsZWFudXAoKQomIzQzO3sKJiM0MzsJY2xlYW51cF9ucyAmIzM0OyROUyYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3RyYXAgY2xlYW51cCBFWElUCiYjNDM7CiYjNDM7cmVxdWlyZV9jb21tYW5kIGlwCiYjNDM7c2V0dXBfbnMgTlMgfHwgZXhpdCAkPwomIzQzOwomIzQzO2lwIC1uICYjMzQ7JE5TJiMzNDsgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWQKJiM0MzsKJiM0MztpZiAhIGlwIC1uICYjMzQ7JE5TJiMzNDsgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXAomIzQzOwllbmNhcCBycGwgc2VncyAyMDAxOmRiODo0OjoxIGRldiBsbyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwllY2hvICYjMzQ7U0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGUmIzM0OwomIzQzOwlleGl0ICRrc2Z0X3NraXAKJiM0MztmaQomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8KJiM0MztjaGVja19lcnIgJD8gJiMzNDtBZGphY2VudCBsb2NhbCBhZGRyZXNzZXMgd2VyZSByZWplY3RlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXMmIzM0OwomIzQzOwomIzQzO1JFVD0wCiYjNDM7aXAgLW4gJiMzNDskTlMmIzM0OyAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcCiYjNDM7CWVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcCiYjNDM7CTImZ3Q7L2Rldi9udWxsCiYjNDM7Y2hlY2tfZmFpbCAkPyAmIzM0O1NlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZCYjMzQ7CiYjNDM7bG9nX3Rlc3QgJiMzNDtSUEwgcmVqZWN0cyBzZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzJiMzNDsKJiM0MzsKJiM0MztleGl0ICRFWElUX1NUQVRVUwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBOZXR3b3JrIFBlcmZvcm1hbmNlIEVuaGFuY2VtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgcGF0Y2ggdG91Y2hpbmcgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGNvZGUgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb2RlIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjaGVjayBmb3IgbG9vcHMgaW4gUlBML1NSSCBwYWNrZXRzLgoKVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBgZm91bmQgJmd0OyAxICZhbXA7JmFtcDsgc2VwYXJhdGVkYCB0byBqdXN0IGBmb3VuZCAmYW1wOyZhbXA7IHNlcGFyYXRlZGAuIEhtbSwgc28gdGhlIG9yaWdpbmFsIGxvZ2ljIHNlZW1lZCB0byBjYXJlIGFib3V0IGhvdyBtYW55IHRpbWVzIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uIHdhcyBtZXQuIE5vdywgdGhlIGNvbmRpdGlvbiBzZWVtcyB0byBiZSBzYXRpc2ZpZWQgYXMgbG9uZyBhcyBpdCYjMzk7cyBiZWVuIGZvdW5kIGF0IGFsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgZm91bmRgIGFuZCBgc2VwYXJhdGVkYCByZXByZXNlbnQgaW4gdGhpcyBjb250ZXh0LiAgQXJlIHRoZXkgY291bnRlcnMsIGZsYWdzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIHdpbGwgYmUgY3J1Y2lhbCBoZXJlLiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgc2lnbmlmaWNhbnQgYW5kIG5lZWRzIHRvIGJlIGFuYWx5emVkIGNhcmVmdWxseTsgd2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvcj8gV2hhdCBlZGdlIGNhc2VzIGRvZXMgdGhpcyBuZXcgbG9naWMgYWRkcmVzcz8gCgpBbmQgdGhlIGFkZGVkIHNlbGZ0ZXN0Li4uIHRoYXQmIzM5O3MgYSBnb29kIHNpZ24uICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hgIHNjcmlwdCBzdWdnZXN0cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UuICBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHJldmlldyBhZnRlciBJJiMzOTt2ZSBkZXZlbG9wZWQgYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNoYW5nZXMuIEkmIzM5O2xsIG5lZWQgdG8gcnVuIHRoaXMgYW5kIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVzdWx0cy4gT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsLCBjaGFuZ2UgcmVsYXRlZCB0byBuZXR3b3JrIHN0YWJpbGl0eSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjb3JyZWN0IGFuZCBzYWZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MDA6XHRcdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG40NjAxOlx0e1xuNDYwMjpcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyO1xuNDYwMzpcdFx0aW50IGksIHJldCA9IDAsIGZvdW5kID0gMDtcbjQ2MDQ6XHRcdHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcDtcbjQ2MDU6XHRcdGJvb2wgc2VwYXJhdGVkID0gZmFsc2U7XG40NjA2Olx0XHR1bnNpZ25lZCBpbnQgaGFzaDtcbjQ2MDc6XHRcdGJvb2wgaGFzaF9mb3VuZDtcbjQ2MDg6XHRcbjQ2MDk6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjQ2MTA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zZWdzOyBpJiM0MzsmIzQzOykge1xuNDYxMTpcdFx0XHRhZGRyID0gXHUwMDI2c2Vnc1tpXTtcbjQ2MTI6XHRcdFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xuNDYxMzpcdFxuNDYxNDpcdFx0XHRoYXNoX2ZvdW5kID0gZmFsc2U7XG40NjE1Olx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFx1MDAyNm5ldC1cdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xuNDYxNjpcdFxuNDYxNzpcdFx0XHRcdGlmIChpcHY2X2FkZHJfZXF1YWwoXHUwMDI2aWZwLVx1MDAzZWFkZHIsIGFkZHIpKSB7XG40NjE4Olx0XHRcdFx0XHRoYXNoX2ZvdW5kID0gdHJ1ZTtcbjQ2MTk6XHRcdFx0XHRcdGJyZWFrO1xuNDYyMDpcdFx0XHRcdH1cbjQ2MjE6XHRcdFx0fVxuNDYyMjpcdFxuNDYyMzpcdFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuNDYyNDpcdFx0XHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG40NjI1Olx0XHRcdFx0XHRyZXQgPSAxO1xuNDYyNjpcdFx0XHRcdFx0YnJlYWs7XG40NjI3Olx0XHRcdFx0fVxuNDYyODpcdFxuNDYyOTpcdFx0XHRcdHNlcGFyYXRlZCA9IGZhbHNlO1xuNDYzMDpcdFx0XHRcdGZvdW5kJiM0MzsmIzQzOztcbjQ2MzE6XHRcdFx0fSBlbHNlIHtcbjQ2MzI6XHRcdFx0XHRzZXBhcmF0ZWQgPSB0cnVlO1xuNDYzMzpcdFx0XHR9XG40NjM0Olx0XHR9XG40NjM1Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ2MzY6XHRcbjQ2Mzc6XHRcdHJldHVybiByZXQ7XG40NjM4Olx0fVxuNDYzOTpcdFxuNDY0MDpcdC8qXG40NjQxOlx0ICpcdFBlcmlvZGljIGFkZHJlc3Mgc3RhdHVzIHZlcmlmaWNhdGlvblxuNDY0MjpcdCAqL1xuNDY0MzpcdFxuNDY0NDpcdHN0YXRpYyB2b2lkIGFkZHJjb25mX3ZlcmlmeV9ydG5sKHN0cnVjdCBuZXQgKm5ldClcbjQ2NDU6XHR7XG40NjQ2Olx0XHR1bnNpZ25lZCBsb25nIG5vdywgbmV4dCwgbmV4dF9zZWMsIG5leHRfc2NoZWQ7XG40NjQ3Olx0XHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XG40NjQ4Olx0XHRpbnQgaTtcbjQ2NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJUHY2IFJvdXRpbmcgSGVhZGVyIExvb3AgRGV0ZWN0aW9uIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBsb29wIGRldGVjdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgc3BlY2lmaWNhbGx5IGhvdyB0aGUgUlBMIChSb3V0aW5nIFByb3RvY29sIGZvciBMb3ctcG93ZXIgYW5kIExvc3N5IE5ldHdvcmtzKSBhbmQgU1JIIChTZWdtZW50IFJvdXRpbmcgSGVhZGVyKSBsb29wIGRldGVjdGlvbiBsb2dpYyBpcyB0cmlnZ2VyZWQuIElkZW50aWZ5aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHRzIGludG8gdGhlIHNjZW5hcmlvcyB3aGVyZSBwb3RlbnRpYWwgcm91dGluZyBsb29wcyBhcmUgY29uc2lkZXJlZCwgYW5kIGhvdyBhZ2dyZXNzaXZlbHksIG9yIGRlZmVuc2l2ZWx5LCB0aGUgY2hlY2sgaXMgcGVyZm9ybWVkLiBJIHdpbGwgc3RhcnQgYnkgdXNpbmcgbXkgc3RhbmRhcmQgdG9vbHMgdG8gdHJhdmVyc2UgdGhlIGNhbGwgZ3JhcGggYW5kIGlzb2xhdGUgdGhlIHBlcnRpbmVudCBjb2RlIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X2Noa19ycGxfc3JoX2xvb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0xMjM9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7XG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjUtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjEyNjppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXHRcdFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTQ1NzA9aW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcilcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTQ1OTgtICovXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjQ1OTk6aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2Vncyxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cdFx0XHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNTY5LVxubmV0L2lwdjYvZXh0aGRycy5jOjU3MDpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXHUwMDNlcnBsX3NlZ2FkZHIsIG4gJiM0MzsgMSk7XG5uZXQvaXB2Ni9leHRoZHJzLmMtNTcxLVx0aWYgKGVycikge1xuLS1cbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM5PXN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXG4tLVxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo1NTpcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIHNyaC1cdTAwM2VycGxfc2VnYWRkcixcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTU2LVx0XHRcdFx0ICAgIHNyaC1cdTAwM2VzZWdtZW50c19sZWZ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjM6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxNwoJCQkJCQkJb3V0cHV0OiAyNDMKCQkJCQkJCXRob3VnaHRzOiA4NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBJdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlY3RpbmcgbG9vcHMgd2l0aGluIGFuIFJQTCBTUkguIFRoZSBjdXJyZW50IGxvZ2ljLCBhcyBpdCBzdGFuZHMsIGhhcyBhIGZsYXc6IGl0IGluY29ycmVjdGx5IGlkZW50aWZpZXMgbG9vcHMuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIG9ubHkgZmxhZ2dpbmcgYSBsb29wIGlmIGl0IGVuY291bnRlcmVkICptb3JlIHRoYW4gb25lKiBsb2NhbCBhZGRyZXNzIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGlzIGlzIGluY29ycmVjdCEgQSBsb29wIGV4aXN0cyBpZiAqYW55KiBsb2NhbCBhZGRyZXNzIGlzIHNlcGFyYXRlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGZvbGxvd2VkIGJ5ICphbm90aGVyKiBsb2NhbCBhZGRyZXNzLCBldmVuIGlmIHRoYXQmIzM5O3MgdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UuIFNvLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBmbGF3ZWQgY29uZGl0aW9uIGJ5IGNoYW5naW5nIHRoZSBsb2dpYyBmcm9tIGBmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWRgIHRvIGp1c3QgYGZvdW5kICZhbXA7JmFtcDsgc2VwYXJhdGVkYC4gVGhpcyBlbnN1cmVzIHRoYXQgYSBsb29wIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGluIHRoZSBzaW5nbGUgY2FzZSBhcyB3ZWxsLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IERvZXMgdGhpcyBmaXggaW50cm9kdWNlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCB0aGluZyBJIGNoZWNrIGFyZSB0aGUgcG90ZW50aWFsIHBpdGZhbGxzOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZToqKiBOb3BlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHNpbXBsZSBpbnRlZ2VyICgwIG9yIDEpLiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBubyB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBsZWFrZWQuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIFRoZSB2YXJpYWJsZXMgYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGFuZCBgaGFzaF9mb3VuZGAgYXJlIGFsbCBpbml0aWFsaXplZCBsb2NhbGx5LiBTcGVjaWZpY2FsbHksIGBpYCBhbmQgYHJldGAgYXJlIGluaXRpYWxpemVkLiBBbmQgYGZvdW5kYCBpcyBpbml0aWFsaXplZCB0byAwLiBgc2VwYXJhdGVkYCBpcyBpbml0aWFsaXplZCB0byBgZmFsc2VgLCBhbmQgYGhhc2hfZm91bmRgIGlzIGFzc2lnbmVkIGEgdmFsdWUgb2YgYGZhbHNlYCAoaW4gdGhlIGNvZGUpLCBzbyBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgaW4gcGxheS4KMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXM6KiogVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMgb2YgYW55IGRhdGEgc3RydWN0dXJlcyBoZXJlLgo0LiAgKipCb3VuZHMgY2hlY2tzOioqIFRoaXMgcGF0Y2ggKnN0cmVuZ3RoZW5zKiB0aGUgYm91bmRzLWNoZWNraW5nIGxvZ2ljLCBub3Qgd2Vha2VucyBpdC4gU28sIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYnkgYWNjZXNzaW5nIG91dC1vZi1ib3VuZHMgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZpeCBtYWtlcyB0aGUgY2hlY2sgc3RyaWN0ZXIuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZml4IGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZywgYSBsb2dpYyBlcnJvci4gV2hpbGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgd29ydGggbWVudGlvbmluZyBnZW5lcmFsbHksIHRoaXMgZml4IHdvdWxkbiYjMzk7dCBpbnRyb2R1Y2UgYW55IEtBU0FOIGlzc3VlcyBlaXRoZXIgKGxpa2Ugb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMpLgoKVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gZnV6emluZy4gSSBjYW4gY29uZmlkZW50bHkgc3RhdGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIHNob3VsZCBhbHNvIHdyaXRlIHVwIGEgY2xlYXIgZXhwbGFuYXRpb24gY29udHJhc3RpbmcgS0FTQU4gYW5kIEtNU0FOOiB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBlcnJvciBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCB0aGF0IHdhcyBub3QgZGV0ZWN0aW5nIGxvb3BzIGlmIGBmb3VuZCAmZ3Q7IDEgJmFtcDsmYW1wOyBzZXBhcmF0ZWRgIGFuZCBjb250cmFzdGluZyB0aGF0IHRoZSBmaXggZG9lcyBub3QgaW50cm9kdWNlIEtNU0FOIGlzc3VlcyBiZWNhdXNlIG9ubHkgbG9jYWwgdmFyaWFibGVzIGFyZSB1c2VkLCBhbmQgdGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGNvcGllcyBvZiBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IHNob3VsZCBlbXBoYXNpemUgdGhhdCB0aGUgZml4IGRvZXMgbm90IHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXG5cbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjMxLjc0MDUyOTYwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NDc2OTgyMDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9naWNhbCBjb25kaXRpb24gaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcCgpYCAoYG5ldC9pcHY2L2FkZHJjb25mLmNgKSB1c2VkIHRvIHZhbGlkYXRlIElQdjYgUlBMIFNlZ21lbnQgUm91dGluZyBIZWFkZXJzIGFnYWluc3Qgcm91dGluZyBsb29wcyBpbnZvbHZpbmcgbG9jYWwgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHksIGl0IGNoYW5nZXMgYGlmIChmb3VuZCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKWAgdG8gYGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCwgZW5zdXJpbmcgdGhhdCBhIHNpbmdsZSBwcmV2aW91c2x5IHNlZW4gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MgZm9sbG93ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcyBhbmQgdGhlbiBhbm90aGVyIGxvY2FsIGFkZHJlc3MgaXMgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBsb29wLlxcblxcbktNU0FOIGRldGVjdHMgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAocmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgYW5kIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlKS4gVGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY2hhbmdlZCBsb2dpYyAoYGZvdW5kYCwgYHNlcGFyYXRlZGAsIGBoYXNoX2ZvdW5kYCwgYHJldGApIGFyZSBsb2NhbCBzY2FsYXJzIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIDAvZmFsc2UgcHJpb3IgdG8gdXNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIGJ1ZmZlciBsZW5ndGhzLCBjb3B5LXRvLXVzZXIgb3BlcmF0aW9ucywgb3Igc3RydWN0IGluaXRpYWxpemF0aW9ucy4gVGh1cywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhcmUgY3JlYXRlZCBvciBleHBvc2VkLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVxcdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMS43NDA1Mzk2NjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDQzNzQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjNWM3MTg1OTM5ZDg5NTBhNTNhNmY4YTZjYWViZWJkMWY3ZDc5ZDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCA5ZDg5YmU3ZTA1NDRiLi5mNjc4ZmI3ZmE1NzRjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTQ2MjEsNyArNDYyMSw3IEBAIGludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGlmIChoYXNoX2ZvdW5kKSB7XFxuLVxcdFxcdFxcdGlmIChmb3VuZCBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKSB7XFxuK1xcdFxcdFxcdGlmIChmb3VuZCBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpIHtcXG4gXFx0XFx0XFx0XFx0cmV0ID0gMTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuaW5kZXggM2VlMzM3OGY4YjI2ZS4uN2ZlN2UzOGI5YzZjMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5AQCAtODAsNiArODAsNyBAQCBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0cmV1c2Vwb3J0X2FkZHJfYW55LnNoIFxcXFxcXG4gXFx0cm91dGVfaGludC5zaCBcXFxcXFxuIFxcdHJvdXRlX2xvY2FsbmV0LnNoIFxcXFxcXG4rXFx0cnBsX3NyaF9sb29wLnNoIFxcXFxcXG4gXFx0cnBzX2RlZmF1bHRfbWFzay5zaCBcXFxcXFxuIFxcdHJ0bmV0bGluay5weSBcXFxcXFxuIFxcdHJ0bmV0bGluay5zaCBcXFxcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hMmU5OTkxZDc4OWQ2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcXG5AQCAtMCwwICsxLDM4IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuK3NvdXJjZSBsaWIuc2hcXG4rXFxuK2NsZWFudXAoKVxcbit7XFxuK1xcdGNsZWFudXBfbnMgXFxcIiROU1xcXCJcXG4rfVxcbitcXG4rdHJhcCBjbGVhbnVwIEVYSVRcXG4rXFxuK3JlcXVpcmVfY29tbWFuZCBpcFxcbitzZXR1cF9ucyBOUyB8fCBleGl0ICQ/XFxuK1xcbitpcCAtbiBcXFwiJE5TXFxcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODoxOjoxLzEyOCBkZXYgbG8gbm9kYWRcXG4raXAgLW4gXFxcIiROU1xcXCIgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6Mzo6MS8xMjggZGV2IGxvIG5vZGFkXFxuK1xcbitpZiAhIGlwIC1uIFxcXCIkTlNcXFwiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMDo6LzY0IFxcXFxcXG4rXFx0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6NDo6MSBkZXYgbG8gMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0ZWNobyBcXFwiU0tJUDogUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBzdXBwb3J0IG5vdCBhdmFpbGFibGVcXFwiXFxuK1xcdGV4aXQgJGtzZnRfc2tpcFxcbitmaVxcbitcXG4rUkVUPTBcXG4raXAgLW4gXFxcIiROU1xcXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjExOjovNjQgXFxcXFxcbitcXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXFxuK2NoZWNrX2VyciAkPyBcXFwiQWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgcmVqZWN0ZWRcXFwiXFxuK2xvZ190ZXN0IFxcXCJSUEwgYWNjZXB0cyBhZGphY2VudCBsb2NhbCBhZGRyZXNzZXNcXFwiXFxuK1xcbitSRVQ9MFxcbitpcCAtbiBcXFwiJE5TXFxcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTI6Oi82NCBcXFxcXFxuK1xcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxcXFxuK1xcdDJcXHUwMDNlL2Rldi9udWxsXFxuK2NoZWNrX2ZhaWwgJD8gXFxcIlNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXMgd2VyZSBhY2NlcHRlZFxcXCJcXG4rbG9nX3Rlc3QgXFxcIlJQTCByZWplY3RzIHNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXNcXFwiXFxuK1xcbitleGl0ICRFWElUX1NUQVRVU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMi4yNTU1NTMyOTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ4NTEyODkyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldGVjdGlvbiBsb2dpYyBpbiBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUlBMIFNSSCAoaXB2Nl9ycGxfc3JoX3JjdikgYW5kIHZpYSBuZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgKHJwbF9idWlsZF9zdGF0ZSAtXFx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmM1YzcxODU5MzlkODk1MGE1M2E2ZjhhNmNhZWJlYmQxZjdkNzlkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIzOjE4OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IDlkODliZTdlMDU0NGIuLmY2NzhmYjdmYTU3NGMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtNDYyMSw3ICs0NjIxLDcgQEAgaW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoaGFzaF9mb3VuZCkge1xuLVx0XHRcdGlmIChmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkKSB7XG4rXHRcdFx0aWYgKGZvdW5kIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpIHtcbiBcdFx0XHRcdHJldCA9IDE7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCAzZWUzMzc4ZjhiMjZlLi43ZmU3ZTM4YjljNmMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC04MCw2ICs4MCw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdHJldXNlcG9ydF9hZGRyX2FueS5zaCBcXFxuIFx0cm91dGVfaGludC5zaCBcXFxuIFx0cm91dGVfbG9jYWxuZXQuc2ggXFxcbitcdHJwbF9zcmhfbG9vcC5zaCBcXFxuIFx0cnBzX2RlZmF1bHRfbWFzay5zaCBcXFxuIFx0cnRuZXRsaW5rLnB5IFxcXG4gXHRydG5ldGxpbmsuc2ggXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmEyZTk5OTFkNzg5ZDZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hcbkBAIC0wLDAgKzEsMzggQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbitzb3VyY2UgbGliLnNoXG4rXG4rY2xlYW51cCgpXG4re1xuK1x0Y2xlYW51cF9ucyBcIiROU1wiXG4rfVxuK1xuK3RyYXAgY2xlYW51cCBFWElUXG4rXG4rcmVxdWlyZV9jb21tYW5kIGlwXG4rc2V0dXBfbnMgTlMgfHwgZXhpdCAkP1xuK1xuK2lwIC1uIFwiJE5TXCIgLTYgYWRkcmVzcyBhZGQgMjAwMTpkYjg6MTo6MS8xMjggZGV2IGxvIG5vZGFkXG4raXAgLW4gXCIkTlNcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODozOjoxLzEyOCBkZXYgbG8gbm9kYWRcbitcbitpZiAhIGlwIC1uIFwiJE5TXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEwOjovNjQgXFxcbitcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjQ6OjEgZGV2IGxvIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbitcdGVjaG8gXCJTS0lQOiBSUEwgbGlnaHR3ZWlnaHQgdHVubmVsIHN1cHBvcnQgbm90IGF2YWlsYWJsZVwiXG4rXHRleGl0ICRrc2Z0X3NraXBcbitmaVxuK1xuK1JFVD0wXG4raXAgLW4gXCIkTlNcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTE6Oi82NCBcXFxuK1x0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6MTo6MSwyMDAxOmRiODozOjoxIGRldiBsb1xuK2NoZWNrX2VyciAkPyBcIkFkamFjZW50IGxvY2FsIGFkZHJlc3NlcyB3ZXJlIHJlamVjdGVkXCJcbitsb2dfdGVzdCBcIlJQTCBhY2NlcHRzIGFkamFjZW50IGxvY2FsIGFkZHJlc3Nlc1wiXG4rXG4rUkVUPTBcbitpcCAtbiBcIiROU1wiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMjo6LzY0IFxcXG4rXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjI6OjEsMjAwMTpkYjg6Mzo6MSBkZXYgbG8gXFxcbitcdDJcdTAwM2UvZGV2L251bGxcbitjaGVja19mYWlsICQ/IFwiU2VwYXJhdGVkIGxvY2FsIGFkZHJlc3NlcyB3ZXJlIGFjY2VwdGVkXCJcbitsb2dfdGVzdCBcIlJQTCByZWplY3RzIHNlcGFyYXRlZCBsb2NhbCBhZGRyZXNzZXNcIlxuK1xuK2V4aXQgJEVYSVRfU1RBVFVTXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODozMi4yNTU1NTUxMzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MjY4MTM0ODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbnRlbnQgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtb2RpZmljYXRpb24gcmVsYXRlZCB0byBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC9pcHY2YCBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmdW5jdGlvbiB3aXRoaW4gYGFkZHJjb25mLmNgLlxuXG5UaGUgZGlmZiBzdWdnZXN0cyBhIGNoYW5nZSBpbiB0aGUgbG9vcGluZyBiZWhhdmlvciB3aXRoaW4gdGhlIGZ1bmN0aW9uIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgcG90ZW50aWFsIGlzc3VlIGlkZW50aWZpZWQgd2hlbiBtdWx0aXBsZSBsb29wcyB3ZXJlIGRpc2NvdmVyZWQgYW5kIG5vdyB0aGUgY29uZGl0aW9uIGBmb3VuZCBcdTAwM2UgMWAgaGFzIGJlZW4gY2hhbmdlZCB0byBzaW1wbHkgYGZvdW5kYC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIHRoaXMgaXMgYW4gb3V0cmlnaHQgYnVnIGZpeCBvciBhIGJlaGF2aW9yIGNoYW5nZS5cblxuR2l2ZW4gdGhlIGNoYW5nZSBpbnZvbHZlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AsIEkgbmVlZCB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgYHNlbGZ0ZXN0c2AgZGlyZWN0b3J5IHN1Z2dlc3RzIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uLiBMb29rcyBsaWtlIHdlIGhhdmUgYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaGAgYW5kIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB0ZXN0IGlzIGludGVncmF0ZWQgd2l0aCB0aGUgYE1ha2VmaWxlYC4gXG5cbk5vdywgSSdsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoYW5nZXMgbGluZSBieSBsaW5lLCBjb21wYXJpbmcgdGhlIG9yaWdpbmFsIGxvZ2ljIHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBzY2VuYXJpb3MgdGhpcyBhZGRyZXNzZXMuIEknbGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZGl0aW9uYWwgY2hhbmdlIOKAkyB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCwgYW5kIHdoYXQgZG9lcyBgc2VwYXJhdGVkYCBzaWduaWZ5PyBUaGUgdGVzdCBjYXNlcyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmQgdGhpcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhvc2Ugc2hlbGwgc2NyaXB0cyBjYXJlZnVsbHkgdG8gc2VlIGV4YWN0bHkgd2hhdCBzY2VuYXJpb3MgYXJlIGJlaW5nIGNvdmVyZWQgYW5kIGhvdyB0aGUgY2hhbmdlZCBjb25kaXRpb24gYWZmZWN0cyB0aGUgbG9vcCBkZXRlY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo0MS41MjM2OTMzOTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODU1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvYWRkcmNvbmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NTkwOlxcdCAqIGNoZWNraW5nIGlmIHRoZSBzZWdtZW50cyBjb250YWlucyBhbnkgb2YgYSBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcy5cXG40NTkxOlxcdCAqXFxuNDU5MjpcXHQgKiBRdW90ZTpcXG40NTkzOlxcdCAqXFxuNDU5NDpcXHQgKiBUbyBkZXRlY3QgbG9vcHMgaW4gdGhlIFNSSCwgYSByb3V0ZXIgTVVTVCBkZXRlcm1pbmUgaWYgdGhlIFNSSFxcbjQ1OTU6XFx0ICogaW5jbHVkZXMgbXVsdGlwbGUgYWRkcmVzc2VzIGFzc2lnbmVkIHRvIGFueSBpbnRlcmZhY2Ugb24gdGhhdCByb3V0ZXIuXFxuNDU5NjpcXHQgKiBJZiBzdWNoIGFkZHJlc3NlcyBhcHBlYXIgbW9yZSB0aGFuIG9uY2UgYW5kIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3RcXG40NTk3OlxcdCAqIG9uZSBhZGRyZXNzIG5vdCBhc3NpZ25lZCB0byB0aGF0IHJvdXRlci5cXG40NTk4OlxcdCAqL1xcbjQ1OTk6XFx0aW50IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2VncyxcXG40NjAwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgY2hhciBuc2VncylcXG40NjAxOlxcdHtcXG40NjAyOlxcdFxcdGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG40NjAzOlxcdFxcdGludCBpLCByZXQgPSAwLCBmb3VuZCA9IDA7XFxuNDYwNDpcXHRcXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XFxuNDYwNTpcXHRcXHRib29sIHNlcGFyYXRlZCA9IGZhbHNlO1xcbjQ2MDY6XFx0XFx0dW5zaWduZWQgaW50IGhhc2g7XFxuNDYwNzpcXHRcXHRib29sIGhhc2hfZm91bmQ7XFxuNDYwODpcXHRcXG40NjA5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG40NjEwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuc2VnczsgaSsrKSB7XFxuNDYxMTpcXHRcXHRcXHRhZGRyID0gXFx1MDAyNnNlZ3NbaV07XFxuNDYxMjpcXHRcXHRcXHRoYXNoID0gaW5ldDZfYWRkcl9oYXNoKG5ldCwgYWRkcik7XFxuNDYxMzpcXHRcXG40NjE0OlxcdFxcdFxcdGhhc2hfZm91bmQgPSBmYWxzZTtcXG40NjE1OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZnAsIFxcdTAwMjZuZXQtXFx1MDAzZWlwdjYuaW5ldDZfYWRkcl9sc3RbaGFzaF0sIGFkZHJfbHN0KSB7XFxuNDYxNjpcXHRcXG40NjE3OlxcdFxcdFxcdFxcdGlmIChpcHY2X2FkZHJfZXF1YWwoXFx1MDAyNmlmcC1cXHUwMDNlYWRkciwgYWRkcikpIHtcXG40NjE4OlxcdFxcdFxcdFxcdFxcdGhhc2hfZm91bmQgPSB0cnVlO1xcbjQ2MTk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyMDpcXHRcXHRcXHRcXHR9XFxuNDYyMTpcXHRcXHRcXHR9XFxuNDYyMjpcXHRcXG40NjIzOlxcdFxcdFxcdGlmIChoYXNoX2ZvdW5kKSB7XFxuNDYyNDpcXHRcXHRcXHRcXHRpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKSB7XFxuNDYyNTpcXHRcXHRcXHRcXHRcXHRyZXQgPSAxO1xcbjQ2MjY6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDYyNzpcXHRcXHRcXHRcXHR9XFxuNDYyODpcXHRcXG40NjI5OlxcdFxcdFxcdFxcdHNlcGFyYXRlZCA9IGZhbHNlO1xcbjQ2MzA6XFx0XFx0XFx0XFx0Zm91bmQrKztcXG40NjMxOlxcdFxcdFxcdH0gZWxzZSB7XFxuNDYzMjpcXHRcXHRcXHRcXHRzZXBhcmF0ZWQgPSB0cnVlO1xcbjQ2MzM6XFx0XFx0XFx0fVxcbjQ2MzQ6XFx0XFx0fVxcbjQ2MzU6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDYzNjpcXHRcXG40NjM3OlxcdFxcdHJldHVybiByZXQ7XFxuNDYzODpcXHR9XFxuNDYzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NDEuNTIzOTgxOTI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzk0MDAwNjE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIElQdjYgUm91dGluZyBIZWFkZXIgTG9vcCBEZXRlY3Rpb24gRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBzdHJ1Y3R1cmUgb2YgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIHRoaXMgbG9vcCBkZXRlY3Rpb24gZnVuY3Rpb24gaXMgYmVpbmcgaW52b2tlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGZ1bmN0aW9uJ3MgY2FsbHMgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgaG93IHRoZSBSUEwgKFJvdXRpbmcgUHJvdG9jb2wgZm9yIExvdy1wb3dlciBhbmQgTG9zc3kgTmV0d29ya3MpIGFuZCBTUkggKFNlZ21lbnQgUm91dGluZyBIZWFkZXIpIGxvb3AgZGV0ZWN0aW9uIGxvZ2ljIGlzIHRyaWdnZXJlZC4gSWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgc2NlbmFyaW9zIHdoZXJlIHBvdGVudGlhbCByb3V0aW5nIGxvb3BzIGFyZSBjb25zaWRlcmVkLCBhbmQgaG93IGFnZ3Jlc3NpdmVseSwgb3IgZGVmZW5zaXZlbHksIHRoZSBjaGVjayBpcyBwZXJmb3JtZWQuIEkgd2lsbCBzdGFydCBieSB1c2luZyBteSBzdGFuZGFyZCB0b29scyB0byB0cmF2ZXJzZSB0aGUgY2FsbCBncmFwaCBhbmQgaXNvbGF0ZSB0aGUgcGVydGluZW50IGNvZGUgcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4OTEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjQ1LjQ2Mzk5MTMxM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0NjMyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTEyMz1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTI1LVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTI2OmludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXFx0XFx0XFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDU3MD1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NTk4LSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDU5OTppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDgxPXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTU2OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTcwOlxcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXFx1MDAzZXJwbF9zZWdhZGRyLCBuICsgMSk7XFxubmV0L2lwdjYvZXh0aGRycy5jLTU3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zOT1zdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NTU6XFx0ZXJyID0gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKG5ldCwgc3JoLVxcdTAwM2VycGxfc2VnYWRkcixcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy01Ni1cXHRcXHRcXHRcXHQgICAgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NDcuMTY4NjI5NDY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzE0Nzg5NTYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUlBMIFNSSCBMb29wIERldGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgaXQncyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGluIHR3byBrZXkgbG9jYXRpb25zOiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgaXB2Nl9ycGxfc3JoX3JjdmAsIHdoaWNoIGhhbmRsZXMgdGhlIHByb2Nlc3Npbmcgb2YgUlBMIFNSSCBleHRlbnNpb24gaGVhZGVycy4gVGhhdCBtYWtlcyBzZW5zZTsgbG9vcCBkZXRlY3Rpb24gaXMgY3JpdGljYWwgdGhlcmUuIFRoZSBzZWNvbmQgcGxhY2UgaXMgaW4gYG5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jYCwgd2l0aGluIGBycGxfdmFsaWRhdGVfc3JoYCwgd2hpY2ggaGFzIHRvIGRvIHdpdGggdmFsaWRhdGluZyBTUkhzIHdoZW4gY29uZmlndXJpbmcgcm91dGVzIHZpYSBuZXRsaW5rICh1c2luZyBgUlRNX05FV1JPVVRFYCkuIFNvLCB3ZSdyZSB0YWxraW5nIGFib3V0IHBhY2tldCBwcm9jZXNzaW5nIGFuZCByb3V0ZSBjb25maWd1cmF0aW9uIGludm9sdmluZyBSUEwgU1JIIGhlYWRlcnMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gVGhpcyB1c3VhbGx5IG1lYW5zIGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMuIEkgbmVlZCB0byBsb29rIGZvciBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBpdHNlbGYsIHRvIHNlZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgZGlzYWJsZWQgc29tZWhvdy4gQnV0IEknbGwgYWxzbyB3YW50IHRvIGxvb2sgaW4gYG5ldC9pcHY2L2FkZHJjb25mLmNgLCB0byBjaGVjayBmb3IgYW55IHJlbGV2YW50IGdsb2JhbCBJUHY2IGFkZHJlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbmQgb2YgY291cnNlIEknbGwgcmV2aXNpdCBgaXB2Nl9ycGxfc3JoX3JjdmAgYW5kIGBycGxfaXB0dW5uZWwuY2AgaW4gS2NvbmZpZywgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBjb21waWxlLXRpbWUgZmxhZ3MgaW5mbHVlbmNlIGhvdyBsb29wIGRldGVjdGlvbiBpcyBoYW5kbGVkIGluIHRob3NlIGFyZWFzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGNvbmZpZ3VyYWJpbGl0eSBvZiB0aGlzIGxvb3AgZGV0ZWN0aW9uIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo1MC4zMTY1MjY5NjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwMTAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBsX2lwdHVubmVsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTYtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NzojaW5jbHVkZSBcXHUwMDNjbGludXgvcnBsX2lwdHVubmVsLmhcXHUwMDNlXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtOC1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE0LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjE1OnN0cnVjdCBycGxfaXB0dW5uZWxfZW5jYXAge1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTE2LVxcdERFQ0xBUkVfRkxFWF9BUlJBWShzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyLCBzcmgpO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MTk9c3RydWN0IHJwbF9sd3Qge1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTIwLVxcdHN0cnVjdCBkc3RfY2FjaGUgY2FjaGU7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MjE6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCB0dW5pbmZvO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTIyLX07XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0yND1zdGF0aWMgaW5saW5lIHN0cnVjdCBycGxfbHd0ICpycGxfbHd0X2x3dHVubmVsKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0KVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMjgtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6Mjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMC1ycGxfZW5jYXBfbHd0dW5uZWwoc3RydWN0IGx3dHVubmVsX3N0YXRlICpsd3QpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnBsX2lwdHVubmVsX3BvbGljeVtSUExfSVBUVU5ORUxfTUFYICsgMV0gPSB7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzYtXFx0W1JQTF9JUFRVTk5FTF9TUkhdXFx0PSB7IC50eXBlID0gTkxBX0JJTkFSWSB9LFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9Njc9c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04MS1cXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBSUExfSVBUVU5ORUxfTUFYLCBubGEsXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODI6XFx0XFx0XFx0ICAgICAgIHJwbF9pcHR1bm5lbF9wb2xpY3ksIGV4dGFjayk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODMtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0xOTA9c3RhdGljIGludCBycGxfZG9fc3JoKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBycGxfbHd0ICpybHd0LFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTkzLVxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzoxOTQ6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdGluZm87XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTk1LVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMjU6XFx0XFx0XFx0ICAgc3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbylcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zMjYte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjMyNzpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICpkYXRhO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMyOC1cXHRzdHJ1Y3QgbmxhdHRyICpubGE7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNDM9c3RhdGljIGludCBycGxfZmlsbF9lbmNhcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDUte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM0NjpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICp0dW5pbmZvID0gcnBsX2VuY2FwX2x3dHVubmVsKGx3dHN0YXRlKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNDctXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNTQ9c3RhdGljIGludCBycGxfZW5jYXBfbmxzaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU1LXtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNTY6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqdHVuaW5mbyA9IHJwbF9lbmNhcF9sd3R1bm5lbChsd3RzdGF0ZSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU3LVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzYxPXN0YXRpYyBpbnQgcnBsX2VuY2FwX2NtcChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmEsIHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqYilcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjIte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2MzpcXHRzdHJ1Y3QgcnBsX2lwdHVubmVsX2VuY2FwICphX2hkciA9IHJwbF9lbmNhcF9sd3R1bm5lbChhKTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjQ6XFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYl9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzY1LVxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjUwLjM2NDU0MTMxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMTU3NTU1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgUlBMIHdpdGggU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgZXh0aGRycy5jYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgdGhlIGBDT05GSUdfSVBWNl9SUExfU1JIYCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbiBvciBzb21ldGhpbmcgY2xvc2VseSByZWxhdGVkIHRoYXQgbWlnaHQgaGFuZGxlIHNpbWlsYXIgY29uZmlndXJhdGlvbnMuIEkgcmVjYWxsIHRoYXQgZmlsZSBjb250YWluaW5nIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgY29kZSwgc28gdGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgbGluZSBudW1iZXJzIHdpdGhpbiB0aGF0IGZpbGUgc3VnZ2VzdHMgbGluZSA0ODEgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgc3BlY2lmaWMgaW52ZXN0aWdhdGlvbi4gSSB3aWxsIHN0YXJ0IHRoZXJlLCBidXQgSSdsbCBtYWtlIHN1cmUgdG8gdXNlIG15IGV4cGVydCBrbm93bGVkZ2Ugb2Yga2VybmVsIGNvZGUgdG8gZXZhbHVhdGUgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhhdCBsaW5lIGZvciBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTIuMzgwMzAwMDEzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzU6XFx0XFxuIDQ3NjpcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDc3OlxcdFxcbiA0Nzg6XFx0XFx0cmV0dXJuIC0xO1xcbiA0Nzk6XFx0fVxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gNDgyOlxcdHtcXG4gNDgzOlxcdFxcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmhkciwgKm9oZHIsICpjaGRyO1xcbiA0ODQ6XFx0XFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiA0ODU6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXFx1MDAzZWRldik7XFxuIDQ4NjpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xcbiA0ODc6XFx0XFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xcbiA0ODg6XFx0XFx0dW5zaWduZWQgY2hhciAqYnVmO1xcbiA0ODk6XFx0XFx0aW50IGFjY2VwdF9ycGxfc2VnO1xcbiA0OTA6XFx0XFx0aW50IGksIGVycjtcXG4gNDkxOlxcdFxcdHU2NCBuID0gMDtcXG4gNDkyOlxcdFxcdHUzMiByO1xcbiA0OTM6XFx0XFxuIDQ5NDpcXHRcXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxcbiA0OTU6XFx0XFx0XFx0XFx0ICAgICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xcbiA0OTY6XFx0XFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xcbiA0OTc6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ5ODpcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdGxvb3BlZF9iYWNrOlxcbiA1MDI6XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA1MDM6XFx0XFxuIDUwNDpcXHRcXHRpZiAoaGRyLVxcdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcXG4gNTA1OlxcdFxcdFxcdGlmIChoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2KSB7XFxuIDUwNjpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNTA3OlxcdFxcbiA1MDg6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDUwOTpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA1MTA6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA1MTE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNTEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDUxMzpcXHRcXG4gNTE0OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxODo1Mi4zODA0MDA1MjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMwNDA2MzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgUlBMIEtjb25maWcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBSUEwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIEkga25vdyBJJ3ZlIHdvcmtlZCB3aXRoIHRoaXMgYXJlYSBiZWZvcmUsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24ga25vYnMgYXZhaWxhYmxlLiBJJ20gdGhpbmtpbmcgSSdsbCBmaW5kIHRoZW0gaW4gYG5ldC9pcHY2L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIElQdjYtcmVsYXRlZCBzZXR0aW5ncyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBjb250cm9sbGFibGUgYXQgY29tcGlsZSB0aW1lIHdpdGggcmVzcGVjdCB0byBSUEwgLSAgYXJlIHRoZXJlIGRpZmZlcmVudCBSUEwgaW1wbGVtZW50YXRpb25zLCBmZWF0dXJlcywgb3Igb3B0aW1pemF0aW9uIG9wdGlvbnMgSSBjYW4gc2VsZWN0aXZlbHkgZW5hYmxlIG9yIGRpc2FibGU/IEFyZSB0aGVyZSBwYXJ0aWN1bGFyIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBtaWdodCBuZWVkIHR3ZWFraW5nIGZvciBteSB1c2UgY2FzZT8gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSByZWxldmFudCBwYXJhbWV0ZXJzIEkgc2hvdWxkIGJlIGF3YXJlIG9mIGZvciBjdXN0b21pemluZyB0aGUgUlBMIGJlaGF2aW9yIHdpdGhpbiBteSB0YXJnZXQgc3lzdGVtLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIG9wdGlvbnMgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBSUEwgc3VwcG9ydCBlbnRpcmVseSwgcGVyaGFwcyBkaWZmZXJlbnQgUlBMIG1vZGVzLCBvciBwb3NzaWJseSBldmVuIGZsYWdzIHJlbGF0ZWQgdG8gc3BlY2lmaWMgcm91dGluZyBtZXRyaWNzIG9yIHBhdGggc2VsZWN0aW9uIGNyaXRlcmlhLiBJdOKAmXMgYWxsIGluIHRoZSBgS2NvbmZpZ2AgYWZ0ZXIgYWxsLiBUaW1lIHRvIGdldCB0aGUgY29tcGlsZXIgYnVpbGRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjEsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU0LjY4NDQ2NzQwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MzQzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUlBMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MzEyPWNvbmZpZyBJUFY2X1NFRzZfQlBGXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnOjMxODpcXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxubmV0L2lwdjYvS2NvbmZpZy0zMTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyMi1cXHRoZWxwXFxubmV0L2lwdjYvS2NvbmZpZzozMjM6XFx0ICBTdXBwb3J0IGZvciBSRkM2NTU0IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgdXNpbmcgdGhlIGxpZ2h0d2VpZ2h0XFxubmV0L2lwdjYvS2NvbmZpZy0zMjQtXFx0ICB0dW5uZWxzIG1lY2hhbmlzbS5cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTI2PWlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOC1pcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzQ1LVxcdGFycmF5W0RFVkNPTkZfTkRJU0NfVENMQVNTXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZW5kaXNjX3RjbGFzcyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzQ2OlxcdGFycmF5W0RFVkNPTkZfUlBMX1NFR19FTkFCTEVEXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01NzQ3LVxcdGFycmF5W0RFVkNPTkZfSU9BTTZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVxcdTAwM2Vpb2FtNl9lbmFibGVkKTtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz00MTk9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppY21wNl9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy00MzAtXFxubmV0L2lwdjYvaWNtcC5jOjQzMTpcXHRcXHQvKiBUaGUgZGVzdGluYXRpb24gY291bGQgYmUgYW4gZXh0ZXJuYWwgSVAgaW4gRXh0IEhkciAoU1J2NiwgUlBMLCBldGMuKSxcXG5uZXQvaXB2Ni9pY21wLmMtNDMyLVxcdFxcdCAqIGFuZCBpcDZfbnVsbF9lbnRyeSBjb3VsZCBiZSBzZXQgdG8gc2tiIGlmIG5vIHJvdXRlIGlzIGZvdW5kLlxcbi0tXFxubmV0L2lwdjYvcnBsLmMtMTAtI2RlZmluZSBJUFY2X1BGWFRBSUxfTEVOKHgpIChzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAtICh4KSlcXG5uZXQvaXB2Ni9ycGwuYzoxMTojZGVmaW5lIElQVjZfUlBMX0JFU1RfQUREUl9DT01QUkVTU0lPTiAxNVxcbm5ldC9pcHY2L3JwbC5jLTEyLVxcbi0tXFxubmV0L2lwdjYvcnBsLmM9NTY9c3RhdGljIHVuc2lnbmVkIGNoYXIgaXB2Nl9ycGxfc3JoX2NhbGNfY21wcmkoY29uc3Qgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaW5oZHIsXFxuLS1cXG5uZXQvaXB2Ni9ycGwuYy03MC1cXG5uZXQvaXB2Ni9ycGwuYzo3MTpcXHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xcbm5ldC9pcHY2L3JwbC5jLTcyLX1cXG4tLVxcbm5ldC9pcHY2L3JwbC5jPTc0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlwdjZfcnBsX3NyaF9jYWxjX2NtcHJlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXFxuLS1cXG5uZXQvaXB2Ni9ycGwuYy04My1cXG5uZXQvaXB2Ni9ycGwuYzo4NDpcXHRyZXR1cm4gSVBWNl9SUExfQkVTVF9BRERSX0NPTVBSRVNTSU9OO1xcbm5ldC9pcHY2L3JwbC5jLTg1LX1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTMwPXJwbF9lbmNhcF9sd3R1bm5lbChzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmx3dClcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM0LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBycGxfaXB0dW5uZWxfcG9saWN5W1JQTF9JUFRVTk5FTF9NQVggKyAxXSA9IHtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozNjpcXHRbUlBMX0lQVFVOTkVMX1NSSF1cXHQ9IHsgLnR5cGUgPSBOTEFfQklOQVJZIH0sXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzctfTtcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTY3PXN0YXRpYyBpbnQgcnBsX2J1aWxkX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNzEte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjcyOlxcdHN0cnVjdCBubGF0dHIgKnRiW1JQTF9JUFRVTk5FTF9NQVggKyAxXTtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy03My1cXHRzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKm5ld3RzO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODAtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODE6XFx0ZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgUlBMX0lQVFVOTkVMX01BWCwgbmxhLFxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTgyLVxcdFxcdFxcdCAgICAgICBycGxfaXB0dW5uZWxfcG9saWN5LCBleHRhY2spO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtODUtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6ODY6XFx0aWYgKCF0YltSUExfSVBUVU5ORUxfU1JIXSlcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy04OC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzo4OTpcXHRzcmggPSBubGFfZGF0YSh0YltSUExfSVBUVU5ORUxfU1JIXSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6OTA6XFx0c3JoX2xlbiA9IG5sYV9sZW4odGJbUlBMX0lQVFVOTkVMX1NSSF0pO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTkxLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMTEyLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjExMzpcXHRuZXd0cy1cXHUwMDNldHlwZSA9IExXVFVOTkVMX0VOQ0FQX1JQTDtcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0xMTQtXFx0bmV3dHMtXFx1MDAzZWZsYWdzIHw9IExXVFVOTkVMX1NUQVRFX0lOUFVUX1JFRElSRUNUO1xcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzI0PXN0YXRpYyBpbnQgbmxhX3B1dF9ycGxfc3JoKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSxcXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTMzMC1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYzozMzE6XFx0bGVuID0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKHR1bmluZm8tXFx1MDAzZXNyaCk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzMyLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9MzQzPXN0YXRpYyBpbnQgcnBsX2ZpbGxfZW5jYXBfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzQ3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM0ODpcXHRpZiAobmxhX3B1dF9ycGxfc3JoKHNrYiwgUlBMX0lQVFVOTkVMX1NSSCwgdHVuaW5mbykpXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzQ5LVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zNTQ9c3RhdGljIGludCBycGxfZW5jYXBfbmxzaXplKHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbHd0c3RhdGUpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNTctXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzU4OlxcdHJldHVybiBubGFfdG90YWxfc2l6ZShSUExfSVBUVU5ORUxfU1JIX1NJWkUodHVuaW5mby1cXHUwMDNlc3JoKSk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzU5LX1cXG4tLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jPTM2MT1zdGF0aWMgaW50IHJwbF9lbmNhcF9jbXAoc3RydWN0IGx3dHVubmVsX3N0YXRlICphLCBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKmIpXFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjQtXFx0c3RydWN0IHJwbF9pcHR1bm5lbF9lbmNhcCAqYl9oZHIgPSBycGxfZW5jYXBfbHd0dW5uZWwoYik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6MzY1OlxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzY2LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM2NzpcXHRpZiAobGVuICE9IFJQTF9JUFRVTk5FTF9TUkhfU0laRShiX2hkci1cXHUwMDNlc3JoKSlcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy0zNjgtXFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zODQ9aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzg3LVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM4ODpcXHRlcnIgPSBsd3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTM4OS1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzkxLVxcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjM5MjpcXHRwcl9pbmZvKFxcXCJSUEwgU2VnbWVudCBSb3V0aW5nIHdpdGggSVB2NlxcXFxuXFxcIik7XFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtMzkzLVxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM9NDAwPXZvaWQgcnBsX2V4aXQodm9pZClcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy00MDEte1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jOjQwMjpcXHRsd3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZycGxfb3BzLCBMV1RVTk5FTF9FTkNBUF9SUEwpO1xcbm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jLTQwMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU0LjczMjQwNTY3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzY4Mzg2NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NiBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb2Ygc3BlY2lmaWMgZmlsZXMuIEkga25vdyBgYWRkcmNvbmYuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBzdHJhaWdodGZvcndhcmQuIE5vdywgSSdtIGN1cmlvdXMgYWJvdXQgYHJwbC5jYC4gV2hlcmUgZG9lcyB0aGF0IGZpdCBpbj8gVG8gZmlndXJlIGl0IG91dCwgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBuZXQvaXB2Ni9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlciBJIG5lZWQgcmVnYXJkaW5nIGl0cyBjb21waWxhdGlvbiBjb250ZXh0IHdpdGhpbiB0aGUgSVB2NiBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTYuNTAwNzk1MTg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ4OTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJycGxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvTWFrZWZpbGU9OD1pcHY2LXkgOj1cXHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMi1cXHRcXHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEzOlxcdFxcdHVkcF9vZmZsb2FkLm8gc2VnNi5vIGZpYjZfbm90aWZpZXIubyBycGwubyBpb2FtNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU2LjU0NzI5MDY4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjEyODc1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IElQdjYgUlBMIERlZHVjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBvYmplY3QgZmlsZXM6IGBycGwub2AsIGBleHRoZHJzLm9gLCBhbmQgYGFkZHJjb25mLm9gLiBUaGV5J3JlIGFsbCBuZXN0ZWQgd2l0aGluIHRoZSBgaXB2Ni15YCBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyB0aGV5J3JlIGJ1aWx0IGF1dG9tYXRpY2FsbHkgYXMgbG9uZyBhcyBgQ09ORklHX0lQVjZgIGlzIHR1cm5lZCBvbi4gTWFrZXMgc2Vuc2UuIE5vdywgYHJwbF9pcHR1bm5lbC5vYCBzZWVtcyB0byBiZSBjb250cm9sbGVkIGJ5IGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBkZXBlbmRlbmN5IHRvIGJlIHN1cmUuIExldCBtZSBnbyBvdmVyIHRvIGBuZXQvaXB2Ni9LY29uZmlnYCByZWFsIHF1aWNrLi4uIFllcCwgYXMgZXhwZWN0ZWQsIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGRlcGVuZHMgZGlyZWN0bHkgb24gYElQVjZgLCBhbmQgdGhhdCBjaGVja3Mgb3V0IHdpdGggdGhlIGRvY3VtZW50YXRpb24uXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IHRoZSBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIGlmIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBhY3R1YWxseSAqdXNlZCogd2l0aGluIGBycGxfaXB0dW5uZWwuY2AuIExldCBtZSB0YWtlIGEgbG9vayBhdCBsaW5lcyAzNS03MCBvZiB0aGF0IGZpbGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTg6NTkuMTYwMTcyODE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3JwbF9pcHR1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM1OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBycGxfaXB0dW5uZWxfcG9saWN5W1JQTF9JUFRVTk5FTF9NQVggKyAxXSA9IHtcXG4gIDM2OlxcdFxcdFtSUExfSVBUVU5ORUxfU1JIXVxcdD0geyAudHlwZSA9IE5MQV9CSU5BUlkgfSxcXG4gIDM3OlxcdH07XFxuICAzODpcXHRcXG4gIDM5OlxcdHN0YXRpYyBib29sIHJwbF92YWxpZGF0ZV9zcmgoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmgsXFxuICA0MDpcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBzZWdsZW4pXFxuICA0MTpcXHR7XFxuICA0MjpcXHRcXHRpbnQgZXJyO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRpZiAoKHNyaC1cXHUwMDNlaGRybGVuIFxcdTAwM2NcXHUwMDNjIDMpICE9IHNlZ2xlbilcXG4gIDQ1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0XFx0LyogY2hlY2sgYXQgbGVhc3Qgb25lIHNlZ21lbnQgYW5kIHNlZ2xlbiBmaXQgd2l0aCBzZWdtZW50c19sZWZ0ICovXFxuICA0ODpcXHRcXHRpZiAoIXNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCB8fFxcbiAgNDk6XFx0XFx0ICAgIChzcmgtXFx1MDAzZXNlZ21lbnRzX2xlZnQgKiBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgIT0gc2VnbGVuKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoc3JoLVxcdTAwM2VjbXByaSB8fCBzcmgtXFx1MDAzZWNtcHJlKVxcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTQ6XFx0XFxuICA1NTpcXHRcXHRlcnIgPSBpcHY2X2Noa19ycGxfc3JoX2xvb3AobmV0LCBzcmgtXFx1MDAzZXJwbF9zZWdhZGRyLFxcbiAgNTY6XFx0XFx0XFx0XFx0XFx0ICAgIHNyaC1cXHUwMDNlc2VnbWVudHNfbGVmdCk7XFxuICA1NzpcXHRcXHRpZiAoZXJyKVxcbiAgNTg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHRpZiAoaXB2Nl9hZGRyX3R5cGUoXFx1MDAyNnNyaC1cXHUwMDNlcnBsX3NlZ2FkZHJbc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0IC0gMV0pIFxcdTAwMjZcXG4gIDYxOlxcdFxcdCAgICBJUFY2X0FERFJfTVVMVElDQVNUKVxcbiAgNjI6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDY1OlxcdH1cXG4gIDY2OlxcdFxcbiAgNjc6XFx0c3RhdGljIGludCBycGxfYnVpbGRfc3RhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuICA2ODpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgZmFtaWx5LCBjb25zdCB2b2lkICpjZmcsXFxuICA2OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbHd0dW5uZWxfc3RhdGUgKip0cyxcXG4gIDcwOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1JQTF9JUFRVTk5FTF9NQVggKyAxXTtcXG4gIDczOlxcdFxcdHN0cnVjdCBsd3R1bm5lbF9zdGF0ZSAqbmV3dHM7XFxuICA3NDpcXHRcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpzcmg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE4OjU5LjE2MDI2OTY4NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDgxMzA0MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlBMIFNSSCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgUlBMIChSb3V0aW5nIFByb3RvY29sIGZvciBMb3ctUG93ZXIgYW5kIExvc3N5IE5ldHdvcmtzKSBTb3VyY2UgUm91dGluZyBIZWFkZXIgKFNSSCkgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJJ20gc3RhcnRpbmcgd2l0aCBgcnBsX2J1aWxkX3N0YXRlYCwgYW5kIGl0J3MgY2FsbGluZyBgcnBsX3ZhbGlkYXRlX3NyaGAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHJwbF92YWxpZGF0ZV9zcmhgIHRoZW4gY2FsbHMgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyBzZXJpZXMgb2YgY2FsbHMgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIFJQTCBTUkggdmFsaWRhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcHJldmVudGluZyBsb29wcyBhbmQgZW5zdXJpbmcgY29ycmVjdCByb3V0aW5nLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmJvdW5kIHBhdGguIGBpcHY2X3JwbF9zcmhfcmN2YCBzZWVtcyB0byBiZSB0aGUga2V5IGZ1bmN0aW9uIGZvciAqcmVjZWl2aW5nKiB0aGVzZSBTUkggcGFja2V0cy4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIHZlcnkgZGVzY3JpcHRpdmUuIEkgYWxyZWFkeSBrbm93IHRoaXMgaXMgZm91bmQgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AsIGhhbmRsaW5nIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gYW4gSVB2NiBwYWNrZXQgY29tZXMgaW4gdGhhdCBoYXMgYW4gUlBMIFNSSDsgaXQncyBpZGVudGlmaWVkIGJ5IGhlYWRlciB0eXBlIDMuIFNvIG5vdyBJIHdhbnQgdG8gdHJhY2UgaG93IGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBpbnZva2VkLiBUaW1lIHRvIGRpdmUgaW50byBgbmV0L2lwdjYvZXh0aGRycy5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgdGhhdCBmdW5jdGlvbiB0byBjb21wbGV0ZSB0aGUgcGljdHVyZSBvZiBkYXRhIGZsb3cgYW5kIHZhbGlkYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MDIuMjQxNTc2MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwMzgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy00ODAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjQ4MTpzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNDgyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4OC1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODk6XFx0XFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjkwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjAyLjI4OTM4NTU2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDk5ODg3MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgSVB2NiBSUEwgTG9vcCBEZXRlY3Rpb24gQnVnIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGlwdjZfcnRoZHJfcmN2YCwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCBgaXB2Nl9ycGxfc3JoX3JjdmAgZm9yIFJQTCByb3V0aW5nIGhlYWRlcnMuICBJIGFsc28gc2VlIHRoYXQgYHJwbF9idWlsZF9zdGF0ZWAgcGxheXMgYSByb2xlIGluIGhhbmRsaW5nIG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbiBmb3IgbGlnaHR3ZWlnaHQgdHVubmVscywgcGFydGljdWxhcmx5IGBlbmNhcCBycGxgLiAgTXkgZm9jdXMgaXMgb24gYSByZWNlbnQgY29tbWl0IHRoYXQgdG91Y2hlcyBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuICBJIHNlZSBhIGNvZGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCwgYSBmdW5jdGlvbiBjcnVjaWFsIGZvciBkZXRlY3RpbmcgbG9vcHMgd2l0aGluIFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXJzIChTUkgpLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29uZGl0aW9uYWwgYWx0ZXJhdGlvbi4gVGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBgaWYgKGZvdW5kIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpYCwgbWVhbmluZyB0aGVyZSBoYWQgdG8gYmUgbW9yZSB0aGFuIG9uZSBsb2NhbCBhZGRyZXNzICphbmQqIHRoZXkgd2VyZSBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcy4gVGhlIHVwZGF0ZWQgdmVyc2lvbiB1c2VzIGBpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZClgLiBUaGlzIGluZGljYXRlcyBhIGNoYW5nZSB0byBkZXRlY3QgbG9vcHMgbW9yZSBlZmZpY2llbnRseS5cblxuTGV0J3MgZGlzc2VjdCB0aGlzIGxvZ2ljIGJhc2VkIG9uIFJGQyA2NTU0LCB3aGljaCBtYW5kYXRlcyBsb29wIGRldGVjdGlvbiBpbiBTUkhzLiBUaGUgcm91dGVyICptdXN0KiBkZXRlcm1pbmUgaWYgdGhlIFNSSCBjb250YWlucyBtdWx0aXBsZSBhZGRyZXNzZXMgYXNzaWduZWQgdG8gaXRzIGludGVyZmFjZXMuIElmIGFuIGludGVyZmFjZSdzIGFkZHJlc3MgYXBwZWFycyBtb3JlIHRoYW4gb25jZSwgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IG9uZSBvdGhlciBhZGRyZXNzIG5vdCBvbiB0aGUgcm91dGVyLCBpdCdzIGEgbG9vcC4gIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIHRvbyBzdHJpY3Q7IGl0IHJlcXVpcmVkICp0aHJlZSogbG9jYWwgYWRkcmVzc2VzIHNlcGFyYXRlZCBieSBub24tbG9jYWxzIHRvIHRyaWdnZXIgbG9vcCBkZXRlY3Rpb24uXG5cblRoZSBjb3JyZWN0ZWQgY29kZSBub3cgY29ycmVjdGx5IGZsYWdzIHRoZSBsb29wIGFzIHNvb24gYXMgaXQgc2VlcyAqb25lKiBsb2NhbCBhZGRyZXNzLCB0aGVuIGEgbm9uLWxvY2FsLCBmb2xsb3dlZCBieSBhbm90aGVyIGxvY2FsIGFkZHJlc3MuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBpbXByb3ZlbWVudC4gSSBiZWxpZXZlIHRoaXMgZml4IGlzIGNydWNpYWwgZm9yIHJvYnVzdCBSUEwgb3BlcmF0aW9uLlxuXG5Ob3csIGlzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBuZXR3b3JraW5nLCBwYXJ0IG9mIHRoZSBJUHY2IHN0YWNrLiAgSXQncyByZWFjaGFibGUgaW4gYSBjb3VwbGUgb2Yga2V5IHdheXM6XG5cbiogICBOZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gKHVzaW5nIGBSVE1fTkVXUk9VVEVgIHdpdGggYFJUQV9FTkNBUGAgYW5kIGBSVEFfRU5DQVBfVFlQRSA9PSBMV1RVTk5FTF9FTkNBUF9SUExgKS4gIFRoaXMgY2FuIGNvbmZpZ3VyZSBsaWdodHdlaWdodCB0dW5uZWxzIGJhc2VkIG9uIFJQTC5cbiogICBEaXJlY3RseSB0aHJvdWdoIHNlbmRpbmcgSVB2NiBwYWNrZXRzIHdpdGggYW4gUlBMIHJvdXRpbmcgaGVhZGVyLCBpZiB0aGUgaW50ZXJmYWNlIG9yIG5ldCBoYXMgYHJwbF9zZWdfZW5hYmxlZGAgc2V0LlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgaWYgdGhpcyBpcyBcIldvcnRoRnV6emluZ1wiLiAgTXkgY3JpdGVyaWEgYXJlOlxuXG4qICAgKipDb3JlIFN1YnN5c3RlbXM6KiogWWVzLCB0aGlzIGlzIGluIGBuZXQvaXB2Ni9hZGRyY29uZi5jYCwgcGFydCBvZiBjb3JlIG5ldHdvcmtpbmcgYW5kIElQdjYgcGFja2V0L3JvdXRlIHByb2Nlc3NpbmcuXG4qICAgKipSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOioqIFllcywgYm90aCBuZXRsaW5rIGFuZCBJUHY2IHBhY2tldHMgYXJlIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBcIldvcnRoRnV6emluZ1wiIGlzIHRydWUuIFRoaXMgY2hhbmdlIGFmZmVjdHMgY3JpdGljYWwgbmV0d29yayBmdW5jdGlvbiBhbmQgcm91dGUgcHJvY2Vzc2luZyBsb2dpYy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuICBgQ09ORklHX0lQVjZgIGlzIGNsZWFybHkgcmVxdWlyZWQsIHNpbmNlIGBhZGRyY29uZi5jYCBhbmQgYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAgcmVzaWRlIHdpdGhpbiB0aGUgSVB2NiBzdWJzeXN0ZW0uIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGlzIHByb2JhYmx5IGEgZmFjdG9yIGZvciBSUEwgdHVubmVsIHN1cHBvcnQuIEkgd2lsbCBkb3VibGUtY2hlY2suIEluZGVlZCwgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgZGVwZW5kcyBvbiBgSVBWNmAuXG5cbk5vdywgZG9lcyB0aGUgcHJlc2VuY2Ugb2YgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAgbGltaXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYD8gIEkgbmVlZCB0byByZXZpZXcgYGV4dGhkcnMuY2AuIEkgaGF2ZSB0byBjb25maXJtIHdoZXRoZXIgYGlwdjZfcnBsX3NyaF9yY3ZgICh0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFJQTCBoZWFkZXJzKSBoYXMgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiAgSSdsbCBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyA0ODAtNTc1IGFuZCA2ODAtNjk1IGluIGBleHRoZHJzLmNgLiAgVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgcmVnYXJkaW5nIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWx3YXlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxMC43ODkyNzQ3NTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxcbiA2ODE6XFx0XFx0XFx0Lyogc2VnbWVudCByb3V0aW5nICovXFxuIDY4MjpcXHRcXHRcXHRpZiAoIWlkZXYpXFxuIDY4MzpcXHRcXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbiA2ODQ6XFx0XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2ODU6XFx0XFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG4gNjg2OlxcdFxcdFxcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cXG4gNjg3OlxcdFxcdFxcdGlmICghaWRldilcXG4gNjg4OlxcdFxcdFxcdFxcdGdvdG8gZGlzYWJsZWQ7XFxuIDY4OTpcXHRcXHRcXHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiA2OTA6XFx0XFx0ZGVmYXVsdDpcXG4gNjkxOlxcdFxcdFxcdGJyZWFrO1xcbiA2OTI6XFx0XFx0fVxcbiA2OTM6XFx0XFxuIDY5NDpcXHRsb29wZWRfYmFjazpcXG4gNjk1OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiA2OTY6XFx0XFx0XFx0c3dpdGNoIChoZHItXFx1MDAzZXR5cGUpIHtcXG4gNjk3OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2X01JUDYpXFxuIDY5ODpcXHRcXHRcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8yOlxcbiA2OTk6XFx0XFx0XFx0XFx0LyogU2lsZW50bHkgZGlzY2FyZCB0eXBlIDIgaGVhZGVyIHVubGVzcyBpdCB3YXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MTAuNzg5MzY2MjkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ2MjU1Nzg0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFJQTCBTUkggQ29kZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb24gaW4gYGV4dGhkcnMuY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgY29kZSBpcyAqYWx3YXlzKiBjb21waWxlZCBpZiBJUHY2IGlzIGVuYWJsZWQsIGFuZCBub3QganVzdCB3aGVuIHRoZSBMaWdodHdlaWdodCBUdW5uZWxpbmcgZmVhdHVyZSBmb3IgUlBMIGlzIGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgIGlzIHJlbGF0ZWQgdG8gcm91dGUgZW5jYXBzdWxhdGlvbiwgd2hpY2ggaXMgYSBkaWZmZXJlbnQgYXNwZWN0LCBpdCBlbmFibGVzIHRoZSByb3V0ZSBjb25maWd1cmF0aW9uIHBhdGggdGhhdCB0aGlzIHNwZWNpZmljIHRlc3Qgc2NyaXB0IGlzIHVzaW5nLiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgQ09ORklHX0lQVjZgIGlzIGFsc28gcmVsZXZhbnQgYmVjYXVzZSBpdCBlbmFibGVzIHRoZSBjb3JlIElQdjYgc3RhY2sgYW5kIHRoZSB1bmRlcmx5aW5nIHBhY2tldCBwYXJzaW5nLlxuXG5Ob3csIGxldCBtZSBzZWUuLi4gd2hpY2ggZnVuY3Rpb25zIHdlcmUgYWN0dWFsbHkgdG91Y2hlZCBpbiB0aGUgY29kZT8gSSd2ZSBnb3QgaXQ6IGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIHdhcyBkaXJlY3RseSBtb2RpZmllZC4gQnV0IHdoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbj8gVGhhdCB3b3VsZCBiZSBgaXB2Nl9ycGxfc3JoX3JjdmAgaXRzZWxmLCBvYnZpb3VzbHksIGFsb25nIHdpdGggYHJwbF92YWxpZGF0ZV9zcmhgLCBhbmQgYHJwbF9idWlsZF9zdGF0ZWAuXG5cbk9rYXksIGFyZSBgcnBsX3ZhbGlkYXRlX3NyaGAgYW5kIGBycGxfYnVpbGRfc3RhdGVgIHN0YXRpY2FsbHkgZGVmaW5lZCwgb3IgaW5saW5lZD8gTG9va2luZyBhdCBsaW5lIDM5IGluIGBycGxfaXB0dW5uZWwuY2AsIGBycGxfdmFsaWRhdGVfc3JoYCBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIGZ1bmN0aW9uLiBBbmQgYHJwbF9idWlsZF9zdGF0ZWAgaXMgc3RhdGljIGFzIHdlbGwuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJZiB0aGV5J3JlIHN0YXRpYywgaG93IGlzIGBycGxfYnVpbGRfc3RhdGVgIHJlZ2lzdGVyZWQgYW5kIGV4cG9zZWQgZm9yIHVzZT8gSSdsbCBuZWVkIHRvIGxvb2sgYXJvdW5kIGxpbmUgMzcwIGluIGBuZXQvaXB2Ni9ycGxfaXB0dW5uZWwuY2AgdG8gc2VlIGhvdyB0aGF0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxNS40MTQ5NDc4MThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTIzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvcnBsX2lwdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdFxcdGludCBsZW4gPSBSUExfSVBUVU5ORUxfU1JIX1NJWkUoYV9oZHItXFx1MDAzZXNyaCk7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdGlmIChsZW4gIT0gUlBMX0lQVFVOTkVMX1NSSF9TSVpFKGJfaGRyLVxcdTAwM2VzcmgpKVxcbiAzNjg6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtZW1jbXAoYV9oZHIsIGJfaGRyLCBsZW4pO1xcbiAzNzE6XFx0fVxcbiAzNzI6XFx0XFxuIDM3MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGx3dHVubmVsX2VuY2FwX29wcyBycGxfb3BzID0ge1xcbiAzNzQ6XFx0XFx0LmJ1aWxkX3N0YXRlXFx0PSBycGxfYnVpbGRfc3RhdGUsXFxuIDM3NTpcXHRcXHQuZGVzdHJveV9zdGF0ZVxcdD0gcnBsX2Rlc3Ryb3lfc3RhdGUsXFxuIDM3NjpcXHRcXHQub3V0cHV0XFx0XFx0PSBycGxfb3V0cHV0LFxcbiAzNzc6XFx0XFx0LmlucHV0XFx0XFx0PSBycGxfaW5wdXQsXFxuIDM3ODpcXHRcXHQuZmlsbF9lbmNhcFxcdD0gcnBsX2ZpbGxfZW5jYXBfaW5mbyxcXG4gMzc5OlxcdFxcdC5nZXRfZW5jYXBfc2l6ZVxcdD0gcnBsX2VuY2FwX25sc2l6ZSxcXG4gMzgwOlxcdFxcdC5jbXBfZW5jYXBcXHQ9IHJwbF9lbmNhcF9jbXAsXFxuIDM4MTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAzODI6XFx0fTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0aW50IF9faW5pdCBycGxfaW5pdCh2b2lkKVxcbiAzODU6XFx0e1xcbiAzODY6XFx0XFx0aW50IGVycjtcXG4gMzg3OlxcdFxcbiAzODg6XFx0XFx0ZXJyID0gbHd0dW5uZWxfZW5jYXBfYWRkX29wcyhcXHUwMDI2cnBsX29wcywgTFdUVU5ORUxfRU5DQVBfUlBMKTtcXG4gMzg5OlxcdFxcdGlmIChlcnIpXFxuIDM5MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0cHJfaW5mbyhcXFwiUlBMIFNlZ21lbnQgUm91dGluZyB3aXRoIElQdjZcXFxcblxcXCIpO1xcbiAzOTM6XFx0XFxuIDM5NDpcXHRcXHRyZXR1cm4gMDtcXG4gMzk1OlxcdFxcbiAzOTY6XFx0b3V0OlxcbiAzOTc6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToxNS40MTUwNDI5NzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTI3MTc5ODQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBpcHY2X2Noa19ycGxfc3JoX2xvb3AqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAtIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoLCBleHBvcnRlZCBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIElQdjYgYWRkcmVzcyBjb25maWd1cmF0aW9uIGNvZGUuIEEgcXVpY2sgY2hlY2sgb2YgYGthbGxzeW1zYCBjb25maXJtcyBpdCdzIG5vdCBzdGF0aWMuIEdvb2QuIEFsc28sIGBpcHY2X3JwbF9zcmhfcmN2YCBpcyBhbHNvIHRoZXJlLCBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycy4gV2UndmUgYWxyZWFkeSBncmVwcGVkIHRvIGZpbmQgaXRzIGNhbGxlcnM6IGJlc2lkZXMgYGlwdjZfcnBsX3NyaF9yY3ZgLCB3ZSBoYXZlIGBycGxfdmFsaWRhdGVfc3JoYC5cblxuTm93LCBsZXQncyByZWZlciB0byBTZWN0aW9uIDQuIFdlIHdhbnQgdG8gYmUgc3BlY2lmaWMgaGVyZS4gV2Ugc2hvdWxkIE5PVCBsaXN0IHRoZSB1YmlxdWl0b3VzIGZ1bmN0aW9ucy4gV2UgbXVzdCBmb2N1cyBvdXIgdGFyZ2V0cyBvbiBzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBBUEkgZW50cnlwb2ludHMsIGNvcnJlY3Q/XG5cblJpZ2h0LiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCAqaXMqIHRoZSBkaXJlY3RseSBtb2RpZmllZCBmdW5jdGlvbi4gSXQncyB0aGUgbG9vcCBkZXRlY3Rpb24uIFRoZSBwYWNrZXQgcmVjZWl2ZSBoYW5kbGVyIGZvciBSUEwgU1JILCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGNhbGxzIGl0LiBTaW1pbGFybHksIGBycGxfdmFsaWRhdGVfc3JoYCB3aGljaCBpcyBwYXJ0IG9mIHRoZSByb3V0ZSB2YWxpZGF0aW9uIGxvZ2ljLCBpcyBhbHNvIGEgY2FsbGVyLCBhbmQgdGhhdCdzIGNhbGxlZCBieSBgcnBsX2J1aWxkX3N0YXRlYCBmcm9tIHRoZSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gc2lkZS4gUGVyZmVjdC5cblxuVGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBgSVBWNmAgaXMgb2J2aW91c2x5IG5lZWRlZCwgYXMgYXJlIGBhZGRyY29uZi5jYCBhbmQgYGV4dGhkcnMuY2AuIEFsc28sIGBJUFY2X1JQTF9MV1RVTk5FTGAgZW5hYmxlcyBSUEwgbGlnaHR3ZWlnaHQgdHVubmVscyBhbmQgYHJwbF9pcHR1bm5lbC5jYCwgc28gdGhhdCdzIGFsc28gbmVlZGVkLlxuXG5TbywgdGhlIHJhdGlvbmFsZTogdGhlIHBhdGNoIGlzIGZpeGluZyBsb29wIGRldGVjdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYCBmb3IgUlBMIFNSSHMsIHNwZWNpZmljYWxseSBoYW5kbGluZyB0aGUgc2NlbmFyaW8gd2hlcmUgbG9jYWwgYWRkcmVzc2VzIGFyZSBzZXBhcmF0ZWQgYnkgYXQgbGVhc3Qgb25lIG5vbi1sb2NhbCBhZGRyZXNzLiBUaGUgZnVuY3Rpb24gaXMgY3JpdGljYWwgYmVjYXVzZSBpdCdzIHBhcnQgb2YgdGhlIElQdjYgY29yZSwgYW5kIGlzIHJlYWNoYWJsZSBib3RoIHZpYSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbCBlbmNhcHN1bGF0aW9uLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zLiBJdCBzZWVtcyBsaWtlIGl0IGNvdWxkIGxlYWQgdG8gaW52YWxpZCByb3V0ZXMgb3IgaW1wYWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5UaGlzIGFsbCBzZWVtcyBzb2xpZC4gV2UgYXJlIGdvb2QgdG8gZ28sIGFsbCBvZiB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gaXMgdGhlcmUuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDI1LCJPdXRwdXRUb2tlbnMiOjE5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjY4Njg0NDU0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTk3Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JQTF9MV1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiLFxuICAgIFwiaXB2Nl9ycGxfc3JoX3JjdlwiLFxuICAgIFwicnBsX3ZhbGlkYXRlX3NyaFwiLFxuICAgIFwicnBsX2J1aWxkX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbG9vcCBkZXRlY3Rpb24gbG9naWMgaW4gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKCkgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFJQTCBTUkggKGlwdjZfcnBsX3NyaF9yY3YpIGFuZCB2aWEgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uIHVzaW5nIFJQTCBsaWdodHdlaWdodCB0dW5uZWxzIChycGxfYnVpbGRfc3RhdGUgLVxcdTAwM2UgcnBsX3ZhbGlkYXRlX3NyaCkuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgdXBkYXRlZCBjaGVjayBiZWhhdmVzIGNvcnJlY3RseSBkdXJpbmcgU1JIIHZhbGlkYXRpb24gYW5kIHBhY2tldCByb3V0aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUlBMX0xXVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9jaGtfcnBsX3NyaF9sb29wXCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCIsXG4gICAgXCJycGxfdmFsaWRhdGVfc3JoXCIsXG4gICAgXCJycGxfYnVpbGRfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb29wIGRldGVjdGlvbiBsb2dpYyBpbiBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKSB3aXRoaW4gdGhlIElQdjYgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUlBMIFNSSCAoaXB2Nl9ycGxfc3JoX3JjdikgYW5kIHZpYSBuZXRsaW5rIHJvdXRlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUlBMIGxpZ2h0d2VpZ2h0IHR1bm5lbHMgKHJwbF9idWlsZF9zdGF0ZSAtXFx1MDAzZSBycGxfdmFsaWRhdGVfc3JoKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSB1cGRhdGVkIGNoZWNrIGJlaGF2ZXMgY29ycmVjdGx5IGR1cmluZyBTUkggdmFsaWRhdGlvbiBhbmQgcGFja2V0IHJvdXRpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjc2ODQ0OTgzM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0NDkwNTI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToyMC43Njg5NDE5MjNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNjQ0ODU1NjY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKClgIChgbmV0L2lwdjYvYWRkcmNvbmYuY2ApIHVzZWQgdG8gdmFsaWRhdGUgSVB2NiBSUEwgU2VnbWVudCBSb3V0aW5nIEhlYWRlcnMgYWdhaW5zdCByb3V0aW5nIGxvb3BzIGludm9sdmluZyBsb2NhbCBhZGRyZXNzZXMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBgaWYgKGZvdW5kIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCB0byBgaWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXFxuXFxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2YzVjNzE4NTkzOWQ4OTUwYTUzYTZmOGE2Y2FlYmViZDFmN2Q3OWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjM6MTg6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xuaW5kZXggOWQ4OWJlN2UwNTQ0Yi4uZjY3OGZiN2ZhNTc0YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC00NjIxLDcgKzQ2MjEsNyBAQCBpbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxuIFx0XHR9XG4gXG4gXHRcdGlmIChoYXNoX2ZvdW5kKSB7XG4tXHRcdFx0aWYgKGZvdW5kIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBzZXBhcmF0ZWQpIHtcbitcdFx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZCkge1xuIFx0XHRcdFx0cmV0ID0gMTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbmluZGV4IDNlZTMzNzhmOGIyNmUuLjdmZTdlMzhiOWM2YzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTgwLDYgKzgwLDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0cmV1c2Vwb3J0X2FkZHJfYW55LnNoIFxcXG4gXHRyb3V0ZV9oaW50LnNoIFxcXG4gXHRyb3V0ZV9sb2NhbG5ldC5zaCBcXFxuK1x0cnBsX3NyaF9sb29wLnNoIFxcXG4gXHRycHNfZGVmYXVsdF9tYXNrLnNoIFxcXG4gXHRydG5ldGxpbmsucHkgXFxcbiBcdHJ0bmV0bGluay5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnBsX3NyaF9sb29wLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYTJlOTk5MWQ3ODlkNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3JwbF9zcmhfbG9vcC5zaFxuQEAgLTAsMCArMSwzOCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuK3NvdXJjZSBsaWIuc2hcbitcbitjbGVhbnVwKClcbit7XG4rXHRjbGVhbnVwX25zIFwiJE5TXCJcbit9XG4rXG4rdHJhcCBjbGVhbnVwIEVYSVRcbitcbityZXF1aXJlX2NvbW1hbmQgaXBcbitzZXR1cF9ucyBOUyB8fCBleGl0ICQ/XG4rXG4raXAgLW4gXCIkTlNcIiAtNiBhZGRyZXNzIGFkZCAyMDAxOmRiODoxOjoxLzEyOCBkZXYgbG8gbm9kYWRcbitpcCAtbiBcIiROU1wiIC02IGFkZHJlc3MgYWRkIDIwMDE6ZGI4OjM6OjEvMTI4IGRldiBsbyBub2RhZFxuK1xuK2lmICEgaXAgLW4gXCIkTlNcIiAtNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTA6Oi82NCBcXFxuK1x0ZW5jYXAgcnBsIHNlZ3MgMjAwMTpkYjg6NDo6MSBkZXYgbG8gMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0ZWNobyBcIlNLSVA6IFJQTCBsaWdodHdlaWdodCB0dW5uZWwgc3VwcG9ydCBub3QgYXZhaWxhYmxlXCJcbitcdGV4aXQgJGtzZnRfc2tpcFxuK2ZpXG4rXG4rUkVUPTBcbitpcCAtbiBcIiROU1wiIC02IHJvdXRlIGFkZCAyMDAxOmRiODoxMTo6LzY0IFxcXG4rXHRlbmNhcCBycGwgc2VncyAyMDAxOmRiODoxOjoxLDIwMDE6ZGI4OjM6OjEgZGV2IGxvXG4rY2hlY2tfZXJyICQ/IFwiQWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgcmVqZWN0ZWRcIlxuK2xvZ190ZXN0IFwiUlBMIGFjY2VwdHMgYWRqYWNlbnQgbG9jYWwgYWRkcmVzc2VzXCJcbitcbitSRVQ9MFxuK2lwIC1uIFwiJE5TXCIgLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjEyOjovNjQgXFxcbitcdGVuY2FwIHJwbCBzZWdzIDIwMDE6ZGI4OjE6OjEsMjAwMTpkYjg6Mjo6MSwyMDAxOmRiODozOjoxIGRldiBsbyBcXFxuK1x0Mlx1MDAzZS9kZXYvbnVsbFxuK2NoZWNrX2ZhaWwgJD8gXCJTZXBhcmF0ZWQgbG9jYWwgYWRkcmVzc2VzIHdlcmUgYWNjZXB0ZWRcIlxuK2xvZ190ZXN0IFwiUlBMIHJlamVjdHMgc2VwYXJhdGVkIGxvY2FsIGFkZHJlc3Nlc1wiXG4rXG4rZXhpdCAkRVhJVF9TVEFUVVNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjIwLjc2ODk0Mjc0M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjE3NjMwNzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJUHY2IE5ldHdvcmsgUGVyZm9ybWFuY2UgRW5oYW5jZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgc2VlIGlzIGEgcGF0Y2ggdG91Y2hpbmcgYG5ldC9pcHY2L2FkZHJjb25mLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIGZ1bmN0aW9uLiAgSXQgbG9va3MgbGlrZSBhIGNvZGUgbW9kaWZpY2F0aW9uLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgZGlmZiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9naWMgc3Vycm91bmRpbmcgdGhlIGNoZWNrIGZvciBsb29wcyBpbiBSUEwvU1JIIHBhY2tldHMuXG5cblRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgSXQncyBtb3ZpbmcgZnJvbSBgZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAgdG8ganVzdCBgZm91bmQgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAuIEhtbSwgc28gdGhlIG9yaWdpbmFsIGxvZ2ljIHNlZW1lZCB0byBjYXJlIGFib3V0IGhvdyBtYW55IHRpbWVzIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uIHdhcyBtZXQuIE5vdywgdGhlIGNvbmRpdGlvbiBzZWVtcyB0byBiZSBzYXRpc2ZpZWQgYXMgbG9uZyBhcyBpdCdzIGJlZW4gZm91bmQgYXQgYWxsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBmb3VuZGAgYW5kIGBzZXBhcmF0ZWRgIHJlcHJlc2VudCBpbiB0aGlzIGNvbnRleHQuICBBcmUgdGhleSBjb3VudGVycywgZmxhZ3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgY29tbWVudHMgd2lsbCBiZSBjcnVjaWFsIGhlcmUuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBzaWduaWZpY2FudCBhbmQgbmVlZHMgdG8gYmUgYW5hbHl6ZWQgY2FyZWZ1bGx5OyB3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yPyBXaGF0IGVkZ2UgY2FzZXMgZG9lcyB0aGlzIG5ldyBsb2dpYyBhZGRyZXNzPyBcblxuQW5kIHRoZSBhZGRlZCBzZWxmdGVzdC4uLiB0aGF0J3MgYSBnb29kIHNpZ24uICBUaGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ycGxfc3JoX2xvb3Auc2hgIHNjcmlwdCBzdWdnZXN0cyBhIGNvbmNlcnRlZCBlZmZvcnQgdG8gdmFsaWRhdGUgdGhpcyBjaGFuZ2UuICBUaGlzIHdpbGwgYmUgaW1wb3J0YW50IHRvIHJldmlldyBhZnRlciBJJ3ZlIGRldmVsb3BlZCBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIHJ1biB0aGlzIGFuZCBsb29rIGNsb3NlbHkgYXQgdGhlIHJlc3VsdHMuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgY2hhbmdlIHJlbGF0ZWQgdG8gbmV0d29yayBzdGFiaWxpdHkgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBMZXQncyBzZWUgaWYgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjb3JyZWN0IGFuZCBzYWZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODI4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjUuMzg2NTc2ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYwMDpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuNDYwMTpcXHR7XFxuNDYwMjpcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XFxuNDYwMzpcXHRcXHRpbnQgaSwgcmV0ID0gMCwgZm91bmQgPSAwO1xcbjQ2MDQ6XFx0XFx0c3RydWN0IGluZXQ2X2lmYWRkciAqaWZwO1xcbjQ2MDU6XFx0XFx0Ym9vbCBzZXBhcmF0ZWQgPSBmYWxzZTtcXG40NjA2OlxcdFxcdHVuc2lnbmVkIGludCBoYXNoO1xcbjQ2MDc6XFx0XFx0Ym9vbCBoYXNoX2ZvdW5kO1xcbjQ2MDg6XFx0XFxuNDYwOTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuNDYxMDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNlZ3M7IGkrKykge1xcbjQ2MTE6XFx0XFx0XFx0YWRkciA9IFxcdTAwMjZzZWdzW2ldO1xcbjQ2MTI6XFx0XFx0XFx0aGFzaCA9IGluZXQ2X2FkZHJfaGFzaChuZXQsIGFkZHIpO1xcbjQ2MTM6XFx0XFxuNDYxNDpcXHRcXHRcXHRoYXNoX2ZvdW5kID0gZmFsc2U7XFxuNDYxNTpcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZwLCBcXHUwMDI2bmV0LVxcdTAwM2VpcHY2LmluZXQ2X2FkZHJfbHN0W2hhc2hdLCBhZGRyX2xzdCkge1xcbjQ2MTY6XFx0XFxuNDYxNzpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZpZnAtXFx1MDAzZWFkZHIsIGFkZHIpKSB7XFxuNDYxODpcXHRcXHRcXHRcXHRcXHRoYXNoX2ZvdW5kID0gdHJ1ZTtcXG40NjE5OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2MjA6XFx0XFx0XFx0XFx0fVxcbjQ2MjE6XFx0XFx0XFx0fVxcbjQ2MjI6XFx0XFxuNDYyMzpcXHRcXHRcXHRpZiAoaGFzaF9mb3VuZCkge1xcbjQ2MjQ6XFx0XFx0XFx0XFx0aWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZCkge1xcbjQ2MjU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gMTtcXG40NjI2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ2Mjc6XFx0XFx0XFx0XFx0fVxcbjQ2Mjg6XFx0XFxuNDYyOTpcXHRcXHRcXHRcXHRzZXBhcmF0ZWQgPSBmYWxzZTtcXG40NjMwOlxcdFxcdFxcdFxcdGZvdW5kKys7XFxuNDYzMTpcXHRcXHRcXHR9IGVsc2Uge1xcbjQ2MzI6XFx0XFx0XFx0XFx0c2VwYXJhdGVkID0gdHJ1ZTtcXG40NjMzOlxcdFxcdFxcdH1cXG40NjM0OlxcdFxcdH1cXG40NjM1OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjQ2MzY6XFx0XFxuNDYzNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjQ2Mzg6XFx0fVxcbjQ2Mzk6XFx0XFxuNDY0MDpcXHQvKlxcbjQ2NDE6XFx0ICpcXHRQZXJpb2RpYyBhZGRyZXNzIHN0YXR1cyB2ZXJpZmljYXRpb25cXG40NjQyOlxcdCAqL1xcbjQ2NDM6XFx0XFxuNDY0NDpcXHRzdGF0aWMgdm9pZCBhZGRyY29uZl92ZXJpZnlfcnRubChzdHJ1Y3QgbmV0ICpuZXQpXFxuNDY0NTpcXHR7XFxuNDY0NjpcXHRcXHR1bnNpZ25lZCBsb25nIG5vdywgbmV4dCwgbmV4dF9zZWMsIG5leHRfc2NoZWQ7XFxuNDY0NzpcXHRcXHRzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7XFxuNDY0ODpcXHRcXHRpbnQgaTtcXG40NjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMzoxOToyNS4zODcwNDU1NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjEzNjgxMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBSb3V0aW5nIEhlYWRlciBMb29wIERldGVjdGlvbiBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHN0cnVjdHVyZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRvIHBpbnBvaW50ICp3aGVyZSogdGhpcyBsb29wIGRldGVjdGlvbiBmdW5jdGlvbiBpcyBiZWluZyBpbnZva2VkLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24ncyBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHNwZWNpZmljYWxseSBob3cgdGhlIFJQTCAoUm91dGluZyBQcm90b2NvbCBmb3IgTG93LXBvd2VyIGFuZCBMb3NzeSBOZXR3b3JrcykgYW5kIFNSSCAoU2VnbWVudCBSb3V0aW5nIEhlYWRlcikgbG9vcCBkZXRlY3Rpb24gbG9naWMgaXMgdHJpZ2dlcmVkLiBJZGVudGlmeWluZyB0aGUgY2FsbGluZyBjb250ZXh0cyB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIHRoZSBzY2VuYXJpb3Mgd2hlcmUgcG90ZW50aWFsIHJvdXRpbmcgbG9vcHMgYXJlIGNvbnNpZGVyZWQsIGFuZCBob3cgYWdncmVzc2l2ZWx5LCBvciBkZWZlbnNpdmVseSwgdGhlIGNoZWNrIGlzIHBlcmZvcm1lZC4gSSB3aWxsIHN0YXJ0IGJ5IHVzaW5nIG15IHN0YW5kYXJkIHRvb2xzIHRvIHRyYXZlcnNlIHRoZSBjYWxsIGdyYXBoIGFuZCBpc29sYXRlIHRoZSBwZXJ0aW5lbnQgY29kZSBwYXRocy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjguMDAwNzMxNTI5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3MTk3MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfY2hrX3JwbF9zcmhfbG9vcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9hZGRyY29uZi5oPTEyMz1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTI1LVxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmg6MTI2OmludCBpcHY2X2Noa19ycGxfc3JoX2xvb3Aoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNlZ3MsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xMjctXFx0XFx0XFx0ICB1bnNpZ25lZCBjaGFyIG5zZWdzKTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NDU3MD1pbnQgaXB2Nl9jaGtfaG9tZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy00NTk4LSAqL1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NDU5OTppbnQgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzZWdzLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNDYwMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGNoYXIgbnNlZ3MpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9NDgxPXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTU2OS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM6NTcwOlxcdGVyciA9IGlwdjZfY2hrX3JwbF9zcmhfbG9vcChuZXQsIG9oZHItXFx1MDAzZXJwbF9zZWdhZGRyLCBuICsgMSk7XFxubmV0L2lwdjYvZXh0aGRycy5jLTU3MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYz0zOT1zdGF0aWMgYm9vbCBycGxfdmFsaWRhdGVfc3JoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqc3JoLFxcbi0tXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmMtNTQtXFxubmV0L2lwdjYvcnBsX2lwdHVubmVsLmM6NTU6XFx0ZXJyID0gaXB2Nl9jaGtfcnBsX3NyaF9sb29wKG5ldCwgc3JoLVxcdTAwM2VycGxfc2VnYWRkcixcXG5uZXQvaXB2Ni9ycGxfaXB0dW5uZWwuYy01Ni1cXHRcXHRcXHRcXHQgICAgc3JoLVxcdTAwM2VzZWdtZW50c19sZWZ0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjM6MTk6MjkuNjc3OTM3MDcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc1Mzk1Mzk3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpcHY2X2Noa19ycGxfc3JoX2xvb3BgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZWN0aW5nIGxvb3BzIHdpdGhpbiBhbiBSUEwgU1JILiBUaGUgY3VycmVudCBsb2dpYywgYXMgaXQgc3RhbmRzLCBoYXMgYSBmbGF3OiBpdCBpbmNvcnJlY3RseSBpZGVudGlmaWVzIGxvb3BzLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHdhcyBvbmx5IGZsYWdnaW5nIGEgbG9vcCBpZiBpdCBlbmNvdW50ZXJlZCAqbW9yZSB0aGFuIG9uZSogbG9jYWwgYWRkcmVzcyBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcy4gVGhpcyBpcyBpbmNvcnJlY3QhIEEgbG9vcCBleGlzdHMgaWYgKmFueSogbG9jYWwgYWRkcmVzcyBpcyBzZXBhcmF0ZWQgYnkgYSBub24tbG9jYWwgYWRkcmVzcyBhbmQgdGhlbiBmb2xsb3dlZCBieSAqYW5vdGhlciogbG9jYWwgYWRkcmVzcywgZXZlbiBpZiB0aGF0J3MgdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UuIFNvLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBmbGF3ZWQgY29uZGl0aW9uIGJ5IGNoYW5naW5nIHRoZSBsb2dpYyBmcm9tIGBmb3VuZCBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkYCB0byBqdXN0IGBmb3VuZCBcdTAwMjZcdTAwMjYgc2VwYXJhdGVkYC4gVGhpcyBlbnN1cmVzIHRoYXQgYSBsb29wIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGluIHRoZSBzaW5nbGUgY2FzZSBhcyB3ZWxsLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogRG9lcyB0aGlzIGZpeCBpbnRyb2R1Y2UgYW55IHJpc2sgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2sgYXJlIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHM6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2U6KiogTm9wZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzaW1wbGUgaW50ZWdlciAoMCBvciAxKS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgbGVha2VkLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIHZhcmlhYmxlcyBgZm91bmRgLCBgc2VwYXJhdGVkYCwgYW5kIGBoYXNoX2ZvdW5kYCBhcmUgYWxsIGluaXRpYWxpemVkIGxvY2FsbHkuIFNwZWNpZmljYWxseSwgYGlgIGFuZCBgcmV0YCBhcmUgaW5pdGlhbGl6ZWQuIEFuZCBgZm91bmRgIGlzIGluaXRpYWxpemVkIHRvIDAuIGBzZXBhcmF0ZWRgIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAsIGFuZCBgaGFzaF9mb3VuZGAgaXMgYXNzaWduZWQgYSB2YWx1ZSBvZiBgZmFsc2VgIChpbiB0aGUgY29kZSksIHNvIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGFyZSBpbiBwbGF5LlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZXM6KiogVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMgb2YgYW55IGRhdGEgc3RydWN0dXJlcyBoZXJlLlxuNC4gICoqQm91bmRzIGNoZWNrczoqKiBUaGlzIHBhdGNoICpzdHJlbmd0aGVucyogdGhlIGJvdW5kcy1jaGVja2luZyBsb2dpYywgbm90IHdlYWtlbnMgaXQuIFNvLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ5IGFjY2Vzc2luZyBvdXQtb2YtYm91bmRzIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuIFRoZSBmaXggbWFrZXMgdGhlIGNoZWNrIHN0cmljdGVyLlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgZml4IGRvZXMgKm5vdCogaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaXMgbm90IHJlbGV2YW50IGhlcmUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1ZywgYSBsb2dpYyBlcnJvci4gV2hpbGUgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgaXMgd29ydGggbWVudGlvbmluZyBnZW5lcmFsbHksIHRoaXMgZml4IHdvdWxkbid0IGludHJvZHVjZSBhbnkgS0FTQU4gaXNzdWVzIGVpdGhlciAobGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcykuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcuIEkgY2FuIGNvbmZpZGVudGx5IHN0YXRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBzaG91bGQgYWxzbyB3cml0ZSB1cCBhIGNsZWFyIGV4cGxhbmF0aW9uIGNvbnRyYXN0aW5nIEtBU0FOIGFuZCBLTVNBTjogdGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgZXJyb3IgaW4gYGlwdjZfY2hrX3JwbF9zcmhfbG9vcGAgdGhhdCB3YXMgbm90IGRldGVjdGluZyBsb29wcyBpZiBgZm91bmQgXHUwMDNlIDEgXHUwMDI2XHUwMDI2IHNlcGFyYXRlZGAgYW5kIGNvbnRyYXN0aW5nIHRoYXQgdGhlIGZpeCBkb2VzIG5vdCBpbnRyb2R1Y2UgS01TQU4gaXNzdWVzIGJlY2F1c2Ugb25seSBsb2NhbCB2YXJpYWJsZXMgYXJlIHVzZWQsIGFuZCB0aGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgY29waWVzIG9mIGRhdGEgdG8gdXNlciBzcGFjZS4gSXQgc2hvdWxkIGVtcGhhc2l6ZSB0aGF0IHRoZSBmaXggZG9lcyBub3QgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgS01TQU4gYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTcsIk91dHB1dFRva2VucyI6MjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIzOjE5OjM3LjIxNzQ4MDQ0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIGNvbmRpdGlvbiBpbiBgaXB2Nl9jaGtfcnBsX3NyaF9sb29wKClgIChgbmV0L2lwdjYvYWRkcmNvbmYuY2ApIHVzZWQgdG8gdmFsaWRhdGUgSVB2NiBSUEwgU2VnbWVudCBSb3V0aW5nIEhlYWRlcnMgYWdhaW5zdCByb3V0aW5nIGxvb3BzIGludm9sdmluZyBsb2NhbCBhZGRyZXNzZXMuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyBgaWYgKGZvdW5kIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBzZXBhcmF0ZWQpYCB0byBgaWYgKGZvdW5kIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgLCBlbnN1cmluZyB0aGF0IGEgc2luZ2xlIHByZXZpb3VzbHkgc2VlbiBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzcyBmb2xsb3dlZCBieSBhIG5vbi1sb2NhbCBhZGRyZXNzIGFuZCB0aGVuIGFub3RoZXIgbG9jYWwgYWRkcmVzcyBpcyBjb3JyZWN0bHkgaWRlbnRpZmllZCBhcyBhIGxvb3AuXFxuXFxuS01TQU4gZGV0ZWN0cyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChyZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBhbmQgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UpLiBUaGUgdmFyaWFibGVzIGludm9sdmVkIGluIHRoZSBjaGFuZ2VkIGxvZ2ljIChgZm91bmRgLCBgc2VwYXJhdGVkYCwgYGhhc2hfZm91bmRgLCBgcmV0YCkgYXJlIGxvY2FsIHNjYWxhcnMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgdG8gMC9mYWxzZSBwcmlvciB0byB1c2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgYnVmZmVyIGxlbmd0aHMsIGNvcHktdG8tdXNlciBvcGVyYXRpb25zLCBvciBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLiBUaHVzLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFyZSBjcmVhdGVkIG9yIGV4cG9zZWQsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgY29uZGl0aW9uIGluIGBpcHY2X2Noa19ycGxfc3JoX2xvb3AoKWAgKGBuZXQvaXB2Ni9hZGRyY29uZi5jYCkgdXNlZCB0byB2YWxpZGF0ZSBJUHY2IFJQTCBTZWdtZW50IFJvdXRpbmcgSGVhZGVycyBhZ2FpbnN0IHJvdXRpbmcgbG9vcHMgaW52b2x2aW5nIGxvY2FsIGFkZHJlc3Nlcy4gU3BlY2lmaWNhbGx5LCBpdCBjaGFuZ2VzIGBpZiAoZm91bmQgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IHNlcGFyYXRlZClgIHRvIGBpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgc2VwYXJhdGVkKWAsIGVuc3VyaW5nIHRoYXQgYSBzaW5nbGUgcHJldmlvdXNseSBzZWVuIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzIGZvbGxvd2VkIGJ5IGEgbm9uLWxvY2FsIGFkZHJlc3MgYW5kIHRoZW4gYW5vdGhlciBsb2NhbCBhZGRyZXNzIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIGEgbG9vcC5cXG5cXG5LTVNBTiBkZXRlY3RzIHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIGFuZCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSkuIFRoZSB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhlIGNoYW5nZWQgbG9naWMgKGBmb3VuZGAsIGBzZXBhcmF0ZWRgLCBgaGFzaF9mb3VuZGAsIGByZXRgKSBhcmUgbG9jYWwgc2NhbGFycyBwcm9wZXJseSBpbml0aWFsaXplZCB0byAwL2ZhbHNlIHByaW9yIHRvIHVzZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBidWZmZXIgbGVuZ3RocywgY29weS10by11c2VyIG9wZXJhdGlvbnMsIG9yIHN0cnVjdCBpbml0aWFsaXphdGlvbnMuIFRodXMsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYXJlIGNyZWF0ZWQgb3IgZXhwb3NlZCwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[1] Phase: Succeeded StartedAt: 2026-09-11 23:19:47 +0000 UTC FinishedAt: 2026-09-11 23:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 23:19:47 +0000 UTC FinishedAt: 2026-09-11 23:19:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2] Phase: Succeeded StartedAt: 2026-09-11 23:19:47 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:47 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:47 +0000 UTC FinishedAt: 2026-09-11 23:19:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:47 +0000 UTC FinishedAt: 2026-09-11 23:19:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"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-workflowph984/series-workflowph984-convert-artifact-1323238113/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:58 +0000 UTC FinishedAt: 2026-09-11 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:58 +0000 UTC FinishedAt: 2026-09-11 23:35:53 +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:*4c9b8b3b-6cb5-4b1f-99cf-88ba8e589e21,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-workflowph984/series-workflowph984-convert-artifact-1323238113/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": "a9da2322-ca8c-4a80-b3b5-2d21394e39cf", "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-workflowph984/series-workflowph984-build-action-2409549839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:19:58 +0000 UTC FinishedAt: 2026-09-11 23:35:43 +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:*4c9b8b3b-6cb5-4b1f-99cf-88ba8e589e21,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-workflowph984/series-workflowph984-convert-artifact-1323238113/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": "a9da2322-ca8c-4a80-b3b5-2d21394e39cf", "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-workflowph984/series-workflowph984-build-action-2409549839/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:35:53 +0000 UTC FinishedAt: 2026-09-11 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:35:53 +0000 UTC FinishedAt: 2026-09-11 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:35:53 +0000 UTC FinishedAt: 2026-09-11 23:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:35:53 +0000 UTC FinishedAt: 2026-09-11 23:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-workflowph984/series-workflowph984-convert-artifact-2902097716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:36:03 +0000 UTC FinishedAt: 2026-09-11 23:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:36:03 +0000 UTC FinishedAt: 2026-09-11 23:37:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9da2322-ca8c-4a80-b3b5-2d21394e39cf,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-workflowph984/series-workflowph984-build-action-2409549839/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-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:37:56 +0000 UTC FinishedAt: 2026-09-11 23:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:37:56 +0000 UTC FinishedAt: 2026-09-11 23:37:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:37:56 +0000 UTC FinishedAt: 2026-09-11 23:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:37:56 +0000 UTC FinishedAt: 2026-09-11 23:54:18 +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:*4c9b8b3b-6cb5-4b1f-99cf-88ba8e589e21,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-workflowph984/series-workflowph984-convert-artifact-2902097716/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": "d1db6f5b-0bc4-4e20-be0d-30e474281824", "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-workflowph984/series-workflowph984-build-action-491053312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:37:56 +0000 UTC FinishedAt: 2026-09-11 23:54:08 +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:*4c9b8b3b-6cb5-4b1f-99cf-88ba8e589e21,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-workflowph984/series-workflowph984-convert-artifact-2902097716/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": "d1db6f5b-0bc4-4e20-be0d-30e474281824", "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-workflowph984/series-workflowph984-build-action-491053312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:54:18 +0000 UTC FinishedAt: 2026-09-11 23:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:54:18 +0000 UTC FinishedAt: 2026-09-11 23:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:54:18 +0000 UTC FinishedAt: 2026-09-11 23:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:54:18 +0000 UTC FinishedAt: 2026-09-11 23:56:02 +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:*d1db6f5b-0bc4-4e20-be0d-30e474281824,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-workflowph984/series-workflowph984-build-action-491053312/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-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"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:*a9da2322-ca8c-4a80-b3b5-2d21394e39cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1db6f5b-0bc4-4e20-be0d-30e474281824,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-workflowph984/series-workflowph984-build-action-2409549839/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-workflowph984/series-workflowph984-build-action-491053312/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-11 23:56:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-11 23:56:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"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-workflowph984/series-workflowph984-convert-artifact-1124654429/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-11 23:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-11 23:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:12 +0000 UTC FinishedAt: 2026-09-11 23:56:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:22 +0000 UTC FinishedAt: 2026-09-12 03:02:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowph984[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_chk_rpl_srh_loop","ipv6_rpl_srh_rcv","rpl_validate_srh","rpl_build_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_RPL_LWTUNNEL"],"series_id":"fb6f198b-b7a2-4ce7-a8e0-d29122926759","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-11 23:56:22 +0000 UTC FinishedAt: 2026-09-12 03:02:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9da2322-ca8c-4a80-b3b5-2d21394e39cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d1db6f5b-0bc4-4e20-be0d-30e474281824,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-workflowph984/series-workflowph984-build-action-2409549839/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-workflowph984/series-workflowph984-build-action-491053312/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-workflowph984/series-workflowph984-convert-artifact-1124654429/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,}