Name: series-workfloww5wpf Phase: Succeeded StartedAt: 2026-08-22 12:02:02 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[0] Phase: Succeeded StartedAt: 2026-08-22 12:02:02 +0000 UTC FinishedAt: 2026-08-22 12:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 12:02:02 +0000 UTC FinishedAt: 2026-08-22 12:25:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "ead14217-b363-4b1c-96a2-7fc98a5fce6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udp_sendmsg", "udpv6_sendmsg", "ip_append_data", "ip6_append_data", "ip_make_skb", "ip6_make_skb", "ip6_forward" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cblxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NCw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbiYjNDM7XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuJiM0MztcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbiYjNDM7XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuIFxuIFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxuIFx0aWYgKGZyYWdfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZ19zaXplIFx1MDAzYyBtdHUpXG4gXHRcdG10dSA9IGZyYWdfc2l6ZTtcbiBcbiYjNDM7XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiYjNDM7XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbiBcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbiBcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4gXHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggMGY1YzE3OGJjMjI0Yi4uYzZkMzMyYzkwYTU0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0Y21zZ19zb19tYXJrLnNoIFxcXG4gXHRjbXNnX3NvX3ByaW9yaXR5LnNoIFxcXG4gXHRjbXNnX3RpbWUuc2ggXFxcbiYjNDM7XHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxuJiM0MztcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgaXAsIE5ldE5TLCBOZXROU0VudGVyXG4mIzQzO2ltcG9ydCBlcnJub1xuJiM0MztpbXBvcnQgZ3ppcFxuJiM0MztpbXBvcnQgb3NcbiYjNDM7aW1wb3J0IHNvY2tldFxuJiM0MztpbXBvcnQgc3RydWN0XG4mIzQzO2ltcG9ydCBzdWJwcm9jZXNzXG4mIzQzO1xuJiM0MztcbiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTBcbiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzXG4mIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDJcbiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTRcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4mIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4mIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksXG4mIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSxcbiYjNDM7ICAgIF06XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspXG4mIzQzOyAgICBpZiByZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICBwcmludChcJiMzNDtXQVJOOiBDYW4mIzM5O3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XCYjMzQ7KVxuJiM0MzsgICAgZWxpZiBub3QgcmVzOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYykgLVx1MDAzZSBib29sOlxuJiM0MzsgICAgZG1lc2cgPSBzdWJwcm9jZXNzLlBvcGVuKFsmIzM5O2RtZXNnJiMzOTtdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxuJiM0MzsgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dClcbiYjNDM7ICAgIGRtZXNnLndhaXQoKVxuJiM0MzsgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBpcCgmIzM5O2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXkmIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcChmJiMzOTtsaW5rIHNldCBkdW1teSBtdHUge210dX0mIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKVxuJiM0MzsgICAgZmxhZyA9ICYjMzk7LTYmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5O1xuJiM0MzsgICAgbm9kYWQgPSAmIzM5O25vZGFkJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTtcbiYjNDM7ICAgIGFkZHJfbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7XG4mIzQzOyAgICBhZGRyX3JlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTtcbiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0mIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjYoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxuJiM0MztcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxuJiM0MzsgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxuJiM0MzsgICAgICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAxMjM0KSlcbiYjNDM7ICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfdjZfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7MTAuMC4wLjImIzM5OywgMTIzNCkpXG4mIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuJiM0MzsgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiB0aGUgY2hlY2sgaGFwcGVucyBhZnRlciB0aGUgV0FSTiBpcyBwcmludGVkLlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU1TR1NJWkU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpXG4mIzQzO1xuJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCYjMzk7dWRwX3NlbmRfc2tiJiMzOTspLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxuJiM0MzsgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcbiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfQ0hFQ0tTVU0sIDYpXG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgICAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJiMzOTshSEhISCYjMzk7LCAxMjM0LCAxMjM0LCAwLCAwKSAmIzQzOyBiJiMzOTsgJiMzOTsgKiA2NTUyOFxuJiM0MzsgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAwKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7XG4mIzQzO1xuJiM0MztpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjNDM7ICAgIGtzZnRfcnVuKFtcbiYjNDM7ICAgICAgICB0ZXN0X2lwdjYsXG4mIzQzOyAgICAgICAgdGVzdF9pcHY0LFxuJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbiYjNDM7ICAgIF0pXG4mIzQzOyAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcF9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2ZvcndhcmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0zODQsNiAmIzQzOzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIG91dDoKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtMTMwMyw2ICYjNDM7MTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssCiAKIAljb3JrLSZndDtmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/CiAJCQkgZHN0NF9tdHUoJmFtcDtydC0mZ3Q7ZHN0KSA6IFJFQURfT05DRShydC0mZ3Q7ZHN0LmRldi0mZ3Q7bXR1KTsKJiM0MzsJY29yay0mZ3Q7ZnJhZ3NpemUgPSBtaW4oY29yay0mZ3Q7ZnJhZ3NpemUsIElQX01BWF9NVFUpOwogCiAJaWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLSZndDtmcmFnc2l6ZSkpCiAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMTQzMiw2ICYjNDM7MTQzMiw4IEBAIHN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssCiAJaWYgKGZyYWdfc2l6ZSAmYW1wOyZhbXA7IGZyYWdfc2l6ZSAmbHQ7IG10dSkKIAkJbXR1ID0gZnJhZ19zaXplOwogCiYjNDM7CWlmIChza19pc191ZHAoc2spKQomIzQzOwkJbXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpOwogCWNvcmstJmd0O2Jhc2UuZnJhZ3NpemUgPSBtdHU7CiAJY29yay0mZ3Q7YmFzZS5nc29fc2l6ZSA9IGlwYzYtJmd0O2dzb19zaXplOwogCWNvcmstJmd0O2Jhc2UudHhfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDBmNWMxNzhiYzIyNGIuLmM2ZDMzMmM5MGE1NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCWNtc2dfc29fbWFyay5zaCBcCiAJY21zZ19zb19wcmlvcml0eS5zaCBcCiAJY21zZ190aW1lLnNoIFwKJiM0MzsJY29ya19mcmFnc2l6ZS5weSBcCiAJZG91YmxlX3VkcF9lbmNhcC5zaCBcCiAJZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFwKIAllY21wX3JlaGFzaC5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpAQCAtMCwwICYjNDM7MSwxMzAgQEAKJiM0MzsjIS91c3IvYmluL2VudiBweXRob24zCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuCiYjNDM7CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBpcCwgTmV0TlMsIE5ldE5TRW50ZXIKJiM0MztpbXBvcnQgZXJybm8KJiM0MztpbXBvcnQgZ3ppcAomIzQzO2ltcG9ydCBvcwomIzQzO2ltcG9ydCBzb2NrZXQKJiM0MztpbXBvcnQgc3RydWN0CiYjNDM7aW1wb3J0IHN1YnByb2Nlc3MKJiM0MzsKJiM0MzsKJiM0MztJUF9NVFVfRElTQ09WRVIgPSAxMAomIzQzO0lQX1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjMKJiM0MztJUFY2X1BNVFVESVNDX0RPID0gMgomIzQzO0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzCiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTQKJiM0MzsKJiM0MzsKJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC0mZ3Q7IGJvb2wgfCBOb25lOgomIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbCiYjNDM7ICAgICAgICAoJiMzOTsvcHJvYy9jb25maWcuZ3omIzM5OywgZ3ppcC5vcGVuKSwKJiM0MzsgICAgICAgIChmJiMzOTsvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0mIzM5Oywgb3BlbiksCiYjNDM7ICAgIF06CiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICYjMzk7cnQmIzM5OykgYXMgY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6CiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYmIzM5O3tvcHRpb259PXkmIzM5OzoKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtJmd0OyBOb25lOgomIzQzOyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCYjMzk7Q09ORklHX0RFQlVHX05FVCYjMzk7KQomIzQzOyAgICBpZiByZXMgaXMgTm9uZToKJiM0MzsgICAgICAgIHByaW50KCYjMzQ7V0FSTjogQ2FuJiMzOTt0IHJlYWQga2VybmVsIGNvbmZpZzsgYXNzdW1pbmcgZGVidWcga2VybmVsLCBhbmQgcnVubmluZyB0aGUgdGVzdCYjMzQ7KQomIzQzOyAgICBlbGlmIG5vdCByZXM6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7Q09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC0mZ3Q7IGJvb2w6CiYjNDM7ICAgIGRtZXNnID0gc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKJiM0MzsgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dCkKJiM0MzsgICAgZG1lc2cud2FpdCgpCiYjNDM7ICAgIHJldHVybiByZXN1bHQucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDAKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXBfc2V0dXAobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLSZndDsgTm9uZToKJiM0MzsgICAgaXAoJiMzOTtsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcChmJiMzOTtsaW5rIHNldCBkdW1teSBtdHUge210dX0mIzM5OywgbnM9bnMpCiYjNDM7ICAgIGlwKCYjMzk7bGluayBzZXQgZHVtbXkgdXAmIzM5OywgbnM9bnMpCiYjNDM7ICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgbm9kYWQgPSAmIzM5O25vZGFkJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgYWRkcl9sb2NhbCA9ICYjMzk7ZmQwMDo6MS82NCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4xLzI0JiMzOTsKJiM0MzsgICAgYWRkcl9yZW1vdGUgPSAmIzM5O2ZkMDA6OjImIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMiYjMzk7CiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0mIzM5OywgbnM9bnMpCiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBuZWlnaCBhZGQge2FkZHJfcmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2NigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKQomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBpcF9zZXR1cChucywgNjU1NzYsIFRydWUpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZDoKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETykKJiM0MzsgICAgICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoJiMzOTtmZDAwOjoyJiMzOTssIDEyMzQpKQomIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguCiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfdjZfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjQoKSAtJmd0OyBOb25lOgomIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSkKJiM0MzsKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7MTAuMC4wLjImIzM5OywgMTIzNCkpCiYjNDM7ICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBFTVNHU0laRTogdGhlIGNoZWNrIGhhcHBlbnMgYWZ0ZXIgdGhlIFdBUk4gaXMgcHJpbnRlZC4KJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU1TR1NJWkU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigmIzM5O3VkcF9zZW5kX3NrYiYjMzk7KSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSkKJiM0MzsKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOgomIzQzOyAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpCiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfQ0hFQ0tTVU0sIDYpCiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICAgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjgKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAwKSkKJiM0MzsKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBrc2Z0X3J1bihbCiYjNDM7ICAgICAgICB0ZXN0X2lwdjYsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjQsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjZfanVtYm8sCiYjNDM7ICAgIF0pCiYjNDM7ICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhcm91bmQgZnJhZ21lbnQgc2l6ZSBhbmQgTVRVIGhhbmRsaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QsIHRhcmdldGVkIGNoYW5nZS4gV2UmIzM5O3JlIHRvdWNoaW5nIGBpcDZfcm91dGUuaGAsIGBpcF9vdXRwdXQuY2AsIGFuZCBgaXA2X291dHB1dC5jYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljLiBUaGUgYWRkaXRpb24gb2YgYSBzZWxmdGVzdCwgYGNvcmtfZnJhZ3NpemUucHlgLCBpcyBhIGdyZWF0IHNpZ247IGl0IGluZGljYXRlcyB0aGF0IHRoZSBpc3N1ZSB3ZSBhcmUgYWRkcmVzc2luZyBpcyBhIHJlYWwgb25lLCBhbmQgd2UgaGF2ZSBhIHRlc3QgdG8gdmVyaWZ5IHRoZSBmaXguCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCB0aGUga2V5IGNoYW5nZSBpcyB0aGF0IHdlIGFyZSBsaW1pdGluZyB0aGUgTVRVIG9yIGZyYWdtZW50IHNpemUgdG8gYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgIGluIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCkgYW5kIGBpcDZfc2V0dXBfY29ya2AgKElQdjYpLCBhbmQgYWxzbyBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIFRoaXMgc291bmRzIGxpa2Ugd2UgYXJlIHByZXZlbnRpbmcgc29tZSBraW5kIG9mIG92ZXJmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIGNvbnN0YW50cyB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFjdHVhbCBsaW1pdHMgYXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBzdGFuZGFyZCB2YWx1ZXMsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93LCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZnJhZ21lbnQgc2l6ZSBjYWxjdWxhdGlvbi4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBmb3IgSVB2NC9JUHY2IHBhY2tldCBvdXRwdXQsIHNvIHRoaXMgZml4IGlzIGltcG9ydGFudC4KCk15IG5leHQgc3RlcCBpcyB0byBpZGVudGlmeSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZC4gYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSByZXNwZWN0aXZlIGBpcF9vdXRwdXQuY2AgYW5kIGBpcDZfb3V0cHV0LmNgIGZpbGVzLiBJIGJlbGlldmUgdGhleSB3aWxsIGJlIGNhbGxlZCBieSBmdW5jdGlvbnMgbGlrZSBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfYXBwZW5kX3BhZ2VgLCBhbmQgYGlwNl9hcHBlbmRfZGF0YWAsIHdoaWNoIGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgYXBwZW5kaW5nIHByb2Nlc3MuIEtub3dpbmcgdGhlc2UgY2FsbCBzaXRlcyBpcyBjcnVjaWFsLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgYXJlYXMgdG8gZm9jdXMgb24gaW4gZnV6emluZyBhbmQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXR1cF9jb3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTMtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjk1LVx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzczLVx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XHRcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlLCBpcGMsIHJ0cCk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzc1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTcyLVx0Y29yay1cdTAwM2VvcHQgPSBOVUxMO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTU3MzpcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXA2X3NldHVwX2NvcmtgIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGEgcXVpY2sgc2NhbiB0byBzZWUgd2hvJiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBgaXA2X3NldHVwX2NvcmtgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgY29udGV4dCBiZXR0ZXIgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0IGFuZCB3aGVyZSBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgb3JpZ2luYXRlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIHN1YnN5c3RlbXMgb3IgbW9kdWxlcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSB2aXRhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmZsdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3NldHVwX2NvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTM3My1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTM3NS1cdFx0XHQgIHN0cnVjdCBpcGNtNl9jb29raWUgKmlwYzYsXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4NzctXHRcdGRzdF9ob2xkKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTg3ODpcdFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFx1MDAyNmluZXQtXHUwMDNlY29yayxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVx0XHRcdFx0ICAgICBpcGM2LCBydCk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODctXHRjb3JrLVx1MDAzZWJhc2U2Lm9wdCA9IE5VTEw7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjA4ODpcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4OS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYgRGF0YSBBcHBlbmQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgcGFja2V0IGNvbnN0cnVjdGlvbiBhbmQgZGF0YSBhcHBlbmRpbmcuIFRoZSBsaWtlbHkgc3VzcGVjdHMgaGVyZSBmb3IgYWRkaW5nIGRhdGEgdG8gSVB2NCBvciBJUHY2IHBhY2tldHMgYXJlIGRlZmluaXRlbHkgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGFuZCBgaXA2X21ha2Vfc2tiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgbmFtZXMuIFRoZXkgbGlrZWx5IGhhbmRsZSB0aGUgY29yZSBsb2dpYyBvZiBhc3NlbWJsaW5nIHRoZSBwYWNrZXQuCgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIHNvIGxldCYjMzk7cyBzaGlmdCBmb2N1cy4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaG93IElQdjYmIzM5O3MgTVRVIGlzIGhhbmRsZWQsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY2IHBhdGguIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBzdGFjayBhcmUgcGF5aW5nIGF0dGVudGlvbiB0byBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MzUzPXN0YXRpYyBpbmxpbmUgYm9vbCBydDZfZHVwbGljYXRlX25leHRob3Aoc3RydWN0IGZpYjZfaW5mbyAqYSwgc3RydWN0IGZpYjZfaW5mbyAqYilcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjYtXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozNjc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjgtXHRcdFx0XHRcdFx0ICAgICBib29sIGZvcndhcmRpbmcpXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzkzLSAqXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTQ6ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTUtICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUyMT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjY0LVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjY2NTpcdG10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjYtXHRpZiAobXR1IFx1MDAzYyBJUFY2X01JTl9NVFUpXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjg4PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIHVuc2lnbmVkIGludCBpcDZfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC9pcHY2L3JvdXRlLmMtMzI4OS17XG5uZXQvaXB2Ni9yb3V0ZS5jOjMyOTA6XHRyZXR1cm4gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzI5MS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMDktXHRjYXNlIE5GUFJPVE9fSVBWNjpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTEwOlx0XHRmbG93X3R1cGxlLVx1MDAzZW10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTExLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDcwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IE1UVSBhbmQgRm9yd2FyZGluZyBmb3IgUG90ZW50aWFsIFVEUCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NiBNVFUgYW5kIGZvcndhcmRpbmcgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXA2X210dWAsIGBpcDZfZm9yd2FyZGAsIGFuZCBgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGVgLCB3aGljaCBhbGwgc2VlbSB0byBiZSB1c2luZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIGBpcDZfbXR1YCBhcHBlYXJzIHRvIGJlIGFuIGluZGlyZWN0IGNhbGxhYmxlLiBgaXA2X2ZvcndhcmRgIGxvb2tzIGxpa2UgYSBwcmltZSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBUaGUgc2VsZnRlc3QgbWVudGlvbnMgYENPTkZJR19ERUJVR19ORVRgLCBidXQgdGhhdCBzZWVtcyB0byBiZSBqdXN0IGZvciBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlIGFjdHVhbCBmaXggaXMgd2l0aGluIHRoZSBjb3JlIElQdjQvSVB2NiBjb2RlLiBHb29kLCBubyBleG90aWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFN0YW5kYXJkIGBORVRgLCBgSU5FVGAsIGFuZCBgSVBWNmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOb3csIHRvIG5hcnJvdyBkb3duIHRoZSBzY29wZSwgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHNwZWNpZmljYWxseSBhbiBpc3N1ZSB3aXRoIFVEUC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYC4gVGhlIHNlbGZ0ZXN0IGlzIHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCBVRFAgbGVuZ3RoIG92ZXJmbG93cywgc28gdGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRvci4gVGhlIHNlbGZ0ZXN0IGFsc28gbWVudGlvbnMgYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgZnVuY3Rpb25zIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9zZW5kX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q9NT1Eb2N1bWVudGF0aW9uIHdyaXR0ZW4gYnkgVG9tIFphbnVzc2lcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExMi0gICAgICAgICBpcF9zZW5kX3NrYiYjNDM7MHgxYS8weDUwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTExMzogICAgICAgICB1ZHBfc2VuZF9za2ImIzQzOzB4MTczLzB4MmEwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExNC0gICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ZjBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUzNy0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1Mzg6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxM2UvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTM5LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU1Ny0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NTg6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTU5LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU3NS0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NzY6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTc3LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU5My0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1OTQ6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTk1LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MjM4PXZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjg0LVx0Y2FzZSBJUFBST1RPX1VEUDpcbmRyaXZlcnMvbmV0L292cG4vaW8uYzoyODU6XHRcdG92cG5fdWRwX3NlbmRfc2tiKHBlZXIsIHNvY2stXHUwMDNlc2ssIHNrYik7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjg2LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTI5Nj1zdGF0aWMgaW50IG92cG5fdWRwX291dHB1dChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3QgZHN0X2NhY2hlICpjYWNoZSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNC0vKipcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzM1OiAqIG92cG5fdWRwX3NlbmRfc2tiIC0gcHJlcGFyZSBza2IgYW5kIHNlbmQgaXQgb3ZlciB2aWEgVURQXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNi0gKiBAcGVlcjogdGhlIGRlc3RpbmF0aW9uIHBlZXJcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzOS0gKi9cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzQwOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zNDEtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmg9MjA9dm9pZCBvdnBuX3VkcF9zb2NrZXRfZGV0YWNoKHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrKTtcbmRyaXZlcnMvbmV0L292cG4vdWRwLmgtMjEtXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5oOjIyOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaC0yMy1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L3VkcC5oPTU4MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp1ZHBfcmN2X3NlZ21lbnQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3VkcC5oLTYwNC1cdCAqIHBhY2tldHMgaW4gdWRwX2dyb19jb21wbGV0ZV9zZWdtZW50LiBBcyBkb2VzIFVEUCBHU08sIHZlcmlmaWVkIGJ5XG5pbmNsdWRlL25ldC91ZHAuaDo2MDU6XHQgKiB1ZHBfc2VuZF9za2IuIEJ1dCB3aGVuIHRob3NlIHBhY2tldHMgYXJlIGxvb3BlZCBpbiBkZXZfbG9vcGJhY2tfeG1pdFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA2LVx0ICogdGhlaXIgaXBfc3VtbWVkIENIRUNLU1VNX05PTkUgaXMgY2hhbmdlZCB0byBDSEVDS1NVTV9VTk5FQ0VTU0FSWS5cbi0tXG5uZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcbm5ldC9pcHY0L3VkcC5jLTEwOTItXG5uZXQvaXB2NC91ZHAuYzoxMDkzOnN0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMTc5PWludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMTE5MC1cbm5ldC9pcHY0L3VkcC5jOjExOTE6XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlKTtcbm5ldC9pcHY0L3VkcC5jLTExOTItXG4tLVxubmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcdFx0XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmNvcmspO1xubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cdFx0Z290byBvdXQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5OjQ6IyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9ODc9ZGVmIHRlc3RfaXB2NCgpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMDU6ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigmIzM5O3VkcF9zZW5kX3NrYiYjMzk7KSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIE1UVSBMaW1pdHMgaW4gdGhlIE5ldHdvcmtpbmcgU3RhY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0d28gdGhpbmdzIGp1bXAgb3V0IGF0IG1lLiBGaXJzdCwgYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSAqc3RhdGljKiDigJMgaW50ZXJlc3RpbmcsIHRoYXQgaW1wbGllcyB0aGV5JiMzOTtyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNjb3BlIG9mIG1vZGlmaWNhdGlvbnMuIFNlY29uZCwgdGhlIGZ1bmN0aW9ucyBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYW5kIGBpcDZfbWFrZV9za2JgIGFyZSAqZXhwb3J0ZWQqIGFuZCBjYWxsZWQgZnJvbSBgdWRwX3NlbmRtc2dgIGFuZCBwcmVzdW1hYmx5IG90aGVyIHByb3RvY29scy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIGludGVyZmFjZSBwb2ludHMgd2UgbmVlZCB0byBjb25zaWRlciB3aGVuIGV2YWx1YXRpbmcgdGhpcyBjaGFuZ2UuCgpOb3csIHRoZSBwYXRjaCBleHBsaWNpdGx5IGxpbWl0cyB0aGUgTVRVIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSwgYW5kIHRvIGRvIHRoYXQsIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZXMgb2YgYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgZmVlbGluZyBJJiMzOTt2ZSBzZWVuIHRoZXNlIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgYW5kIGNvbmZpcm0gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlx0MTAwXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXHRcdDY1NTM1XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVx0NDAwMFxuLS1cbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTIzLVx0c3NpLVx1MDAzZW5ldGRldi1cdTAwM2VtaW5fbXR1ID0gUEhPTkVUX01JTl9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XHRzc2ktXHUwMDNlbmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU4OC1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjU4OTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU5MC1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA4MzItXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcdFx0XHQgICAgdWxfcmlmLVx1MDAzZXJpZl9pbmRleCwgdWxfcmlmLVx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVx0bWx4c3dfcmVnX3JpdHJfbG9vcGJhY2tfcHJvdG9jb2xfc2V0KHJpdHJfcGwsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVx0ICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODYxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jPTE1OD1zdGF0aWMgdm9pZCBvdnBuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTY0MzAtXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcdHVuc2lnbmVkIGludCBwYWNrZXRfbGVuID0gdmktXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXHUwMDNlZGV2LVx1MDAzZW1heF9tdHU7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgcGFja2V0X2xlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaXAuaC01Mi0vKiBJUHY0IGRhdGFncmFtIGxlbmd0aCBpcyBzdG9yZWQgaW50byAxNmJpdCBmaWVsZCAodG90X2xlbikgKi9cbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcdDB4RkZGRlVcbmluY2x1ZGUvbGludXgvaXAuaC01NC1cbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xuaW5jbHVkZS9saW51eC9pcC5oOjU3Olx0aXBoLVx1MDAzZXRvdF9sZW4gPSBsZW4gXHUwMDNjPSBJUF9NQVhfTVRVID8gaHRvbnMobGVuKSA6IDA7XG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxuLS1cbmluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxuaW5jbHVkZS9uZXQvaXAuaDo1MDA6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUyOC1cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01NDUtXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVx1MDAzZW10dSksIElQX01BWF9NVFUpO1xuaW5jbHVkZS9uZXQvaXAuaC01NDctXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcdDY4XHRcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVx0MHhGRkZGVVx0XHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtNDItXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMxOS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzIwOlx0aWYgKGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zMjEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zNDktXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjQvZXNwNC5jOjM1MDpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2NC9lc3A0LmMtMzUxLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zNzg9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zODktXG5uZXQvaXB2NC9pZ21wLmM6MzkwOlx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaWdtcC5jLTM5MS1cdHdoaWxlICgxKSB7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVx0ZXh0aGRybGVuID0gIXNrYiA/IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cdTAwM2VmcmFnc2l6ZTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4NS1cdHBhZ2VkID0gISFjb3JrLVx1MDAzZWdzb19zaXplO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFx1MDAyNiB+NykgJiM0MzsgZnJhZ2hlYWRlcmxlbjtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk5MTpcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDUtXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA3LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3Olx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE4LVx0fVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTMyOT1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgaXBfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cdGludCB0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVx0aWYgKHRiW0lGTEFfTVRVXSkge1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIxNDpcdFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjE1LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVx0aWYgKGxpa2VseSghbXR1KSlcbm5ldC9pcHY0L3JvdXRlLmM6MTQ2NTpcdFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM3MT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYzozODE6XHRpZiAobGVuIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlx0XHRpZiAobmV3X210dSBcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVx0ZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXHRkZXYtXHUwMDNlbWluX210dVx0XHQ9IEVUSF9NSU5fTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjc0NjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVBfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXHRkZXYtXHUwMDNlZmxhZ3MgXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cdGlmICgheHRmcy1cdTAwM2VjZmcuZG9udF9mcmFnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XHRcdHJldHVybiB4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVx0XHR4LVx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xubmV0L3hmcm0veGZybV91c2VyLmM6OTU3Olx0XHRpZiAoeC1cdTAwM2V0ZmNwYWQgXHUwMDNlIElQX01BWF9NVFUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0V4Y2Vzc2l2ZSBURkMgcGFkZGluZ1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqTVRVIExpbWl0cyAtIEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IHZhbHVlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBJUF9NQVhfTVRVYCBpcyBkZWZpbmVkIGFzIGAweEZGRkZVYC4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkLCBleHBlY3RlZCB2YWx1ZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBteSBtaW5kIGp1bXBzIHRvIElQdjYuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgSVA2X01BWF9NVFVgIGlzIGFsc28gcHJvYmFibHkgYDB4RkZGRlVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhdCBsZWFzdCBpbml0aWFsbHkuIEJ1dCB3YWl0IGEgc2Vjb25kLCBJIG5lZWQgdG8gYmUgYSBsaXR0bGUgbW9yZSBjYXJlZnVsLCBnaXZlbiB0aGF0IHdlIGhhdmUganVtYm9ncmFtcyB0byBjb25zaWRlciBpbiBJUHY2LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGF0IHZhbHVlIGlzIHRydWx5IHN0YW5kYXJkIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsYXJnZXIgdGhhbiB0aGUgSVB2NCBsaW1pdC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUDZfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92cmYuYz0xNTYxPXN0YXRpYyB2b2lkIHZyZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE2MDAtXHRkZXYtXHUwMDNlbWluX210dSA9IElQVjZfTUlOX01UVTtcbmRyaXZlcnMvbmV0L3ZyZi5jOjE2MDE6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQNl9NQVhfTVRVO1xuZHJpdmVycy9uZXQvdnJmLmMtMTYwMi1cdGRldi1cdTAwM2VtdHUgPSBkZXYtXHUwMDNlbWF4X210dTtcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xNT1zdHJ1Y3Qgcm91dGVfaW5mbyB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDMtICovXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDo0NDojZGVmaW5lIElQNl9NQVhfTVRVICgweEZGRkYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSlcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQ1LVxuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODYtb3V0OlxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzg3Olx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM4OC1cbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD00MDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDI0LVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6NDI1Olx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQyNi1cdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNS1cdGlmIChza19pc191ZHAoc2spKVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE0MzY6XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM3LVx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDUzPXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDg5LVx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTQ5MDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUDZfTUFYX01UVSA6IGNvcmstXHUwMDNlZnJhZ3NpemU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQ5MS1cdG9yaWdfbXR1ID0gbXR1O1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDY2PXN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjEtXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTUyMjpcdFx0XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtXHUwMDNlbXR1LCBJUDZfTUFYX01UVSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyMy1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY2LVx0aWYgKHRubC1cdTAwM2VwYXJtcy5wcm90byA9PSBJUFBST1RPX0lQVjYgfHwgdG5sLVx1MDAzZXBhcm1zLnByb3RvID09IDApIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzY3Olx0XHRpZiAobmV3X210dSBcdTAwM2UgSVA2X01BWF9NVFUgLSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5Mzc9aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2MS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gRVRIX01JTl9NVFU7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk2MjpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVA2X01BWF9NVFUgLSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NjMtXG4tLVxubmV0L2lwdjYvcm91dGUuYz0xNjM5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmliNl9tdHUoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNjU5LVxubmV0L2lwdjYvcm91dGUuYzoxNjYwOlx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbm5ldC9pcHY2L3JvdXRlLmMtMTY2MS1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzMyOS1cbm5ldC9pcHY2L3JvdXRlLmM6MzMzMDpcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMzEtb3V0OlxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0MTk9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvc2l0LmMtMTQzMS1cdGRldi1cdTAwM2VtaW5fbXR1XHRcdD0gSVBWNl9NSU5fTVRVO1xubmV0L2lwdjYvc2l0LmM6MTQzMjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVA2X01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2Ni9zaXQuYy0xNDMzLVx0ZGV2LVx1MDAzZWZsYWdzXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC9pcHY2L3NpdC5jPTE1NDk9c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTU4NS1cdFx0aWYgKG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3NpdC5jOjE1ODY6XHRcdCAgICBtdHUgXHUwMDNjPSBJUDZfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG5uZXQvaXB2Ni9zaXQuYy0xNTg3LVx0XHRcdGRldi1cdTAwM2VtdHUgPSBtdHU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVx0aWYgKCF4dGZzLVx1MDAzZWNmZy5kb250X2ZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcdFx0cmV0dXJuIHgtXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz04Mz1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y0W10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTE5NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTU6I2lmbmRlZiBJUDZfTUFYX01UVVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjE5NjojZGVmaW5lIElQNl9NQVhfTVRVXHQoRVRIX01BWF9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0xOTctI2VuZGlmXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jPTE5OT1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y2W10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1NS1cdFx0Lyogc2VuZCBNQVggc2VncyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI1NjpcdFx0LnRsZW4gPSAoSVA2X01BWF9NVFUgLyBDT05TVF9NU1NfVjYpICogQ09OU1RfTVNTX1Y2LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1Ny1cdFx0Lmdzb19sZW4gPSBDT05TVF9NU1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjU4Olx0XHQucl9udW1fbXNzID0gKElQNl9NQVhfTVRVIC8gQ09OU1RfTVNTX1Y2KSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNTktXHR9LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjItXHRcdC8qIHNlbmQgTUFYIGJ5dGVzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjYzOlx0XHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI2NC1cdFx0Lmdzb19sZW4gPSBDT05TVF9NU1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjY1LVx0XHQucl9udW1fbXNzID0gQ09OU1RfTUFYX1NFR1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjY2Olx0XHQucl9sZW5fbGFzdCA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2IC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjctXHRcdFx0ICAgICAgKENPTlNUX01BWF9TRUdTX1Y2ICogQ09OU1RfTVNTX1Y2KSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcwLVx0XHQvKiBzZW5kIE1BWCAmIzQzOyAxOiBmYWlsICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjcxOlx0XHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2ICYjNDM7IDEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcyLVx0XHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBMaW1pdHMgaW4gSVB2NioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIE1UVSBsaW1pdHMgaW4gSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBsaW1pdGluZyB0aGUgTVRVIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCwgd2hlcmUgYElQNl9NQVhfTVRVYCBpcyBjYWxjdWxhdGVkIGFzIGAweEZGRkYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAuIFRoaXMgbG9va3MgcmlwZSBmb3IgZnV6emluZy4gQW55IHRpbWUgdGhlcmUmIzM5O3MgYSBoYXJkIGxpbWl0LCB0aGVyZSYjMzk7cyBhIGNoYW5jZSB0byB0cmlnZ2VyIGFuIG92ZXJmbG93IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGUgY29yZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkgcHJvYmFibHkgcmVzaWRlcyBpbiB0aGUgZnVuY3Rpb25zIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCwgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhcyBJIGhhZCBwcmV2aW91c2x5IGNvbnNpZGVyZWQuIEZvY3VzaW5nIG9uIHBhY2tldCBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBpcyB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gdGhhdCwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGBpcDZfbWFrZV9za2JgLCBhbmQgYGlwNl9mb3J3YXJkYC4KCldhaXQgYSBtaW51dGUsIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIGFyZSBleHBvcnRlZD8gVGhhdCBtZWFucyB0aGV5IGFyZSB1c2VkIGJ5IGEgdG9uIG9mIGRpZmZlcmVudCBwcm90b2NvbHMsIGluY2x1ZGluZyBVRFAsIElDTVAsIGFuZCBSQVcuIFRoYXQgYnJvYWRlbnMgdGhlIGF0dGFjayBzdXJmYWNlIHNpZ25pZmljYW50bHkuIFRoZSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBVRFAgbGVuZ3RoIG92ZXJmbG93cywgd2hpY2ggaXMgcmVhbGx5IGludGVyZXN0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIGB1ZHBfc2VuZG1zZ2AgYW5kIGB1ZHB2Nl9zZW5kbXNnYCBhcmUgc29saWQgZW50cnkgcG9pbnRzIGZvciBVRFAuIEJpbmdvISBUaGV5IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gUGx1cywgaXQgd291bGQgYmUgdXNlZnVsIHRvIGFsc28gdGFyZ2V0IGBpcDZfZm9yd2FyZGAgZm9yIGFueSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuCgpKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBnZXQgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluOgoKKiAgIGB1ZHBfc2VuZG1zZ2AKKiAgIGB1ZHB2Nl9zZW5kbXNnYAoqICAgYGlwX2FwcGVuZF9kYXRhYAoqICAgYGlwNl9hcHBlbmRfZGF0YWAKKiAgIGBpcF9tYWtlX3NrYmAKKiAgIGBpcDZfbWFrZV9za2JgCiogICBgaXA2X2ZvcndhcmRgCgpBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGZ1enppbmchIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzLCBpbmRlZWQsIGB1ZHB2Nl9zZW5kbXNnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdD0xMj1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdDoxMzpzdHJ1Y3QgaXB2Nl9mbF9zb2NrbGlzdCogaXB2Nl9mbF9saXN0ICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfdjZfY29ubmVjdCxfX2lwNl9kYXRhZ3JhbV9jb25uZWN0LHVkcHY2X3NlbmRtc2cscmF3di4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTQtYmUxNiAgICAgICAgICAgICAgICAgICAgIGluZXRfc3BvcnQgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Y3BfdHJhbnNtaXRfc2tiXG4tLVxuaW5jbHVkZS9uZXQvdWRwLmg9Mjc2PUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5pbmNsdWRlL25ldC91ZHAuaC0yNzctXG5pbmNsdWRlL25ldC91ZHAuaDoyNzg6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuaW5jbHVkZS9uZXQvdWRwLmgtMjc5LUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY0MTpcdHJldHVybiBJTkRJUkVDVF9DQUxMXzIocHJvdC1cdTAwM2VzZW5kbXNnLCB0Y3Bfc2VuZG1zZywgdWRwdjZfc2VuZG1zZyxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQyLVx0XHRcdCAgICAgICBzaywgbXNnLCBzaXplKTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTctXHRcdFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjYxODpcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE5LVx0XHRcdCAqL1xuLS1cbm5ldC9pcHY2L3VkcC5jPTEzNTY9c3RhdGljIGludCB1ZHBfdjZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTEzNzMtXHR1aC1cdTAwM2VkZXN0ID0gZmw2LVx1MDAzZWZsNl9kcG9ydDtcbm5ldC9pcHY2L3VkcC5jOjEzNzQ6XHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xubmV0L2lwdjYvdWRwLmMtMTM3NS1cdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE0Mzg9c3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdWRwLmMtMTQ1OC1cbm5ldC9pcHY2L3VkcC5jOjE0NTk6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvaXB2Ni91ZHAuYy0xNDYwLXtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xNzc0LX1cbm5ldC9pcHY2L3VkcC5jOjE3NzU6RVhQT1JUX1NZTUJPTCh1ZHB2Nl9zZW5kbXNnKTtcbm5ldC9pcHY2L3VkcC5jLTE3NzYtXG4tLVxubmV0L2lwdjYvdWRwLmM9MTg5NT1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xOTA2LVx0LmdldHNvY2tvcHRcdFx0PSB1ZHB2Nl9nZXRzb2Nrb3B0LFxubmV0L2lwdjYvdWRwLmM6MTkwNzpcdC5zZW5kbXNnXHRcdD0gdWRwdjZfc2VuZG1zZyxcbm5ldC9pcHY2L3VkcC5jLTE5MDgtXHQucmVjdm1zZ1x0XHQ9IHVkcHY2X3JlY3Ztc2csXG4tLVxubmV0L3J4cnBjL291dHB1dC5jPTE5PXNzaXplX3QgZG9fdWRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3J4cnBjL291dHB1dC5jLTI5LVx0XHRcdH1cbm5ldC9yeHJwYy9vdXRwdXQuYzozMDpcdFx0XHRyZXR1cm4gdWRwdjZfc2VuZG1zZyhzaywgbXNnLCBsZW4pO1xubmV0L3J4cnBjL291dHB1dC5jLTMxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzIzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVEUHY2IFNlbmQgSXNzdWUqKgoKT2theSwgeWVzLCBgdWRwdjZfc2VuZG1zZ2Agc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgdGhpcyBmaXggd2lsbCB3b3JrIGNvcnJlY3RseSBpbiBhbGwgcmVsZXZhbnQgZW52aXJvbm1lbnRzLgoKVGhlIGV4aXN0aW5nIHNlbGZ0ZXN0IGxldmVyYWdlcyBgQ09ORklHX0RFQlVHX05FVGAgdG8gbG9vayBmb3Igd2FybmluZ3MgaW4gdGhlIGtlcm5lbCBsb2dzLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yLCBidXQgdGhlIGFjdHVhbCBmaXggaXRzZWxmIGFwcGVhcnMgdG8gYmUgc2l0dWF0ZWQgZGVlcCB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IG91dHB1dCBjb2RlOiBzcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aC4gT2YgY291cnNlLCB0aGV5JiMzOTtyZSBjb21waWxlZCB3aGVuIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGVuYWJsZWQsIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCBjb25maWdzIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBlbmFibGVkIGluIG1vc3QgYnVpbGRzLiBTbywgSSB3aWxsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRob3NlIGluIG15IGNvbnNpZGVyYXRpb25zLgoKSG9sZCBvbiwgSSBzZWUgdGhhdCB0aGUgc2VsZnRlc3QsIHNwZWNpZmljYWxseSBgY29ya19mcmFnc2l6ZS5weWAsIGlzIHV0aWxpemluZyBgSVBfTVRVX0RJU0NPVkVSYCBhbmQgYElQVjZfTVRVX0RJU0NPVkVSYCBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyB1c2VzIGBJUFY2X1RMVl9KVU1CT2AgZm9yIGhvcC1ieS1ob3Agb3B0aW9ucy4gVGhhdCB0cmlnZ2VycyBhIG5ldyB0aG91Z2h0LiBJcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gSVB2NiBqdW1ib2dyYW1zIHRoYXQgSSBzaG91bGQgYmUgZG91YmxlIGNoZWNraW5nPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X1RMVl9KVU1CTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaW42Lmg9NzE9c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW42LmgtMTQ4LSNkZWZpbmUgSVBWNl9UTFZfSU9BTVx0XHQ0OVx0LyogUkZDIDk0ODYgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaDoxNDk6I2RlZmluZSBJUFY2X1RMVl9KVU1CT1x0XHQxOTRcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNTAtI2RlZmluZSBJUFY2X1RMVl9IQU9cdFx0MjAxXHQvKiBob21lIGFkZHJlc3Mgb3B0aW9uICovXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExND1zdGF0aWMgYm9vbCBpcDZfcGFyc2VfdGx2KGJvb2wgaG9wYnlob3AsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTE4MS1cdFx0XHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTgyOlx0XHRcdFx0Y2FzZSBJUFY2X1RMVl9KVU1CTzpcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODMtXHRcdFx0XHRcdGlmICghaXB2Nl9ob3BfanVtYm8oc2tiLCBvZmYpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xODI9aW50IG5mX2lwNl9jaGVja19oYmhfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjExLVxubmV0L25ldGZpbHRlci91dGlscy5jOjIxMjpcdFx0aWYgKG5oW29mZl0gPT0gSVBWNl9UTFZfSlVNQk8pIHtcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0yMTMtXHRcdFx0dTMyIHBrdF9sZW47XG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmM9NDUyPXN0YXRpYyBpbnQgdGNmX2NzdW1faXB2Nl9ob3BvcHRzKHN0cnVjdCBpcHY2X29wdF9oZHIgKmlwNnhoLCB1bnNpZ25lZCBpbnQgaXhobCxcbi0tXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjUtXHRcdFx0YnJlYWs7XG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo0NjY6XHRcdGNhc2UgSVBWNl9UTFZfSlVNQk86XG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjctXHRcdFx0b3B0bGVuID0geGhbb2ZmICYjNDM7IDFdICYjNDM7IDI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MjA9SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5OjIxOklQVjZfVExWX0pVTUJPID0gMTk0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0yMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weT0xMDg9ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMTMtICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk6MTE0OiAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMTE1LSAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBKdW1ib2dyYW0gUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIG5lZWRlZCBmb3IganVtYm9ncmFtczsgaXQmIzM5O3MgYWxsIGJha2VkIGludG8gc3RhbmRhcmQgSVB2Niwgd2hpY2ggaXMgZ29vZC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgdWRwX3NlbmRtc2dgLCBgdWRwdjZfc2VuZG1zZ2AsIGBpcF9hcHBlbmRfZGF0YWAsIGBpcDZfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X21ha2Vfc2tiYCwgYW5kIGBpcDZfZm9yd2FyZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4KClRoZSBpc3N1ZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gZGVhbGluZyB3aXRoIGV4dHJlbWVseSBsYXJnZSBNVFVzLCBzcGVjaWZpY2FsbHkganVtYm9ncmFtcyBvciBzY2VuYXJpb3Mgd2l0aCBhcnRpZmljaWFsbHkgaW5mbGF0ZWQgTVRVcy4gVGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiByZXN0cmljdCB0aGUgTVRVLCBib3RoIGZvciBJUHY0IGFuZCBJUHY2LCB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAgcmVzcGVjdGl2ZWx5LiBUaGF0IGNhcHMgaXQuCgpJIGRpZCBhIHF1aWNrIGNoZWNrLCBhbmQgYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSBzdGF0aWMsIHNvIGl0JiMzOTtzIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIHRoYXQgYXJlIG1vc3QgaW1wb3J0YW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoKVGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zIGFyZSBtaW5pbWFsOyBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2gmIzM5O3MgbGltaXRpbmcgdGhlIE1UVS9mcmFnbWVudCBzaXplIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggZW5vcm1vdXMgTVRVcy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIGBzZW5kbXNnYCBjYWxscyBhbmQgSVAgZm9yd2FyZGluZy4KClRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBsaW1pdHMgdGhlIE1UVS9mcmFnc2l6ZSB0byBJUF9NQVhfTVRVIGFuZCBJUDZfTUFYX01UVSBpbiB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gc2VuZGluZyBsYXJnZSBwYWNrZXRzIG92ZXIgaW50ZXJmYWNlcyB3aXRoIHZlcnkgbGFyZ2UgTVRVcyAoZS5nLiB1c2luZyBJUHY2IGp1bWJvZ3JhbXMpLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBVRFAgc2VuZG1zZyBhbmQgSVAgZm9yd2FyZGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpcF9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cblxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2Y2MyMjk1OWI3YTVhZjhhYzMxZjAzNDZkYTFmZjI4YzA3ZmIwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEyOjE4OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg0LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdAogCXJjdV9yZWFkX3VubG9jaygpOwogCiBvdXQ6CiYjNDM7CW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7CiYjNDM7CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCiAJY29yay0mZ3Q7ZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgPwogCQkJIGRzdDRfbXR1KCZhbXA7cnQtJmd0O2RzdCkgOiBSRUFEX09OQ0UocnQtJmd0O2RzdC5kZXYtJmd0O210dSk7CiYjNDM7CWNvcmstJmd0O2ZyYWdzaXplID0gbWluKGNvcmstJmd0O2ZyYWdzaXplLCBJUF9NQVhfTVRVKTsKIAogCWlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay0mZ3Q7ZnJhZ3NpemUpKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAogCWlmIChmcmFnX3NpemUgJmFtcDsmYW1wOyBmcmFnX3NpemUgJmx0OyBtdHUpCiAJCW10dSA9IGZyYWdfc2l6ZTsKIAomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCW10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTsKIAljb3JrLSZndDtiYXNlLmZyYWdzaXplID0gbXR1OwogCWNvcmstJmd0O2Jhc2UuZ3NvX3NpemUgPSBpcGM2LSZndDtnc29fc2l6ZTsKIAljb3JrLSZndDtiYXNlLnR4X2ZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQppbmRleCAwZjVjMTc4YmMyMjRiLi5jNmQzMzJjOTBhNTQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBURVNUX1BST0dTIDo9IFwKIAljbXNnX3NvX21hcmsuc2ggXAogCWNtc2dfc29fcHJpb3JpdHkuc2ggXAogCWNtc2dfdGltZS5zaCBcCiYjNDM7CWNvcmtfZnJhZ3NpemUucHkgXAogCWRvdWJsZV91ZHBfZW5jYXAuc2ggXAogCWRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcCiAJZWNtcF9yZWhhc2guc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5kODllZjk4OTIzMjk0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLgomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgaXAsIE5ldE5TLCBOZXROU0VudGVyCiYjNDM7aW1wb3J0IGVycm5vCiYjNDM7aW1wb3J0IGd6aXAKJiM0MztpbXBvcnQgb3MKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCBzdWJwcm9jZXNzCiYjNDM7CiYjNDM7CiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTAKJiM0MztJUF9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X01UVV9ESVNDT1ZFUiA9IDIzCiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDIKJiM0MztJUFY2X1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfVExWX0pVTUJPID0gMTk0CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uKSAtJmd0OyBib29sIHwgTm9uZToKJiM0MzsgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gWwomIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksCiYjNDM7ICAgICAgICAoZiYjMzk7L2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9JiMzOTssIG9wZW4pLAomIzQzOyAgICBdOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAmIzM5O3J0JiMzOTspIGFzIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOwomIzQzOwomIzQzO2RlZiBhc3NlcnRfZGVidWdfa2VybmVsKCkgLSZndDsgTm9uZToKJiM0MzsgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygmIzM5O0NPTkZJR19ERUJVR19ORVQmIzM5OykKJiM0MzsgICAgaWYgcmVzIGlzIE5vbmU6CiYjNDM7ICAgICAgICBwcmludCgmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3QmIzM0OykKJiM0MzsgICAgZWxpZiBub3QgcmVzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jKSAtJmd0OyBib29sOgomIzQzOyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWyYjMzk7ZG1lc2cmIzM5O10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiYjNDM7ICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsmIzM5O2dyZXAmIzM5OywgJiMzOTstcSYjMzk7LCBmJiMzOTtXQVJOSU5HOi4qe2Z1bmN9JiMzOTtdLCBzdGRpbj1kbWVzZy5zdGRvdXQpCiYjNDM7ICAgIGRtZXNnLndhaXQoKQomIzQzOyAgICByZXR1cm4gcmVzdWx0LnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwX3NldHVwKG5zOiBOZXROUywgbXR1OiBpbnQsIGlwdjY6IGJvb2wpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIGlwKCYjMzk7bGluayBhZGQgZHVtbXkgdHlwZSBkdW1teSYjMzk7LCBucz1ucykKJiM0MzsgICAgaXAoZiYjMzk7bGluayBzZXQgZHVtbXkgbXR1IHttdHV9JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKQomIzQzOyAgICBmbGFnID0gJiMzOTstNiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgIG5vZGFkID0gJiMzOTtub2RhZCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgIGFkZHJfbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7CiYjNDM7ICAgIGFkZHJfcmVtb3RlID0gJiMzOTtmZDAwOjoyJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7MTAuMC4wLjImIzM5OwomIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2FkZHJfbG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjYoKSAtJmd0OyBOb25lOgomIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKQomIzQzOwomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKToKJiM0MzsgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pCiYjNDM7ICAgICAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAxMjM0KSkKJiM0MzsgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiBpdCBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRToKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQomIzQzOwomIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucykKJiM0MzsKJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCYjMzk7dWRwX3Y2X3NlbmRfc2tiJiMzOTspLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9pcHY0KCkgLSZndDsgTm9uZToKJiM0MzsgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU1NiwgRmFsc2UpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkOgomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKQomIzQzOyAgICAgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgICAgICBmZC5zZW5kdG8oYiYjMzk7ICYjMzk7ICogNjU1MjgsICgmIzM5OzEwLjAuMC4yJiMzOTssIDEyMzQpKQomIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuCiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtJmd0OyBOb25lOgomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBpcF9zZXR1cChucywgNjU1ODQsIFRydWUpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDoKJiM0MzsgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NCkKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKQomIzQzOyAgICAgICAgICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygmIzM5OyFISEhIJiMzOTssIDEyMzQsIDEyMzQsIDAsIDApICYjNDM7IGImIzM5OyAmIzM5OyAqIDY1NTI4CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNlbmR0byh1ZHAsICgmIzM5O2ZkMDA6OjImIzM5OywgMCkpCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOwomIzQzO2lmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKJiM0MzsgICAga3NmdF9ydW4oWwomIzQzOyAgICAgICAgdGVzdF9pcHY2LAomIzQzOyAgICAgICAgdGVzdF9pcHY0LAomIzQzOyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLAomIzQzOyAgICBdKQomIzQzOyAgICBrc2Z0X2V4aXQoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgb3IgbWF5YmUgZXZlbiBhIGxlbmd0aCBvdmVyZmxvdywgd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIE1UVSBnZXRzIHRvbyBsYXJnZSwgc3BlY2lmaWNhbGx5IGdyZWF0ZXIgdGhhbiA2NTUzNSwgd2UgY2FuIHJ1biBpbnRvIHRyb3VibGUgd2l0aCAxNi1iaXQgbGVuZ3RoIGZpZWxkcywgcmVzdWx0aW5nIGluIGEgcG90ZW50aWFsIG92ZXJmbG93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgb3ZlcmZsb3cgbWlnaHQgbWFuaWZlc3QgaW4gZWl0aGVyIHRoZSBgc2tiLSZndDtsZW5gIG9yIHRoZSBVRFAgbGVuZ3RoIGZpZWxkcy4gVGhlIHRlc3QgY2FzZSB0aGUgYXV0aG9yIHByb3ZpZGVzIGNyZWF0ZXMgYSBoaWdoIE1UVSBkdW1teSBpbnRlcmZhY2UgKElQdjQ6IDY1NTU2LCBJUHY2OiA2NTU3NikgYW5kIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCAoNjU1MjggYnl0ZXMpLiBUaGUgdGVzdCBpcyBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYSB3YXJuaW5nIGluIHRoZSBrZXJuZWwgbG9ncyBmcm9tIGB1ZHBfdjZfc2VuZF9za2JgIG9yIGB1ZHBfc2VuZF9za2JgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNhcHBpbmcgdGhlIE1UVSBhbmQsIHRoZXJlZm9yZSwgdGhlIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gcHJldmVudCBvdmVyZmxvd3MuIFRoZSBwYXRjaCBpcyBzaW1wbHkgbGltaXRpbmcgYm90aCBNVFUgYW5kIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAod2hpY2ggaXMgNjU1MzUpLiBUaGlzIHNvdW5kcyBjb3JyZWN0LCBhbmQgYSBjbGVhbiBmaXggZm9yIGEgMTYtYml0IGxlbmd0aCBvdmVyZmxvdywgYnV0IG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpXaGlsZSBhbiBvdmVyZmxvdyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBLQVNBTiBpcyB0aGVyZSB0byBjYXRjaCB0aG9zZS4gU28gaXMgdGhpcyBwdXJlbHkgYSBjb250cm9sLWZsb3cgaXNzdWU/IElzIHRoZXJlIGEgcmlzayB0aGF0IHRoaXMgd2lsbCBzZW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBhbGxvY2F0ZWQgYnVmZmVycyBiZWluZyB0b28gc21hbGwgYW5kIHRoZW4gaGF2aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZWQgaW50byB0aGVtLgoKSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBleGNlZWRzIDY1NTM1LCB0aGVyZSYjMzk7cyB0aGUgY2hhbmNlIG9mIGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gc2l6ZSBjYWxjdWxhdGlvbnMgb3Igd2hlbiBwb3B1bGF0aW5nIGxlbmd0aCBoZWFkZXIgZmllbGRzLiBBbiBvdmVyZmxvdyBpbiBhbGxvY2F0aW9uIHNpemUgd291bGQgbGVhZCB0byBhIHNtYWxsIGJ1ZmZlciwgdGhlbiBhIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSDigJMgS0FTQU4gd2lsbCBjYXRjaCBpdC4gQW4gb3ZlcmZsb3cgaW4gdGhlIGxlbmd0aCBoZWFkZXIgY291bGQgbGVhZCB0byBlaXRoZXI6CgoxLiAgYSBzbWFsbCBsZW5ndGggaGVhZGVyIHdpdGggYSBsYXJnZSBwYXlsb2FkIChyZWFkaW5nIG91dC1vZi1ib3VuZHMgZnJvbSB0aGUgc2tiKSwgb3IKMi4gIGEgbGFyZ2UgbGVuZ3RoIGhlYWRlciB3aXRoIGEgc21hbGwgcGF5bG9hZCAod2hpY2ggbWlnaHQgaW52b2x2ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4KClRoZSBkYXRhIGluIHRoZSBgc2tiYCBpcyB1c3VhbGx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVpdGhlciB0aHJvdWdoIGBjb3B5X2Zyb21fdXNlcmAgb3Igc2ltaWxhci4gSWYgbW9yZSBkYXRhIGlzIHNlbnQgdGhhbiBhbGxvY2F0ZWQsIGl04oCZcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhhdC4gTXkgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIGJlIHNlbnQgZnJvbSBza2IgcGFkZGluZz8KClRvIGNvbmZpcm0sIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBpbiBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIGBmcmFnc2l6ZWAgY2FsY3VsYXRpb24gYW5kIGxlbmd0aCBmaWVsZHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgc3VidGxlciB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dBUk5JTkcuKnVkcF9zZW5kX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgdWRwX3NlbmRfc2tiYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgdGhpcyBpcyB0byBpc29sYXRlIHRoZSBwb3RlbnRpYWwgY3VscHJpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzdHJpbmc6IGBXQVJOX09OYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBkZWJ1Z2dpbmcgdGhlc2Uga2luZHMgb2YgbmV0d29yayBzdGFjayBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlcmUga2VybmVsIHdhcm5pbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNydWNpYWwgcHJvY2VzcyBvZiBzZW5kaW5nIFVEUCBkYXRhZ3JhbXMuIEZpbmRpbmcgYFdBUk5fT05gIHdpdGhpbiBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBzYW5pdHkgY2hlY2sgb3IgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCB0aGF0IHdhcnJhbnRzIGEga2VybmVsLWxldmVsIG1lc3NhZ2UuIEkmIzM5O20gaG9waW5nIHRoYXQgYnkgZ3JlcHBpbmcgZm9yIHRoYXQgc3RyaW5nLCBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIHdhcm5pbmcsIHdoaWNoIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNsdWVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByb290IGNhdXNlIG9mIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gdHJhY2tpbmcgZG93bi4gVGhpcyBzZWFyY2ggd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBvZiBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dBUk5fT04uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTE5OTU9aW50IHVkcF9yZWFkX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yMDE0LVxubmV0L2lwdjQvdWRwLmM6MjAxNTpcdFdBUk5fT05fT05DRSghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKTtcbm5ldC9pcHY0L3VkcC5jLTIwMTYtXG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2ND1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yODA1LVx0c2tiLVx1MDAzZXNrID0gc2s7XG5uZXQvaXB2NC91ZHAuYzoyODA2Olx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza19pc19yZWZjb3VudGVkKHNrKSk7XG5uZXQvaXB2NC91ZHAuYy0yODA3LVx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMzNTM9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzQ2Mi1cbm5ldC9pcHY0L3VkcC5jOjM0NjM6XHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2VlbmRfc2sgIT0gYmF0Y2hfc2tzKTtcbm5ldC9pcHY0L3VkcC5jLTM0NjQtXHRyZXR1cm4gaXRlci1cdTAwM2VlbmRfc2sgPyBpdGVyLVx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVidWdnaW5nIGEgVURQIElzc3VlKioKCkFscmlnaHQsIHNvIHRoZSB0ZXN0IHNjcmlwdCBpcyBmbGFnZ2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3RyaW5nIGBXQVJOSU5HOi4qdWRwX3NlbmRfc2tiYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIHdhcm5pbmcgcmVsYXRlZCB0byB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIFVEUCB0cmFuc21pc3Npb24gcGF0aC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcD8gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyAqV0FSTiouIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VhcmNoIHdpdGhpbiBgdWRwX3NlbmRfc2tiYCBpdHNlbGYgZm9yIGFueSBpbnN0YW5jZXMgb2YgYFdBUk5gLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByb290IGNhdXNlIGlzIG1vc3QgbGlrZWx5IGhpZGluZy4gVW5kZXJzdGFuZGluZyB3aGF0IGNpcmN1bXN0YW5jZXMgbGVhZCB0byB0aGF0IHdhcm5pbmcgd2lsbCBiZSBrZXkgdG8gZGlhZ25vc2luZyBhbmQgZml4aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXQVJOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9MTk5NT1pbnQgdWRwX3JlYWRfc2tiKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIwMTQtXG5uZXQvaXB2NC91ZHAuYzoyMDE1Olx0V0FSTl9PTl9PTkNFKCFza2Jfc2V0X293bmVyX3NrX3NhZmUoc2tiLCBzaykpO1xubmV0L2lwdjQvdWRwLmMtMjAxNi1cbi0tXG5uZXQvaXB2NC91ZHAuYz0yNzY0PWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI4MDUtXHRza2ItXHUwMDNlc2sgPSBzaztcbm5ldC9pcHY0L3VkcC5jOjI4MDY6XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrX2lzX3JlZmNvdW50ZWQoc2spKTtcbm5ldC9pcHY0L3VkcC5jLTI4MDctXHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfcGZyZWU7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzM1Mz1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC91ZHAuYy0zNDYyLVxubmV0L2lwdjQvdWRwLmM6MzQ2MzpcdFdBUk5fT05fT05DRShpdGVyLVx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xubmV0L2lwdjQvdWRwLmMtMzQ2NC1cdHJldHVybiBpdGVyLVx1MDAzZWVuZF9zayA/IGl0ZXItXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTM4MjM9c3RhdGljIGludCBicGZfaXRlcl91ZHBfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VkcF9pdGVyX3N0YXRlICppdGVyLFxuLS1cbm5ldC9pcHY0L3VkcC5jLTM4MjgtXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19vYmpzKCpuZXdfYmF0Y2gsIG5ld19iYXRjaF9zeixcbm5ldC9pcHY0L3VkcC5jOjM4Mjk6XHRcdFx0XHQgIGZsYWdzIHwgX19HRlBfTk9XQVJOKTtcbm5ldC9pcHY0L3VkcC5jLTM4MzAtXHRpZiAoIW5ld19iYXRjaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVEUCBTZW5kIFBhdGgqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhhdCB3YXJuaW5nIEkgc2F3Li4uIGNvdWxkIGl0IGJlIGJ1cmllZCB3aXRoaW4gdGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uLCBidXQgY2xldmVybHkgZGlzZ3Vpc2VkIGFzIGEgY29uZGl0aW9uYWwgZGVidWcgbWVzc2FnZSBsaWtlIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHNob3VsZCBwcm9iYWJseSBzdG9wIGFzc3VtaW5nIGFuZCBqdXN0IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6ZSB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24gaXRzZWxmLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfc2VuZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcbm5ldC9pcHY0L3VkcC5jLTEwOTItXG5uZXQvaXB2NC91ZHAuYzoxMDkzOnN0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMTc5PWludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMTE5MC1cbm5ldC9pcHY0L3VkcC5jOjExOTE6XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlKTtcbm5ldC9pcHY0L3VkcC5jLTExOTItXG4tLVxubmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcdFx0XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmNvcmspO1xubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHVkcF9zZW5kX3NrYmAqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTGludXgga2VybmVsIGhhbmRsZXMgc2VuZGluZyBVRFAgZGF0YWdyYW1zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB1ZHBfc2VuZF9za2JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWVudGFsbHkgc2tldGNoIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyDigJMgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBJdCYjMzk7cyBjbGVhcmx5IGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IGNhbGxlZCBhZnRlciB0aGUgc29ja2V0IGxheWVyIGhhcyBhc3NlbWJsZWQgYW4gU0tCIChTb2NrZXQgQnVmZmVyKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcGFja2V0IHRyYW5zbWlzc2lvbi4KCkkgYW50aWNpcGF0ZSBzZWVpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipDaGVja3N1bSBDYWxjdWxhdGlvbjoqKiBIb3cgYXJlIFVEUCBjaGVja3N1bXMgZ2VuZXJhdGVkIGFuZCBoYW5kbGVkIGhlcmUsIGNvbnNpZGVyaW5nIG9mZmxvYWRpbmcgY2FwYWJpbGl0aWVzIGFuZCBoYXJkd2FyZSBhY2NlbGVyYXRpb24/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuCiogICAqKklQIEhlYWRlciBDb25zdHJ1Y3Rpb246KiogVGhlIGZ1bmN0aW9uIHByb2JhYmx5IGJ1aWxkcyB0aGUgSVAgaGVhZGVyIChJUHY0IG9yIElQdjYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCkgb3IgaW50ZXJhY3RzIHdpdGggYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGRvZXMuIERvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24gaWYgdGhlIGRhdGFncmFtIHNpemUgZXhjZWVkcyB0aGUgTVRVPwoqICAgKipJbnRlcmZhY2UgU2VsZWN0aW9uOioqIEhvdyBkb2VzIGl0IGNob29zZSB0aGUgb3V0Z29pbmcgbmV0d29yayBpbnRlcmZhY2U/IElzIGl0IGJhc2VkIG9uIHJvdXRpbmcgdGFibGVzLCBzb2NrZXQgb3B0aW9ucywgb3Igc29tZSBvdGhlciBtZWNoYW5pc20/CiogICAqKkxvY2tpbmc6KiogV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgVURQIHNvY2tldCBvciB0aGUgcm91dGluZyBjYWNoZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGxvb2sgb3V0IGZvcj8KKiAgICoqVHJhbnNtaXNzaW9uIFF1ZXVlaW5nOioqIERvZXMgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBoYW5kIHRoZSBTS0Igb2ZmIHRvIGEgZGV2aWNlIGRyaXZlciwgb3IgaXMgdGhlcmUgYW4gaW50ZXJtZWRpYXRlIHF1ZXVlaW5nIHN0YWdlPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29ya2luZyBkZXZpY2UmIzM5O3MgdHJhbnNtaXQgcXVldWUgKGUuZy4sIGBuZXRpZl9zdGFydF9xdWV1ZWApLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEhvdyBhcmUgdHJhbnNtaXNzaW9uIGZhaWx1cmVzIChlLmcuLCBuZXR3b3JrIGNvbmdlc3Rpb24sIGludGVyZmFjZSBkb3duKSBoYW5kbGVkPyBEb2VzIGl0IGhhbmRsZSBJQ01QIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGdlbmVyYXRlZCBpbiByZXNwb25zZT8KKiAgICoqQ29udHJvbC9TaWduYWxsaW5nOioqIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFueSBzaWduYWxsaW5nIGNvbXBvbmVudHMgdG8gbm90aWZ5IHRoZSBzZW5kaW5nIHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBzdWNjZXNzL2ZhaWx1cmUgb2YgdHJhbnNtaXNzaW9uPwoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IHdhdGNoaW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnM6IElQLCB0aGUgZGV2aWNlIGRyaXZlciwgYW5kIHRoZSBoYXJkd2FyZSBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBTS0IgaXMgaGFuZGxlZCwgSSBhc3N1bWUgaXQmIzM5O3Mgd2hlcmUgdGhlIG1vc3QgJiMzNDtnbHVlJiMzNDsgaGFwcGVucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIHBhcnRzIHJlc2lkZS4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBjb25maXJtIHRoZXNlIGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTM6XHRzdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4xMDk0Olx0XHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbjEwOTU6XHR7XG4xMDk2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4xMDk3Olx0XHRpbnQgb2Zmc2V0LCBsZW4sIGRhdGFsZW47XG4xMDk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjEwOTk6XHRcdGludCBlcnI7XG4xMTAwOlx0XG4xMTAxOlx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMTEwMjpcdFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZnNldDtcbjExMDM6XHRcdGRhdGFsZW4gPSBsZW4gLSBzaXplb2YoKnVoKTtcbjExMDQ6XHRcbjExMDU6XHRcdC8qXG4xMTA2Olx0XHQgKiBDcmVhdGUgYSBVRFAgaGVhZGVyXG4xMTA3Olx0XHQgKi9cbjExMDg6XHRcdHVoID0gdWRwX2hkcihza2IpO1xuMTEwOTpcdFx0dWgtXHUwMDNlc291cmNlID0gaW5ldF9zayhzayktXHUwMDNlaW5ldF9zcG9ydDtcbjExMTA6XHRcdHVoLVx1MDAzZWRlc3QgPSBmbDQtXHUwMDNlZmw0X2Rwb3J0O1xuMTExMTpcdFx0LyogRGF0YWdyYW0gbGVuZ3RoIGNoZWNrZWQgaW4gdWRwX3NlbmRtc2cuICovXG4xMTEyOlx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbjExMTM6XHRcdHVoLVx1MDAzZWNoZWNrID0gMDtcbjExMTQ6XHRcbjExMTU6XHRcdGlmIChjb3JrLVx1MDAzZWdzb19zaXplKSB7XG4xMTE2Olx0XHRcdGNvbnN0IGludCBobGVuID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpICYjNDM7XG4xMTE3Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuMTExODpcdFxuMTExOTpcdFx0XHRpZiAoaGxlbiAmIzQzOyBtaW4oZGF0YWxlbiwgY29yay1cdTAwM2Vnc29fc2l6ZSkgXHUwMDNlIGNvcmstXHUwMDNlZnJhZ3NpemUpIHtcbjExMjA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExMjE6XHRcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTEyMjpcdFx0XHR9XG4xMTIzOlx0XHRcdGlmIChkYXRhbGVuIFx1MDAzZSBjb3JrLVx1MDAzZWdzb19zaXplICogVURQX01BWF9TRUdNRU5UUykge1xuMTEyNDpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEyNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTEyNjpcdFx0XHR9XG4xMTI3Olx0XHRcdGlmIChzay1cdTAwM2Vza19ub19jaGVja190eCkge1xuMTEyODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEyOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTEzMDpcdFx0XHR9XG4xMTMxOlx0XHRcdGlmIChkc3RfeGZybShza2JfZHN0KHNrYikpKSB7XG4xMTMyOlx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMTMzOlx0XHRcdFx0cmV0dXJuIC1FSU87XG4xMTM0Olx0XHRcdH1cbjExMzU6XHRcbjExMzY6XHRcdFx0aWYgKGRhdGFsZW4gXHUwMDNlIGNvcmstXHUwMDNlZ3NvX3NpemUpIHtcbjExMzc6XHRcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgPSBjb3JrLVx1MDAzZWdzb19zaXplO1xuMTEzODpcdFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSA9IFNLQl9HU09fVURQX0w0O1xuMTEzOTpcdFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2VncyA9IERJVl9ST1VORF9VUChkYXRhbGVuLFxuMTE0MDpcdFx0XHRcdFx0XHRcdFx0XHQgY29yay1cdTAwM2Vnc29fc2l6ZSk7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0LyogRG9uJiMzOTt0IGNoZWNrc3VtIHRoZSBwYXlsb2FkLCBza2Igd2lsbCBnZXQgc2VnbWVudGVkICovXG4xMTQzOlx0XHRcdFx0Z290byBjc3VtX3BhcnRpYWw7XG4xMTQ0Olx0XHRcdH1cbjExNDU6XHRcdH1cbjExNDY6XHRcbjExNDc6XHRcdGlmIChzay1cdTAwM2Vza19ub19jaGVja190eCkge1x0XHRcdCAvKiBVRFAgY3N1bSBvZmYgKi9cbjExNDg6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4xMTQ5Olx0XHRcdGdvdG8gc2VuZDtcbjExNTA6XHRcdH0gZWxzZSBpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7IC8qIFVEUCBoYXJkd2FyZSBjc3VtICovXG4xMTUxOlx0Y3N1bV9wYXJ0aWFsOlxuMTE1MjpcdFx0XHR1ZHA0X2h3Y3N1bShza2IsIGZsNC1cdTAwM2VzYWRkciwgZmw0LVx1MDAzZWRhZGRyKTtcbjExNTM6XHRcdFx0Z290byBzZW5kO1xuMTE1NDpcdFx0fVxuMTE1NTpcdFxuMTE1NjpcdFx0LyogYWRkIHByb3RvY29sLWRlcGVuZGVudCBwc2V1ZG8taGVhZGVyICovXG4xMTU3Olx0XHR1aC1cdTAwM2VjaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKGZsNC1cdTAwM2VzYWRkciwgZmw0LVx1MDAzZWRhZGRyLCBsZW4sXG4xMTU4Olx0XHRcdFx0XHQgICAgICBJUFBST1RPX1VEUCwgdWRwX2NzdW0oc2tiKSk7XG4xMTU5Olx0XHRpZiAodWgtXHUwMDNlY2hlY2sgPT0gMClcbjExNjA6XHRcdFx0dWgtXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcbjExNjE6XHRcbjExNjI6XHRzZW5kOlxuMTE2MzpcdFx0ZXJyID0gaXBfc2VuZF9za2Ioc29ja19uZXQoc2spLCBza2IpO1xuMTE2NDpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbjExNjU6XHRcdFx0aWYgKGVyciA9PSAtRU5PQlVGUyBcdTAwMjZcdTAwMjZcbjExNjY6XHRcdFx0ICAgICFpbmV0X3Rlc3RfYml0KFJFQ1ZFUlIsIHNrKSkge1xuMTE2NzpcdFx0XHRcdFVEUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XG4xMTY4Olx0XHRcdFx0ZXJyID0gMDtcbjExNjk6XHRcdFx0fVxuMTE3MDpcdFx0fSBlbHNlIHtcbjExNzE6XHRcdFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfT1VUREFUQUdSQU1TKTtcbjExNzI6XHRcdH1cbjExNzM6XHRcdHJldHVybiBlcnI7XG4xMTc0Olx0fVxuMTE3NTpcdFxuMTE3NjpcdC8qXG4xMTc3Olx0ICogUHVzaCBvdXQgYWxsIHBlbmRpbmcgZGF0YSBhcyBvbmUgVURQIGRhdGFncmFtLiBTb2NrZXQgaXMgbG9ja2VkLlxuMTE3ODpcdCAqL1xuMTE3OTpcdGludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4xMTgwOlx0e1xuMTE4MTpcdFx0c3RydWN0IHVkcF9zb2NrICAqdXAgPSB1ZHBfc2soc2spO1xuMTE4MjpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTE4MzpcdFx0c3RydWN0IGZsb3dpNCAqZmw0ID0gXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmZsLnUuaXA0O1xuMTE4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjExODU6XHRcdGludCBlcnIgPSAwO1xuMTE4NjpcdFxuMTE4NzpcdFx0c2tiID0gaXBfZmluaXNoX3NrYihzaywgZmw0KTtcbjExODg6XHRcdGlmICghc2tiKVxuMTE4OTpcdFx0XHRnb3RvIG91dDtcbjExOTA6XHRcbjExOTE6XHRcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UpO1xuMTE5MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDoKCioqTG9jYXRpbmcgdGhlIFdhcm5pbmcqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgd2FybmluZyBtZXNzYWdlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIHBvdGVudGlhbCBpc3N1ZS4gVGhlIGtleSBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhhdCB3YXJuaW5nIGFjdHVhbGx5IGdlbmVyYXRlZD8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHVkcF9zZXRfbGVuX3Nob3J0YC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGNvbnRleHQgaW1wbGllZCBieSB0aGUgcHJvbXB0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfc2V0X2xlbl9zaG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTEwOTM9c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTExMTEtXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHBfc2VuZG1zZy4gKi9cbm5ldC9pcHY0L3VkcC5jOjExMTI6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L3VkcC5jLTExMTMtXHR1aC1cdTAwM2VjaGVjayA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBJc3N1ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgbmFtZSBgdWRwX3NldF9sZW5fc2hvcnRgIGhhcyBwb3BwZWQgdXAsIGFuZCBpdCYjMzk7cyByaW5naW5nIHNvbWUgYmVsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBVRFAgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgZGVhbGluZyB3aXRoIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FsY3VsYXRlZCBvciBkZXNpcmVkIFVEUCBsZW5ndGggaXMgc21hbGxlciB0aGFuIHNvbWV0aGluZyBpdCBzaG91bGQgYmUsIG1heWJlIGFuIE1UVSBvciBhIG1pbmltdW0gcmVxdWlyZWQgaGVhZGVyIHNpemUuIENvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgcGFkZGluZywgb3IgZXZlbiBhIHBvdGVudGlhbCBidWcuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGNvZGViYXNlLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwX3NldF9sZW5fc2hvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbGFnLmM9MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpyZG1hX2J1aWxkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2xhZy5jLTM4LVx0dWgtXHUwMDNlZGVzdCA9IGh0b25zKFJPQ0VfVjJfVURQX0RQT1JUKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2xhZy5jOjM5Olx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy00MC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYz0yOTc9c3RhdGljIHZvaWQgcHJlcGFyZV91ZHBfaGRyKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBzcmNfcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0zMDctXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IHNyY19wb3J0O1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmM6MzA4Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2tiLVx1MDAzZWxlbik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0zMDktXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz02MTM9c3RhdGljIHZvaWQgYW10X3NlbmRfZGlzY292ZXJ5KHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtNjY5LVx0dWRwaC1cdTAwM2VkZXN0XHQ9IGFtdC1cdTAwM2VyZWxheV9wb3J0O1xuZHJpdmVycy9uZXQvYW10LmM6NjcwOlx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKCp1ZHBoKSAmIzQzOyBzaXplb2YoKmFtdGQpKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTY3MS1cdHVkcGgtXHUwMDNlY2hlY2tcdD0gMDtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz03MDI9c3RhdGljIHZvaWQgYW10X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYW10X2RldiAqYW10LCBib29sIHY2KVxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTc2Mi1cdHVkcGgtXHUwMDNlZGVzdFx0PSBhbXQtXHUwMDNlcmVsYXlfcG9ydDtcbmRyaXZlcnMvbmV0L2FtdC5jOjc2MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqYW10cmgpICYjNDM7IHNpemVvZigqdWRwaCkpO1xuZHJpdmVycy9uZXQvYW10LmMtNzY0LVx0dWRwaC1cdTAwM2VjaGVja1x0PSAwO1xuLS1cbmRyaXZlcnMvbmV0L2FtdC5jPTI1OTQ9c3RhdGljIHZvaWQgYW10X3NlbmRfYWR2ZXJ0aXNlbWVudChzdHJ1Y3QgYW10X2RldiAqYW10LCBfX2JlMzIgbm9uY2UsXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjY1Mi1cdHVkcGgtXHUwMDNlZGVzdFx0PSBkcG9ydDtcbmRyaXZlcnMvbmV0L2FtdC5jOjI2NTM6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2YoKmFtdGEpICYjNDM7IHNpemVvZigqdWRwaCkpO1xuZHJpdmVycy9uZXQvYW10LmMtMjY1NC1cdHVkcGgtXHUwMDNlY2hlY2tcdD0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jPTMwNzU9c3RhdGljIGludCBpNDBlX3RzbyhzdHJ1Y3QgaTQwZV90eF9idWZmZXIgKmZpcnN0LCB1OCAqaGRyX2xlbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTMxMzEtXHRcdCAgICAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmM6MzEzMjpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0zMTMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmM9MTcyOT1zdGF0aWMgaW50IGlhdmZfdHNvKHN0cnVjdCBpYXZmX3R4X2J1ZmZlciAqZmlyc3QsIHU4ICpoZHJfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMtMTc3Ni1cdFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYzoxNzc3Olx0XHRcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jLTE3NzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM9MTg0MT1pbnQgaWNlX3RzbyhzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYy0xODkzLVx0XHQgICAgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYzoxODk0Olx0XHRcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYy0xODk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM9MjgyMT1pbnQgaWRwZl90c28oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jLTI4NzMtXHRcdG9mZi1cdTAwM2V0c29faGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBsNF9zdGFydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM6Mjg3NDpcdFx0dWRwX3NldF9sZW5fc2hvcnQobDQudWRwLCBzaGluZm8tXHUwMDNlZ3NvX3NpemUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMtMjg3NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jPTcwNz1zdGF0aWMgdm9pZCBvdHgyX3NxZV9hZGRfZXh0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IG90eDJfc25kX3F1ZXVlICpzcSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjc1MzpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jLTc1NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwNzc9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY0X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwaGRyICppcHY0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTEwODMtXHR1aCA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHVkcF9vZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MTA4NDpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXHUwMDNlbGVuIC0gdWRwX29mZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMDg1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwOTY9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY2X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwdjZoZHIgKmlwdjYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTEwMi1cdHVoID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwX29mZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYzoxMTAzOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cdTAwM2VsZW4gLSB1ZHBfb2ZmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTExMDQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIHN0cnVjdCBza19idWZmICptbHg1ZV90ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTExNS1cdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKDkpOyAvKiBEaXNjYXJkIFByb3RvY29sICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxMTY6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IG1seDVlaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE3LVx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jPTM4Mj1zdGF0aWMgdm9pZCBlZjRfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWY0X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDMtXHRwYXlsb2FkLVx1MDAzZXVkcC5zb3VyY2UgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jOjQwNDpcdHVkcF9zZXRfbGVuX3Nob3J0KFx1MDAyNnBheWxvYWQtXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDUtXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWY0X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jLTQwMC1cdHBheWxvYWQtXHUwMDNldWRwLnNvdXJjZSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYzo0MDE6XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZwYXlsb2FkLVx1MDAzZXVkcCwgc2l6ZW9mKCpwYXlsb2FkKSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYy00MDItXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jPTM4MD1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTQwMS1cdHBheWxvYWQtXHUwMDNldWRwLnNvdXJjZSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo0MDI6XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZwYXlsb2FkLVx1MDAzZXVkcCwgc2l6ZW9mKCpwYXlsb2FkKSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy00MDMtXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy90Y19lbmNhcF9hY3Rpb25zLmM9MzA1PXN0YXRpYyB2b2lkIGVmeF9nZW5fdHVuX2hlYWRlcl91ZHAoc3RydWN0IGVmeF90Y19lbmNhcF9hY3Rpb24gKmVuY2FwLCB1OCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYy0zMTMtXHR1ZHAtXHUwMDNlZGVzdCA9IGtleS1cdTAwM2V0cF9kc3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jOjMxNDpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcCwgc2l6ZW9mKCp1ZHApICYjNDM7IGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jLTMxNS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2Ioc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTUtXHRcdHVoZHItXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXHUwMDNlZHBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgc2l6ZW9mKCpzaGRyKSAmIzQzOyBzaXplb2YoKnVoZHIpICYjNDM7IGF0dHItXHUwMDNlc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU3LVx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfc2l6ZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTg6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgYXR0ci1cdTAwM2VtYXhfc2l6ZSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU5LVx0XHRcdFx0XHQgIChzaXplb2YoKmloZHIpICYjNDM7IHNpemVvZigqZWhkcikpKTtcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz01Nzg9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtXHR1aCA9IHVkcF9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXHUwMDNlbGVuIC0gZ3JvX2hpbnQtXHUwMDNlbmVzdGVkX3RwX29mZnNldCk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTItXHRpZiAodWgtXHUwMDNlY2hlY2spIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA4OT1zdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMDI6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCB1ZHBfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz03MzY9c3RhdGljIHN0cnVjdCBza19idWZmICpuc2ltX2Rldl90cmFwX3NrYl9idWlsZCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03NzItXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnVkcGgtXHUwMDNlZGVzdCwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjc3MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzc0LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmM9Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpuc2ltX2Rldl9wc2FtcGxlX3NrYl9idWlsZCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmMtNzUtXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnVkcGgtXHUwMDNlZGVzdCwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYzo3NjpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc3LVxuLS1cbmluY2x1ZGUvbGludXgvdWRwLmg9NDI9c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuKHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmluY2x1ZGUvbGludXgvdWRwLmgtNDYtXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjQ3OnN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfc2V0X2xlbl9zaG9ydChzdHJ1Y3QgdWRwaGRyICp1aCwgdW5zaWduZWQgaW50IGxlbilcbmluY2x1ZGUvbGludXgvdWRwLmgtNDgte1xuLS1cbmxpYi90ZXN0cy9ibGFja2hvbGVfZGV2X2t1bml0LmM9Mjc9c3RhdGljIHZvaWQgdGVzdF9ibGFja2hvbGVkZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9ibGFja2hvbGVfZGV2X2t1bml0LmMtNDgtXHR1aC1cdTAwM2Vzb3VyY2UgPSB1aC1cdTAwM2VkZXN0ID0gaHRvbnMoVURQX1BPUlQpO1xubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYzo0OTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBkYXRhX2xlbik7XG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jLTUwLVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuLS1cbm5ldC82bG93cGFuL25oY191ZHAuYz0zNj1zdGF0aWMgaW50IHVkcF91bmNvbXByZXNzKHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBuZWVkZWQpXG4tLVxubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTkwLVx0XHRpZiAobG93cGFuXzgwMjE1NF9jYihza2IpLVx1MDAzZWRfc2l6ZSlcbm5ldC82bG93cGFuL25oY191ZHAuYzo5MTpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZ1aCwgbG93cGFuXzgwMjE1NF9jYihza2IpLVx1MDAzZWRfc2l6ZSAtXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTItXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTMtXHRcdGVsc2Vcbm5ldC82bG93cGFuL25oY191ZHAuYzo5NDpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZ1aCwgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTk1LVx0XHRicmVhaztcbm5ldC82bG93cGFuL25oY191ZHAuYy05Ni1cdGRlZmF1bHQ6XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmM6OTc6XHRcdHVkcF9zZXRfbGVuX3Nob3J0KFx1MDAyNnVoLCBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTgtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTI5MzA9c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTAtXHR1ZHBoLVx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVx1MDAzZWN1cl91ZHBfZHN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjMwMTE6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBkYXRhbGVuICYjNDM7IDgpO1x0LyogREFUQSAmIzQzOyB1ZHBoZHIgKi9cbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTItXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zMDU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMTQzLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMocGt0X2Rldi1cdTAwM2VjdXJfdWRwX2RzdCk7XG5uZXQvY29yZS9wa3RnZW4uYzozMTQ0Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgdWRwbGVuKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxNDUtXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xOT1zdHJ1Y3Qgc2tfYnVmZiAqbmV0X3Rlc3RfZ2V0X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggaWQsXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzQtXHRcdHVoZHItXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXHUwMDNlZHBvcnQpO1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6NzU6XHRcdHVkcF9zZXRfbGVuX3Nob3J0KHVoZHIsIHNpemVvZigqc2hkcikgJiM0Mzsgc2l6ZW9mKCp1aGRyKSAmIzQzOyBhdHRyLVx1MDAzZXNpemUpO1xubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzYtXHRcdGlmIChhdHRyLVx1MDAzZW1heF9zaXplKVxubmV0L2NvcmUvc2VsZnRlc3RzLmM6Nzc6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgYXR0ci1cdTAwM2VtYXhfc2l6ZSAtXG5uZXQvY29yZS9zZWxmdGVzdHMuYy03OC1cdFx0XHRcdFx0ICAoc2l6ZW9mKCppaGRyKSAmIzQzOyBzaXplb2YoKmVoZHIpKSk7XG4tLVxubmV0L2NvcmUvdHNvLmM9OT12b2lkIHRzb19idWlsZF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqaGRyLCBzdHJ1Y3QgdHNvX3QgKnRzbyxcbi0tXG5uZXQvY29yZS90c28uYy00Mi1cdFx0Lyogc2l6ZSBpcyBhZnRlciBzZWdtZW50YXRpb24uICovXG5uZXQvY29yZS90c28uYzo0MzpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNpemVvZigqdWgpICYjNDM7IHNpemUpO1xubmV0L2NvcmUvdHNvLmMtNDQtXHR9XG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMyNS1cdHVoLVx1MDAzZWRlc3QgPSBkcG9ydDtcbm5ldC9pcHY0L2VzcDQuYzozMjY6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L2VzcDQuYy0zMjctXHR1aC1cdTAwM2VjaGVjayA9IDA7XG4tLVxubmV0L2lwdjQvaXBjb25maWcuYz04MTg9c3RhdGljIHZvaWQgX19pbml0IGljX2Jvb3RwX3NlbmRfaWYoc3RydWN0IGljX2RldmljZSAqZCwgdW5zaWduZWQgbG9uZyBqaWZmaWVzX2RpZmYpXG4tLVxubmV0L2lwdjQvaXBjb25maWcuYy04NDktXHRiLVx1MDAzZXVkcGguZGVzdCA9IGh0b25zKDY3KTtcbm5ldC9pcHY0L2lwY29uZmlnLmM6ODUwOlx0dWRwX3NldF9sZW5fc2hvcnQoXHUwMDI2Yi1cdTAwM2V1ZHBoLCBzaXplb2Yoc3RydWN0IGJvb3RwX3BrdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcGNvbmZpZy5jLTg1MS1cdC8qIFVEUCBjaGVja3N1bSBub3QgY2FsY3VsYXRlZCAtLSBleHBsaWNpdGx5IGFsbG93ZWQgaW4gQk9PVFAgUkZDICovXG4tLVxubmV0L2lwdjQvcm91dGUuYz0zMTg5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaW5ldF9ydG1fZ2V0cm91dGVfYnVpbGRfc2tiKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zMjIxLVx0XHR1ZHBoLVx1MDAzZWRlc3QgPSBkcG9ydDtcbm5ldC9pcHY0L3JvdXRlLmM6MzIyMjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbm5ldC9pcHY0L3JvdXRlLmMtMzIyMy1cdFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tLVxubmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvdWRwLmMtMTExMS1cdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xubmV0L2lwdjQvdWRwLmM6MTExMjpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xubmV0L2lwdjQvdWRwLmMtMTExMy1cdHVoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE3Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjgzLVx0XHRpZiAoZ3NvX3BhcnRpYWwgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoyODQ6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2l6ZSAmIzQzO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODUtXHRcdFx0XHRcdCAgU0tCX0dTT19DQihza2IpLVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODctXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjI4ODpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjg5LVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NzItXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ3MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcF9oZHIoc2tiKSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IG1zcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3NC1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01ODEtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU4MjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIG5ld2xlbik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4My1cdFx0dWgtXHUwMDNlY2hlY2sgPSBjaGVjaztcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTYwMS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NjAyOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIG5ld2xlbik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTYwMy1cdHVoLVx1MDAzZWNoZWNrID0gY2hlY2s7XG4tLVxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zNjEtXHR1aC1cdTAwM2VkZXN0ID0gZHBvcnQ7XG5uZXQvaXB2Ni9lc3A2LmM6MzYyOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XG5uZXQvaXB2Ni9lc3A2LmMtMzYzLVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTEzNTY9c3RhdGljIGludCB1ZHBfdjZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTEzNzQtXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xubmV0L2lwdjYvdWRwLmM6MTM3NTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xubmV0L2lwdjYvdWRwLmMtMTM3Ni1cdHVoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjI1PXN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTI5OC1cdFx0fVxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTI5OTpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHVkcF9sZW4pO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYz0xMzY9bmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtMTYzLVx0ZGF0YWxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwcm90b2ZmO1xubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6MTY0Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgZGF0YWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy0xNjUtXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM3LVx0dWgtXHUwMDNlZGVzdCA9IGthLVx1MDAzZWVuY2FwX2Rwb3J0O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTM4Olx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cdTAwM2VsZW4pO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM5LVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFVEUCBIZWFkZXIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgVURQIGhlYWRlciBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3VkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgZGVmaW5lZCB0aGVyZSwgYW5kIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBgc3RydWN0IHVkcGhkcmAgZGVmaW5pdGlvbiwgdG8gdmVyaWZ5IHRoZSBleHBlY3RlZCBsYXlvdXQgb2YgdGhlIHNvdXJjZSBwb3J0LCBkZXN0aW5hdGlvbiBwb3J0LCBsZW5ndGgsIGFuZCBjaGVja3N1bSBmaWVsZHMsIGFuZCBwZXJoYXBzIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHBvdGVudGlhbCBmbGFncyBvciBvcHRpb25zIGRlZmluZWQgZnVydGhlciBkb3duIGluIHRoYXQgaW5jbHVkZSBmaWxlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIG1vdmUgb24gdG8gd2hhdGV2ZXIgbXkgYWN0dWFsIHRhc2sgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91ZHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuKHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxuICA0MzpcdHtcbiAgNDQ6XHRcdHVoLVx1MDAzZWxlbiA9IGxlbiBcdTAwM2MgR1JPX0xFR0FDWV9NQVhfU0laRSA/IGh0b25zKGxlbikgOiAwO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW5fc2hvcnQoc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXG4gIDQ4Olx0e1xuICA0OTpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShsZW4gXHUwMDNlPSBHUk9fTEVHQUNZX01BWF9TSVpFKTtcbiAgNTA6XHRcdHVoLVx1MDAzZWxlbiA9IGh0b25zKGxlbik7XG4gIDUxOlx0fVxuICA1MjpcdFxuICA1MzpcdCNkZWZpbmUgVURQX0hUQUJMRV9TSVpFX01JTl9QRVJORVRcdDEyOFxuICA1NDpcdCNkZWZpbmUgVURQX0hUQUJMRV9TSVpFX01JTlx0XHQoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAxMjggOiAyNTYpXG4gIDU1Olx0I2RlZmluZSBVRFBfSFRBQkxFX1NJWkVfTUFYXHRcdDY1NTM2XG4gIDU2Olx0XG4gIDU3Olx0c3RhdGljIGlubGluZSB1MzIgdWRwX2hhc2hmbihjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBudW0sIHUzMiBtYXNrKVxuICA1ODpcdHtcbiAgNTk6XHRcdHJldHVybiAobnVtICYjNDM7IG5ldF9oYXNoX21peChuZXQpKSBcdTAwMjYgbWFzaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVRFAgTGVuZ3RoIFRydW5jYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLCBzcGVjaWZpY2FsbHkgdGhlIGBsZW4gJmd0Oz0gR1JPX0xFR0FDWV9NQVhfU0laRWAgY2hlY2ssIHdoZXJlIGBHUk9fTEVHQUNZX01BWF9TSVpFYCBpcyA2NTUzNi4gVGhpcyB3YXJuaW5nLCB0cmlnZ2VyZWQgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2ggaXMgaW5saW5lZCBpbnRvIGB1ZHBfc2VuZF9za2JgLCBleHBsYWlucyB0aGUgdGVzdCBzY3JpcHQmIzM5O3Mgc2VhcmNoIGZvciBgV0FSTklORzouKnVkcF9zZW5kX3NrYmAuIFNvLCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGBsZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA2NTUzNi4KCk5vdywgd2h5IGlzIGBsZW5gIGV4Y2VlZGluZyA2NTUzNT8gVGhlIHJvb3QgY2F1c2Ugc2VlbXMgdG8gYmUgdGhhdCBgY29yay0mZ3Q7ZnJhZ3NpemVgIHdhcyBub3QgYmVpbmcgcHJvcGVybHkgY2FwcGVkIGJ5IGBpcF9zZXR1cF9jb3JrYCwgbGVhZGluZyB0byB0aGUgdXNlciBwb3RlbnRpYWxseSBzZW5kaW5nIGEgbWFzc2l2ZSBVRFAgcGFja2V0IOKAkyBsZXQmIzM5O3Mgc2F5IGEgNjU1MjgtYnl0ZSBwYXlsb2FkIHBsdXMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgdG90YWwgb2YgNjU1NTYgYnl0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZS4KCkhvd2V2ZXIsIGlmIGBsZW5gIGlzIGluZGVlZCA2NTUzNiBvciBncmVhdGVyLCB0aGUgVURQIGxlbmd0aCBmaWVsZCAoYHVoLSZndDtsZW4gPSBodG9ucyhsZW4pYCkgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gMTYgYml0cy4gVGhlIHBheWxvYWQgaXRzZWxmIGFwcGVhcnMgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQg4oCTIGNyZWF0ZWQgZnJvbSBgY29weV9mcm9tX3VzZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBTbywgaXQmIzM5O3MganVzdCBhIHRydW5jYXRlZCBVRFAgbGVuZ3RoIGZpZWxkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uIGFuZCBhIGJ1ZywgYnV0IG5vdCBhbiBpbmZvcm1hdGlvbiBsZWFrLgoKQnV0LCBkb2VzIHRoaXMgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGF0IHRoZSByZWNlaXZlciBvciBzZW5kZXI/IElmIGBsZW5gIGlzIDY1NTU2LCBgaHRvbnMoNjU1NTYpYCBiZWNvbWVzIGBodG9ucygyMClgLiBUaGUgVURQIGhlYWRlciBjbGFpbXMgYSBsZW5ndGggb2YgMjAsIGJ1dCB0aGUgSVAgaGVhZGVyIGFzc2VydHMgYSBsZW5ndGggb2YgNjU1NTYuIFdoZW4gdGhlIHBhY2tldCBpcyBzZW50LCB0aGUgbmV0d29yayBkcml2ZXIgKndpbGwqIHNlbmQgNjU1NTYgYnl0ZXMuIFRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIHRob3NlIDY1NTU2IGJ5dGVzIGFyZSBhY3R1YWxseSAqaW5pdGlhbGl6ZWQqLiBBbmQgeWVzLCB0aGV5IHdlcmUuIFRoZXkgd2VyZSBhbGxvY2F0ZWQgYW5kIGZpbGxlZCBieSB0aGUgc29ja2V0IGxheWVyLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCBmcm9tIHdoYXQgSSBjYW4gc2VlLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGUgcGF0Y2ggZml4ZXMgYW55dGhpbmcgZWxzZS4gVGhlIHBhdGNoIGlzIGNhcHBpbmcgdGhlIE1UVSAoTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCkgdG8gYElQX01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLiBUaGlzIGVuc3VyZXMgdGhhdCBgY29yay0mZ3Q7ZnJhZ3NpemVgIGRvZXNuJiMzOTt0IGV4Y2VlZCA2NTUzNS4gSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBpcyAmbHQ7PSA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBmcmFnbWVudHMgdGhlIHBhY2tldC4gSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBleGNlZWRlZCA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCB3b3VsZCBwbGFjZSB1cCB0byBgY29yay0mZ3Q7ZnJhZ3NpemVgIGJ5dGVzIGludG8gYSBzaW5nbGUgYHNrYmAuIFdoaWxlIGBza2ItJmd0O2xlbmAgY291bGQgYmUgJmd0OyA2NTUzNSwgYHNrYi0mZ3Q7bGVuYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aGljaCBjYW4gaGFuZGxlIGxhcmdlciB2YWx1ZXMuIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhlIHRydW5jYXRpb24gaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBhbmQgdGhlIHdhcm5pbmcuCgpBbHNvLCB0aGUgSVB2NCB0b3RhbCBsZW5ndGggZmllbGQgaXMgMTYgYml0cy4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyAmZ3Q7IDY1NTM1LCBgaXBfc2VuZF9za2JgIGNvdWxkIHRydW5jYXRlIHRoZSBJUCBsZW5ndGgsIHRvby4gU28sIEkgbmVlZCB0byBjaGVjayBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIElmIGBza2ItJmd0O2xlbmAgJmd0OyA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBhbGxvY2F0ZXMgYSBzdWl0YWJseSBzaXplZCBgc2tiYC4gVGhlIGtleSBpczogZG9lcyBpdCBhbGxvY2F0ZSBpdCBwcm9wZXJseT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCB1c2VzIGBzb2NrX2FsbG9jX3NlbmRfc2tiYCBvciBzaW1pbGFyLCB3aGljaCBkb2VzIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gSWYgdGhlIHNpemUgaXMgJmd0OyA2NTUzNSwgaXQgYWxsb2NhdGVzLCBjb3BpZXMgZGF0YSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNldHMgYHNrYi0mZ3Q7bGVuYC4gQWdhaW4sIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoZSBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdXNlciBkYXRhLgoKU28sIHRoZSBjb3JlIGlzc3VlIGlzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIDE2LWJpdCBsZW5ndGggZmllbGRzIG9mIFVEUCBhbmQgSVAgaGVhZGVycy4gVGhpcyBsZWFkcyB0byBhIHdhcm5pbmcgYW5kIG1hbGZvcm1lZCBwYWNrZXRzLCBidXQgbm8gaW5mb3JtYXRpb24gbGVha2FnZSBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDM3MTpcdFx0dW5zaWduZWQgaW50IG10dTtcbiAzNzI6XHRcbiAzNzM6XHRcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xuIDM3NDpcdFx0XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiAzNzU6XHRcdFx0aWYgKG10dSlcbiAzNzY6XHRcdFx0XHRnb3RvIG91dDtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiAzODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODE6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuIDM4MjpcdFx0aWYgKGlkZXYpXG4gMzgzOlx0XHRcdG10dSA9IFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KTtcbiAzODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM4NTpcdFxuIDM4NjpcdG91dDpcbiAzODc6XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIDM5MDpcdH1cbiAzOTE6XHRcbiAzOTI6XHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4gMzkzOlx0ICpcbiAzOTQ6XHQgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiAzOTU6XHQgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbiAzOTY6XHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuIDM5NzpcdCAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiAzOTg6XHQgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbiAzOTk6XHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIElQIEZyYWdtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBJUDZfTUFYX01UVWAgdmFsdWUsIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lOiBpdCYjMzk7cyA2NTUzNSwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY291bGQgZGlyZWN0bHkgaW1wYWN0IG91ciBmcmFnbWVudGF0aW9uIGxvZ2ljLiBJZiB0aGUgYG10dWAgdmFsdWUgZXhjZWVkcyB0aGlzIGxpbWl0LCB3ZSBydW4gaW50byB0aGUgcmlzayBvZiB0aGUgYGNvcmstJmd0O2ZyYWdzaXplYCB2YWx1ZSBiZWNvbWluZyBsYXJnZXIgdGhhbiA2NTUzNS4gVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0gYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSB0aGUgVURQIGxlbmd0aCB0byBiZSB0cnVuY2F0ZWQsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIHdhcm5pbmcgdGhhdCB3ZSBoYXZlLiAKCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdGhpbmsgb2YgYW55IG90aGVyIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgY291bGQgYG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSlgIHVuZGVyZmxvdyBpZiB0aGUgYG10dWAgaXMgZXhjZXB0aW9uYWxseSBsYXJnZT8gTGV0JiMzOTtzIHJ1bGUgdGhhdCBvdXQ6IGBsd3R1bm5lbF9oZWFkcm9vbWAgcmV0dXJucyBhIHNtYWxsIHZhbHVlLiBTaW5jZSBgbXR1YCBpcyBjYXBwZWQgYXQgNjU1MzUsIHRoYXQgc2hvdWxkIHByZXZlbnQgYGZyYWdzaXplYCBmcm9tIGV2ZXIgZXhjZWVkaW5nIHRoYXQgbWF4aW11bSB2YWx1ZS4KCkFscmlnaHQsIGxldCBtZSBub3cgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBpcF9zZXR1cF9jb3JrYCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNnNrLVx1MDAzZXNrX3Rza2V5KTtcbjEyOTE6XHRcdHJldHVybiBlcnI7XG4xMjkyOlx0fVxuMTI5MzpcdFxuMTI5NDpcdHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4xMjk1Olx0XHRcdFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxuMTI5NjpcdHtcbjEyOTc6XHRcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0O1xuMTI5ODpcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4xMjk5Olx0XG4xMzAwOlx0XHRydCA9ICpydHA7XG4xMzAxOlx0XHRpZiAodW5saWtlbHkoIXJ0KSlcbjEzMDI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xMzAzOlx0XG4xMzA0Olx0XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbjEzMDU6XHRcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4xMzA2Olx0XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuMTMwNzpcdFxuMTMwODpcdFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbjEzMDk6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEzMTA6XHRcbjEzMTE6XHRcdC8qXG4xMzEyOlx0XHQgKiBzZXR1cCBmb3IgY29ya2luZy5cbjEzMTM6XHRcdCAqL1xuMTMxNDpcdFx0b3B0ID0gaXBjLVx1MDAzZW9wdDtcbjEzMTU6XHRcdGlmIChvcHQpIHtcbjEzMTY6XHRcdFx0aWYgKCFjb3JrLVx1MDAzZW9wdCkge1xuMTMxNzpcdFx0XHRcdGNvcmstXHUwMDNlb3B0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICYjNDM7IDQwLFxuMTMxODpcdFx0XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xMzE5Olx0XHRcdFx0aWYgKHVubGlrZWx5KCFjb3JrLVx1MDAzZW9wdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBgaXBfYXBwZW5kX2RhdGFgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIElmIHRoZSBgY29yay0mZ3Q7ZnJhZ3NpemVgIHZhbHVlIHNvbWVob3cgYmFsbG9vbnMgYmV5b25kIDY1NTM1LCBhIHNlcmlvdXMgcHJvYmxlbSBjb3VsZCBhcmlzZSB3aXRoaW4gdGhlIGBpcF9hcHBlbmRfZGF0YWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgY291bGQgbGVhZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGFuIHNrYiB3aXRoIGEgbGVuZ3RoIChgbGVuYCkgdGhhdCBleGNlZWRzIHRoZSA2NTUzNS1ieXRlIGxpbWl0LiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBzY2VuYXJpbywgYW5kIGEgc2lnbmlmaWNhbnQgc2VjdXJpdHkgY29uY2Vybiwgc28gbGV0JiMzOTtzIGNoZWNrIG91dCBgaXBfYXBwZW5kX2RhdGFgIHRvIGNvbmZpcm0gdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUxPUVYUE9SVF9TWU1CT0woaXBfZ2VuZXJpY19nZXRmcmFnKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk1Mi1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjk1MzpzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTU0LVx0XHRcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNDktLypcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNTA6ICpcdGlwX2FwcGVuZF9kYXRhKCkgY2FuIG1ha2Ugb25lIGxhcmdlIElQIGRhdGFncmFtIGZyb20gbWFueSBwaWVjZXMgb2Zcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNTEtICpcdGRhdGEuICBFYWNoIHBpZWNlIHdpbGwgYmUgaGVsZCBvbiB0aGUgc29ja2V0IHVudGlsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM1OS0gKi9cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNjA6aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM2MS1cdFx0ICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM4MC1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzODE6XHRyZXR1cm4gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCBcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSwgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UsXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgyLVx0XHRcdFx0c2tfcGFnZV9mcmFnKHNrKSwgZ2V0ZnJhZyxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzk5PXN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDg5LVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTQ5MDpcdFx0LyogRm9yIHN1Y2ggc29ja2V0cywgdHJhbnNoZHJsZW4gaXMgemVybyB3aGVuIGRvIGlwX2FwcGVuZF9kYXRhKCksXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDkxLVx0XHQgKiBzbyBpY21waGRyIGRvZXMgbm90IGluIHNrYiBsaW5lYXIgcmVnaW9uIGFuZCBjYW4gbm90IGdldCBpY21wX3R5cGVcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Ni1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjE1Nzc6XHRlcnIgPSBfX2lwX2FwcGVuZF9kYXRhKHNrLCBmbDQsIFx1MDAyNnF1ZXVlLCBjb3JrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3OC1cdFx0XHQgICAgICAgXHUwMDI2Y3VycmVudC1cdTAwM2V0YXNrX2ZyYWcsIGdldGZyYWcsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTYwNT12b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvcmlnX3NrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTE2NTgtXHRpcGMuc29ja2MubWFyayA9IGZsNC5mbG93aTRfbWFyaztcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NTk6XHRlcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgXHUwMDI2Zmw0LCBpcF9yZXBseV9nbHVlX2JpdHMsIGFyZy1cdTAwM2Vpb3YtXHUwMDNlaW92X2Jhc2UsXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjYwLVx0XHRcdCAgICAgbGVuLCAwLCBcdTAwMjZpcGMsIFx1MDAyNnJ0LCBNU0dfRE9OVFdBSVQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYF9faXBfYXBwZW5kX2RhdGFgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBfX2lwX2FwcGVuZF9kYXRhYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBJUCBzdGFjayBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHMsIHRoZSBuZXR3b3JrIGhlYWRlcnMsIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMuLi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIGZyYWdtZW50aW5nIGFuZCBzZW5kaW5nIElQIHBhY2tldHMsIHNwZWNpZmljYWxseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCYjMzk7cyBwcmFjdGljYWxseSBzY3JlYW1pbmcgJiMzNDtkYXRhIG1hbmlwdWxhdGlvbiYjMzQ7IHdoaWNoIGltcGxpZXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgbmVlZCB0byBiZSBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZS4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgTVRVcz8gV2hhdCBhYm91dCBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGF2b2lkZWQgb3Igb3B0aW1pemVkIHdpdGggdGVjaG5pcXVlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIEkvTz8gSSYjMzk7bSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBzY2VuYXJpb3MuCgpGdXJ0aGVybW9yZSwgSeKAmW0gbWVudGFsbHkgY29tcGFyaW5nIGFuZCBjb250cmFzdGluZyBpdCB3aXRoIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zIEnigJl2ZSB3b3JrZWQgd2l0aCBpbiB0aGUgcGFzdCwgbWF5YmUgaW4gb3RoZXIgT1Mga2VybmVscyBvciBuZXR3b3JrIGRldmljZSBkcml2ZXJzLiBBcmUgdGhlcmUgYW55IGNvbW1vbiBwaXRmYWxscz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBjbGV2ZXIgdGVjaG5pcXVlcyBmb3IgaGFuZGxpbmcgcGFydGlhbCB3cml0ZXMgb3IgZXJyb3JzPyBJ4oCZbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBvcHBvcnR1bml0aWVzIGZvciBlbmhhbmNlbWVudC4KCkkmIzM5O20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIHRoZSBjb2RlIGl0c2VsZiwgbG9va2luZyBmb3IgZWZmaWNpZW5jeSwgdGhyZWFkLXNhZmV0eSwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYyBhbmQgbGlrZWx5IHNvbWUgYml0d2lzZSBvcGVyYXRpb25zLCB3aGljaCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIGZvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb2RlJiMzOTtzIGVmZmljaWVuY3ksIGFuZCBpZiBub3QsIEkmIzM5O2xsIGJlIGRpdmluZyBkZWVwIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgaW4gdGhlIHdheSBpdCBpcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIElQIHN0YWNrJiMzOTtzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IHNpemVzLCBmcmFnbWVudGF0aW9uIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTM6XHRzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIDk1NDpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gOTU1Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxuIDk1NjpcdFx0XHRcdCAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuIDk1NzpcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiA5NTg6XHRcdFx0XHQgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsXG4gOTU5Olx0XHRcdFx0XHRcdGludCBsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLFxuIDk2MDpcdFx0XHRcdCAgICB2b2lkICpmcm9tLCBpbnQgbGVuZ3RoLCBpbnQgdHJhbnNoZHJsZW4sXG4gOTYxOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbiA5NjI6XHR7XG4gOTYzOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4gOTY0Olx0XHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gTlVMTDtcbiA5NjU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gOTY2Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gY29yay1cdTAwM2VvcHQ7XG4gOTY3Olx0XHRpbnQgaGhfbGVuO1xuIDk2ODpcdFx0aW50IGV4dGhkcmxlbjtcbiA5Njk6XHRcdGludCBtdHU7XG4gOTcwOlx0XHRpbnQgY29weTtcbiA5NzE6XHRcdGludCBlcnI7XG4gOTcyOlx0XHRpbnQgb2Zmc2V0ID0gMDtcbiA5NzM6XHRcdGJvb2wgemMgPSBmYWxzZTtcbiA5NzQ6XHRcdHVuc2lnbmVkIGludCBtYXhmcmFnbGVuLCBmcmFnaGVhZGVybGVuLCBtYXhub25mcmFnc2l6ZTtcbiA5NzU6XHRcdGludCBjc3VtbW9kZSA9IENIRUNLU1VNX05PTkU7XG4gOTc2Olx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUoY29yay1cdTAwM2Vkc3QpO1xuIDk3NzpcdFx0Ym9vbCBwYWdlZCwgaG9sZF90c2tleSA9IGZhbHNlLCBleHRyYV91cmVmID0gZmFsc2U7XG4gOTc4Olx0XHR1bnNpZ25lZCBpbnQgd21lbV9hbGxvY19kZWx0YSA9IDA7XG4gOTc5Olx0XHR1MzIgdHNrZXkgPSAwO1xuIDk4MDpcdFxuIDk4MTpcdFx0c2tiID0gc2tiX3BlZWtfdGFpbChxdWV1ZSk7XG4gOTgyOlx0XG4gOTgzOlx0XHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xuIDk4NDpcdFx0bXR1ID0gY29yay1cdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVx1MDAzZWZyYWdzaXplO1xuIDk4NTpcdFx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG4gOTg2Olx0XG4gOTg3Olx0XHRoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KTtcbiA5ODg6XHRcbiA5ODk6XHRcdGZyYWdoZWFkZXJsZW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyAob3B0ID8gb3B0LVx1MDAzZW9wdGxlbiA6IDApO1xuIDk5MDpcdFx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXHUwMDI2IH43KSAmIzQzOyBmcmFnaGVhZGVybGVuO1xuIDk5MTpcdFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcbiA5OTI6XHRcbiA5OTM6XHRcdGlmIChjb3JrLVx1MDAzZWxlbmd0aCAmIzQzOyBsZW5ndGggXHUwMDNlIG1heG5vbmZyYWdzaXplIC0gZnJhZ2hlYWRlcmxlbikge1xuIDk5NDpcdFx0XHRpcF9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIGZsNC1cdTAwM2VkYWRkciwgaW5ldC1cdTAwM2VpbmV0X2Rwb3J0LFxuIDk5NTpcdFx0XHRcdCAgICAgICBtdHUgLSAob3B0ID8gb3B0LVx1MDAzZW9wdGxlbiA6IDApKTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA5OTc6XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdC8qXG4xMDAwOlx0XHQgKiB0cmFuc2hkcmxlbiBcdTAwM2UgMCBtZWFucyB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGZyYWdtZW50IGFuZCB3ZSB3aXNoXG4xMDAxOlx0XHQgKiBpdCB3b24mIzM5O3QgYmUgZnJhZ21lbnRlZCBpbiB0aGUgZnV0dXJlLlxuMTAwMjpcdFx0ICovXG4xMDAzOlx0XHRpZiAodHJhbnNoZHJsZW4gXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgbGVuZ3RoICYjNDM7IGZyYWdoZWFkZXJsZW4gXHUwMDNjPSBtdHUgXHUwMDI2XHUwMDI2XG4xMDA1Olx0XHQgICAgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTSkgXHUwMDI2XHUwMDI2XG4xMDA2Olx0XHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB8fCBjb3JrLVx1MDAzZWdzb19zaXplKSBcdTAwMjZcdTAwMjZcbjEwMDc6XHRcdCAgICAoIWV4dGhkcmxlbiB8fCAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkpKVxuMTAwODpcdFx0XHRjc3VtbW9kZSA9IENIRUNLU1VNX1BBUlRJQUw7XG4xMDA5Olx0XG4xMDEwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBsZW5ndGgpIHtcbjEwMTE6XHRcdFx0c3RydWN0IG1zZ2hkciAqbXNnID0gZnJvbTtcbjEwMTI6XHRcbjEwMTM6XHRcdFx0aWYgKGdldGZyYWcgPT0gaXBfZ2VuZXJpY19nZXRmcmFnIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjEwMTQ6XHRcdFx0XHRpZiAoc2tiX3pjb3B5KHNrYikgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2Vtc2dfdWJ1ZiAhPSBza2JfemNvcHkoc2tiKSlcbjEwMTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAxNjpcdFxuMTAxNzpcdFx0XHRcdC8qIExlYXZlIHVhcmcgTlVMTCBpZiBjYW4mIzM5O3QgemVyb2NvcHksIGNhbGxlcnMgc2hvdWxkXG4xMDE4Olx0XHRcdFx0ICogYmUgYWJsZSB0byBoYW5kbGUgaXQuXG4xMDE5Olx0XHRcdFx0ICovXG4xMDIwOlx0XHRcdFx0aWYgKChydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1NHKSBcdTAwMjZcdTAwMjZcbjEwMjE6XHRcdFx0XHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTAyMjpcdFx0XHRcdFx0cGFnZWQgPSB0cnVlO1xuMTAyMzpcdFx0XHRcdFx0emMgPSB0cnVlO1xuMTAyNDpcdFx0XHRcdFx0dWFyZyA9IG1zZy1cdTAwM2Vtc2dfdWJ1ZjtcbjEwMjU6XHRcdFx0XHR9XG4xMDI2Olx0XHRcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xuMTAyNzpcdFx0XHRcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgbGVuZ3RoLCBza2JfemNvcHkoc2tiKSxcbjEwMjg6XHRcdFx0XHRcdFx0XHQgICAgZmFsc2UpO1xuMTAyOTpcdFx0XHRcdGlmICghdWFyZylcbjEwMzA6XHRcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbjEwMzE6XHRcdFx0XHRleHRyYV91cmVmID0gIXNrYl96Y29weShza2IpO1x0Lyogb25seSByZWYgb24gbmV3IHVhcmcgKi9cbjEwMzI6XHRcdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9TRyBcdTAwMjZcdTAwMjZcbjEwMzM6XHRcdFx0XHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTAzNDpcdFx0XHRcdFx0cGFnZWQgPSB0cnVlO1xuMTAzNTpcdFx0XHRcdFx0emMgPSB0cnVlO1xuMTAzNjpcdFx0XHRcdH0gZWxzZSB7XG4xMDM3Olx0XHRcdFx0XHR1YXJnX3RvX21zZ3pjKHVhcmcpLVx1MDAzZXplcm9jb3B5ID0gMDtcbjEwMzg6XHRcdFx0XHRcdHNrYl96Y29weV9zZXQoc2tiLCB1YXJnLCBcdTAwMjZleHRyYV91cmVmKTtcbjEwMzk6XHRcdFx0XHR9XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdH0gZWxzZSBpZiAoKGZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgbGVuZ3RoKSB7XG4xMDQyOlx0XHRcdGlmIChpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKSlcbjEwNDM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTA0NDpcdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9TRyBcdTAwMjZcdTAwMjZcbjEwNDU6XHRcdFx0ICAgIGdldGZyYWcgPT0gaXBfZ2VuZXJpY19nZXRmcmFnKVxuMTA0NjpcdFx0XHRcdC8qIFdlIG5lZWQgYW4gZW1wdHkgYnVmZmVyIHRvIGF0dGFjaCBzdHVmZiB0byAqL1xuMTA0NzpcdFx0XHRcdHBhZ2VkID0gdHJ1ZTtcbjEwNDg6XHRcdFx0ZWxzZVxuMTA0OTpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfk1TR19TUExJQ0VfUEFHRVM7XG4xMDUwOlx0XHR9XG4xMDUxOlx0XG4xMDUyOlx0XHRjb3JrLVx1MDAzZWxlbmd0aCAmIzQzOz0gbGVuZ3RoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJc3N1ZSB3aXRoIExhcmdlIFVEUCBQYWNrZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBwb3RlbnRpYWwgb3ZlcmZsb3cuIEluaXRpYWxseSwgbXkgdGhpbmtpbmcgd2FzOiBpZiBgY29yay0mZ3Q7ZnJhZ3NpemVgIGlzIG1hc3NpdmUsIHRoZW4gYG10dWAgd291bGQgYmUgZXF1YWxseSBodWdlLCBhbmQgc28gYG1heG5vbmZyYWdzaXplYCB3b3VsZCBmb2xsb3cuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBjb3JrLSZndDtsZW5ndGggJiM0MzsgbGVuZ3RoICZndDsgbWF4bm9uZnJhZ3NpemUgLSBmcmFnaGVhZGVybGVuYCBtaWdodCBub3QgZXZlbiBraWNrIGluIGZvciBwYWNrZXQgc2l6ZXMgYmVsb3cgNjU1MzUsIHNvIHRoYXQgd2FzIGNvbmNlcm5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBjb3JrLSZndDtsZW5ndGhgIGFuZCBgbGVuZ3RoYCBhcmUganVzdCBpbnRlZ2Vycy4KCldhaXQgYSBzZWNvbmQsIHRoZSBjb2RlICpkb2VzKiBjYXAgYG10dWAgYXQgYElQX01BWF9NVFVgICg2NTUzNSkuIFRoZXJlZm9yZSwgYG1heG5vbmZyYWdzaXplYCBpcyAqYXQgbW9zdCogNjU1MzUuIFNvIHRoYXQgbWVhbnMgYGNvcmstJmd0O2xlbmd0aCAmIzQzOyBsZW5ndGhgICpjYW4mIzM5O3QqIGdvIGJleW9uZCA2NTUzNSBtaW51cyB0aGUgZnJhZ21lbnRhdGlvbiBoZWFkZXIgbGVuZ3RoLiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBjb2RlICpzaG91bGQqIHJldHVybiBgLUVNU0dTSVpFYC4KClRoZSB0ZXN0IHNjcmlwdCBzZWVtcyB0byBleHBlY3QgcHJlY2lzZWx5IHRoaXMgYmVoYXZpb3Igd2l0aCBpdHMgYHRyeS4uLmV4Y2VwdGAgYmxvY2ssIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGF0IGBFTVNHU0laRWAgZXJyb3IuIEJ1dCB0aGUgc2NyaXB0IHNheXMgc29tZXRoaW5nIGFib3V0IGEgV0FSTiBtZXNzYWdlIGJlaW5nIHByaW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrLiBSaWdodCwgaWYgYG10dWAgaXNuJiMzOTt0IGNhcHBlZCwgYG1heG5vbmZyYWdzaXplYCBnb2VzIGJleW9uZCA2NTUzNS4gU28sIGBfX2lwX2FwcGVuZF9kYXRhYCBjb3VsZCAqYWxsb3cqIGBjb3JrLSZndDtsZW5ndGhgIHRvIGV4Y2VlZCA2NTUzNS4gSXQgd291bGQgdGhlbiBhbGxvY2F0ZSBhbiBTS0IgYW5kIGNvcHkgdGhlIGRhdGEuIGB1ZHBfc2VuZF9za2JgIGlzIGNhbGxlZCBhbmQgY2FsbHMgYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2gsICp0aGF0JiMzOTtzKiB3aGVyZSB0aGUgV0FSTiBpcyB0cmlnZ2VyZWQgYmVjYXVzZSBgbGVuYCBpcyAmZ3Q7PSA2NTUzNi4gYHVkcF9zZW5kX3NrYmAgZ29lcyBhaGVhZCBhbmQgc2VuZHMgdGhlIHBhY2tldC4gU28sIGl0JiMzOTtzIGEgV0FSTiwgYnV0IHRoZSBkYXRhIGlzIGNvcnJlY3RseSBjb3BpZWQuCgpOb3csIEkgd2FzIHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgaXQmIzM5O3Mgb2theSBiZWNhdXNlIGBfX2lwX2FwcGVuZF9kYXRhYCBjb3BpZXMgYGxlbmd0aGAgYnl0ZXMgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIFNLQi4gVGhlIFNLQiBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIG15IGNvbmNlcm5zIGFyZSBsYWlkIHRvIHJlc3QuIFRoZSBvbmx5IGlzc3VlLCBhcyBJIHNlZSBpdCBub3csIGlzIHRoYXQgdGhlIFVEUCBsZW5ndGggZmllbGQgKndpbGwqIGJlIHRydW5jYXRlZCB0byAxNiBiaXRzLCBhbmQgdGhlIElQIGxlbmd0aCBmaWVsZCAqbWlnaHQqIGFsc28gZ2V0IHRydW5jYXRlZCB0b28sIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uLiBJdCB3YXJyYW50cyBhIHdhcm5pbmcsIGJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgYSBtZW1vcnkgbGVhay4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgaXA2X3NldHVwX2NvcmtgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDIwOlx0XHR9XG4xNDIxOlx0XHR2Nl9jb3JrLVx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXHUwMDNlaGxpbWl0O1xuMTQyMjpcdFx0djZfY29yay1cdTAwM2V0Y2xhc3MgPSBpcGM2LVx1MDAzZXRjbGFzcztcbjE0MjM6XHRcdHY2X2NvcmstXHUwMDNlZG9udGZyYWcgPSBpcGM2LVx1MDAzZWRvbnRmcmFnO1xuMTQyNDpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5mbGFncyBcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxuMTQyNTpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI2Olx0XHRcdCAgICAgIFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuMTQyNzpcdFx0ZWxzZVxuMTQyODpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI5Olx0XHRcdFx0UkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXHUwMDI2cnQtXHUwMDNlZHN0KSk7XG4xNDMwOlx0XG4xNDMxOlx0XHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplKTtcbjE0MzI6XHRcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuMTQzMzpcdFx0XHRtdHUgPSBmcmFnX3NpemU7XG4xNDM0Olx0XG4xNDM1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbjE0MzY6XHRcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuMTQzNzpcdFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuMTQzODpcdFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbjE0Mzk6XHRcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG4xNDQwOlx0XHRjb3JrLVx1MDAzZWJhc2UubWFyayA9IGlwYzYtXHUwMDNlc29ja2MubWFyaztcbjE0NDE6XHRcdGNvcmstXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXHUwMDNlc29ja2MucHJpb3JpdHk7XG4xNDQyOlx0XHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXHUwMDI2aXBjNi1cdTAwM2Vzb2NrYywgXHUwMDI2Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzKTtcbjE0NDM6XHRcdGlmIChpcGM2LVx1MDAzZXNvY2tjLnRzZmxhZ3MgXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xuMTQ0NDpcdFx0XHRjb3JrLVx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcbjE0NDU6XHRcdFx0Y29yay1cdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXHUwMDNlc29ja2MudHNfb3B0X2lkO1xuMTQ0NjpcdFx0fVxuMTQ0NzpcdFx0Y29yay1cdTAwM2ViYXNlLmxlbmd0aCA9IDA7XG4xNDQ4Olx0XHRjb3JrLVx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcbjE0NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MDkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBJUHY2IFVEUCBKdW1ibyBGcmFtZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwNl9zZXR1cF9jb3JrYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIE1UVSBhbmQgVURQIHNvY2tldHMuIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIFVEUCBsZW5ndGggZmllbGQuIFdoZW4gYSBzb2NrZXQgaXMgVURQLCB0aGUgTVRVIGlzIGNhcHBlZCBhdCBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9zZXR1cF9jb3JrYC4gVGhpcyBrZWVwcyBgY29yay0mZ3Q7YmFzZS5mcmFnc2l6ZWAgd2l0aGluIGJvdW5kcywgd2hpY2ggaW4gdHVybiBwcmV2ZW50cyBgc2tiLSZndDtsZW5gIGZyb20gZXhjZWVkaW5nIDY1NTM1IHdoZW4gYXBwZW5kaW5nIGRhdGEgaW4gYGlwNl9hcHBlbmRfZGF0YWAuIFRoaXMsIGltcG9ydGFudGx5LCBhdm9pZHMgdGhlIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCB3YXJuaW5nIGluIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoIHNpZ25pZmllcyB0aGUgdHJ1bmNhdGlvbiBvZiB0aGUgVURQIGxlbmd0aCBmaWVsZC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIEJ1dCBubywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIG9yIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLCBlbnN1cmluZyBmdWxsIGluaXRpYWxpemF0aW9uLiBUaGUgcHJvYmxlbSBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyB0aGF0IHJlc3VsdHMgaW4gYSBtYWxmb3JtZWQgcGFja2V0IHdpdGggYSB0cnVuY2F0ZWQgbGVuZ3RoLiBUaGUga2VybmVsJiMzOTtzIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGlmIHRoZXkgd2VyZSBoYXBwZW5pbmcuIEJ1dCBoZXJlLCBpdCYjMzk7cyBqdXN0IGFib3V0IHRoZSBsZW5ndGggZmllbGQgZ2V0dGluZyB0cnVuY2F0ZWQuCgpOb3csIGlmIHRoZSBsZW5ndGggZmllbGQgZ2V0cyB0cnVuY2F0ZWQsIGNvdWxkIGEgcmVjZWl2ZXIgbWlzaW50ZXJwcmV0IHRoZSBwYWNrZXQ/IENvdWxkIGl0IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIHRoZSByZWNlaXZpbmcgZW5kPyBJZiB0aGUgcmVjZWl2ZXIgZ2V0cyBhIHBhY2tldCB3aXRoIGEgKnNtYWxsKiBsZW5ndGggZmllbGQgYnV0IGEgKmxhcmdlKiBwYXlsb2FkLCBpdCYjMzk7bGwganVzdCBpZ25vcmUgdGhlIGV4dHJhIHBheWxvYWQuIEhvd2V2ZXIsIGlmIHRoZSByZWNlaXZlciBnZXRzIGEgcGFja2V0IHdpdGggYSAqbGFyZ2UqIGxlbmd0aCBmaWVsZCBidXQgYSAqc21hbGwqIHBheWxvYWQsIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBwb3RlbnRpYWxseSBjYXVzaW5nIGl0IHRvIHJlYWQgb3V0IG9mIGJvdW5kcy4gQnV0IHdhaXQsIGluIG91ciBjYXNlLCB0aGUgbGVuZ3RoICppcyogdHJ1bmNhdGVkIChlLmcuLCA2NTU1NiBiZWNvbWVzIDIwKS4gU28gdGhlIGFjdHVhbCBwYXlsb2FkIGlzIHNtYWxsZXIgdGhhbiB0aGUgbGVuZ3RoIGZpZWxkIGluIHRoZSBwYWNrZXQuIFNvIHRoZSByZWNlaXZlciB3aWxsIG9ubHkgc2VlIGEgVURQIHBhY2tldCBvZiBsZW5ndGggMjAgYW5kIGlnbm9yZSB0aGUgcmVzdCBvZiB0aGUgZ2FyYmFnZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaGVyZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoZSB0ZXN0IHNjcmlwdCB1c2VzIGBJUFY2X1RMVl9KVU1CT2AuIFRoZSB0ZXN0IHNldHMgdXAgYW4gSVB2NiBjb25uZWN0aW9uIGFuZCBhIHJhdyBVRFAgc29ja2V0IHdpdGggYSBqdW1ibyBwYXlsb2FkLiBJdCB1c2VzIGEgUkFXIHNvY2tldCB3aXRoIGBJUFBST1RPX1VEUGAgYW5kIHNlbmRzIGEgcGFja2V0IHdpdGggYSBKdW1ibyBwYXlsb2FkIG9wdGlvbi4gSG9sZCBvbi4uLiBpZiBpdCYjMzk7cyBhIFJBVyBzb2NrZXQsIHRoZW4gYHNrX2lzX3VkcChzaylgIGlzIGZhbHNlLiBTbywgdGhhdCBtZWFucyB0aGUgTVRVIGlzbiYjMzk7dCBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCBmb3IgUkFXIHNvY2tldHMuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIGFuZCBsb2dpYyB3aXRoaW4gYHNrX2lzX3VkcGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcHJvdGVjdGlvbiBwcm92aWRlZCBmb3IgVURQIHNvY2tldHMgbWlnaHQgbm90IGFwcGx5IHRvIFJBVyBzb2NrZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19pc191ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTI5NjU9c3RhdGljIGlubGluZSBib29sIHNrX2lzX3RjcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzEtXG5pbmNsdWRlL25ldC9zb2NrLmg6Mjk3MjpzdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdWRwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTczLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk3OD1CUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Ny1cdFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFRDUCBzb2NrZXQgaW4gTElTVEVOICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4ODpcdGlmICh1bmxpa2VseShzayBcdTAwMjZcdTAwMjYgc2tfaXNfdWRwKHNrKSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg5LVx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVURQIHNvY2tldCBpbiBDTE9TRSAqL1xuLS1cbm5ldC9jb3JlL3NvY2suYz00NDY1PWJvb2wgc2tfYnVzeV9sb29wX2VuZCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUpXG4tLVxubmV0L2NvcmUvc29jay5jLTQ0NzEtXG5uZXQvY29yZS9zb2NrLmM6NDQ3MjpcdGlmIChza19pc191ZHAoc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29jay5jLTQ0NzMtXHQgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ1ZHBfc2soc2spLVx1MDAzZXJlYWRlcl9xdWV1ZSkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NDE9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDQtXHRcdHJldHVybiAoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiAoVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfTElTVEVOKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTQ1Olx0aWYgKHNrX2lzX3VkcChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Ni1cdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNC1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxNDM1Olx0aWYgKHNrX2lzX3VkcChzaykpXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNi1cdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMwMT1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDctXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1RDUDtcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMwODpcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwOS1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVURQO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMxNz1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjUtXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1RDUDtcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMyNjpcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNy1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzM3LVx0ICovXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMzg6XHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSBcdTAwMjZcdTAwMjZcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzOS1cdCAgICBhZGRybGVuIFx1MDAzZT0gb2Zmc2V0b2ZlbmQodHlwZW9mKCphZGRyZXNzKSwgc2FfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zNDY9c3RhdGljIGludCBob29rX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzYxLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzYyOlx0aWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM2My1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzQyCgkJCQkJCQlvdXRwdXQ6IDI2NwoJCQkJCQkJdGhvdWdodHM6IDEyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiB0aGUgTVRVIENhcHBpbmcgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2tfaXNfdWRwYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgVURQIHNvY2tldC4gRm9yIFJBVyBzb2NrZXRzLCBpdCYjMzk7cyBmYWxzZSwgc28gdGhlIE1UVSBpc24mIzM5O3QgY2FwcGVkLiBUaGF0IG1lYW5zIHRoYXQgYGNvcmstJmd0O2ZyYWdzaXplYCBjb3VsZCB0ZWNobmljYWxseSBiZSBncmVhdGVyIHRoYW4gNjU1MzUsIGJ1dCB0aGUga2VybmVsICpkb2VzbiYjMzk7dCogY2FsbCBgdWRwX3NldF9sZW5fc2hvcnRgIGZvciBSQVcgc29ja2V0cyBzaW5jZSB0aGUgdXNlciBoYW5kbGVzIHRoYXQuIFNvLCBubyB3YXJuaW5nLiBUaGUgYHRlc3RfaXB2Nl9qdW1ib2Agc2NyaXB0IGlzIGxpa2VseSBqdXN0IHZlcmlmeWluZyB0aGF0IEp1bWJvIHBhY2tldHMgKG92ZXIgNjU1MzUgYnl0ZXMpIGNvbnRpbnVlIHRvIHdvcmsgZmluZSB3aXRoIFJBVyBzb2NrZXRzLCBhbmQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIHRoZW0uCgpOb3csIGRvZXMgdGhpcyBoYXZlIGFueSBLTVNBTiByZWxldmFuY2U/IFRoZSBwYXRjaCBtb2RpZmllcyBNVFUgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aXRoaW4gdGhlIGxlbmd0aCBmaWVsZHMsIHNwZWNpZmljYWxseSBmb3IgVURQIHBhY2tldHMgd2hpY2ggYXJlIGNhcHBlZCB0byA2NTUzNSBieXRlcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIFNLQiBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyIGRhdGEuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBsZW5ndGggdHJ1bmNhdGlvbiB0aGF0IGNhbiBsZWFkIHRvIGEgbWFsZm9ybWVkIHBhY2tldCBhbmQgYSBrZXJuZWwgd2FybmluZy4gS0FTQU4gaXMgY2VydGFpbmx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaWYgdGhleSBzb21laG93IG9jY3VycmVkLCBidXQgdGhleSBkb24mIzM5O3QgKmhhcHBlbiogaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgYWdhaW4gdG8gYmUgc3VyZS4gSSYjMzk7bSBzZWVpbmcgdGhlIGNoYW5nZXMsIGFuZCB0aGV5JiMzOTtyZSBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBqdXN0IGNhcHMgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgKDY1NTM1KSBvciBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gdmFyaW91cyBwbGFjZXMuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGxlbmd0aHMgZm9yIFVEUCBwYWNrZXRzLCB3aGljaCBoYXZlIGEgMTYtYml0IGxlbmd0aCBmaWVsZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuCgpIZXJlJiMzOTtzIG15IGZ1bGwgS01TQU4gcmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LiBUaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxuXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxuXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS4zNzIxMjk0MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMxMjMyNTYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF9zZW5kbXNnXCIsXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCIsXG4gICAgXCJpcF9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxcblxcblRoZSBmaXggc2ltcGx5IGNhcHMgdGhlIE1UVSBhbmQgYGNvcmstXFx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS4zNzIxMzUzMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA2NTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjNmNjMjI5NTliN2E1YWY4YWMzMWYwMzQ2ZGExZmYyOGMwN2ZiMDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBvdXQ6XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuK1xcbiBcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbiBcXG4gXFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbiBcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuIFxcbiBcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4gXFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuIFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4gXFxuK1xcdGlmIChza19pc191ZHAoc2spKVxcbitcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4gXFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDBmNWMxNzhiYzIyNGIuLmM2ZDMzMmM5MGE1NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGNtc2dfc29fbWFyay5zaCBcXFxcXFxuIFxcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcXFxcbiBcXHRjbXNnX3RpbWUuc2ggXFxcXFxcbitcXHRjb3JrX2ZyYWdzaXplLnB5IFxcXFxcXG4gXFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxcXFxuIFxcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxcXFxuIFxcdGVjbXBfcmVoYXNoLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg5ZWY5ODkyMzI5NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rIyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cXG4rXFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGlwLCBOZXROUywgTmV0TlNFbnRlclxcbitpbXBvcnQgZXJybm9cXG4raW1wb3J0IGd6aXBcXG4raW1wb3J0IG9zXFxuK2ltcG9ydCBzb2NrZXRcXG4raW1wb3J0IHN0cnVjdFxcbitpbXBvcnQgc3VicHJvY2Vzc1xcbitcXG4rXFxuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXFxuK0lQX1BNVFVESVNDX1BST0JFID0gM1xcbitJUFY2X01UVV9ESVNDT1ZFUiA9IDIzXFxuK0lQVjZfUE1UVURJU0NfRE8gPSAyXFxuK0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzXFxuK0lQVjZfVExWX0pVTUJPID0gMTk0XFxuK1xcbitcXG4rZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uKSAtXFx1MDAzZSBib29sIHwgTm9uZTpcXG4rICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFtcXG4rICAgICAgICAoJy9wcm9jL2NvbmZpZy5neicsIGd6aXAub3BlbiksXFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXFxuKyAgICBdOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcXG4rICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzpcXG4rICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYne29wdGlvbn09eSc6XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXFxuKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rXFxuK1xcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCdDT05GSUdfREVCVUdfTkVUJylcXG4rICAgIGlmIHJlcyBpcyBOb25lOlxcbisgICAgICAgIHByaW50KFxcXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcXFwiKVxcbisgICAgZWxpZiBub3QgcmVzOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCcpXFxuK1xcbitcXG4rZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC1cXHUwMDNlIGJvb2w6XFxuKyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxcbisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydncmVwJywgJy1xJywgZidXQVJOSU5HOi4qe2Z1bmN9J10sIHN0ZGluPWRtZXNnLnN0ZG91dClcXG4rICAgIGRtZXNnLndhaXQoKVxcbisgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxcbitcXG4rXFxuK2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXFx1MDAzZSBOb25lOlxcbisgICAgaXAoJ2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXknLCBucz1ucylcXG4rICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXFxuKyAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcXG4rICAgIGZsYWcgPSAnLTYnIGlmIGlwdjYgZWxzZSAnJ1xcbisgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xcbisgICAgYWRkcl9sb2NhbCA9ICdmZDAwOjoxLzY0JyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4xLzI0J1xcbisgICAgYWRkcl9yZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcXG4rICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHthZGRyX2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxcbisgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JywgbnM9bnMpXFxuK1xcbitcXG4rZGVmIHRlc3RfaXB2NigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxcbitcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxcbisgICAgICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnZmQwMDo6MicsIDEyMzQpKVxcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBFTVNHU0laRTogaXQgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC5cXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxcbitcXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcXG4rXFxuKyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJ3VkcF92Nl9zZW5kX3NrYicpLCAnV0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZycpXFxuK1xcbitcXG4rZGVmIHRlc3RfaXB2NCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcXG4rXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcXG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKVxcbisgICAgICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnMTAuMC4wLjInLCAxMjM0KSlcXG4rICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6XFxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuXFxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VcXG4rXFxuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXFxuK1xcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxcbitcXG4rXFxuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcXG4rXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcXG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxcbisgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcXG4rICAgICAgICAgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCchSEhISCcsIDEyMzQsIDEyMzQsIDAsIDApICsgYicgJyAqIDY1NTI4XFxuKyAgICAgICAgICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcXG4rXFxuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXFxuK1xcbitcXG4raWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIGtzZnRfcnVuKFtcXG4rICAgICAgICB0ZXN0X2lwdjYsXFxuKyAgICAgICAgdGVzdF9pcHY0LFxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcXG4rICAgIF0pXFxuKyAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS44MzI0NDIwOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjg3MDMxMDIyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF9zZW5kbXNnXCIsXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCIsXG4gICAgXCJpcF9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMzg0LDYgKzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuK1xuIFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuQEAgLTEzMDMsNiArMTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4gXG4gXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbiBcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4rXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuIFxuIFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTE0MzIsNiArMTQzMiw4IEBAIHN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXG4gXHRpZiAoZnJhZ19zaXplIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUgXHUwMDNjIG10dSlcbiBcdFx0bXR1ID0gZnJhZ19zaXplO1xuIFxuK1x0aWYgKHNrX2lzX3VkcChzaykpXG4rXHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbiBcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbiBcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4gXHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggMGY1YzE3OGJjMjI0Yi4uYzZkMzMyYzkwYTU0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5AQCAtMjUsNiArMjUsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRjbXNnX3NvX21hcmsuc2ggXFxcbiBcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcbiBcdGNtc2dfdGltZS5zaCBcXFxuK1x0Y29ya19mcmFnc2l6ZS5weSBcXFxuIFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxuIFx0ZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFxcXG4gXHRlY21wX3JlaGFzaC5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kODllZjk4OTIzMjk0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxuQEAgLTAsMCArMSwxMzAgQEBcbisjIS91c3IvYmluL2VudiBweXRob24zXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuXG4rXG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuK2Zyb20gbGliLnB5IGltcG9ydCBpcCwgTmV0TlMsIE5ldE5TRW50ZXJcbitpbXBvcnQgZXJybm9cbitpbXBvcnQgZ3ppcFxuK2ltcG9ydCBvc1xuK2ltcG9ydCBzb2NrZXRcbitpbXBvcnQgc3RydWN0XG4raW1wb3J0IHN1YnByb2Nlc3NcbitcbitcbitJUF9NVFVfRElTQ09WRVIgPSAxMFxuK0lQX1BNVFVESVNDX1BST0JFID0gM1xuK0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbitJUFY2X1BNVFVESVNDX0RPID0gMlxuK0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9UTFZfSlVNQk8gPSAxOTRcbitcbitcbitkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4rICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFtcbisgICAgICAgICgnL3Byb2MvY29uZmlnLmd6JywgZ3ppcC5vcGVuKSxcbisgICAgICAgIChmJy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfScsIG9wZW4pLFxuKyAgICBdOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAncnQnKSBhcyBjb25maWc6XG4rICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZid7b3B0aW9ufT15JzpcbisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZVxuKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rXG4rXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXHUwMDNlIE5vbmU6XG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxuKyAgICBpZiByZXMgaXMgTm9uZTpcbisgICAgICAgIHByaW50KFwiV0FSTjogQ2FuJ3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XCIpXG4rICAgIGVsaWYgbm90IHJlczpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCcpXG4rXG4rXG4rZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC1cdTAwM2UgYm9vbDpcbisgICAgZG1lc2cgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZG1lc2cnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSlcbisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydncmVwJywgJy1xJywgZidXQVJOSU5HOi4qe2Z1bmN9J10sIHN0ZGluPWRtZXNnLnN0ZG91dClcbisgICAgZG1lc2cud2FpdCgpXG4rICAgIHJldHVybiByZXN1bHQucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDBcbitcbitcbitkZWYgaXBfc2V0dXAobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuKyAgICBpcCgnbGluayBhZGQgZHVtbXkgdHlwZSBkdW1teScsIG5zPW5zKVxuKyAgICBpcChmJ2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fScsIG5zPW5zKVxuKyAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcbisgICAgZmxhZyA9ICctNicgaWYgaXB2NiBlbHNlICcnXG4rICAgIG5vZGFkID0gJ25vZGFkJyBpZiBpcHY2IGVsc2UgJydcbisgICAgYWRkcl9sb2NhbCA9ICdmZDAwOjoxLzY0JyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4xLzI0J1xuKyAgICBhZGRyX3JlbW90ZSA9ICdmZDAwOjoyJyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4yJ1xuKyAgICBpcChmJ3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0nLCBucz1ucylcbisgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JywgbnM9bnMpXG4rXG4rXG4rZGVmIHRlc3RfaXB2NigpIC1cdTAwM2UgTm9uZTpcbisgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU3NiwgVHJ1ZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkOlxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxuKyAgICAgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgICAgICBmZC5zZW5kdG8oYicgJyAqIDY1NTI4LCAoJ2ZkMDA6OjInLCAxMjM0KSlcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcbisgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiBpdCBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LlxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXG4rXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3Y2X3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY0KCkgLVx1MDAzZSBOb25lOlxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpXG4rICAgICAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnMTAuMC4wLjInLCAxMjM0KSlcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcbisgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiB0aGUgY2hlY2sgaGFwcGVucyBhZnRlciB0aGUgV0FSTiBpcyBwcmludGVkLlxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXG4rXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBpcF9zZXR1cChucywgNjU1ODQsIFRydWUpXG4rXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxuKyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDpcbisgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgICAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJyFISEhIJywgMTIzNCwgMTIzNCwgMCwgMCkgKyBiJyAnICogNjU1MjhcbisgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCdmZDAwOjoyJywgMCkpXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbitcbitpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4rICAgIGtzZnRfcnVuKFtcbisgICAgICAgIHRlc3RfaXB2NixcbisgICAgICAgIHRlc3RfaXB2NCxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbisgICAgXSlcbisgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE4OjI5LjgzMjQ0Mzc4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDUyMjIzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyYWdtZW50IHNpemUgYW5kIE1UVSBoYW5kbGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBjaGFuZ2UuIFdlJ3JlIHRvdWNoaW5nIGBpcDZfcm91dGUuaGAsIGBpcF9vdXRwdXQuY2AsIGFuZCBgaXA2X291dHB1dC5jYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljLiBUaGUgYWRkaXRpb24gb2YgYSBzZWxmdGVzdCwgYGNvcmtfZnJhZ3NpemUucHlgLCBpcyBhIGdyZWF0IHNpZ247IGl0IGluZGljYXRlcyB0aGF0IHRoZSBpc3N1ZSB3ZSBhcmUgYWRkcmVzc2luZyBpcyBhIHJlYWwgb25lLCBhbmQgd2UgaGF2ZSBhIHRlc3QgdG8gdmVyaWZ5IHRoZSBmaXguXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZnMsIHRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgd2UgYXJlIGxpbWl0aW5nIHRoZSBNVFUgb3IgZnJhZ21lbnQgc2l6ZSB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAgaW4gYGlwX3NldHVwX2NvcmtgIChJUHY0KSBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiksIGFuZCBhbHNvIGluIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYC4gVGhpcyBzb3VuZHMgbGlrZSB3ZSBhcmUgcHJldmVudGluZyBzb21lIGtpbmQgb2Ygb3ZlcmZsb3cuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgY29uc3RhbnRzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGxpbWl0cyBhcmUuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQgdmFsdWVzLCBidXQgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3csIGxpa2VseSByZWxhdGVkIHRvIHRoZSBmcmFnbWVudCBzaXplIGNhbGN1bGF0aW9uLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGluIHRoZSBjcml0aWNhbCBwYXRoIGZvciBJUHY0L0lQdjYgcGFja2V0IG91dHB1dCwgc28gdGhpcyBmaXggaXMgaW1wb3J0YW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQuIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgcmVzcGVjdGl2ZSBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCBmaWxlcy4gSSBiZWxpZXZlIHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgZnVuY3Rpb25zIGxpa2UgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX2FwcGVuZF9wYWdlYCwgYW5kIGBpcDZfYXBwZW5kX2RhdGFgLCB3aGljaCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIGFwcGVuZGluZyBwcm9jZXNzLiBLbm93aW5nIHRoZXNlIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGFyZWFzIHRvIGZvY3VzIG9uIGluIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODo1OS44ODQ2Njk5MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDQwMzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXR1cF9jb3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XFx0XFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE5OjAxLjYwOTA4MTQxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODE1MTAzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcDZfc2V0dXBfY29ya2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGEgcXVpY2sgc2NhbiB0byBzZWUgd2hvJ3MgYWN0dWFsbHkgdXNpbmcgdGhlIGBpcDZfc2V0dXBfY29ya2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBjb250ZXh0IGJldHRlciBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYXNzZXNzaW5nIGl0cyBpbXBhY3QgYW5kIHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyBtaWdodCBvcmlnaW5hdGUuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggc3Vic3lzdGVtcyBvciBtb2R1bGVzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIHZpdGFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgaW5mbHVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDIxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MTk6MDcuNTkwNTk1Mjc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjEwNDU5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3NldHVwX2NvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMzczLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3Ny1cXHRcXHRkc3RfaG9sZChcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XFx0XFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLFxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVxcdFxcdFxcdFxcdCAgICAgaXBjNiwgcnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4Ny1cXHRjb3JrLVxcdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyMDg4OlxcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxOTowOS4zNTE2NTA4NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYzMzM5OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiBEYXRhIEFwcGVuZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgcGFja2V0IGNvbnN0cnVjdGlvbiBhbmQgZGF0YSBhcHBlbmRpbmcuIFRoZSBsaWtlbHkgc3VzcGVjdHMgaGVyZSBmb3IgYWRkaW5nIGRhdGEgdG8gSVB2NCBvciBJUHY2IHBhY2tldHMgYXJlIGRlZmluaXRlbHkgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGFuZCBgaXA2X21ha2Vfc2tiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgbmFtZXMuIFRoZXkgbGlrZWx5IGhhbmRsZSB0aGUgY29yZSBsb2dpYyBvZiBhc3NlbWJsaW5nIHRoZSBwYWNrZXQuXG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlciwgc28gbGV0J3Mgc2hpZnQgZm9jdXMuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaG93IElQdjYncyBNVFUgaXMgaGFuZGxlZCwgc28gSSdsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY2IHBhdGguIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBzdGFjayBhcmUgcGF5aW5nIGF0dGVudGlvbiB0byBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MTk6MTYuMTE0OTk0Mzc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAwMzE2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNTM9c3RhdGljIGlubGluZSBib29sIHJ0Nl9kdXBsaWNhdGVfbmV4dGhvcChzdHJ1Y3QgZmliNl9pbmZvICphLCBzdHJ1Y3QgZmliNl9pbmZvICpiKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzY2LVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM2NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZvcndhcmRpbmcpXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTMtICpcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTQ6ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk1LSAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUyMT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjQtXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjY2NTpcXHRtdHUgPSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2Ni1cXHRpZiAobXR1IFxcdTAwM2MgSVBWNl9NSU5fTVRVKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjg4PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIHVuc2lnbmVkIGludCBpcDZfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyODkte1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI5MDpcXHRyZXR1cm4gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyOTEtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwOS1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjExMDpcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2VtdHUgPSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMTEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE5OjE3LjczNTAzMTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwNzk2NTY2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgTVRVIGFuZCBGb3J3YXJkaW5nIGZvciBQb3RlbnRpYWwgVURQIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NiBNVFUgYW5kIGZvcndhcmRpbmcgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXA2X210dWAsIGBpcDZfZm9yd2FyZGAsIGFuZCBgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGVgLCB3aGljaCBhbGwgc2VlbSB0byBiZSB1c2luZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIGBpcDZfbXR1YCBhcHBlYXJzIHRvIGJlIGFuIGluZGlyZWN0IGNhbGxhYmxlLiBgaXA2X2ZvcndhcmRgIGxvb2tzIGxpa2UgYSBwcmltZSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgYmVoYXZpb3IuIFRoZSBzZWxmdGVzdCBtZW50aW9ucyBgQ09ORklHX0RFQlVHX05FVGAsIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIGp1c3QgZm9yIGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUgYWN0dWFsIGZpeCBpcyB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IGNvZGUuIEdvb2QsIG5vIGV4b3RpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3RhbmRhcmQgYE5FVGAsIGBJTkVUYCwgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCB0byBuYXJyb3cgZG93biB0aGUgc2NvcGUsIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBzcGVjaWZpY2FsbHkgYW4gaXNzdWUgd2l0aCBVRFAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYC4gVGhlIHNlbGZ0ZXN0IGlzIHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCBVRFAgbGVuZ3RoIG92ZXJmbG93cywgc28gdGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yLiBUaGUgc2VsZnRlc3QgYWxzbyBtZW50aW9ucyBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAuIFRoZXJlZm9yZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDcwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIwOjQyLjgxNDY4OTg0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNDQzMDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHBfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0PTU9RG9jdW1lbnRhdGlvbiB3cml0dGVuIGJ5IFRvbSBaYW51c3NpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExMi0gICAgICAgICBpcF9zZW5kX3NrYisweDFhLzB4NTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTExMzogICAgICAgICB1ZHBfc2VuZF9za2IrMHgxNzMvMHgyYTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExNC0gICAgICAgICB1ZHBfc2VuZG1zZysweDJiZi8weDlmMFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1MzctICAgICAgICAgICAgIGlwX3NlbmRfc2tiKzB4MWEvMHg1MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTM4OiAgICAgICAgICAgICB1ZHBfc2VuZF9za2IrMHgxM2UvMHgyNzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUzOS0gICAgICAgICAgICAgdWRwX3NlbmRtc2crMHgyYmYvMHg5ODBcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTU3LSAgICAgICAgICAgICBpcF9zZW5kX3NrYisweDFhLzB4NTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTU1ODogICAgICAgICAgICAgdWRwX3NlbmRfc2tiKzB4MTZkLzB4MjcwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1NTktICAgICAgICAgICAgIHVkcF9zZW5kbXNnKzB4MmJmLzB4OTgwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU3NS0gICAgICAgICAgICAgaXBfc2VuZF9za2IrMHgxYS8weDUwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NzY6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYisweDE2ZC8weDI3MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTc3LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZysweDJiZi8weDk4MFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1OTMtICAgICAgICAgICAgIGlwX3NlbmRfc2tiKzB4MWEvMHg1MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTk0OiAgICAgICAgICAgICB1ZHBfc2VuZF9za2IrMHgxNmQvMHgyNzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU5NS0gICAgICAgICAgICAgdWRwX3NlbmRtc2crMHgyYmYvMHg5ODBcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMzg9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI4NC1cXHRjYXNlIElQUFJPVE9fVURQOlxcbmRyaXZlcnMvbmV0L292cG4vaW8uYzoyODU6XFx0XFx0b3Zwbl91ZHBfc2VuZF9za2IocGVlciwgc29jay1cXHUwMDNlc2ssIHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI4Ni1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM9Mjk2PXN0YXRpYyBpbnQgb3Zwbl91ZHBfb3V0cHV0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBkc3RfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zMzQtLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYzozMzU6ICogb3Zwbl91ZHBfc2VuZF9za2IgLSBwcmVwYXJlIHNrYiBhbmQgc2VuZCBpdCBvdmVyIHZpYSBVRFBcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNi0gKiBAcGVlcjogdGhlIGRlc3RpbmF0aW9uIHBlZXJcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzM5LSAqL1xcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzQwOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzQxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaD0yMD12b2lkIG92cG5fdWRwX3NvY2tldF9kZXRhY2goc3RydWN0IG92cG5fc29ja2V0ICpvdnBuX3NvY2spO1xcbmRyaXZlcnMvbmV0L292cG4vdWRwLmgtMjEtXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaDoyMjp2b2lkIG92cG5fdWRwX3NlbmRfc2tiKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzayxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5oLTIzLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oPTU4MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp1ZHBfcmN2X3NlZ21lbnQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA0LVxcdCAqIHBhY2tldHMgaW4gdWRwX2dyb19jb21wbGV0ZV9zZWdtZW50LiBBcyBkb2VzIFVEUCBHU08sIHZlcmlmaWVkIGJ5XFxuaW5jbHVkZS9uZXQvdWRwLmg6NjA1OlxcdCAqIHVkcF9zZW5kX3NrYi4gQnV0IHdoZW4gdGhvc2UgcGFja2V0cyBhcmUgbG9vcGVkIGluIGRldl9sb29wYmFja194bWl0XFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA2LVxcdCAqIHRoZWlyIGlwX3N1bW1lZCBDSEVDS1NVTV9OT05FIGlzIGNoYW5nZWQgdG8gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkuXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcXG5uZXQvaXB2NC91ZHAuYy0xMDkyLVxcbm5ldC9pcHY0L3VkcC5jOjEwOTM6c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXFx0XFx0XFx0c3RydWN0IGluZXRfY29yayAqY29yaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTExNzk9aW50IHVkcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTExOTAtXFxubmV0L2lwdjQvdWRwLmM6MTE5MTpcXHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLmJhc2UpO1xcbm5ldC9pcHY0L3VkcC5jLTExOTItXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xMjM1PWludCB1ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE0NDQtXFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbm5ldC9pcHY0L3VkcC5jOjE0NDU6XFx0XFx0XFx0ZXJyID0gdWRwX3NlbmRfc2tiKHNrYiwgZmw0LCBcXHUwMDI2Y29yayk7XFxubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk6NDojIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weT04Nz1kZWYgdGVzdF9pcHY0KCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTEwNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMDU6ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIwOjQ0LjcxOTEyNjExOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE3NzAwMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBNVFUgTGltaXRzIGluIHRoZSBOZXR3b3JraW5nIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHR3byB0aGluZ3MganVtcCBvdXQgYXQgbWUuIEZpcnN0LCBgaXBfc2V0dXBfY29ya2AgYW5kIGBpcDZfc2V0dXBfY29ya2AgYXJlICpzdGF0aWMqIOKAkyBpbnRlcmVzdGluZywgdGhhdCBpbXBsaWVzIHRoZXkncmUgb25seSB1c2VkIGludGVybmFsbHkgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNjb3BlIG9mIG1vZGlmaWNhdGlvbnMuIFNlY29uZCwgdGhlIGZ1bmN0aW9ucyBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYW5kIGBpcDZfbWFrZV9za2JgIGFyZSAqZXhwb3J0ZWQqIGFuZCBjYWxsZWQgZnJvbSBgdWRwX3NlbmRtc2dgIGFuZCBwcmVzdW1hYmx5IG90aGVyIHByb3RvY29scy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIGludGVyZmFjZSBwb2ludHMgd2UgbmVlZCB0byBjb25zaWRlciB3aGVuIGV2YWx1YXRpbmcgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgbGltaXRzIHRoZSBNVFUgdG8gYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRvIGtub3cgdGhlIHZhbHVlcyBvZiBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAuIExldCBtZSBxdWlja2x5IGNoZWNrIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJIGhhdmUgYSBmZWVsaW5nIEkndmUgc2VlbiB0aGVzZSBiZWZvcmUsIGJ1dCBpdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgYW5kIGNvbmZpcm0gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo0OC44MzY4Mjg1NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkyNjM0OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfTUFYX01UVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlxcdDEwMFxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM6MzU6I2RlZmluZSBTU0lQX01BWF9NVFVcXHRcXHQ2NTUzNVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmMtMzYtI2RlZmluZSBTU0lQX0RFRkFVTFRfTVRVXFx0NDAwMFxcbi0tXFxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYz0xMDczPXN0YXRpYyBpbnQgc3NpX3Byb3RvY29sX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmMtMTEyMy1cXHRzc2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlbWluX210dSA9IFBIT05FVF9NSU5fTVRVO1xcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM6MTEyNDpcXHRzc2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlbWF4X210dSA9IFNTSVBfTUFYX01UVTtcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9NTc0PXN0YXRpYyB2b2lkIGJhcmV1ZHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy01ODgtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo1ODk6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy01OTAtXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDgyNz1tbHhzd19zcF9yaWZfaXBpcF9sYl91bF9yaWZfb3Aoc3RydWN0IG1seHN3X3NwX3JpZiAqdWxfcmlmLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODMyLVxcdG1seHN3X3JlZ19yaXRyX3BhY2socml0cl9wbCwgZW5hYmxlLCBNTFhTV19SRUdfUklUUl9MT09QQkFDS19JRixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcXHRcXHRcXHQgICAgdWxfcmlmLVxcdTAwM2VyaWZfaW5kZXgsIHVsX3JpZi1cXHUwMDNldnJfaWQsIElQX01BWF9NVFUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVxcdG1seHN3X3JlZ19yaXRyX2xvb3BiYWNrX3Byb3RvY29sX3NldChyaXRyX3BsLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4NjAtXFx0ICovXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTg2MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4NjItXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYz0xNTg9c3RhdGljIHZvaWQgb3Zwbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIE9WUE5fSEVBRF9ST09NO1xcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz02NDI3PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWVyZ2VhYmxlX21pbl9idWZfbGVuKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy02NDMwLVxcdHVuc2lnbmVkIGludCBycV9zaXplID0gdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHZxKTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcXHR1bnNpZ25lZCBpbnQgcGFja2V0X2xlbiA9IHZpLVxcdTAwM2ViaWdfcGFja2V0cyA/IElQX01BWF9NVFUgOiB2aS1cXHUwMDNlZGV2LVxcdTAwM2VtYXhfbXR1O1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy02NDMyLVxcdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiArIEVUSF9ITEVOICsgVkxBTl9ITEVOICsgcGFja2V0X2xlbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvaXAuaD00Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfaXBfdG90bGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTItLyogSVB2NCBkYXRhZ3JhbSBsZW5ndGggaXMgc3RvcmVkIGludG8gMTZiaXQgZmllbGQgKHRvdF9sZW4pICovXFxuaW5jbHVkZS9saW51eC9pcC5oOjUzOiNkZWZpbmUgSVBfTUFYX01UVVxcdDB4RkZGRlVcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTQtXFxuaW5jbHVkZS9saW51eC9pcC5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcGhfc2V0X3RvdGxlbihzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGxlbilcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xcbmluY2x1ZGUvbGludXgvaXAuaDo1NzpcXHRpcGgtXFx1MDAzZXRvdF9sZW4gPSBsZW4gXFx1MDAzYz0gSVBfTUFYX01UVSA/IGh0b25zKGxlbikgOiAwO1xcbmluY2x1ZGUvbGludXgvaXAuaC01OC19XFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTQ2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxcbmluY2x1ZGUvbmV0L2lwLmg6NTAwOlxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTE5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUyNi1cXHRcXHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cXHUwMDNlbXR1KTtcXG5pbmNsdWRlL25ldC9pcC5oOjUyNzpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01MjgtXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNTQ1LVxcbmluY2x1ZGUvbmV0L2lwLmg6NTQ2OlxcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVxcdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcC5oLTU0Ny1cXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcXHQ2OFxcdFxcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXFx0Ki9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaDo0MTojZGVmaW5lIEVUSF9NQVhfTVRVXFx0MHhGRkZGVVxcdFxcdC8qIDY1NTM1LCBzYW1lIGFzIElQX01BWF9NVFVcXHQqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQyLVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozMjA6XFx0aWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpIFxcdTAwM2UgSVBfTUFYX01UVSlcXG5uZXQvaXB2NC9lc3A0LmMtMzIxLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzQ5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozNTA6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTM1MS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMzg5LVxcbm5ldC9pcHY0L2lnbXAuYzozOTA6XFx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lnbXAuYy0zOTEtXFx0d2hpbGUgKDEpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVxcdGV4dGhkcmxlbiA9ICFza2IgPyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVxcdTAwM2VmcmFnc2l6ZTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODUtXFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVxcdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFxcdTAwMjYgfjcpICsgZnJhZ2hlYWRlcmxlbjtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5OTE6XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA1LVxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNy1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVxcdFxcdGhsZW4gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3OlxcdFxcdG10dSA9IG1pbih0ZGV2LVxcdTAwM2VtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNTc9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcXHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2Mi1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXFx1MDAzZWhsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXFx0aWYgKGxpa2VseSghbXR1KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE0NjU6XFx0XFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXFx1MDAzZW10dSksIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNzE9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY2L2VzcDYuYzozODE6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3NTM9aW50IGlwNl90bmxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XFx0XFx0aWYgKG5ld19tdHUgXFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHVcXHRcXHQ9IEVUSF9NSU5fTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo3NDY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0PSBJUF9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHRcXHQ9IElGRl9OT0FSUDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVxcdGlmICgheHRmcy1cXHUwMDNlY2ZnLmRvbnRfZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcXHRcXHRyZXR1cm4geC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cXHRyZXR1cm4gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIG91dGVyX210dSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXFx0XFx0eC1cXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTU3OlxcdFxcdGlmICh4LVxcdTAwM2V0ZmNwYWQgXFx1MDAzZSBJUF9NQVhfTVRVKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkV4Y2Vzc2l2ZSBURkMgcGFkZGluZ1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1MC4zNTYwOTY0NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDI5NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqTVRVIExpbWl0cyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gdGhpbmtpbmcgYWJvdXQgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCB2YWx1ZXMuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGBJUF9NQVhfTVRVYCBpcyBkZWZpbmVkIGFzIGAweEZGRkZVYC4gVGhhdCdzIGEgc3RhbmRhcmQsIGV4cGVjdGVkIHZhbHVlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZW4sIG15IG1pbmQganVtcHMgdG8gSVB2Ni4gSSdtIGFzc3VtaW5nIHRoYXQgYElQNl9NQVhfTVRVYCBpcyBhbHNvIHByb2JhYmx5IGAweEZGRkZVYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYXQgbGVhc3QgaW5pdGlhbGx5LiBCdXQgd2FpdCBhIHNlY29uZCwgSSBuZWVkIHRvIGJlIGEgbGl0dGxlIG1vcmUgY2FyZWZ1bCwgZ2l2ZW4gdGhhdCB3ZSBoYXZlIGp1bWJvZ3JhbXMgdG8gY29uc2lkZXIgaW4gSVB2Ni4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCB2YWx1ZSBpcyB0cnVseSBzdGFuZGFyZCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGFyZ2VyIHRoYW4gdGhlIElQdjQgbGltaXQuIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1NC4xMzYzOTM3NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg5NTkwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVA2X01BWF9NVFVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnJmLmM9MTU2MT1zdGF0aWMgdm9pZCB2cmZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE2MDAtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gSVBWNl9NSU5fTVRVO1xcbmRyaXZlcnMvbmV0L3ZyZi5jOjE2MDE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVA2X01BWF9NVFU7XFxuZHJpdmVycy9uZXQvdnJmLmMtMTYwMi1cXHRkZXYtXFx1MDAzZW10dSA9IGRldi1cXHUwMDNlbWF4X210dTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTE1PXN0cnVjdCByb3V0ZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQzLSAqL1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjQ0OiNkZWZpbmUgSVA2X01BWF9NVFUgKDB4RkZGRiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDUtXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODYtb3V0OlxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM4NzpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM4OC1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTQwMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQyNC1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDo0MjU6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC00MjYtXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTM3ND1zdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE0MzUtXFx0aWYgKHNrX2lzX3VkcChzaykpXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE0MzY6XFx0XFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM3LVxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ1Mz1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDg5LVxcdHBhZ2VkID0gISFjb3JrLVxcdTAwM2Vnc29fc2l6ZTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTQ5MDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQNl9NQVhfTVRVIDogY29yay1cXHUwMDNlZnJhZ3NpemU7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE0OTEtXFx0b3JpZ19tdHUgPSBtdHU7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ2Nj1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjEtXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTIyOlxcdFxcdFxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cXHUwMDNlbXR1LCBJUDZfTUFYX01UVSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjMtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjYtXFx0aWYgKHRubC1cXHUwMDNlcGFybXMucHJvdG8gPT0gSVBQUk9UT19JUFY2IHx8IHRubC1cXHUwMDNlcGFybXMucHJvdG8gPT0gMCkge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzY3OlxcdFxcdGlmIChuZXdfbXR1IFxcdTAwM2UgSVA2X01BWF9NVFUgLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHRfaGxlbilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTM3PWlwNl90bmxfZGV2X2luaXRfZ2VuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2MS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk2MjpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUDZfTUFYX01UVSAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTYzLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0xNjM5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmliNl9tdHUoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTE2NTktXFxubmV0L2lwdjYvcm91dGUuYzoxNjYwOlxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxubmV0L2lwdjYvcm91dGUuYy0xNjYxLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMzAyPXUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzMyOS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzMzA6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMzEtb3V0Olxcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0MzEtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1XFx0XFx0PSBJUFY2X01JTl9NVFU7XFxubmV0L2lwdjYvc2l0LmM6MTQzMjpcXHRkZXYtXFx1MDAzZW1heF9tdHVcXHRcXHQ9IElQNl9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY2L3NpdC5jLTE0MzMtXFx0ZGV2LVxcdTAwM2VmbGFnc1xcdFxcdD0gSUZGX05PQVJQO1xcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTU0OT1zdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE1ODUtXFx0XFx0aWYgKG10dSBcXHUwMDNlPSBJUFY2X01JTl9NVFUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9zaXQuYzoxNTg2OlxcdFxcdCAgICBtdHUgXFx1MDAzYz0gSVA2X01BWF9NVFUgLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG5uZXQvaXB2Ni9zaXQuYy0xNTg3LVxcdFxcdFxcdGRldi1cXHUwMDNlbXR1ID0gbXR1O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTAtXFx0aWYgKCF4dGZzLVxcdTAwM2VjZmcuZG9udF9mcmFnKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTExOlxcdFxcdHJldHVybiB4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUID8gSVBfTUFYX01UVSA6IElQNl9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVxcdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz04Mz1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y0W10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMTk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTU6I2lmbmRlZiBJUDZfTUFYX01UVVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTY6I2RlZmluZSBJUDZfTUFYX01UVVxcdChFVEhfTUFYX01UVSArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTE5Ny0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz0xOTk9c3RydWN0IHRlc3RjYXNlIHRlc3RjYXNlc192NltdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1NS1cXHRcXHQvKiBzZW5kIE1BWCBzZWdzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI1NjpcXHRcXHQudGxlbiA9IChJUDZfTUFYX01UVSAvIENPTlNUX01TU19WNikgKiBDT05TVF9NU1NfVjYsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1Ny1cXHRcXHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjU4OlxcdFxcdC5yX251bV9tc3MgPSAoSVA2X01BWF9NVFUgLyBDT05TVF9NU1NfVjYpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNTktXFx0fSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjItXFx0XFx0Lyogc2VuZCBNQVggYnl0ZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjYzOlxcdFxcdC50bGVuID0gSVA2X01BWF9NVFUgLSBDT05TVF9IRFJMRU5fVjYsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI2NC1cXHRcXHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjY1LVxcdFxcdC5yX251bV9tc3MgPSBDT05TVF9NQVhfU0VHU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjY2OlxcdFxcdC5yX2xlbl9sYXN0ID0gSVA2X01BWF9NVFUgLSBDT05TVF9IRFJMRU5fVjYgLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjctXFx0XFx0XFx0ICAgICAgKENPTlNUX01BWF9TRUdTX1Y2ICogQ09OU1RfTVNTX1Y2KSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNzAtXFx0XFx0Lyogc2VuZCBNQVggKyAxOiBmYWlsICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI3MTpcXHRcXHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2ICsgMSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcyLVxcdFxcdC5nc29fbGVuID0gQ09OU1RfTVNTX1Y2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1NS43MDUzNTcyMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTczNDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IChNVFUpIExpbWl0cyBpbiBJUHY2KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggTVRVIGxpbWl0cyBpbiBJUHY2LiBTcGVjaWZpY2FsbHksIGl0J3MgbGltaXRpbmcgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAsIHdoZXJlIGBJUDZfTUFYX01UVWAgaXMgY2FsY3VsYXRlZCBhcyBgMHhGRkZGICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAuIFRoaXMgbG9va3MgcmlwZSBmb3IgZnV6emluZy4gQW55IHRpbWUgdGhlcmUncyBhIGhhcmQgbGltaXQsIHRoZXJlJ3MgYSBjaGFuY2UgdG8gdHJpZ2dlciBhbiBvdmVyZmxvdyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGUgY29yZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkgcHJvYmFibHkgcmVzaWRlcyBpbiB0aGUgZnVuY3Rpb25zIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCwgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhcyBJIGhhZCBwcmV2aW91c2x5IGNvbnNpZGVyZWQuIEZvY3VzaW5nIG9uIHBhY2tldCBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBpcyB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbiBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBgaXA2X2ZvcndhcmRgLlxuXG5XYWl0IGEgbWludXRlLCBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCBhcmUgZXhwb3J0ZWQ/IFRoYXQgbWVhbnMgdGhleSBhcmUgdXNlZCBieSBhIHRvbiBvZiBkaWZmZXJlbnQgcHJvdG9jb2xzLCBpbmNsdWRpbmcgVURQLCBJQ01QLCBhbmQgUkFXLiBUaGF0IGJyb2FkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBzaWduaWZpY2FudGx5LiBUaGUgc2VsZnRlc3Qgc3BlY2lmaWNhbGx5IHRhcmdldHMgVURQIGxlbmd0aCBvdmVyZmxvd3MsIHdoaWNoIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gTGV0J3Mgc2VlIGlmIGB1ZHBfc2VuZG1zZ2AgYW5kIGB1ZHB2Nl9zZW5kbXNnYCBhcmUgc29saWQgZW50cnkgcG9pbnRzIGZvciBVRFAuIEJpbmdvISBUaGV5IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gUGx1cywgaXQgd291bGQgYmUgdXNlZnVsIHRvIGFsc28gdGFyZ2V0IGBpcDZfZm9yd2FyZGAgZm9yIGFueSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGdldCB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbjpcblxuKiAgIGB1ZHBfc2VuZG1zZ2BcbiogICBgdWRwdjZfc2VuZG1zZ2BcbiogICBgaXBfYXBwZW5kX2RhdGFgXG4qICAgYGlwNl9hcHBlbmRfZGF0YWBcbiogICBgaXBfbWFrZV9za2JgXG4qICAgYGlwNl9tYWtlX3NrYmBcbiogICBgaXA2X2ZvcndhcmRgXG5cbkFscmlnaHQsIHRpbWUgdG8gc3RhcnQgZnV6emluZyEgTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBJJ20gaW50ZXJlc3RlZCBpbiBpcywgaW5kZWVkLCBgdWRwdjZfc2VuZG1zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjAyLjQxMTA5NDk4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2ODM3MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X3NlbmRtc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3Q9MTI9c3RydWN0IGlwdjZfcGluZm8qICAgICAgIHBpbmV0NlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0OjEzOnN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0KiBpcHY2X2ZsX2xpc3QgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF92Nl9jb25uZWN0LF9faXA2X2RhdGFncmFtX2Nvbm5lY3QsdWRwdjZfc2VuZG1zZyxyYXd2Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTQtYmUxNiAgICAgICAgICAgICAgICAgICAgIGluZXRfc3BvcnQgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Y3BfdHJhbnNtaXRfc2tiXFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD0yNzY9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICopKTtcXG5pbmNsdWRlL25ldC91ZHAuaC0yNzctXFxuaW5jbHVkZS9uZXQvdWRwLmg6Mjc4OmludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG5pbmNsdWRlL25ldC91ZHAuaC0yNzktSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjMxPWludCBpbmV0Nl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY0MTpcXHRyZXR1cm4gSU5ESVJFQ1RfQ0FMTF8yKHByb3QtXFx1MDAzZXNlbmRtc2csIHRjcF9zZW5kbXNnLCB1ZHB2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQyLVxcdFxcdFxcdCAgICAgICBzaywgbXNnLCBzaXplKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE3LVxcdFxcdFxcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjE4OlxcdFxcdFxcdCAqIGluIHVkcHY2X3NlbmRtc2coKSBhbmQgaXB2Nl9sb2NhbF9yeHBtdHUoKS5cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE5LVxcdFxcdFxcdCAqL1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xMzczLVxcdHVoLVxcdTAwM2VkZXN0ID0gZmw2LVxcdTAwM2VmbDZfZHBvcnQ7XFxubmV0L2lwdjYvdWRwLmM6MTM3NDpcXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xcbm5ldC9pcHY2L3VkcC5jLTEzNzUtXFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xNDM4PXN0YXRpYyBpbnQgdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTQ1OC1cXG5uZXQvaXB2Ni91ZHAuYzoxNDU5OmludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9pcHY2L3VkcC5jLTE0NjAte1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTc3NC19XFxubmV0L2lwdjYvdWRwLmM6MTc3NTpFWFBPUlRfU1lNQk9MKHVkcHY2X3NlbmRtc2cpO1xcbm5ldC9pcHY2L3VkcC5jLTE3NzYtXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xODk1PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTkwNi1cXHQuZ2V0c29ja29wdFxcdFxcdD0gdWRwdjZfZ2V0c29ja29wdCxcXG5uZXQvaXB2Ni91ZHAuYzoxOTA3OlxcdC5zZW5kbXNnXFx0XFx0PSB1ZHB2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L3VkcC5jLTE5MDgtXFx0LnJlY3Ztc2dcXHRcXHQ9IHVkcHY2X3JlY3Ztc2csXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYy0yOS1cXHRcXHRcXHR9XFxubmV0L3J4cnBjL291dHB1dC5jOjMwOlxcdFxcdFxcdHJldHVybiB1ZHB2Nl9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxubmV0L3J4cnBjL291dHB1dC5jLTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MDMuOTI3OTM1OTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjY0MDc4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVURQdjYgU2VuZCBJc3N1ZSoqXG5cbk9rYXksIHllcywgYHVkcHY2X3NlbmRtc2dgIHNlZW1zIHRvIGJlIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiBoZXJlLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdG8gZW5zdXJlIHRoaXMgZml4IHdpbGwgd29yayBjb3JyZWN0bHkgaW4gYWxsIHJlbGV2YW50IGVudmlyb25tZW50cy5cblxuVGhlIGV4aXN0aW5nIHNlbGZ0ZXN0IGxldmVyYWdlcyBgQ09ORklHX0RFQlVHX05FVGAgdG8gbG9vayBmb3Igd2FybmluZ3MgaW4gdGhlIGtlcm5lbCBsb2dzLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yLCBidXQgdGhlIGFjdHVhbCBmaXggaXRzZWxmIGFwcGVhcnMgdG8gYmUgc2l0dWF0ZWQgZGVlcCB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IG91dHB1dCBjb2RlOiBzcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aC4gT2YgY291cnNlLCB0aGV5J3JlIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggYXJlIHByZXR0eSBtdWNoIHN0YW5kYXJkIGNvbmZpZ3MgSSdkIGV4cGVjdCB0byBzZWUgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcy4gU28sIEkgd2lsbCBkZWZpbml0ZWx5IGJlIGluY2x1ZGluZyB0aG9zZSBpbiBteSBjb25zaWRlcmF0aW9ucy5cblxuSG9sZCBvbiwgSSBzZWUgdGhhdCB0aGUgc2VsZnRlc3QsIHNwZWNpZmljYWxseSBgY29ya19mcmFnc2l6ZS5weWAsIGlzIHV0aWxpemluZyBgSVBfTVRVX0RJU0NPVkVSYCBhbmQgYElQVjZfTVRVX0RJU0NPVkVSYCBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyB1c2VzIGBJUFY2X1RMVl9KVU1CT2AgZm9yIGhvcC1ieS1ob3Agb3B0aW9ucy4gVGhhdCB0cmlnZ2VycyBhIG5ldyB0aG91Z2h0LiBJcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gSVB2NiBqdW1ib2dyYW1zIHRoYXQgSSBzaG91bGQgYmUgZG91YmxlIGNoZWNraW5nPyBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjA5LjA5NDM0Njc0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTY4NTk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2X1RMVl9KVU1CT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaW42Lmg9NzE9c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNDgtI2RlZmluZSBJUFY2X1RMVl9JT0FNXFx0XFx0NDlcXHQvKiBSRkMgOTQ4NiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaDoxNDk6I2RlZmluZSBJUFY2X1RMVl9KVU1CT1xcdFxcdDE5NFxcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNTAtI2RlZmluZSBJUFY2X1RMVl9IQU9cXHRcXHQyMDFcXHQvKiBob21lIGFkZHJlc3Mgb3B0aW9uICovXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTE0PXN0YXRpYyBib29sIGlwNl9wYXJzZV90bHYoYm9vbCBob3BieWhvcCxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODEtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjYvZXh0aGRycy5jOjE4MjpcXHRcXHRcXHRcXHRjYXNlIElQVjZfVExWX0pVTUJPOlxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODMtXFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2hvcF9qdW1ibyhza2IsIG9mZikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM9MTgyPWludCBuZl9pcDZfY2hlY2tfaGJoX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjExLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoyMTI6XFx0XFx0aWYgKG5oW29mZl0gPT0gSVBWNl9UTFZfSlVNQk8pIHtcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjEzLVxcdFxcdFxcdHUzMiBwa3RfbGVuO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jc3VtLmM9NDUyPXN0YXRpYyBpbnQgdGNmX2NzdW1faXB2Nl9ob3BvcHRzKHN0cnVjdCBpcHY2X29wdF9oZHIgKmlwNnhoLCB1bnNpZ25lZCBpbnQgaXhobCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTQ2NS1cXHRcXHRcXHRicmVhaztcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo0NjY6XFx0XFx0Y2FzZSBJUFY2X1RMVl9KVU1CTzpcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjctXFx0XFx0XFx0b3B0bGVuID0geGhbb2ZmICsgMV0gKyAyO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MjA9SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToyMTpJUFY2X1RMVl9KVU1CTyA9IDE5NFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTIyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MTA4PWRlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMTEzLSAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMTQ6ICAgICAgICAgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTExNS0gICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMToxMC42MjAwNDI3MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgzNjczMjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBKdW1ib2dyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIGp1bWJvZ3JhbXM7IGl0J3MgYWxsIGJha2VkIGludG8gc3RhbmRhcmQgSVB2Niwgd2hpY2ggaXMgZ29vZC4gTGV0J3MgZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB1ZHBfc2VuZG1zZ2AsIGB1ZHB2Nl9zZW5kbXNnYCwgYGlwX2FwcGVuZF9kYXRhYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAsIGBpcDZfbWFrZV9za2JgLCBhbmQgYGlwNl9mb3J3YXJkYC4gVGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSBhbGwgbm9uLXN0YXRpYy5cblxuVGhlIGlzc3VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGlzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBkZWFsaW5nIHdpdGggZXh0cmVtZWx5IGxhcmdlIE1UVXMsIHNwZWNpZmljYWxseSBqdW1ib2dyYW1zIG9yIHNjZW5hcmlvcyB3aXRoIGFydGlmaWNpYWxseSBpbmZsYXRlZCBNVFVzLiBUaGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHJlc3RyaWN0IHRoZSBNVFUsIGJvdGggZm9yIElQdjQgYW5kIElQdjYsIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCByZXNwZWN0aXZlbHkuIFRoYXQgY2FwcyBpdC5cblxuSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCBhcmUgc3RhdGljLCBzbyBpdCdzIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIHRoYXQgYXJlIG1vc3QgaW1wb3J0YW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5UaGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMgYXJlIG1pbmltYWw7IGBJTkVUYCBhbmQgYElQVjZgIGFyZSB0aGUgcmVsZXZhbnQgZmxhZ3MuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoJ3MgbGltaXRpbmcgdGhlIE1UVS9mcmFnbWVudCBzaXplIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggZW5vcm1vdXMgTVRVcy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIGBzZW5kbXNnYCBjYWxscyBhbmQgSVAgZm9yd2FyZGluZy5cblxuVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2OCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNDU2Nzc4ODgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NjEzNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfc2VuZG1zZ1wiLFxuICAgIFwidWRwdjZfc2VuZG1zZ1wiLFxuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXBfbWFrZV9za2JcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBsaW1pdHMgdGhlIE1UVS9mcmFnc2l6ZSB0byBJUF9NQVhfTVRVIGFuZCBJUDZfTUFYX01UVSBpbiB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gc2VuZGluZyBsYXJnZSBwYWNrZXRzIG92ZXIgaW50ZXJmYWNlcyB3aXRoIHZlcnkgbGFyZ2UgTVRVcyAoZS5nLiB1c2luZyBJUHY2IGp1bWJvZ3JhbXMpLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBVRFAgc2VuZG1zZyBhbmQgSVAgZm9yd2FyZGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwX3NlbmRtc2dcIixcbiAgICBcInVkcHY2X3NlbmRtc2dcIixcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjE4LjUzNTU0ODcyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTU5ODI1Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNTM2MTc4ODczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIxMzk1OTE5MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxcblxcblRoZSBmaXggc2ltcGx5IGNhcHMgdGhlIE1UVSBhbmQgYGNvcmstXFx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjNmNjMjI5NTliN2E1YWY4YWMzMWYwMzQ2ZGExZmYyOGMwN2ZiMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMjoxODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbitcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG4gXG4gXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXHUwMDNlZnJhZ3NpemUpKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4rXHRpZiAoc2tfaXNfdWRwKHNrKSlcbitcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuIFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuIFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbiBcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCAwZjVjMTc4YmMyMjRiLi5jNmQzMzJjOTBhNTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4rXHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICsxLDEzMCBAQFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rIyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbitcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGlwLCBOZXROUywgTmV0TlNFbnRlclxuK2ltcG9ydCBlcnJub1xuK2ltcG9ydCBnemlwXG4raW1wb3J0IG9zXG4raW1wb3J0IHNvY2tldFxuK2ltcG9ydCBzdHJ1Y3RcbitpbXBvcnQgc3VicHJvY2Vzc1xuK1xuK1xuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9NVFVfRElTQ09WRVIgPSAyM1xuK0lQVjZfUE1UVURJU0NfRE8gPSAyXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X1RMVl9KVU1CTyA9IDE5NFxuK1xuK1xuK2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbikgLVx1MDAzZSBib29sIHwgTm9uZTpcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xuKyAgICAgICAgKCcvcHJvYy9jb25maWcuZ3onLCBnemlwLm9wZW4pLFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXG4rICAgIF06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxuKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJ3tvcHRpb259PXknOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgY29udGludWVcbitcbitcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbisgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygnQ09ORklHX0RFQlVHX05FVCcpXG4rICAgIGlmIHJlcyBpcyBOb25lOlxuKyAgICAgICAgcHJpbnQoXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcIilcbisgICAgZWxpZiBub3QgcmVzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgnQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JylcbitcbitcbitkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYykgLVx1MDAzZSBib29sOlxuKyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxuKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0KVxuKyAgICBkbWVzZy53YWl0KClcbisgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuK1xuK1xuK2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXG4rICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXG4rICAgIGlwKCdsaW5rIHNldCBkdW1teSB1cCcsIG5zPW5zKVxuKyAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcbisgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICBhZGRyX2xvY2FsID0gJ2ZkMDA6OjEvNjQnIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjEvMjQnXG4rICAgIGFkZHJfcmVtb3RlID0gJ2ZkMDA6OjInIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjInXG4rICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHthZGRyX2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxuKyAgICBpcChmJ3tmbGFnfSBuZWlnaCBhZGQge2FkZHJfcmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQnLCBucz1ucylcbitcbitcbitkZWYgdGVzdF9pcHY2KCkgLVx1MDAzZSBOb25lOlxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxuK1xuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pXG4rICAgICAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnZmQwMDo6MicsIDEyMzQpKVxuKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfdjZfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxuK1xuK1xuK2RlZiB0ZXN0X2lwdjQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBpcF9zZXR1cChucywgNjU1NTYsIEZhbHNlKVxuK1xuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZDpcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCBJUF9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICAgICAgZmQuc2VuZHRvKGInICcgKiA2NTUyOCwgKCcxMC4wLjAuMicsIDEyMzQpKVxuKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxuK1xuK1xuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXHUwMDNlIE5vbmU6XG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxuKyAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJyFCQkJCSScsIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuKyAgICAgICAgICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygnIUhISEgnLCAxMjM0LCAxMjM0LCAwLCAwKSArIGInICcgKiA2NTUyOFxuKyAgICAgICAgICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcbitcbisgICAgICAgIGlwKCdsaW5rIGRlbCBkdW1teScsIG5zPW5zKVxuK1xuK1xuK2lmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAga3NmdF9ydW4oW1xuKyAgICAgICAgdGVzdF9pcHY2LFxuKyAgICAgICAgdGVzdF9pcHY0LFxuKyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLFxuKyAgICBdKVxuKyAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNTM2MTc5NjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTA4NzcyOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVRFAgTGVuZ3RoIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgb3IgbWF5YmUgZXZlbiBhIGxlbmd0aCBvdmVyZmxvdywgd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIE1UVSBnZXRzIHRvbyBsYXJnZSwgc3BlY2lmaWNhbGx5IGdyZWF0ZXIgdGhhbiA2NTUzNSwgd2UgY2FuIHJ1biBpbnRvIHRyb3VibGUgd2l0aCAxNi1iaXQgbGVuZ3RoIGZpZWxkcywgcmVzdWx0aW5nIGluIGEgcG90ZW50aWFsIG92ZXJmbG93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgb3ZlcmZsb3cgbWlnaHQgbWFuaWZlc3QgaW4gZWl0aGVyIHRoZSBgc2tiLVx1MDAzZWxlbmAgb3IgdGhlIFVEUCBsZW5ndGggZmllbGRzLiBUaGUgdGVzdCBjYXNlIHRoZSBhdXRob3IgcHJvdmlkZXMgY3JlYXRlcyBhIGhpZ2ggTVRVIGR1bW15IGludGVyZmFjZSAoSVB2NDogNjU1NTYsIElQdjY6IDY1NTc2KSBhbmQgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0ICg2NTUyOCBieXRlcykuIFRoZSB0ZXN0IGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhIHdhcm5pbmcgaW4gdGhlIGtlcm5lbCBsb2dzIGZyb20gYHVkcF92Nl9zZW5kX3NrYmAgb3IgYHVkcF9zZW5kX3NrYmAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHByaW1hcmlseSBhIG1hdHRlciBvZiBjYXBwaW5nIHRoZSBNVFUgYW5kLCB0aGVyZWZvcmUsIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gcHJldmVudCBvdmVyZmxvd3MuIFRoZSBwYXRjaCBpcyBzaW1wbHkgbGltaXRpbmcgYm90aCBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICh3aGljaCBpcyA2NTUzNSkuIFRoaXMgc291bmRzIGNvcnJlY3QsIGFuZCBhIGNsZWFuIGZpeCBmb3IgYSAxNi1iaXQgbGVuZ3RoIG92ZXJmbG93LCBidXQgbXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuV2hpbGUgYW4gb3ZlcmZsb3cgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggdGhvc2UuIFNvIGlzIHRoaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGlzc3VlPyBJcyB0aGVyZSBhIHJpc2sgdGhhdCB0aGlzIHdpbGwgc2VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgYWxsb2NhdGVkIGJ1ZmZlcnMgYmVpbmcgdG9vIHNtYWxsIGFuZCB0aGVuIGhhdmluZyB1bmluaXRpYWxpemVkIGRhdGEgY29waWVkIGludG8gdGhlbS5cblxuSWYgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGV4Y2VlZHMgNjU1MzUsIHRoZXJlJ3MgdGhlIGNoYW5jZSBvZiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIHNpemUgY2FsY3VsYXRpb25zIG9yIHdoZW4gcG9wdWxhdGluZyBsZW5ndGggaGVhZGVyIGZpZWxkcy4gQW4gb3ZlcmZsb3cgaW4gYWxsb2NhdGlvbiBzaXplIHdvdWxkIGxlYWQgdG8gYSBzbWFsbCBidWZmZXIsIHRoZW4gYSBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUg4oCTIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIEFuIG92ZXJmbG93IGluIHRoZSBsZW5ndGggaGVhZGVyIGNvdWxkIGxlYWQgdG8gZWl0aGVyOlxuXG4xLiAgYSBzbWFsbCBsZW5ndGggaGVhZGVyIHdpdGggYSBsYXJnZSBwYXlsb2FkIChyZWFkaW5nIG91dC1vZi1ib3VuZHMgZnJvbSB0aGUgc2tiKSwgb3JcbjIuICBhIGxhcmdlIGxlbmd0aCBoZWFkZXIgd2l0aCBhIHNtYWxsIHBheWxvYWQgKHdoaWNoIG1pZ2h0IGludm9sdmUgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSkuXG5cblRoZSBkYXRhIGluIHRoZSBgc2tiYCBpcyB1c3VhbGx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVpdGhlciB0aHJvdWdoIGBjb3B5X2Zyb21fdXNlcmAgb3Igc2ltaWxhci4gSWYgbW9yZSBkYXRhIGlzIHNlbnQgdGhhbiBhbGxvY2F0ZWQsIGl04oCZcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhhdC4gTXkgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIGJlIHNlbnQgZnJvbSBza2IgcGFkZGluZz9cblxuVG8gY29uZmlybSwgSSdsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSBgZnJhZ3NpemVgIGNhbGN1bGF0aW9uIGFuZCBsZW5ndGggZmllbGRzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGRvZXNuJ3QgaW50cm9kdWNlIGEgc3VidGxlciB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6NTkuMDQ0OTU1MDE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MDA2MjUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOSU5HLip1ZHBfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjAxLjM1OTk2OTk2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM1ODc2NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdWRwX3NlbmRfc2tiYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyB0aGlzIGlzIHRvIGlzb2xhdGUgdGhlIHBvdGVudGlhbCBjdWxwcml0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHN0cmluZzogYFdBUk5fT05gLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaXRzIHVzYWdlIHdpdGhpbiB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgZGVidWdnaW5nIHRoZXNlIGtpbmRzIG9mIG5ldHdvcmsgc3RhY2sgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZXJlIGtlcm5lbCB3YXJuaW5ncyBhcmUgaW52b2x2ZWQuIFRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbiBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFzIGl0J3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNydWNpYWwgcHJvY2VzcyBvZiBzZW5kaW5nIFVEUCBkYXRhZ3JhbXMuIEZpbmRpbmcgYFdBUk5fT05gIHdpdGhpbiBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBzYW5pdHkgY2hlY2sgb3IgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCB0aGF0IHdhcnJhbnRzIGEga2VybmVsLWxldmVsIG1lc3NhZ2UuIEknbSBob3BpbmcgdGhhdCBieSBncmVwcGluZyBmb3IgdGhhdCBzdHJpbmcsIEkgY2FuIHF1aWNrbHkgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgd2FybmluZywgd2hpY2ggd2lsbCBwcm92aWRlIGNydWNpYWwgY2x1ZXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXNzdWUgSSdtIHRyYWNraW5nIGRvd24uIFRoaXMgc2VhcmNoIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gb2YgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjI6NDEuNzE4NzM4MTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYzMjMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOX09OLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MTk5NT1pbnQgdWRwX3JlYWRfc2tiKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjAxNC1cXG5uZXQvaXB2NC91ZHAuYzoyMDE1OlxcdFdBUk5fT05fT05DRSghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKTtcXG5uZXQvaXB2NC91ZHAuYy0yMDE2LVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjc2ND1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI4MDUtXFx0c2tiLVxcdTAwM2VzayA9IHNrO1xcbm5ldC9pcHY0L3VkcC5jOjI4MDY6XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza19pc19yZWZjb3VudGVkKHNrKSk7XFxubmV0L2lwdjQvdWRwLmMtMjgwNy1cXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzM1Mz1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM0NjItXFxubmV0L2lwdjQvdWRwLmM6MzQ2MzpcXHRXQVJOX09OX09OQ0UoaXRlci1cXHUwMDNlZW5kX3NrICE9IGJhdGNoX3Nrcyk7XFxubmV0L2lwdjQvdWRwLmMtMzQ2NC1cXHRyZXR1cm4gaXRlci1cXHUwMDNlZW5kX3NrID8gaXRlci1cXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMjo0MS43NzMzODIxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAxNjA2OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlYnVnZ2luZyBhIFVEUCBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSB0ZXN0IHNjcmlwdCBpcyBmbGFnZ2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0J3Mgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBzdHJpbmcgYFdBUk5JTkc6Lip1ZHBfc2VuZF9za2JgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCB3YXJuaW5nIHJlbGF0ZWQgdG8gdGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBVRFAgdHJhbnNtaXNzaW9uIHBhdGguIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXA/IEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzICpXQVJOKi4gSSdsbCBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlYXJjaCB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgaXRzZWxmIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBXQVJOYC4gVGhhdCdzIHdoZXJlIHRoZSByb290IGNhdXNlIGlzIG1vc3QgbGlrZWx5IGhpZGluZy4gVW5kZXJzdGFuZGluZyB3aGF0IGNpcmN1bXN0YW5jZXMgbGVhZCB0byB0aGF0IHdhcm5pbmcgd2lsbCBiZSBrZXkgdG8gZGlhZ25vc2luZyBhbmQgZml4aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjI6NDUuNjc0OTkyMzE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTE5OTU9aW50IHVkcF9yZWFkX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTIwMTQtXFxubmV0L2lwdjQvdWRwLmM6MjAxNTpcXHRXQVJOX09OX09OQ0UoIXNrYl9zZXRfb3duZXJfc2tfc2FmZShza2IsIHNrKSk7XFxubmV0L2lwdjQvdWRwLmMtMjAxNi1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI3NjQ9ZW51bSBza2JfZHJvcF9yZWFzb24gdWRwX3Y0X2Vhcmx5X2RlbXV4KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODA1LVxcdHNrYi1cXHUwMDNlc2sgPSBzaztcXG5uZXQvaXB2NC91ZHAuYzoyODA2OlxcdERFQlVHX05FVF9XQVJOX09OX09OQ0Uoc2tfaXNfcmVmY291bnRlZChzaykpO1xcbm5ldC9pcHY0L3VkcC5jLTI4MDctXFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja19wZnJlZTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMzNTM9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zNDYyLVxcbm5ldC9pcHY0L3VkcC5jOjM0NjM6XFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xcbm5ldC9pcHY0L3VkcC5jLTM0NjQtXFx0cmV0dXJuIGl0ZXItXFx1MDAzZWVuZF9zayA/IGl0ZXItXFx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTM4MjM9c3RhdGljIGludCBicGZfaXRlcl91ZHBfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VkcF9pdGVyX3N0YXRlICppdGVyLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzgyOC1cXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19vYmpzKCpuZXdfYmF0Y2gsIG5ld19iYXRjaF9zeixcXG5uZXQvaXB2NC91ZHAuYzozODI5OlxcdFxcdFxcdFxcdCAgZmxhZ3MgfCBfX0dGUF9OT1dBUk4pO1xcbm5ldC9pcHY0L3VkcC5jLTM4MzAtXFx0aWYgKCFuZXdfYmF0Y2gpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjQ1LjcyMzg5MjU2MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYyNDAzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVEUCBTZW5kIFBhdGgqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGF0IHdhcm5pbmcgSSBzYXcuLi4gY291bGQgaXQgYmUgYnVyaWVkIHdpdGhpbiB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24sIGJ1dCBjbGV2ZXJseSBkaXNndWlzZWQgYXMgYSBjb25kaXRpb25hbCBkZWJ1ZyBtZXNzYWdlIGxpa2UgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHByb2JhYmx5IHN0b3AgYXNzdW1pbmcgYW5kIGp1c3QgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gQmVzdCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIGFuZCBzY3J1dGluaXplIHRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbiBpdHNlbGYuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjUwLjY4NjI5Nzg0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTU1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3NlbmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTEwOTE9RVhQT1JUX1NZTUJPTCh1ZHBfc2V0X2NzdW0pO1xcbm5ldC9pcHY0L3VkcC5jLTEwOTItXFxubmV0L2lwdjQvdWRwLmM6MTA5MzpzdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvdWRwLmMtMTA5NC1cXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTE3OT1pbnQgdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTE5MC1cXG5uZXQvaXB2NC91ZHAuYzoxMTkxOlxcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSk7XFxubmV0L2lwdjQvdWRwLmMtMTE5Mi1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTEyMzU9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXFxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcXHRcXHRcXHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFxcdTAwMjZjb3JrKTtcXG5uZXQvaXB2NC91ZHAuYy0xNDQ2LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMjo1MC43MzM1NjE4MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjgxMDU5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdWRwX3NlbmRfc2tiYCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB1ZHBfc2VuZF9za2JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWVudGFsbHkgc2tldGNoIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyDigJMgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBJdCdzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBsaWtlbHkgY2FsbGVkIGFmdGVyIHRoZSBzb2NrZXQgbGF5ZXIgaGFzIGFzc2VtYmxlZCBhbiBTS0IgKFNvY2tldCBCdWZmZXIpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uLlxuXG5JIGFudGljaXBhdGUgc2VlaW5nIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDaGVja3N1bSBDYWxjdWxhdGlvbjoqKiBIb3cgYXJlIFVEUCBjaGVja3N1bXMgZ2VuZXJhdGVkIGFuZCBoYW5kbGVkIGhlcmUsIGNvbnNpZGVyaW5nIG9mZmxvYWRpbmcgY2FwYWJpbGl0aWVzIGFuZCBoYXJkd2FyZSBhY2NlbGVyYXRpb24/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuXG4qICAgKipJUCBIZWFkZXIgQ29uc3RydWN0aW9uOioqIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBidWlsZHMgdGhlIElQIGhlYWRlciAoSVB2NCBvciBJUHY2LCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQpIG9yIGludGVyYWN0cyB3aXRoIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzLiBEb2VzIGl0IGhhbmRsZSBmcmFnbWVudGF0aW9uIGlmIHRoZSBkYXRhZ3JhbSBzaXplIGV4Y2VlZHMgdGhlIE1UVT9cbiogICAqKkludGVyZmFjZSBTZWxlY3Rpb246KiogSG93IGRvZXMgaXQgY2hvb3NlIHRoZSBvdXRnb2luZyBuZXR3b3JrIGludGVyZmFjZT8gSXMgaXQgYmFzZWQgb24gcm91dGluZyB0YWJsZXMsIHNvY2tldCBvcHRpb25zLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbT9cbiogICAqKkxvY2tpbmc6KiogV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgVURQIHNvY2tldCBvciB0aGUgcm91dGluZyBjYWNoZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGxvb2sgb3V0IGZvcj9cbiogICAqKlRyYW5zbWlzc2lvbiBRdWV1ZWluZzoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaGFuZCB0aGUgU0tCIG9mZiB0byBhIGRldmljZSBkcml2ZXIsIG9yIGlzIHRoZXJlIGFuIGludGVybWVkaWF0ZSBxdWV1ZWluZyBzdGFnZT8gSSdsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29ya2luZyBkZXZpY2UncyB0cmFuc21pdCBxdWV1ZSAoZS5nLiwgYG5ldGlmX3N0YXJ0X3F1ZXVlYCkuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEhvdyBhcmUgdHJhbnNtaXNzaW9uIGZhaWx1cmVzIChlLmcuLCBuZXR3b3JrIGNvbmdlc3Rpb24sIGludGVyZmFjZSBkb3duKSBoYW5kbGVkPyBEb2VzIGl0IGhhbmRsZSBJQ01QIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGdlbmVyYXRlZCBpbiByZXNwb25zZT9cbiogICAqKkNvbnRyb2wvU2lnbmFsbGluZzoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbnkgc2lnbmFsbGluZyBjb21wb25lbnRzIHRvIG5vdGlmeSB0aGUgc2VuZGluZyBwcm9jZXNzIHJlZ2FyZGluZyB0aGUgc3VjY2Vzcy9mYWlsdXJlIG9mIHRyYW5zbWlzc2lvbj9cblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVyczogSVAsIHRoZSBkZXZpY2UgZHJpdmVyLCBhbmQgdGhlIGhhcmR3YXJlIGl0c2VsZi4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgdGhlIFNLQiBpcyBoYW5kbGVkLCBJIGFzc3VtZSBpdCdzIHdoZXJlIHRoZSBtb3N0IFwiZ2x1ZVwiIGhhcHBlbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyByZXNpZGUuIExldCdzIGdldCByZWFkaW5nIGFuZCBjb25maXJtIHRoZXNlIGV4cGVjdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjI1LjEwMTY3MDA0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTM6XFx0c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbjEwOTQ6XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfY29yayAqY29yaylcXG4xMDk1OlxcdHtcXG4xMDk2OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuMTA5NzpcXHRcXHRpbnQgb2Zmc2V0LCBsZW4sIGRhdGFsZW47XFxuMTA5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4xMDk5OlxcdFxcdGludCBlcnI7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdG9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuMTEwMjpcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4xMTAzOlxcdFxcdGRhdGFsZW4gPSBsZW4gLSBzaXplb2YoKnVoKTtcXG4xMTA0OlxcdFxcbjExMDU6XFx0XFx0LypcXG4xMTA2OlxcdFxcdCAqIENyZWF0ZSBhIFVEUCBoZWFkZXJcXG4xMTA3OlxcdFxcdCAqL1xcbjExMDg6XFx0XFx0dWggPSB1ZHBfaGRyKHNrYik7XFxuMTEwOTpcXHRcXHR1aC1cXHUwMDNlc291cmNlID0gaW5ldF9zayhzayktXFx1MDAzZWluZXRfc3BvcnQ7XFxuMTExMDpcXHRcXHR1aC1cXHUwMDNlZGVzdCA9IGZsNC1cXHUwMDNlZmw0X2Rwb3J0O1xcbjExMTE6XFx0XFx0LyogRGF0YWdyYW0gbGVuZ3RoIGNoZWNrZWQgaW4gdWRwX3NlbmRtc2cuICovXFxuMTExMjpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG4xMTEzOlxcdFxcdHVoLVxcdTAwM2VjaGVjayA9IDA7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdGlmIChjb3JrLVxcdTAwM2Vnc29fc2l6ZSkge1xcbjExMTY6XFx0XFx0XFx0Y29uc3QgaW50IGhsZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikgK1xcbjExMTc6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0XFx0aWYgKGhsZW4gKyBtaW4oZGF0YWxlbiwgY29yay1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwM2UgY29yay1cXHUwMDNlZnJhZ3NpemUpIHtcXG4xMTIwOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xMTIyOlxcdFxcdFxcdH1cXG4xMTIzOlxcdFxcdFxcdGlmIChkYXRhbGVuIFxcdTAwM2UgY29yay1cXHUwMDNlZ3NvX3NpemUgKiBVRFBfTUFYX1NFR01FTlRTKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19ub19jaGVja190eCkge1xcbjExMjg6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEyOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTMwOlxcdFxcdFxcdH1cXG4xMTMxOlxcdFxcdFxcdGlmIChkc3RfeGZybShza2JfZHN0KHNrYikpKSB7XFxuMTEzMjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjExMzQ6XFx0XFx0XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHRcXHRcXHRpZiAoZGF0YWxlbiBcXHUwMDNlIGNvcmstXFx1MDAzZWdzb19zaXplKSB7XFxuMTEzNzpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplID0gY29yay1cXHUwMDNlZ3NvX3NpemU7XFxuMTEzODpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlID0gU0tCX0dTT19VRFBfTDQ7XFxuMTEzOTpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzID0gRElWX1JPVU5EX1VQKGRhdGFsZW4sXFxuMTE0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY29yay1cXHUwMDNlZ3NvX3NpemUpO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHRcXHQvKiBEb24ndCBjaGVja3N1bSB0aGUgcGF5bG9hZCwgc2tiIHdpbGwgZ2V0IHNlZ21lbnRlZCAqL1xcbjExNDM6XFx0XFx0XFx0XFx0Z290byBjc3VtX3BhcnRpYWw7XFxuMTE0NDpcXHRcXHRcXHR9XFxuMTE0NTpcXHRcXHR9XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfbm9fY2hlY2tfdHgpIHtcXHRcXHRcXHQgLyogVURQIGNzdW0gb2ZmICovXFxuMTE0ODpcXHRcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuMTE0OTpcXHRcXHRcXHRnb3RvIHNlbmQ7XFxuMTE1MDpcXHRcXHR9IGVsc2UgaWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsgLyogVURQIGhhcmR3YXJlIGNzdW0gKi9cXG4xMTUxOlxcdGNzdW1fcGFydGlhbDpcXG4xMTUyOlxcdFxcdFxcdHVkcDRfaHdjc3VtKHNrYiwgZmw0LVxcdTAwM2VzYWRkciwgZmw0LVxcdTAwM2VkYWRkcik7XFxuMTE1MzpcXHRcXHRcXHRnb3RvIHNlbmQ7XFxuMTE1NDpcXHRcXHR9XFxuMTE1NTpcXHRcXG4xMTU2OlxcdFxcdC8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqL1xcbjExNTc6XFx0XFx0dWgtXFx1MDAzZWNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmw0LVxcdTAwM2VzYWRkciwgZmw0LVxcdTAwM2VkYWRkciwgbGVuLFxcbjExNTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19VRFAsIHVkcF9jc3VtKHNrYikpO1xcbjExNTk6XFx0XFx0aWYgKHVoLVxcdTAwM2VjaGVjayA9PSAwKVxcbjExNjA6XFx0XFx0XFx0dWgtXFx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdHNlbmQ6XFxuMTE2MzpcXHRcXHRlcnIgPSBpcF9zZW5kX3NrYihzb2NrX25ldChzayksIHNrYik7XFxuMTE2NDpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbjExNjU6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU5PQlVGUyBcXHUwMDI2XFx1MDAyNlxcbjExNjY6XFx0XFx0XFx0ICAgICFpbmV0X3Rlc3RfYml0KFJFQ1ZFUlIsIHNrKSkge1xcbjExNjc6XFx0XFx0XFx0XFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfU05EQlVGRVJST1JTKTtcXG4xMTY4OlxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTE2OTpcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXHR9IGVsc2Uge1xcbjExNzE6XFx0XFx0XFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfT1VUREFUQUdSQU1TKTtcXG4xMTcyOlxcdFxcdH1cXG4xMTczOlxcdFxcdHJldHVybiBlcnI7XFxuMTE3NDpcXHR9XFxuMTE3NTpcXHRcXG4xMTc2OlxcdC8qXFxuMTE3NzpcXHQgKiBQdXNoIG91dCBhbGwgcGVuZGluZyBkYXRhIGFzIG9uZSBVRFAgZGF0YWdyYW0uIFNvY2tldCBpcyBsb2NrZWQuXFxuMTE3ODpcXHQgKi9cXG4xMTc5OlxcdGludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXFxuMTE4MDpcXHR7XFxuMTE4MTpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgICp1cCA9IHVkcF9zayhzayk7XFxuMTE4MjpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuMTE4MzpcXHRcXHRzdHJ1Y3QgZmxvd2k0ICpmbDQgPSBcXHUwMDI2aW5ldC1cXHUwMDNlY29yay5mbC51LmlwNDtcXG4xMTg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTE4NTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0c2tiID0gaXBfZmluaXNoX3NrYihzaywgZmw0KTtcXG4xMTg4OlxcdFxcdGlmICghc2tiKVxcbjExODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSk7XFxuMTE5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6MjUuMTAxODU3NTUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODgzMzM5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIHRoZSBXYXJuaW5nKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBJJ20gbG9va2luZyBmb3IgYSB3YXJuaW5nIG1lc3NhZ2UsIHByZXN1bWFibHkgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgcG90ZW50aWFsIGlzc3VlLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGF0IHdhcm5pbmcgYWN0dWFsbHkgZ2VuZXJhdGVkPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGB1ZHBfc2V0X2xlbl9zaG9ydGAuIEknbSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGNvbnRleHQgaW1wbGllZCBieSB0aGUgcHJvbXB0LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjI4Ljk5MDE5MzY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5NjE1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3NldF9sZW5fc2hvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0xMTExLVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xcbm5ldC9pcHY0L3VkcC5jOjExMTI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwLmMtMTExMy1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMzoyOS40MTIxNjE5NzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMzM0Mjk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBJc3N1ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBuYW1lIGB1ZHBfc2V0X2xlbl9zaG9ydGAgaGFzIHBvcHBlZCB1cCwgYW5kIGl0J3MgcmluZ2luZyBzb21lIGJlbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCB3aGVyZSBpdCdzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGxpa2VseSByZWxhdGVkIHRvIFVEUCBwYWNrZXQgbGVuZ3RoIGhhbmRsaW5nLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGd1ZXNzaW5nIGl0IG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNhbGN1bGF0ZWQgb3IgZGVzaXJlZCBVRFAgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiBzb21ldGhpbmcgaXQgc2hvdWxkIGJlLCBtYXliZSBhbiBNVFUgb3IgYSBtaW5pbXVtIHJlcXVpcmVkIGhlYWRlciBzaXplLiBDb3VsZCBiZSByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24sIHBhZGRpbmcsIG9yIGV2ZW4gYSBwb3RlbnRpYWwgYnVnLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGNvZGViYXNlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjMzLjIyNTUwNzQxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODY2MDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHBfc2V0X2xlbl9zaG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYz0xMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJkbWFfYnVpbGRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy0zOC1cXHR1aC1cXHUwMDNlZGVzdCA9IGh0b25zKFJPQ0VfVjJfVURQX0RQT1JUKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYzozOTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy00MC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jPTI5Nz1zdGF0aWMgdm9pZCBwcmVwYXJlX3VkcF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHNyY19wb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMzA3LVxcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IHNyY19wb3J0O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jOjMwODpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBza2ItXFx1MDAzZWxlbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMzA5LVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jPTYxMz1zdGF0aWMgdm9pZCBhbXRfc2VuZF9kaXNjb3Zlcnkoc3RydWN0IGFtdF9kZXYgKmFtdClcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTY2OS1cXHR1ZHBoLVxcdTAwM2VkZXN0XFx0PSBhbXQtXFx1MDAzZXJlbGF5X3BvcnQ7XFxuZHJpdmVycy9uZXQvYW10LmM6NjcwOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqdWRwaCkgKyBzaXplb2YoKmFtdGQpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy02NzEtXFx0dWRwaC1cXHUwMDNlY2hlY2tcXHQ9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz03MDI9c3RhdGljIHZvaWQgYW10X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYW10X2RldiAqYW10LCBib29sIHY2KVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtNzYyLVxcdHVkcGgtXFx1MDAzZWRlc3RcXHQ9IGFtdC1cXHUwMDNlcmVsYXlfcG9ydDtcXG5kcml2ZXJzL25ldC9hbXQuYzo3NjM6XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKCphbXRyaCkgKyBzaXplb2YoKnVkcGgpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy03NjQtXFx0dWRwaC1cXHUwMDNlY2hlY2tcXHQ9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz0yNTk0PXN0YXRpYyB2b2lkIGFtdF9zZW5kX2FkdmVydGlzZW1lbnQoc3RydWN0IGFtdF9kZXYgKmFtdCwgX19iZTMyIG5vbmNlLFxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjY1Mi1cXHR1ZHBoLVxcdTAwM2VkZXN0XFx0PSBkcG9ydDtcXG5kcml2ZXJzL25ldC9hbXQuYzoyNjUzOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqYW10YSkgKyBzaXplb2YoKnVkcGgpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yNjU0LVxcdHVkcGgtXFx1MDAzZWNoZWNrXFx0PSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYz0zMDc1PXN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTMxMzEtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYzozMTMyOlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0zMTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYz0xNzI5PXN0YXRpYyBpbnQgaWF2Zl90c28oc3RydWN0IGlhdmZfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jLTE3NzYtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYzoxNzc3OlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYy0xNzc4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM9MTg0MT1pbnQgaWNlX3RzbyhzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jLTE4OTMtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM6MTg5NDpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jLTE4OTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jPTI4MjE9aW50IGlkcGZfdHNvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jLTI4NzMtXFx0XFx0b2ZmLVxcdTAwM2V0c29faGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGw0X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM6Mjg3NDpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIHNoaW5mby1cXHUwMDNlZ3NvX3NpemUgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMtMjg3NS1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYz03MDc9c3RhdGljIHZvaWQgb3R4Ml9zcWVfYWRkX2V4dChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBvdHgyX3NuZF9xdWV1ZSAqc3EsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYzo3NTM6XFx0XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzU0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwNzc9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY0X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwaGRyICppcHY0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTA4My1cXHR1aCA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHVkcF9vZmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjEwODQ6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cXHUwMDNlbGVuIC0gdWRwX29mZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTA4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwOTY9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY2X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwdjZoZHIgKmlwdjYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMTAyLVxcdHVoID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdWRwX29mZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MTEwMzpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiLVxcdTAwM2VsZW4gLSB1ZHBfb2ZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMTA0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIHN0cnVjdCBza19idWZmICptbHg1ZV90ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE1LVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyg5KTsgLyogRGlzY2FyZCBQcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjExNjpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IG1seDVlaGRyKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE3LVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYz0zODI9c3RhdGljIHZvaWQgZWY0X2l0ZXJhdGVfc3RhdGUoc3RydWN0IGVmNF9uaWMgKmVmeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDMtXFx0cGF5bG9hZC1cXHUwMDNldWRwLnNvdXJjZSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jOjQwNDpcXHR1ZHBfc2V0X2xlbl9zaG9ydChcXHUwMDI2cGF5bG9hZC1cXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNDA1LVxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGVmNF9sb29wYmFja19wYXlsb2FkLCB1ZHApKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNDAwLVxcdHBheWxvYWQtXFx1MDAzZXVkcC5zb3VyY2UgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jOjQwMTpcXHR1ZHBfc2V0X2xlbl9zaG9ydChcXHUwMDI2cGF5bG9hZC1cXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYy00MDItXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM9MzgwPXN0YXRpYyB2b2lkIGVmeF9pdGVyYXRlX3N0YXRlKHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy00MDEtXFx0cGF5bG9hZC1cXHUwMDNldWRwLnNvdXJjZSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM6NDAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2V1ZHAsIHNpemVvZigqcGF5bG9hZCkgLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTQwMy1cXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBlZnhfbG9vcGJhY2tfcGF5bG9hZCwgdWRwKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jPTMwNT1zdGF0aWMgdm9pZCBlZnhfZ2VuX3R1bl9oZWFkZXJfdWRwKHN0cnVjdCBlZnhfdGNfZW5jYXBfYWN0aW9uICplbmNhcCwgdTggbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYy0zMTMtXFx0dWRwLVxcdTAwM2VkZXN0ID0ga2V5LVxcdTAwM2V0cF9kc3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYzozMTQ6XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwLCBzaXplb2YoKnVkcCkgKyBsZW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy90Y19lbmNhcF9hY3Rpb25zLmMtMzE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz01OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTUtXFx0XFx0dWhkci1cXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXFx1MDAzZWRwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2OlxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoZHIsIHNpemVvZigqc2hkcikgKyBzaXplb2YoKnVoZHIpICsgYXR0ci1cXHUwMDNlc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1Ny1cXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X3NpemUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1ODpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBhdHRyLVxcdTAwM2VtYXhfc2l6ZSAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1OS1cXHRcXHRcXHRcXHRcXHQgIChzaXplb2YoKmloZHIpICsgc2l6ZW9mKCplaGRyKSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9NTc4PXN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtXFx0dWggPSB1ZHBfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6NjUxOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXFx1MDAzZWxlbiAtIGdyb19oaW50LVxcdTAwM2VuZXN0ZWRfdHBfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTItXFx0aWYgKHVoLVxcdTAwM2VjaGVjaykge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwODk9c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHVkcF9sZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTczNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5zaW1fZGV2X3RyYXBfc2tiX2J1aWxkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzcyLVxcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNnVkcGgtXFx1MDAzZWRlc3QsIHNpemVvZih1MTYpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NzczOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzc0LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYz0zOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5zaW1fZGV2X3BzYW1wbGVfc2tiX2J1aWxkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc1LVxcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNnVkcGgtXFx1MDAzZWRlc3QsIHNpemVvZih1MTYpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jOjc2OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc3LVxcbi0tXFxuaW5jbHVkZS9saW51eC91ZHAuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW4oc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTQ2LVxcbmluY2x1ZGUvbGludXgvdWRwLmg6NDc6c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuX3Nob3J0KHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxcbmluY2x1ZGUvbGludXgvdWRwLmgtNDgte1xcbi0tXFxubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYz0yNz1zdGF0aWMgdm9pZCB0ZXN0X2JsYWNraG9sZWRldihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jLTQ4LVxcdHVoLVxcdTAwM2Vzb3VyY2UgPSB1aC1cXHUwMDNlZGVzdCA9IGh0b25zKFVEUF9QT1JUKTtcXG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jOjQ5OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBkYXRhX2xlbik7XFxubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYy01MC1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jPTM2PXN0YXRpYyBpbnQgdWRwX3VuY29tcHJlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90IG5lZWRlZClcXG4tLVxcbm5ldC82bG93cGFuL25oY191ZHAuYy05MC1cXHRcXHRpZiAobG93cGFuXzgwMjE1NF9jYihza2IpLVxcdTAwM2VkX3NpemUpXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jOjkxOlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZ1aCwgbG93cGFuXzgwMjE1NF9jYihza2IpLVxcdTAwM2VkX3NpemUgLVxcbm5ldC82bG93cGFuL25oY191ZHAuYy05Mi1cXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbm5ldC82bG93cGFuL25oY191ZHAuYy05My1cXHRcXHRlbHNlXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jOjk0OlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZ1aCwgc2tiLVxcdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbm5ldC82bG93cGFuL25oY191ZHAuYy05NS1cXHRcXHRicmVhaztcXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTYtXFx0ZGVmYXVsdDpcXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmM6OTc6XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQoXFx1MDAyNnVoLCBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTk4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjkzMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDEwLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVxcdTAwM2VjdXJfdWRwX2RzdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzAxMTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBkYXRhbGVuICsgOCk7XFx0LyogREFUQSArIHVkcGhkciAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTItXFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzA1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTQzLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVxcdTAwM2VjdXJfdWRwX2RzdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzE0NDpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCB1ZHBsZW4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxNDUtXFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MTk9c3RydWN0IHNrX2J1ZmYgKm5ldF90ZXN0X2dldF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IGlkLFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzQtXFx0XFx0dWhkci1cXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXFx1MDAzZWRwb3J0KTtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo3NTpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBzaXplb2YoKnNoZHIpICsgc2l6ZW9mKCp1aGRyKSArIGF0dHItXFx1MDAzZXNpemUpO1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTc2LVxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXhfc2l6ZSlcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo3NzpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBhdHRyLVxcdTAwM2VtYXhfc2l6ZSAtXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzgtXFx0XFx0XFx0XFx0XFx0ICAoc2l6ZW9mKCppaGRyKSArIHNpemVvZigqZWhkcikpKTtcXG4tLVxcbm5ldC9jb3JlL3Rzby5jPTk9dm9pZCB0c29fYnVpbGRfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmhkciwgc3RydWN0IHRzb190ICp0c28sXFxuLS1cXG5uZXQvY29yZS90c28uYy00Mi1cXHRcXHQvKiBzaXplIGlzIGFmdGVyIHNlZ21lbnRhdGlvbi4gKi9cXG5uZXQvY29yZS90c28uYzo0MzpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2l6ZW9mKCp1aCkgKyBzaXplKTtcXG5uZXQvY29yZS90c28uYy00NC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0zMjUtXFx0dWgtXFx1MDAzZWRlc3QgPSBkcG9ydDtcXG5uZXQvaXB2NC9lc3A0LmM6MzI2OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xcbm5ldC9pcHY0L2VzcDQuYy0zMjctXFx0dWgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbm5ldC9pcHY0L2lwY29uZmlnLmM9ODE4PXN0YXRpYyB2b2lkIF9faW5pdCBpY19ib290cF9zZW5kX2lmKHN0cnVjdCBpY19kZXZpY2UgKmQsIHVuc2lnbmVkIGxvbmcgamlmZmllc19kaWZmKVxcbi0tXFxubmV0L2lwdjQvaXBjb25maWcuYy04NDktXFx0Yi1cXHUwMDNldWRwaC5kZXN0ID0gaHRvbnMoNjcpO1xcbm5ldC9pcHY0L2lwY29uZmlnLmM6ODUwOlxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZiLVxcdTAwM2V1ZHBoLCBzaXplb2Yoc3RydWN0IGJvb3RwX3BrdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBjb25maWcuYy04NTEtXFx0LyogVURQIGNoZWNrc3VtIG5vdCBjYWxjdWxhdGVkIC0tIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiBCT09UUCBSRkMgKi9cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzE4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmluZXRfcnRtX2dldHJvdXRlX2J1aWxkX3NrYihfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMjIxLVxcdFxcdHVkcGgtXFx1MDAzZWRlc3QgPSBkcG9ydDtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMyMjI6XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTMyMjMtXFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0xMTExLVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xcbm5ldC9pcHY0L3VkcC5jOjExMTI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwLmMtMTExMy1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNzI9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl91ZHBfdHVubmVsX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjgzLVxcdFxcdGlmIChnc29fcGFydGlhbCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpIHtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjI4NDpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSArXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODUtXFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0NCKHNrYiktXFx1MDAzZWRhdGFfb2Zmc2V0ICtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjg3LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoyODg6XFx0XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODktXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3Mi1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ3MzpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBfaGRyKHNrYiksIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIG1zcyk7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NzQtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4MS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU4MjpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbmV3bGVuKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4My1cXHRcXHR1aC1cXHUwMDNlY2hlY2sgPSBjaGVjaztcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjAxLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NjAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBuZXdsZW4pO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjAzLVxcdHVoLVxcdTAwM2VjaGVjayA9IGNoZWNrO1xcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM2MS1cXHR1aC1cXHUwMDNlZGVzdCA9IGRwb3J0O1xcbm5ldC9pcHY2L2VzcDYuYzozNjI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjYvZXNwNi5jLTM2My1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xMzc0LVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXFxubmV0L2lwdjYvdWRwLmM6MTM3NTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMzc2LVxcdHVoLVxcdTAwM2VjaGVjayA9IDA7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjI1PXN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMjk4LVxcdFxcdH1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjk5OlxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCB1ZHBfbGVuKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM9MTM2PW5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtMTYzLVxcdGRhdGFsZW4gPSBza2ItXFx1MDAzZWxlbiAtIHByb3RvZmY7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6MTY0OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIGRhdGFsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jLTE2NS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTExOD1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM3LVxcdHVoLVxcdTAwM2VkZXN0ID0ga2EtXFx1MDAzZWVuY2FwX2Rwb3J0O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjEzODpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTEzOS1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMzozNC44MjQxNzc4NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0NjAwNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURQIEhlYWRlciBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVEUCBoZWFkZXIgc3RydWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3VkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJIHJlbWVtYmVyIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBkZWZpbmVkIHRoZXJlLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBgc3RydWN0IHVkcGhkcmAgZGVmaW5pdGlvbiwgdG8gdmVyaWZ5IHRoZSBleHBlY3RlZCBsYXlvdXQgb2YgdGhlIHNvdXJjZSBwb3J0LCBkZXN0aW5hdGlvbiBwb3J0LCBsZW5ndGgsIGFuZCBjaGVja3N1bSBmaWVsZHMsIGFuZCBwZXJoYXBzIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHBvdGVudGlhbCBmbGFncyBvciBvcHRpb25zIGRlZmluZWQgZnVydGhlciBkb3duIGluIHRoYXQgaW5jbHVkZSBmaWxlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIG1vdmUgb24gdG8gd2hhdGV2ZXIgbXkgYWN0dWFsIHRhc2sgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6NDIuMzcwMTg1NDA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdWRwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW4oc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHR1aC1cXHUwMDNlbGVuID0gbGVuIFxcdTAwM2MgR1JPX0xFR0FDWV9NQVhfU0laRSA/IGh0b25zKGxlbikgOiAwO1xcbiAgNDU6XFx0fVxcbiAgNDY6XFx0XFxuICA0NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW5fc2hvcnQoc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKGxlbiBcXHUwMDNlPSBHUk9fTEVHQUNZX01BWF9TSVpFKTtcXG4gIDUwOlxcdFxcdHVoLVxcdTAwM2VsZW4gPSBodG9ucyhsZW4pO1xcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NSU5fUEVSTkVUXFx0MTI4XFxuICA1NDpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NSU5cXHRcXHQoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAxMjggOiAyNTYpXFxuICA1NTpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NQVhcXHRcXHQ2NTUzNlxcbiAgNTY6XFx0XFxuICA1NzpcXHRzdGF0aWMgaW5saW5lIHUzMiB1ZHBfaGFzaGZuKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgdTMyIG51bSwgdTMyIG1hc2spXFxuICA1ODpcXHR7XFxuICA1OTpcXHRcXHRyZXR1cm4gKG51bSArIG5ldF9oYXNoX21peChuZXQpKSBcXHUwMDI2IG1hc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjQyLjM3MDI0NTQ3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTcxODgyNTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBUcnVuY2F0aW9uIElzc3VlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpbiBgdWRwX3NldF9sZW5fc2hvcnRgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIHNwZWNpZmljYWxseSB0aGUgYGxlbiBcdTAwM2U9IEdST19MRUdBQ1lfTUFYX1NJWkVgIGNoZWNrLCB3aGVyZSBgR1JPX0xFR0FDWV9NQVhfU0laRWAgaXMgNjU1MzYuIFRoaXMgd2FybmluZywgdHJpZ2dlcmVkIGluIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoIGlzIGlubGluZWQgaW50byBgdWRwX3NlbmRfc2tiYCwgZXhwbGFpbnMgdGhlIHRlc3Qgc2NyaXB0J3Mgc2VhcmNoIGZvciBgV0FSTklORzouKnVkcF9zZW5kX3NrYmAuIFNvLCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGBsZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA2NTUzNi5cblxuTm93LCB3aHkgaXMgYGxlbmAgZXhjZWVkaW5nIDY1NTM1PyBUaGUgcm9vdCBjYXVzZSBzZWVtcyB0byBiZSB0aGF0IGBjb3JrLVx1MDAzZWZyYWdzaXplYCB3YXMgbm90IGJlaW5nIHByb3Blcmx5IGNhcHBlZCBieSBgaXBfc2V0dXBfY29ya2AsIGxlYWRpbmcgdG8gdGhlIHVzZXIgcG90ZW50aWFsbHkgc2VuZGluZyBhIG1hc3NpdmUgVURQIHBhY2tldCDigJMgbGV0J3Mgc2F5IGEgNjU1MjgtYnl0ZSBwYXlsb2FkIHBsdXMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgdG90YWwgb2YgNjU1NTYgYnl0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZS5cblxuSG93ZXZlciwgaWYgYGxlbmAgaXMgaW5kZWVkIDY1NTM2IG9yIGdyZWF0ZXIsIHRoZSBVRFAgbGVuZ3RoIGZpZWxkIChgdWgtXHUwMDNlbGVuID0gaHRvbnMobGVuKWApIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIDE2IGJpdHMuIFRoZSBwYXlsb2FkIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIOKAkyBjcmVhdGVkIGZyb20gYGNvcHlfZnJvbV91c2VyYCBvciBzb21ldGhpbmcgc2ltaWxhci4gU28sIGl0J3MganVzdCBhIHRydW5jYXRlZCBVRFAgbGVuZ3RoIGZpZWxkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uIGFuZCBhIGJ1ZywgYnV0IG5vdCBhbiBpbmZvcm1hdGlvbiBsZWFrLlxuXG5CdXQsIGRvZXMgdGhpcyBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYXQgdGhlIHJlY2VpdmVyIG9yIHNlbmRlcj8gSWYgYGxlbmAgaXMgNjU1NTYsIGBodG9ucyg2NTU1NilgIGJlY29tZXMgYGh0b25zKDIwKWAuIFRoZSBVRFAgaGVhZGVyIGNsYWltcyBhIGxlbmd0aCBvZiAyMCwgYnV0IHRoZSBJUCBoZWFkZXIgYXNzZXJ0cyBhIGxlbmd0aCBvZiA2NTU1Ni4gV2hlbiB0aGUgcGFja2V0IGlzIHNlbnQsIHRoZSBuZXR3b3JrIGRyaXZlciAqd2lsbCogc2VuZCA2NTU1NiBieXRlcy4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhvc2UgNjU1NTYgYnl0ZXMgYXJlIGFjdHVhbGx5ICppbml0aWFsaXplZCouIEFuZCB5ZXMsIHRoZXkgd2VyZS4gVGhleSB3ZXJlIGFsbG9jYXRlZCBhbmQgZmlsbGVkIGJ5IHRoZSBzb2NrZXQgbGF5ZXIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkIGZyb20gd2hhdCBJIGNhbiBzZWUuXG5cbkxldCdzIHNlZSBpZiB0aGUgcGF0Y2ggZml4ZXMgYW55dGhpbmcgZWxzZS4gVGhlIHBhdGNoIGlzIGNhcHBpbmcgdGhlIE1UVSAoTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCkgdG8gYElQX01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLiBUaGlzIGVuc3VyZXMgdGhhdCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgZG9lc24ndCBleGNlZWQgNjU1MzUuIElmIGBjb3JrLVx1MDAzZWZyYWdzaXplYCBpcyBcdTAwM2M9IDY1NTM1LCBgaXBfYXBwZW5kX2RhdGFgIGZyYWdtZW50cyB0aGUgcGFja2V0LiBJZiBgY29yay1cdTAwM2VmcmFnc2l6ZWAgZXhjZWVkZWQgNjU1MzUsIGBpcF9hcHBlbmRfZGF0YWAgd291bGQgcGxhY2UgdXAgdG8gYGNvcmstXHUwMDNlZnJhZ3NpemVgIGJ5dGVzIGludG8gYSBzaW5nbGUgYHNrYmAuIFdoaWxlIGBza2ItXHUwMDNlbGVuYCBjb3VsZCBiZSBcdTAwM2UgNjU1MzUsIGBza2ItXHUwMDNlbGVuYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aGljaCBjYW4gaGFuZGxlIGxhcmdlciB2YWx1ZXMuIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhlIHRydW5jYXRpb24gaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBhbmQgdGhlIHdhcm5pbmcuXG5cbkFsc28sIHRoZSBJUHY0IHRvdGFsIGxlbmd0aCBmaWVsZCBpcyAxNiBiaXRzLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgXHUwMDNlIDY1NTM1LCBgaXBfc2VuZF9za2JgIGNvdWxkIHRydW5jYXRlIHRoZSBJUCBsZW5ndGgsIHRvby4gU28sIEkgbmVlZCB0byBjaGVjayBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSWYgYHNrYi1cdTAwM2VsZW5gIFx1MDAzZSA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBhbGxvY2F0ZXMgYSBzdWl0YWJseSBzaXplZCBgc2tiYC4gVGhlIGtleSBpczogZG9lcyBpdCBhbGxvY2F0ZSBpdCBwcm9wZXJseT8gSSdtIHByZXR0eSBzdXJlIGl0IHVzZXMgYHNvY2tfYWxsb2Nfc2VuZF9za2JgIG9yIHNpbWlsYXIsIHdoaWNoIGRvZXMgYWxsb2NhdGUgdGhlIHJlcXVlc3RlZCBzaXplLiBJZiB0aGUgc2l6ZSBpcyBcdTAwM2UgNjU1MzUsIGl0IGFsbG9jYXRlcywgY29waWVzIGRhdGEgZnJvbSB1c2Vyc3BhY2UsIGFuZCBzZXRzIGBza2ItXHUwMDNlbGVuYC4gQWdhaW4sIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gVGhlIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB1c2VyIGRhdGEuXG5cblNvLCB0aGUgY29yZSBpc3N1ZSBpcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkcyBvZiBVRFAgYW5kIElQIGhlYWRlcnMuIFRoaXMgbGVhZHMgdG8gYSB3YXJuaW5nIGFuZCBtYWxmb3JtZWQgcGFja2V0cywgYnV0IG5vIGluZm9ybWF0aW9uIGxlYWthZ2Ugb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjU4LjA4OTA3Mjk2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDM3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1O1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcXG4gMzc0OlxcdFxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbiAzNzU6XFx0XFx0XFx0aWYgKG10dSlcXG4gMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzNzc6XFx0XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRtdHUgPSBJUFY2X01JTl9NVFU7XFxuIDM4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM4MTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG4gMzgyOlxcdFxcdGlmIChpZGV2KVxcbiAzODM6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KTtcXG4gMzg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRvdXQ6XFxuIDM4NzpcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbiAzOTM6XFx0ICpcXG4gMzk0OlxcdCAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxcbiAzOTU6XFx0ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuIDM5NjpcXHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbiAzOTc6XFx0ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxcbiAzOTg6XFx0ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXFxuIDM5OTpcXHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6NTguMDg5MjA5MjcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzgzMzQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIElQIEZyYWdtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgSVA2X01BWF9NVFVgIHZhbHVlLCBhbmQgaXQncyBoaXR0aW5nIG1lOiBpdCdzIDY1NTM1LCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjb3VsZCBkaXJlY3RseSBpbXBhY3Qgb3VyIGZyYWdtZW50YXRpb24gbG9naWMuIElmIHRoZSBgbXR1YCB2YWx1ZSBleGNlZWRzIHRoaXMgbGltaXQsIHdlIHJ1biBpbnRvIHRoZSByaXNrIG9mIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdmFsdWUgYmVjb21pbmcgbGFyZ2VyIHRoYW4gNjU1MzUuIFRoaXMgd291bGQgYmUgYSBwcm9ibGVtIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgdGhlIFVEUCBsZW5ndGggdG8gYmUgdHJ1bmNhdGVkLCB3aGljaCB3b3VsZCB0cmlnZ2VyIHRoZSB3YXJuaW5nIHRoYXQgd2UgaGF2ZS4gXG5cbk5vdywgSSdtIHRyeWluZyB0byB0aGluayBvZiBhbnkgb3RoZXIgZWRnZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCBjb3VsZCBgbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpYCB1bmRlcmZsb3cgaWYgdGhlIGBtdHVgIGlzIGV4Y2VwdGlvbmFsbHkgbGFyZ2U/IExldCdzIHJ1bGUgdGhhdCBvdXQ6IGBsd3R1bm5lbF9oZWFkcm9vbWAgcmV0dXJucyBhIHNtYWxsIHZhbHVlLiBTaW5jZSBgbXR1YCBpcyBjYXBwZWQgYXQgNjU1MzUsIHRoYXQgc2hvdWxkIHByZXZlbnQgYGZyYWdzaXplYCBmcm9tIGV2ZXIgZXhjZWVkaW5nIHRoYXQgbWF4aW11bSB2YWx1ZS5cblxuQWxyaWdodCwgbGV0IG1lIG5vdyBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGlwX3NldHVwX2NvcmtgIGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjI0OjAzLjM2NzU0NTkyN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZzay1cXHUwMDNlc2tfdHNrZXkpO1xcbjEyOTE6XFx0XFx0cmV0dXJuIGVycjtcXG4xMjkyOlxcdH1cXG4xMjkzOlxcdFxcbjEyOTQ6XFx0c3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcXG4xMjk1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcXG4xMjk2OlxcdHtcXG4xMjk3OlxcdFxcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0O1xcbjEyOTg6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdHJ0ID0gKnJ0cDtcXG4xMzAxOlxcdFxcdGlmICh1bmxpa2VseSghcnQpKVxcbjEzMDI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTMwMzpcXHRcXG4xMzA0OlxcdFxcdGNvcmstXFx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cXG4xMzA1OlxcdFxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxuMTMwNjpcXHRcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuMTMwNzpcXHRcXG4xMzA4OlxcdFxcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cXHUwMDNlZnJhZ3NpemUpKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4xMzEwOlxcdFxcbjEzMTE6XFx0XFx0LypcXG4xMzEyOlxcdFxcdCAqIHNldHVwIGZvciBjb3JraW5nLlxcbjEzMTM6XFx0XFx0ICovXFxuMTMxNDpcXHRcXHRvcHQgPSBpcGMtXFx1MDAzZW9wdDtcXG4xMzE1OlxcdFxcdGlmIChvcHQpIHtcXG4xMzE2OlxcdFxcdFxcdGlmICghY29yay1cXHUwMDNlb3B0KSB7XFxuMTMxNzpcXHRcXHRcXHRcXHRjb3JrLVxcdTAwM2VvcHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyA0MCxcXG4xMzE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuMTMxOTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIWNvcmstXFx1MDAzZW9wdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjI0OjAzLjM2NzY1NTg2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMzNDc4MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBpcF9hcHBlbmRfZGF0YWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0aGluayB0aGlzIHRocm91Z2guIElmIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdmFsdWUgc29tZWhvdyBiYWxsb29ucyBiZXlvbmQgNjU1MzUsIGEgc2VyaW91cyBwcm9ibGVtIGNvdWxkIGFyaXNlIHdpdGhpbiB0aGUgYGlwX2FwcGVuZF9kYXRhYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBjb3VsZCBsZWFkIHRvIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYW4gc2tiIHdpdGggYSBsZW5ndGggKGBsZW5gKSB0aGF0IGV4Y2VlZHMgdGhlIDY1NTM1LWJ5dGUgbGltaXQuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHNjZW5hcmlvLCBhbmQgYSBzaWduaWZpY2FudCBzZWN1cml0eSBjb25jZXJuLCBzbyBsZXQncyBjaGVjayBvdXQgYGlwX2FwcGVuZF9kYXRhYCB0byBjb25maXJtIHRoZSBjb2RlJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDowOC4xMDExMzYzMTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjkxNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2FwcGVuZF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1MT1FWFBPUlRfU1lNQk9MKGlwX2dlbmVyaWNfZ2V0ZnJhZyk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTUyLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk1MzpzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk1NC1cXHRcXHRcXHQgICAgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM0OS0vKlxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNTA6ICpcXHRpcF9hcHBlbmRfZGF0YSgpIGNhbiBtYWtlIG9uZSBsYXJnZSBJUCBkYXRhZ3JhbSBmcm9tIG1hbnkgcGllY2VzIG9mXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM1MS0gKlxcdGRhdGEuICBFYWNoIHBpZWNlIHdpbGwgYmUgaGVsZCBvbiB0aGUgc29ja2V0IHVudGlsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzU5LSAqL1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNjA6aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNjEtXFx0XFx0ICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgwLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzODE6XFx0cmV0dXJuIF9faXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSxcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgyLVxcdFxcdFxcdFxcdHNrX3BhZ2VfZnJhZyhzayksIGdldGZyYWcsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzk5PXN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE0ODktXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTQ5MDpcXHRcXHQvKiBGb3Igc3VjaCBzb2NrZXRzLCB0cmFuc2hkcmxlbiBpcyB6ZXJvIHdoZW4gZG8gaXBfYXBwZW5kX2RhdGEoKSxcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDkxLVxcdFxcdCAqIHNvIGljbXBoZHIgZG9lcyBub3QgaW4gc2tiIGxpbmVhciByZWdpb24gYW5kIGNhbiBub3QgZ2V0IGljbXBfdHlwZVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTU1ND1zdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Ni1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTc3OlxcdGVyciA9IF9faXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgXFx1MDAyNnF1ZXVlLCBjb3JrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjdXJyZW50LVxcdTAwM2V0YXNrX2ZyYWcsIGdldGZyYWcsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNjA1PXZvaWQgaXBfc2VuZF91bmljYXN0X3JlcGx5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKm9yaWdfc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjU4LVxcdGlwYy5zb2NrYy5tYXJrID0gZmw0LmZsb3dpNF9tYXJrO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NTk6XFx0ZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIFxcdTAwMjZmbDQsIGlwX3JlcGx5X2dsdWVfYml0cywgYXJnLVxcdTAwM2Vpb3YtXFx1MDAzZWlvdl9iYXNlLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE2NjAtXFx0XFx0XFx0ICAgICBsZW4sIDAsIFxcdTAwMjZpcGMsIFxcdTAwMjZydCwgTVNHX0RPTlRXQUlUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MDguMTYzNDM2MzIxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDY3MDYxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBfX2lwX2FwcGVuZF9kYXRhYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9faXBfYXBwZW5kX2RhdGFgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQIHN0YWNrIGltcGxlbWVudGF0aW9uLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcyDigJMgdGhlIGBza19idWZmYCBzdHJ1Y3RzLCB0aGUgbmV0d29yayBoZWFkZXJzLCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zLi4uIEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIGZyYWdtZW50aW5nIGFuZCBzZW5kaW5nIElQIHBhY2tldHMsIHNwZWNpZmljYWxseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCdzIHByYWN0aWNhbGx5IHNjcmVhbWluZyBcImRhdGEgbWFuaXB1bGF0aW9uXCIgd2hpY2ggaW1wbGllcyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBuZWVkIHRvIGJlIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZS4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgTVRVcz8gV2hhdCBhYm91dCBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGF2b2lkZWQgb3Igb3B0aW1pemVkIHdpdGggdGVjaG5pcXVlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIEkvTz8gSSdtIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHNjZW5hcmlvcy5cblxuRnVydGhlcm1vcmUsIEnigJltIG1lbnRhbGx5IGNvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgaXQgd2l0aCBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucyBJ4oCZdmUgd29ya2VkIHdpdGggaW4gdGhlIHBhc3QsIG1heWJlIGluIG90aGVyIE9TIGtlcm5lbHMgb3IgbmV0d29yayBkZXZpY2UgZHJpdmVycy4gQXJlIHRoZXJlIGFueSBjb21tb24gcGl0ZmFsbHM/IEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgb3IgY2xldmVyIHRlY2huaXF1ZXMgZm9yIGhhbmRsaW5nIHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycz8gSeKAmW0gbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgZW5oYW5jZW1lbnQuXG5cbkknbSBnZXR0aW5nIHJlYWR5IHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaXRzZWxmLCBsb29raW5nIGZvciBlZmZpY2llbmN5LCB0aHJlYWQtc2FmZXR5LCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb2ludGVyIGFyaXRobWV0aWMgYW5kIGxpa2VseSBzb21lIGJpdHdpc2Ugb3BlcmF0aW9ucywgd2hpY2ggSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIGZvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb2RlJ3MgZWZmaWNpZW5jeSwgYW5kIGlmIG5vdCwgSSdsbCBiZSBkaXZpbmcgZGVlcCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgaW4gdGhlIHdheSBpdCBpcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIElQIHN0YWNrJ3Mgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWNrZXQgc2l6ZXMsIGZyYWdtZW50YXRpb24gb3B0aW9ucywgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoxNC4wMTAxNDUxNTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTM6XFx0c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4gOTU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIDk1NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuIDk1NjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGluZXRfY29yayAqY29yayxcXG4gOTU3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4gOTU4OlxcdFxcdFxcdFxcdCAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCxcXG4gOTU5OlxcdFxcdFxcdFxcdFxcdFxcdGludCBsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLFxcbiA5NjA6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbixcXG4gOTYxOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIDk2MjpcXHR7XFxuIDk2MzpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDk2NDpcXHRcXHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gTlVMTDtcXG4gOTY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDk2NjpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gY29yay1cXHUwMDNlb3B0O1xcbiA5Njc6XFx0XFx0aW50IGhoX2xlbjtcXG4gOTY4OlxcdFxcdGludCBleHRoZHJsZW47XFxuIDk2OTpcXHRcXHRpbnQgbXR1O1xcbiA5NzA6XFx0XFx0aW50IGNvcHk7XFxuIDk3MTpcXHRcXHRpbnQgZXJyO1xcbiA5NzI6XFx0XFx0aW50IG9mZnNldCA9IDA7XFxuIDk3MzpcXHRcXHRib29sIHpjID0gZmFsc2U7XFxuIDk3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4ZnJhZ2xlbiwgZnJhZ2hlYWRlcmxlbiwgbWF4bm9uZnJhZ3NpemU7XFxuIDk3NTpcXHRcXHRpbnQgY3N1bW1vZGUgPSBDSEVDS1NVTV9OT05FO1xcbiA5NzY6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKGNvcmstXFx1MDAzZWRzdCk7XFxuIDk3NzpcXHRcXHRib29sIHBhZ2VkLCBob2xkX3Rza2V5ID0gZmFsc2UsIGV4dHJhX3VyZWYgPSBmYWxzZTtcXG4gOTc4OlxcdFxcdHVuc2lnbmVkIGludCB3bWVtX2FsbG9jX2RlbHRhID0gMDtcXG4gOTc5OlxcdFxcdHUzMiB0c2tleSA9IDA7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdHNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpO1xcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcXG4gOTg0OlxcdFxcdG10dSA9IGNvcmstXFx1MDAzZWdzb19zaXplID8gSVBfTUFYX01UVSA6IGNvcmstXFx1MDAzZWZyYWdzaXplO1xcbiA5ODU6XFx0XFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldik7XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdGZyYWdoZWFkZXJsZW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIChvcHQgPyBvcHQtXFx1MDAzZW9wdGxlbiA6IDApO1xcbiA5OTA6XFx0XFx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXFx1MDAyNiB+NykgKyBmcmFnaGVhZGVybGVuO1xcbiA5OTE6XFx0XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0aWYgKGNvcmstXFx1MDAzZWxlbmd0aCArIGxlbmd0aCBcXHUwMDNlIG1heG5vbmZyYWdzaXplIC0gZnJhZ2hlYWRlcmxlbikge1xcbiA5OTQ6XFx0XFx0XFx0aXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtXFx1MDAzZWRhZGRyLCBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0LFxcbiA5OTU6XFx0XFx0XFx0XFx0ICAgICAgIG10dSAtIChvcHQgPyBvcHQtXFx1MDAzZW9wdGxlbiA6IDApKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDk5NzpcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdC8qXFxuMTAwMDpcXHRcXHQgKiB0cmFuc2hkcmxlbiBcXHUwMDNlIDAgbWVhbnMgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBmcmFnbWVudCBhbmQgd2Ugd2lzaFxcbjEwMDE6XFx0XFx0ICogaXQgd29uJ3QgYmUgZnJhZ21lbnRlZCBpbiB0aGUgZnV0dXJlLlxcbjEwMDI6XFx0XFx0ICovXFxuMTAwMzpcXHRcXHRpZiAodHJhbnNoZHJsZW4gXFx1MDAyNlxcdTAwMjZcXG4xMDA0OlxcdFxcdCAgICBsZW5ndGggKyBmcmFnaGVhZGVybGVuIFxcdTAwM2M9IG10dSBcXHUwMDI2XFx1MDAyNlxcbjEwMDU6XFx0XFx0ICAgIHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IChORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0lQX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuMTAwNjpcXHRcXHQgICAgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSkgfHwgY29yay1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuMTAwNzpcXHRcXHQgICAgKCFleHRoZHJsZW4gfHwgKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQX1RYX0NTVU0pKSlcXG4xMDA4OlxcdFxcdFxcdGNzdW1tb2RlID0gQ0hFQ0tTVU1fUEFSVElBTDtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoKSB7XFxuMTAxMTpcXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptc2cgPSBmcm9tO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRcXHRpZiAoZ2V0ZnJhZyA9PSBpcF9nZW5lcmljX2dldGZyYWcgXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjEwMTQ6XFx0XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpIFxcdTAwMjZcXHUwMDI2IG1zZy1cXHUwMDNlbXNnX3VidWYgIT0gc2tiX3pjb3B5KHNrYikpXFxuMTAxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0XFx0LyogTGVhdmUgdWFyZyBOVUxMIGlmIGNhbid0IHplcm9jb3B5LCBjYWxsZXJzIHNob3VsZFxcbjEwMTg6XFx0XFx0XFx0XFx0ICogYmUgYWJsZSB0byBoYW5kbGUgaXQuXFxuMTAxOTpcXHRcXHRcXHRcXHQgKi9cXG4xMDIwOlxcdFxcdFxcdFxcdGlmICgocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9TRykgXFx1MDAyNlxcdTAwMjZcXG4xMDIxOlxcdFxcdFxcdFxcdCAgICBjc3VtbW9kZSA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XFxuMTAyMjpcXHRcXHRcXHRcXHRcXHRwYWdlZCA9IHRydWU7XFxuMTAyMzpcXHRcXHRcXHRcXHRcXHR6YyA9IHRydWU7XFxuMTAyNDpcXHRcXHRcXHRcXHRcXHR1YXJnID0gbXNnLVxcdTAwM2Vtc2dfdWJ1ZjtcXG4xMDI1OlxcdFxcdFxcdFxcdH1cXG4xMDI2OlxcdFxcdFxcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBsZW5ndGgsIHNrYl96Y29weShza2IpLFxcbjEwMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4xMDI5OlxcdFxcdFxcdFxcdGlmICghdWFyZylcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMDMxOlxcdFxcdFxcdFxcdGV4dHJhX3VyZWYgPSAhc2tiX3pjb3B5KHNrYik7XFx0Lyogb25seSByZWYgb24gbmV3IHVhcmcgKi9cXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHIFxcdTAwMjZcXHUwMDI2XFxuMTAzMzpcXHRcXHRcXHRcXHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjEwMzQ6XFx0XFx0XFx0XFx0XFx0cGFnZWQgPSB0cnVlO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0emMgPSB0cnVlO1xcbjEwMzY6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDM3OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNrYl96Y29weV9zZXQoc2tiLCB1YXJnLCBcXHUwMDI2ZXh0cmFfdXJlZik7XFxuMTAzOTpcXHRcXHRcXHRcXHR9XFxuMTA0MDpcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHR9IGVsc2UgaWYgKChmbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCkge1xcbjEwNDI6XFx0XFx0XFx0aWYgKGluZXRfdGVzdF9iaXQoSERSSU5DTCwgc2spKVxcbjEwNDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xMDQ0OlxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHIFxcdTAwMjZcXHUwMDI2XFxuMTA0NTpcXHRcXHRcXHQgICAgZ2V0ZnJhZyA9PSBpcF9nZW5lcmljX2dldGZyYWcpXFxuMTA0NjpcXHRcXHRcXHRcXHQvKiBXZSBuZWVkIGFuIGVtcHR5IGJ1ZmZlciB0byBhdHRhY2ggc3R1ZmYgdG8gKi9cXG4xMDQ3OlxcdFxcdFxcdFxcdHBhZ2VkID0gdHJ1ZTtcXG4xMDQ4OlxcdFxcdFxcdGVsc2VcXG4xMDQ5OlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5NU0dfU1BMSUNFX1BBR0VTO1xcbjEwNTA6XFx0XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHRjb3JrLVxcdTAwM2VsZW5ndGggKz0gbGVuZ3RoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoxNC4wMTAyNjQ5MTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgwMDM1NzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJc3N1ZSB3aXRoIExhcmdlIFVEUCBQYWNrZXRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoaXMgcG90ZW50aWFsIG92ZXJmbG93LiBJbml0aWFsbHksIG15IHRoaW5raW5nIHdhczogaWYgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGlzIG1hc3NpdmUsIHRoZW4gYG10dWAgd291bGQgYmUgZXF1YWxseSBodWdlLCBhbmQgc28gYG1heG5vbmZyYWdzaXplYCB3b3VsZCBmb2xsb3cuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBjb3JrLVx1MDAzZWxlbmd0aCArIGxlbmd0aCBcdTAwM2UgbWF4bm9uZnJhZ3NpemUgLSBmcmFnaGVhZGVybGVuYCBtaWdodCBub3QgZXZlbiBraWNrIGluIGZvciBwYWNrZXQgc2l6ZXMgYmVsb3cgNjU1MzUsIHNvIHRoYXQgd2FzIGNvbmNlcm5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBjb3JrLVx1MDAzZWxlbmd0aGAgYW5kIGBsZW5ndGhgIGFyZSBqdXN0IGludGVnZXJzLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgY29kZSAqZG9lcyogY2FwIGBtdHVgIGF0IGBJUF9NQVhfTVRVYCAoNjU1MzUpLiBUaGVyZWZvcmUsIGBtYXhub25mcmFnc2l6ZWAgaXMgKmF0IG1vc3QqIDY1NTM1LiBTbyB0aGF0IG1lYW5zIGBjb3JrLVx1MDAzZWxlbmd0aCArIGxlbmd0aGAgKmNhbid0KiBnbyBiZXlvbmQgNjU1MzUgbWludXMgdGhlIGZyYWdtZW50YXRpb24gaGVhZGVyIGxlbmd0aC4gSWYgaXQgZG9lcywgdGhlbiB0aGUgY29kZSAqc2hvdWxkKiByZXR1cm4gYC1FTVNHU0laRWAuXG5cblRoZSB0ZXN0IHNjcmlwdCBzZWVtcyB0byBleHBlY3QgcHJlY2lzZWx5IHRoaXMgYmVoYXZpb3Igd2l0aCBpdHMgYHRyeS4uLmV4Y2VwdGAgYmxvY2ssIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGF0IGBFTVNHU0laRWAgZXJyb3IuIEJ1dCB0aGUgc2NyaXB0IHNheXMgc29tZXRoaW5nIGFib3V0IGEgV0FSTiBtZXNzYWdlIGJlaW5nIHByaW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrLiBSaWdodCwgaWYgYG10dWAgaXNuJ3QgY2FwcGVkLCBgbWF4bm9uZnJhZ3NpemVgIGdvZXMgYmV5b25kIDY1NTM1LiBTbywgYF9faXBfYXBwZW5kX2RhdGFgIGNvdWxkICphbGxvdyogYGNvcmstXHUwMDNlbGVuZ3RoYCB0byBleGNlZWQgNjU1MzUuIEl0IHdvdWxkIHRoZW4gYWxsb2NhdGUgYW4gU0tCIGFuZCBjb3B5IHRoZSBkYXRhLiBgdWRwX3NlbmRfc2tiYCBpcyBjYWxsZWQgYW5kIGNhbGxzIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoLCAqdGhhdCdzKiB3aGVyZSB0aGUgV0FSTiBpcyB0cmlnZ2VyZWQgYmVjYXVzZSBgbGVuYCBpcyBcdTAwM2U9IDY1NTM2LiBgdWRwX3NlbmRfc2tiYCBnb2VzIGFoZWFkIGFuZCBzZW5kcyB0aGUgcGFja2V0LiBTbywgaXQncyBhIFdBUk4sIGJ1dCB0aGUgZGF0YSBpcyBjb3JyZWN0bHkgY29waWVkLlxuXG5Ob3csIEkgd2FzIHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgaXQncyBva2F5IGJlY2F1c2UgYF9faXBfYXBwZW5kX2RhdGFgIGNvcGllcyBgbGVuZ3RoYCBieXRlcyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgU0tCLiBUaGUgU0tCIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbXkgY29uY2VybnMgYXJlIGxhaWQgdG8gcmVzdC4gVGhlIG9ubHkgaXNzdWUsIGFzIEkgc2VlIGl0IG5vdywgaXMgdGhhdCB0aGUgVURQIGxlbmd0aCBmaWVsZCAqd2lsbCogYmUgdHJ1bmNhdGVkIHRvIDE2IGJpdHMsIGFuZCB0aGUgSVAgbGVuZ3RoIGZpZWxkICptaWdodCogYWxzbyBnZXQgdHJ1bmNhdGVkIHRvbywgd2hpY2ggaXMgYSBwcm90b2NvbCB2aW9sYXRpb24uIEl0IHdhcnJhbnRzIGEgd2FybmluZywgYnV0IGl0J3Mgbm90IGFjdHVhbGx5IGEgbWVtb3J5IGxlYWsuIEknbSBnb2luZyB0byBjaGVjayBgaXA2X3NldHVwX2NvcmtgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MjIuODEwNjI1NzQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHR9XFxuMTQyMTpcXHRcXHR2Nl9jb3JrLVxcdTAwM2Vob3BfbGltaXQgPSBpcGM2LVxcdTAwM2VobGltaXQ7XFxuMTQyMjpcXHRcXHR2Nl9jb3JrLVxcdTAwM2V0Y2xhc3MgPSBpcGM2LVxcdTAwM2V0Y2xhc3M7XFxuMTQyMzpcXHRcXHR2Nl9jb3JrLVxcdTAwM2Vkb250ZnJhZyA9IGlwYzYtXFx1MDAzZWRvbnRmcmFnO1xcbjE0MjQ6XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZmxhZ3MgXFx1MDAyNiBEU1RfWEZSTV9UVU5ORUwpXFxuMTQyNTpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZXBtdHVkaXNjKSBcXHUwMDNlPSBJUFY2X1BNVFVESVNDX1BST0JFID9cXG4xNDI2OlxcdFxcdFxcdCAgICAgIFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KSA6IGRzdDZfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4xNDI3OlxcdFxcdGVsc2VcXG4xNDI4OlxcdFxcdFxcdG10dSA9IFJFQURfT05DRShucC1cXHUwMDNlcG10dWRpc2MpIFxcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xcbjE0Mjk6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpIDogZHN0Nl9tdHUoeGZybV9kc3RfcGF0aChcXHUwMDI2cnQtXFx1MDAzZWRzdCkpO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZWZyYWdfc2l6ZSk7XFxuMTQzMjpcXHRcXHRpZiAoZnJhZ19zaXplIFxcdTAwMjZcXHUwMDI2IGZyYWdfc2l6ZSBcXHUwMDNjIG10dSlcXG4xNDMzOlxcdFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4xNDM0OlxcdFxcbjE0MzU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuMTQzNjpcXHRcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuMTQzNzpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xcbjE0Mzg6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXFx1MDAzZWdzb19zaXplO1xcbjE0Mzk6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuMTQ0MDpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLm1hcmsgPSBpcGM2LVxcdTAwM2Vzb2NrYy5tYXJrO1xcbjE0NDE6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXFx1MDAzZXNvY2tjLnByaW9yaXR5O1xcbjE0NDI6XFx0XFx0c29ja190eF90aW1lc3RhbXAoc2ssIFxcdTAwMjZpcGM2LVxcdTAwM2Vzb2NrYywgXFx1MDAyNmNvcmstXFx1MDAzZWJhc2UudHhfZmxhZ3MpO1xcbjE0NDM6XFx0XFx0aWYgKGlwYzYtXFx1MDAzZXNvY2tjLnRzZmxhZ3MgXFx1MDAyNiBTT0NLQ01fRkxBR19UU19PUFRfSUQpIHtcXG4xNDQ0OlxcdFxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcXG4xNDQ1OlxcdFxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHNfb3B0X2lkID0gaXBjNi1cXHUwMDNlc29ja2MudHNfb3B0X2lkO1xcbjE0NDY6XFx0XFx0fVxcbjE0NDc6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5sZW5ndGggPSAwO1xcbjE0NDg6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50cmFuc21pdF90aW1lID0gaXBjNi1cXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcXG4xNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoyMi44MTA3NTYxMTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxOTk2MDg1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBJUHY2IFVEUCBKdW1ibyBGcmFtZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcDZfc2V0dXBfY29ya2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBNVFUgYW5kIFVEUCBzb2NrZXRzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBVRFAgbGVuZ3RoIGZpZWxkLiBXaGVuIGEgc29ja2V0IGlzIFVEUCwgdGhlIE1UVSBpcyBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCAoNjU1MzUpIGluIGBpcDZfc2V0dXBfY29ya2AuIFRoaXMga2VlcHMgYGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZWAgd2l0aGluIGJvdW5kcywgd2hpY2ggaW4gdHVybiBwcmV2ZW50cyBgc2tiLVx1MDAzZWxlbmAgZnJvbSBleGNlZWRpbmcgNjU1MzUgd2hlbiBhcHBlbmRpbmcgZGF0YSBpbiBgaXA2X2FwcGVuZF9kYXRhYC4gVGhpcywgaW1wb3J0YW50bHksIGF2b2lkcyB0aGUgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIHdhcm5pbmcgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2ggc2lnbmlmaWVzIHRoZSB0cnVuY2F0aW9uIG9mIHRoZSBVRFAgbGVuZ3RoIGZpZWxkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHdoZXRoZXIgdGhlcmUncyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIEJ1dCBubywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhlIGRhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHVzZXIgc3BhY2Ugb3IgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwsIGVuc3VyaW5nIGZ1bGwgaW5pdGlhbGl6YXRpb24uIFRoZSBwcm9ibGVtIGlzIHB1cmVseSBhbiBpbnRlZ2VyIG92ZXJmbG93IHRoYXQgcmVzdWx0cyBpbiBhIG1hbGZvcm1lZCBwYWNrZXQgd2l0aCBhIHRydW5jYXRlZCBsZW5ndGguIFRoZSBrZXJuZWwncyBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBpZiB0aGV5IHdlcmUgaGFwcGVuaW5nLiBCdXQgaGVyZSwgaXQncyBqdXN0IGFib3V0IHRoZSBsZW5ndGggZmllbGQgZ2V0dGluZyB0cnVuY2F0ZWQuXG5cbk5vdywgaWYgdGhlIGxlbmd0aCBmaWVsZCBnZXRzIHRydW5jYXRlZCwgY291bGQgYSByZWNlaXZlciBtaXNpbnRlcnByZXQgdGhlIHBhY2tldD8gQ291bGQgaXQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIHJlY2VpdmluZyBlbmQ/IElmIHRoZSByZWNlaXZlciBnZXRzIGEgcGFja2V0IHdpdGggYSAqc21hbGwqIGxlbmd0aCBmaWVsZCBidXQgYSAqbGFyZ2UqIHBheWxvYWQsIGl0J2xsIGp1c3QgaWdub3JlIHRoZSBleHRyYSBwYXlsb2FkLiBIb3dldmVyLCBpZiB0aGUgcmVjZWl2ZXIgZ2V0cyBhIHBhY2tldCB3aXRoIGEgKmxhcmdlKiBsZW5ndGggZmllbGQgYnV0IGEgKnNtYWxsKiBwYXlsb2FkLCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgcG90ZW50aWFsbHkgY2F1c2luZyBpdCB0byByZWFkIG91dCBvZiBib3VuZHMuIEJ1dCB3YWl0LCBpbiBvdXIgY2FzZSwgdGhlIGxlbmd0aCAqaXMqIHRydW5jYXRlZCAoZS5nLiwgNjU1NTYgYmVjb21lcyAyMCkuIFNvIHRoZSBhY3R1YWwgcGF5bG9hZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGxlbmd0aCBmaWVsZCBpbiB0aGUgcGFja2V0LiBTbyB0aGUgcmVjZWl2ZXIgd2lsbCBvbmx5IHNlZSBhIFVEUCBwYWNrZXQgb2YgbGVuZ3RoIDIwIGFuZCBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGdhcmJhZ2UuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGhlcmUuXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhlIHRlc3Qgc2NyaXB0IHVzZXMgYElQVjZfVExWX0pVTUJPYC4gVGhlIHRlc3Qgc2V0cyB1cCBhbiBJUHY2IGNvbm5lY3Rpb24gYW5kIGEgcmF3IFVEUCBzb2NrZXQgd2l0aCBhIGp1bWJvIHBheWxvYWQuIEl0IHVzZXMgYSBSQVcgc29ja2V0IHdpdGggYElQUFJPVE9fVURQYCBhbmQgc2VuZHMgYSBwYWNrZXQgd2l0aCBhIEp1bWJvIHBheWxvYWQgb3B0aW9uLiBIb2xkIG9uLi4uIGlmIGl0J3MgYSBSQVcgc29ja2V0LCB0aGVuIGBza19pc191ZHAoc2spYCBpcyBmYWxzZS4gU28sIHRoYXQgbWVhbnMgdGhlIE1UVSBpc24ndCBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCBmb3IgUkFXIHNvY2tldHMuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBPa2F5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgc2tfaXNfdWRwYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBwcm90ZWN0aW9uIHByb3ZpZGVkIGZvciBVRFAgc29ja2V0cyBtaWdodCBub3QgYXBwbHkgdG8gUkFXIHNvY2tldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTA5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MzUuMDEwMzY2NTI2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUxMjY1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2lzX3VkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9Mjk2NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTcxLVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTcyOnN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTczLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExOTc4PUJQRl9DQUxMXzMoYnBmX3NrX2xvb2t1cF9hc3NpZ24sIHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODctXFx0XFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFRDUCBzb2NrZXQgaW4gTElTVEVOICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODg6XFx0aWYgKHVubGlrZWx5KHNrIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VkcChzaykgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODktXFx0XFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFVEUCBzb2NrZXQgaW4gQ0xPU0UgKi9cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz00NDY1PWJvb2wgc2tfYnVzeV9sb29wX2VuZCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNDQ3MS1cXG5uZXQvY29yZS9zb2NrLmM6NDQ3MjpcXHRpZiAoc2tfaXNfdWRwKHNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2suYy00NDczLVxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ1ZHBfc2soc2spLVxcdTAwM2VyZWFkZXJfcXVldWUpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NDE9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0NC1cXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTQ1OlxcdGlmIChza19pc191ZHAoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ2LVxcdFxcdHJldHVybiBza19oYXNoZWQoc2spO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM0LVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxNDM1OlxcdGlmIChza19pc191ZHAoc2spKVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM2LVxcdFxcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMwMT1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwNy1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzA4OlxcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykpXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzA5LVxcdFxcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1VEUDtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMxNz1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNS1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9UQ1A7XFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzI2OlxcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykpXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzI3LVxcdFxcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzM3LVxcdCAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMzODpcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgc2tfaXNfdWRwKHNvY2stXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzOS1cXHQgICAgYWRkcmxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZCh0eXBlb2YoKmFkZHJlc3MpLCBzYV9mYW1pbHkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zNDY9c3RhdGljIGludCBob29rX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNjEtXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzYyOlxcdGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM2My1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9TRU5EX1VEUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MzYuOTYxNjM5OTA0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTMzNzEwNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhlIE1UVSBDYXBwaW5nIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2tfaXNfdWRwYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVRFAgc29ja2V0LiBGb3IgUkFXIHNvY2tldHMsIGl0J3MgZmFsc2UsIHNvIHRoZSBNVFUgaXNuJ3QgY2FwcGVkLiBUaGF0IG1lYW5zIHRoYXQgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGNvdWxkIHRlY2huaWNhbGx5IGJlIGdyZWF0ZXIgdGhhbiA2NTUzNSwgYnV0IHRoZSBrZXJuZWwgKmRvZXNuJ3QqIGNhbGwgYHVkcF9zZXRfbGVuX3Nob3J0YCBmb3IgUkFXIHNvY2tldHMgc2luY2UgdGhlIHVzZXIgaGFuZGxlcyB0aGF0LiBTbywgbm8gd2FybmluZy4gVGhlIGB0ZXN0X2lwdjZfanVtYm9gIHNjcmlwdCBpcyBsaWtlbHkganVzdCB2ZXJpZnlpbmcgdGhhdCBKdW1ibyBwYWNrZXRzIChvdmVyIDY1NTM1IGJ5dGVzKSBjb250aW51ZSB0byB3b3JrIGZpbmUgd2l0aCBSQVcgc29ja2V0cywgYW5kIHRoZSBwYXRjaCBkb2Vzbid0IGJyZWFrIHRoZW0uXG5cbk5vdywgZG9lcyB0aGlzIGhhdmUgYW55IEtNU0FOIHJlbGV2YW5jZT8gVGhlIHBhdGNoIG1vZGlmaWVzIE1UVSBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdpdGhpbiB0aGUgbGVuZ3RoIGZpZWxkcywgc3BlY2lmaWNhbGx5IGZvciBVRFAgcGFja2V0cyB3aGljaCBhcmUgY2FwcGVkIHRvIDY1NTM1IGJ5dGVzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBTS0IgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBkYXRhLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbGVuZ3RoIHRydW5jYXRpb24gdGhhdCBjYW4gbGVhZCB0byBhIG1hbGZvcm1lZCBwYWNrZXQgYW5kIGEga2VybmVsIHdhcm5pbmcuIEtBU0FOIGlzIGNlcnRhaW5seSBjYXBhYmxlIG9mIGNhdGNoaW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGlmIHRoZXkgc29tZWhvdyBvY2N1cnJlZCwgYnV0IHRoZXkgZG9uJ3QgKmhhcHBlbiogaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29kZSBhZ2FpbiB0byBiZSBzdXJlLiBJJ20gc2VlaW5nIHRoZSBjaGFuZ2VzLCBhbmQgdGhleSdyZSBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBqdXN0IGNhcHMgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgKDY1NTM1KSBvciBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gdmFyaW91cyBwbGFjZXMuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGxlbmd0aHMgZm9yIFVEUCBwYWNrZXRzLCB3aGljaCBoYXZlIGEgMTYtYml0IGxlbmd0aCBmaWVsZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuXG5cbkhlcmUncyBteSBmdWxsIEtNU0FOIHJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC4gVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNDIsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDo1Mi40OTUzNTI4NjlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cXG5cXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVxcdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVyZSB0aGUgTVRVIG9yIGZyYWdtZW50YXRpb24gc2l6ZSBjb3VsZCBleGNlZWQgNjU1MzUgYnl0ZXMgKHRoZSBtYXhpbXVtIHNpemUgcmVwcmVzZW50YWJsZSBieSB0aGUgMTYtYml0IFVEUCBsZW5ndGggZmllbGQpLiBXaGVuIGEgdXNlciBzZW5kcyBhIGxhcmdlIFVEUCBwYWNrZXQgb3ZlciBhbiBpbnRlcmZhY2Ugd2l0aCBhIHZlcnkgbGFyZ2UgTVRVLCB0aGUga2VybmVsIHdvdWxkIGF0dGVtcHQgdG8gY3JlYXRlIGEgc2luZ2xlIGxhcmdlIFNLQi4gVGhlIGxlbmd0aCBvZiB0aGlzIFNLQiB3b3VsZCB0aGVuIGJlIHRydW5jYXRlZCB3aGVuIHdyaXR0ZW4gdG8gdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGhlYWRlciwgdHJpZ2dlcmluZyBhIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpbiBgdWRwX3NldF9sZW5fc2hvcnQoKWAgYW5kIHJlc3VsdGluZyBpbiBhIG1hbGZvcm1lZCBwYWNrZXQuXFxuXFxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cXHUwMDNlZnJhZ3NpemVgIHRvIGBJUF9NQVhfTVRVYCAvIGBJUDZfTUFYX01UVWAgKDY1NTM1KSB0byBwcmV2ZW50IHRoaXMgb3ZlcmZsb3cuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgU0tCIGRhdGEgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyIHBheWxvYWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gbGVuZ3RoIG1pc2NhbGN1bGF0aW9ucyB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workfloww5wpf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 12:02:02 +0000 UTC FinishedAt: 2026-08-22 12:24:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "ead14217-b363-4b1c-96a2-7fc98a5fce6e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "udp_sendmsg", "udpv6_sendmsg", "ip_append_data", "ip6_append_data", "ip_make_skb", "ip6_make_skb", "ip6_forward" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cblxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggYzY5ZjFjODcxOTIyMy4uYjllOGQyYjc1OWU5YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NCw2ICYjNDM7Mzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbiYjNDM7XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuJiM0MztcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbiYjNDM7XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuIFxuIFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxuIFx0aWYgKGZyYWdfc2l6ZSBcdTAwMjZcdTAwMjYgZnJhZ19zaXplIFx1MDAzYyBtdHUpXG4gXHRcdG10dSA9IGZyYWdfc2l6ZTtcbiBcbiYjNDM7XHRpZiAoc2tfaXNfdWRwKHNrKSlcbiYjNDM7XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbiBcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbiBcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4gXHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggMGY1YzE3OGJjMjI0Yi4uYzZkMzMyYzkwYTU0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxuIFx0Y21zZ19zb19tYXJrLnNoIFxcXG4gXHRjbXNnX3NvX3ByaW9yaXR5LnNoIFxcXG4gXHRjbXNnX3RpbWUuc2ggXFxcbiYjNDM7XHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM1xuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxuJiM0MztcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgaXAsIE5ldE5TLCBOZXROU0VudGVyXG4mIzQzO2ltcG9ydCBlcnJub1xuJiM0MztpbXBvcnQgZ3ppcFxuJiM0MztpbXBvcnQgb3NcbiYjNDM7aW1wb3J0IHNvY2tldFxuJiM0MztpbXBvcnQgc3RydWN0XG4mIzQzO2ltcG9ydCBzdWJwcm9jZXNzXG4mIzQzO1xuJiM0MztcbiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTBcbiYjNDM7SVBfUE1UVURJU0NfUFJPQkUgPSAzXG4mIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDJcbiYjNDM7SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTRcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4mIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbXG4mIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksXG4mIzQzOyAgICAgICAgKGYmIzM5Oy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfSYjMzk7LCBvcGVuKSxcbiYjNDM7ICAgIF06XG4mIzQzOyAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICB3aXRoIG1ldGhvZChmaWxlbmFtZSwgJiMzOTtydCYjMzk7KSBhcyBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4mIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbiYjNDM7ICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJiMzOTtDT05GSUdfREVCVUdfTkVUJiMzOTspXG4mIzQzOyAgICBpZiByZXMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICBwcmludChcJiMzNDtXQVJOOiBDYW4mIzM5O3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XCYjMzQ7KVxuJiM0MzsgICAgZWxpZiBub3QgcmVzOlxuJiM0MzsgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzOTtDT05GSUdfREVCVUdfTkVUIGlzIG5vdCBzZXQmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYykgLVx1MDAzZSBib29sOlxuJiM0MzsgICAgZG1lc2cgPSBzdWJwcm9jZXNzLlBvcGVuKFsmIzM5O2RtZXNnJiMzOTtdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxuJiM0MzsgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dClcbiYjNDM7ICAgIGRtZXNnLndhaXQoKVxuJiM0MzsgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBpcCgmIzM5O2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXkmIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcChmJiMzOTtsaW5rIHNldCBkdW1teSBtdHUge210dX0mIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKVxuJiM0MzsgICAgZmxhZyA9ICYjMzk7LTYmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsmIzM5O1xuJiM0MzsgICAgbm9kYWQgPSAmIzM5O25vZGFkJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTtcbiYjNDM7ICAgIGFkZHJfbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7XG4mIzQzOyAgICBhZGRyX3JlbW90ZSA9ICYjMzk7ZmQwMDo6MiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4yJiMzOTtcbiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0mIzM5OywgbnM9bnMpXG4mIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjYoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxuJiM0MztcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxuJiM0MzsgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxuJiM0MzsgICAgICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAxMjM0KSlcbiYjNDM7ICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7XG4mIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfdjZfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiB0ZXN0X2lwdjQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgICAgICAgICAgdHJ5OlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7MTAuMC4wLjImIzM5OywgMTIzNCkpXG4mIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuJiM0MzsgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiB0aGUgY2hlY2sgaGFwcGVucyBhZnRlciB0aGUgV0FSTiBpcyBwcmludGVkLlxuJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU1TR1NJWkU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4mIzQzO1xuJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpXG4mIzQzO1xuJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCYjMzk7dWRwX3NlbmRfc2tiJiMzOTspLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxuJiM0MzsgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcbiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfQ0hFQ0tTVU0sIDYpXG4mIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuJiM0MzsgICAgICAgICAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJiMzOTshSEhISCYjMzk7LCAxMjM0LCAxMjM0LCAwLCAwKSAmIzQzOyBiJiMzOTsgJiMzOTsgKiA2NTUyOFxuJiM0MzsgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAwKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucylcbiYjNDM7XG4mIzQzO1xuJiM0MztpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjNDM7ICAgIGtzZnRfcnVuKFtcbiYjNDM7ICAgICAgICB0ZXN0X2lwdjYsXG4mIzQzOyAgICAgICAgdGVzdF9pcHY0LFxuJiM0MzsgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbiYjNDM7ICAgIF0pXG4mIzQzOyAgICBrc2Z0X2V4aXQoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1ZHBfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt1ZHB2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwNl9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcF9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X2ZvcndhcmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0zODQsNiAmIzQzOzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIG91dDoKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtMTMwMyw2ICYjNDM7MTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssCiAKIAljb3JrLSZndDtmcmFnc2l6ZSA9IGlwX3NrX3VzZV9wbXR1KHNrKSA/CiAJCQkgZHN0NF9tdHUoJmFtcDtydC0mZ3Q7ZHN0KSA6IFJFQURfT05DRShydC0mZ3Q7ZHN0LmRldi0mZ3Q7bXR1KTsKJiM0MzsJY29yay0mZ3Q7ZnJhZ3NpemUgPSBtaW4oY29yay0mZ3Q7ZnJhZ3NpemUsIElQX01BWF9NVFUpOwogCiAJaWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLSZndDtmcmFnc2l6ZSkpCiAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwpAQCAtMTQzMiw2ICYjNDM7MTQzMiw4IEBAIHN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssCiAJaWYgKGZyYWdfc2l6ZSAmYW1wOyZhbXA7IGZyYWdfc2l6ZSAmbHQ7IG10dSkKIAkJbXR1ID0gZnJhZ19zaXplOwogCiYjNDM7CWlmIChza19pc191ZHAoc2spKQomIzQzOwkJbXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpOwogCWNvcmstJmd0O2Jhc2UuZnJhZ3NpemUgPSBtdHU7CiAJY29yay0mZ3Q7YmFzZS5nc29fc2l6ZSA9IGlwYzYtJmd0O2dzb19zaXplOwogCWNvcmstJmd0O2Jhc2UudHhfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDBmNWMxNzhiYzIyNGIuLmM2ZDMzMmM5MGE1NDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCWNtc2dfc29fbWFyay5zaCBcCiAJY21zZ19zb19wcmlvcml0eS5zaCBcCiAJY21zZ190aW1lLnNoIFwKJiM0MzsJY29ya19mcmFnc2l6ZS5weSBcCiAJZG91YmxlX3VkcF9lbmNhcC5zaCBcCiAJZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFwKIAllY21wX3JlaGFzaC5zaCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpAQCAtMCwwICYjNDM7MSwxMzAgQEAKJiM0MzsjIS91c3IvYmluL2VudiBweXRob24zCiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyMgVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuCiYjNDM7CiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBpcCwgTmV0TlMsIE5ldE5TRW50ZXIKJiM0MztpbXBvcnQgZXJybm8KJiM0MztpbXBvcnQgZ3ppcAomIzQzO2ltcG9ydCBvcwomIzQzO2ltcG9ydCBzb2NrZXQKJiM0MztpbXBvcnQgc3RydWN0CiYjNDM7aW1wb3J0IHN1YnByb2Nlc3MKJiM0MzsKJiM0MzsKJiM0MztJUF9NVFVfRElTQ09WRVIgPSAxMAomIzQzO0lQX1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfTVRVX0RJU0NPVkVSID0gMjMKJiM0MztJUFY2X1BNVFVESVNDX0RPID0gMgomIzQzO0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzCiYjNDM7SVBWNl9UTFZfSlVNQk8gPSAxOTQKJiM0MzsKJiM0MzsKJiM0MztkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC0mZ3Q7IGJvb2wgfCBOb25lOgomIzQzOyAgICBmb3IgZmlsZW5hbWUsIG1ldGhvZCBpbiBbCiYjNDM7ICAgICAgICAoJiMzOTsvcHJvYy9jb25maWcuZ3omIzM5OywgZ3ppcC5vcGVuKSwKJiM0MzsgICAgICAgIChmJiMzOTsvYm9vdC9jb25maWcte29zLnVuYW1lKCkucmVsZWFzZX0mIzM5Oywgb3BlbiksCiYjNDM7ICAgIF06CiYjNDM7ICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICYjMzk7cnQmIzM5OykgYXMgY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBjb25maWc6CiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYmIzM5O3tvcHRpb259PXkmIzM5OzoKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQomIzQzOyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtJmd0OyBOb25lOgomIzQzOyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCYjMzk7Q09ORklHX0RFQlVHX05FVCYjMzk7KQomIzQzOyAgICBpZiByZXMgaXMgTm9uZToKJiM0MzsgICAgICAgIHByaW50KCYjMzQ7V0FSTjogQ2FuJiMzOTt0IHJlYWQga2VybmVsIGNvbmZpZzsgYXNzdW1pbmcgZGVidWcga2VybmVsLCBhbmQgcnVubmluZyB0aGUgdGVzdCYjMzQ7KQomIzQzOyAgICBlbGlmIG5vdCByZXM6CiYjNDM7ICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzk7Q09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC0mZ3Q7IGJvb2w6CiYjNDM7ICAgIGRtZXNnID0gc3VicHJvY2Vzcy5Qb3BlbihbJiMzOTtkbWVzZyYjMzk7XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKJiM0MzsgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWyYjMzk7Z3JlcCYjMzk7LCAmIzM5Oy1xJiMzOTssIGYmIzM5O1dBUk5JTkc6Lip7ZnVuY30mIzM5O10sIHN0ZGluPWRtZXNnLnN0ZG91dCkKJiM0MzsgICAgZG1lc2cud2FpdCgpCiYjNDM7ICAgIHJldHVybiByZXN1bHQucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDAKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXBfc2V0dXAobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLSZndDsgTm9uZToKJiM0MzsgICAgaXAoJiMzOTtsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcChmJiMzOTtsaW5rIHNldCBkdW1teSBtdHUge210dX0mIzM5OywgbnM9bnMpCiYjNDM7ICAgIGlwKCYjMzk7bGluayBzZXQgZHVtbXkgdXAmIzM5OywgbnM9bnMpCiYjNDM7ICAgIGZsYWcgPSAmIzM5Oy02JiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgbm9kYWQgPSAmIzM5O25vZGFkJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7JiMzOTsKJiM0MzsgICAgYWRkcl9sb2NhbCA9ICYjMzk7ZmQwMDo6MS82NCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OzEwLjAuMC4xLzI0JiMzOTsKJiM0MzsgICAgYWRkcl9yZW1vdGUgPSAmIzM5O2ZkMDA6OjImIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMiYjMzk7CiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0mIzM5OywgbnM9bnMpCiYjNDM7ICAgIGlwKGYmIzM5O3tmbGFnfSBuZWlnaCBhZGQge2FkZHJfcmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2NigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKQomIzQzOwomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBpcF9zZXR1cChucywgNjU1NzYsIFRydWUpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZDoKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19ETykKJiM0MzsgICAgICAgICAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgICAgICAgICAgZmQuc2VuZHRvKGImIzM5OyAmIzM5OyAqIDY1NTI4LCAoJiMzOTtmZDAwOjoyJiMzOTssIDEyMzQpKQomIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguCiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfdjZfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjQoKSAtJmd0OyBOb25lOgomIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSkKJiM0MzsKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7MTAuMC4wLjImIzM5OywgMTIzNCkpCiYjNDM7ICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBFTVNHU0laRTogdGhlIGNoZWNrIGhhcHBlbnMgYWZ0ZXIgdGhlIFdBUk4gaXMgcHJpbnRlZC4KJiM0MzsgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU1TR1NJWkU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKJiM0MzsKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigmIzM5O3VkcF9zZW5kX3NrYiYjMzk7KSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSkKJiM0MzsKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6CiYjNDM7ICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOgomIzQzOyAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpCiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfQ0hFQ0tTVU0sIDYpCiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfUFJPQkUpCiYjNDM7ICAgICAgICAgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCYjMzk7IUhISEgmIzM5OywgMTIzNCwgMTIzNCwgMCwgMCkgJiM0MzsgYiYjMzk7ICYjMzk7ICogNjU1MjgKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAwKSkKJiM0MzsKJiM0MzsgICAgICAgIGlwKCYjMzk7bGluayBkZWwgZHVtbXkmIzM5OywgbnM9bnMpCiYjNDM7CiYjNDM7CiYjNDM7aWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7OgomIzQzOyAgICBrc2Z0X3J1bihbCiYjNDM7ICAgICAgICB0ZXN0X2lwdjYsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjQsCiYjNDM7ICAgICAgICB0ZXN0X2lwdjZfanVtYm8sCiYjNDM7ICAgIF0pCiYjNDM7ICAgIGtzZnRfZXhpdCgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgbWFraW5nIHNvbWUgbW9kaWZpY2F0aW9ucyB0byB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgd2l0aGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhcm91bmQgZnJhZ21lbnQgc2l6ZSBhbmQgTVRVIGhhbmRsaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QsIHRhcmdldGVkIGNoYW5nZS4gV2UmIzM5O3JlIHRvdWNoaW5nIGBpcDZfcm91dGUuaGAsIGBpcF9vdXRwdXQuY2AsIGFuZCBgaXA2X291dHB1dC5jYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljLiBUaGUgYWRkaXRpb24gb2YgYSBzZWxmdGVzdCwgYGNvcmtfZnJhZ3NpemUucHlgLCBpcyBhIGdyZWF0IHNpZ247IGl0IGluZGljYXRlcyB0aGF0IHRoZSBpc3N1ZSB3ZSBhcmUgYWRkcmVzc2luZyBpcyBhIHJlYWwgb25lLCBhbmQgd2UgaGF2ZSBhIHRlc3QgdG8gdmVyaWZ5IHRoZSBmaXguCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmZzLCB0aGUga2V5IGNoYW5nZSBpcyB0aGF0IHdlIGFyZSBsaW1pdGluZyB0aGUgTVRVIG9yIGZyYWdtZW50IHNpemUgdG8gYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgIGluIGBpcF9zZXR1cF9jb3JrYCAoSVB2NCkgYW5kIGBpcDZfc2V0dXBfY29ya2AgKElQdjYpLCBhbmQgYWxzbyBpbiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIFRoaXMgc291bmRzIGxpa2Ugd2UgYXJlIHByZXZlbnRpbmcgc29tZSBraW5kIG9mIG92ZXJmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlZmluaXRpb25zIG9mIHRob3NlIGNvbnN0YW50cyB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGFjdHVhbCBsaW1pdHMgYXJlLiBJJiMzOTttIGFzc3VtaW5nIHRoZXNlIGFyZSBzdGFuZGFyZCB2YWx1ZXMsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgoKSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93LCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZnJhZ21lbnQgc2l6ZSBjYWxjdWxhdGlvbi4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBmb3IgSVB2NC9JUHY2IHBhY2tldCBvdXRwdXQsIHNvIHRoaXMgZml4IGlzIGltcG9ydGFudC4KCk15IG5leHQgc3RlcCBpcyB0byBpZGVudGlmeSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNhbGxlZC4gYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBzbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgd2l0aGluIHRoZSByZXNwZWN0aXZlIGBpcF9vdXRwdXQuY2AgYW5kIGBpcDZfb3V0cHV0LmNgIGZpbGVzLiBJIGJlbGlldmUgdGhleSB3aWxsIGJlIGNhbGxlZCBieSBmdW5jdGlvbnMgbGlrZSBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfYXBwZW5kX3BhZ2VgLCBhbmQgYGlwNl9hcHBlbmRfZGF0YWAsIHdoaWNoIGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgYXBwZW5kaW5nIHByb2Nlc3MuIEtub3dpbmcgdGhlc2UgY2FsbCBzaXRlcyBpcyBjcnVjaWFsLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgYXJlYXMgdG8gZm9jdXMgb24gaW4gZnV6emluZyBhbmQgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9zZXR1cF9jb3JrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEyOTMtXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMjk1LVx0XHRcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzczLVx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSkpIHtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XHRcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlLCBpcGMsIHJ0cCk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzc1LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTcyLVx0Y29yay1cdTAwM2VvcHQgPSBOVUxMO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTU3MzpcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgaXA2X3NldHVwX2NvcmtgIENhbGxlcnMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGEgcXVpY2sgc2NhbiB0byBzZWUgd2hvJiMzOTtzIGFjdHVhbGx5IHVzaW5nIHRoZSBgaXA2X3NldHVwX2NvcmtgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgY29udGV4dCBiZXR0ZXIgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFzc2Vzc2luZyBpdHMgaW1wYWN0IGFuZCB3aGVyZSBwb3RlbnRpYWwgcHJvYmxlbXMgbWlnaHQgb3JpZ2luYXRlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIHN1YnN5c3RlbXMgb3IgbW9kdWxlcyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIHBhcnRpY3VsYXIgcGllY2Ugb2YgY29kZS4gVGhpcyBxdWljayBjaGVjayB3aWxsIGdpdmUgbWUgYSB2aXRhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBpbmZsdWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X3NldHVwX2NvcmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTM3My1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTM3NS1cdFx0XHQgIHN0cnVjdCBpcGNtNl9jb29raWUgKmlwYzYsXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE4NzctXHRcdGRzdF9ob2xkKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTg3ODpcdFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFx1MDAyNmluZXQtXHUwMDNlY29yayxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVx0XHRcdFx0ICAgICBpcGM2LCBydCk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODctXHRjb3JrLVx1MDAzZWJhc2U2Lm9wdCA9IE5VTEw7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MjA4ODpcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4OS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYgRGF0YSBBcHBlbmQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgcGFja2V0IGNvbnN0cnVjdGlvbiBhbmQgZGF0YSBhcHBlbmRpbmcuIFRoZSBsaWtlbHkgc3VzcGVjdHMgaGVyZSBmb3IgYWRkaW5nIGRhdGEgdG8gSVB2NCBvciBJUHY2IHBhY2tldHMgYXJlIGRlZmluaXRlbHkgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGFuZCBgaXA2X21ha2Vfc2tiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgbmFtZXMuIFRoZXkgbGlrZWx5IGhhbmRsZSB0aGUgY29yZSBsb2dpYyBvZiBhc3NlbWJsaW5nIHRoZSBwYWNrZXQuCgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIsIHNvIGxldCYjMzk7cyBzaGlmdCBmb2N1cy4gSSYjMzk7bSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaG93IElQdjYmIzM5O3MgTVRVIGlzIGhhbmRsZWQsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY2IHBhdGguIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBzdGFjayBhcmUgcGF5aW5nIGF0dGVudGlvbiB0byBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MzUzPXN0YXRpYyBpbmxpbmUgYm9vbCBydDZfZHVwbGljYXRlX25leHRob3Aoc3RydWN0IGZpYjZfaW5mbyAqYSwgc3RydWN0IGZpYjZfaW5mbyAqYilcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjYtXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozNjc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjgtXHRcdFx0XHRcdFx0ICAgICBib29sIGZvcndhcmRpbmcpXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzkzLSAqXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTQ6ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTUtICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUyMT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtNjY0LVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjY2NTpcdG10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjYtXHRpZiAobXR1IFx1MDAzYyBJUFY2X01JTl9NVFUpXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjg4PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIHVuc2lnbmVkIGludCBpcDZfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC9pcHY2L3JvdXRlLmMtMzI4OS17XG5uZXQvaXB2Ni9yb3V0ZS5jOjMyOTA6XHRyZXR1cm4gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKTtcbm5ldC9pcHY2L3JvdXRlLmMtMzI5MS19XG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMDktXHRjYXNlIE5GUFJPVE9fSVBWNjpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6MTEwOlx0XHRmbG93X3R1cGxlLVx1MDAzZW10dSA9IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoZHN0LCB0cnVlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtMTExLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDcwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBJUHY2IE1UVSBhbmQgRm9yd2FyZGluZyBmb3IgUG90ZW50aWFsIFVEUCBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgSVB2NiBNVFUgYW5kIGZvcndhcmRpbmcgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXA2X210dWAsIGBpcDZfZm9yd2FyZGAsIGFuZCBgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGVgLCB3aGljaCBhbGwgc2VlbSB0byBiZSB1c2luZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIGBpcDZfbXR1YCBhcHBlYXJzIHRvIGJlIGFuIGluZGlyZWN0IGNhbGxhYmxlLiBgaXA2X2ZvcndhcmRgIGxvb2tzIGxpa2UgYSBwcmltZSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBmb3IgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2luZyB0aGlzIGJlaGF2aW9yLiBUaGUgc2VsZnRlc3QgbWVudGlvbnMgYENPTkZJR19ERUJVR19ORVRgLCBidXQgdGhhdCBzZWVtcyB0byBiZSBqdXN0IGZvciBhIHdhcm5pbmcgbWVzc2FnZSBhbmQgdGhlIGFjdHVhbCBmaXggaXMgd2l0aGluIHRoZSBjb3JlIElQdjQvSVB2NiBjb2RlLiBHb29kLCBubyBleG90aWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIFN0YW5kYXJkIGBORVRgLCBgSU5FVGAsIGFuZCBgSVBWNmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpOb3csIHRvIG5hcnJvdyBkb3duIHRoZSBzY29wZSwgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGlzIHNwZWNpZmljYWxseSBhbiBpc3N1ZSB3aXRoIFVEUC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYC4gVGhlIHNlbGZ0ZXN0IGlzIHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCBVRFAgbGVuZ3RoIG92ZXJmbG93cywgc28gdGhhdCYjMzk7cyBhIGNsZWFyIGluZGljYXRvci4gVGhlIHNlbGZ0ZXN0IGFsc28gbWVudGlvbnMgYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UgZnVuY3Rpb25zIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VkcF9zZW5kX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q9NT1Eb2N1bWVudGF0aW9uIHdyaXR0ZW4gYnkgVG9tIFphbnVzc2lcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExMi0gICAgICAgICBpcF9zZW5kX3NrYiYjNDM7MHgxYS8weDUwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTExMzogICAgICAgICB1ZHBfc2VuZF9za2ImIzQzOzB4MTczLzB4MmEwXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExNC0gICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ZjBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUzNy0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1Mzg6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxM2UvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTM5LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU1Ny0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NTg6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTU5LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU3NS0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NzY6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTc3LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU5My0gICAgICAgICAgICAgaXBfc2VuZF9za2ImIzQzOzB4MWEvMHg1MFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1OTQ6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYiYjNDM7MHgxNmQvMHgyNzBcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTk1LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZyYjNDM7MHgyYmYvMHg5ODBcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9MjM4PXZvaWQgb3Zwbl9lbmNyeXB0X3Bvc3Qodm9pZCAqZGF0YSwgaW50IHJldClcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjg0LVx0Y2FzZSBJUFBST1RPX1VEUDpcbmRyaXZlcnMvbmV0L292cG4vaW8uYzoyODU6XHRcdG92cG5fdWRwX3NlbmRfc2tiKHBlZXIsIHNvY2stXHUwMDNlc2ssIHNrYik7XG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtMjg2LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jPTI5Nj1zdGF0aWMgaW50IG92cG5fdWRwX291dHB1dChzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3QgZHN0X2NhY2hlICpjYWNoZSxcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNC0vKipcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzM1OiAqIG92cG5fdWRwX3NlbmRfc2tiIC0gcHJlcGFyZSBza2IgYW5kIHNlbmQgaXQgb3ZlciB2aWEgVURQXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNi0gKiBAcGVlcjogdGhlIGRlc3RpbmF0aW9uIHBlZXJcbi0tXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzOS0gKi9cbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzQwOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zNDEtXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L292cG4vdWRwLmg9MjA9dm9pZCBvdnBuX3VkcF9zb2NrZXRfZGV0YWNoKHN0cnVjdCBvdnBuX3NvY2tldCAqb3Zwbl9zb2NrKTtcbmRyaXZlcnMvbmV0L292cG4vdWRwLmgtMjEtXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5oOjIyOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaC0yMy1cdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmluY2x1ZGUvbmV0L3VkcC5oPTU4MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp1ZHBfcmN2X3NlZ21lbnQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3VkcC5oLTYwNC1cdCAqIHBhY2tldHMgaW4gdWRwX2dyb19jb21wbGV0ZV9zZWdtZW50LiBBcyBkb2VzIFVEUCBHU08sIHZlcmlmaWVkIGJ5XG5pbmNsdWRlL25ldC91ZHAuaDo2MDU6XHQgKiB1ZHBfc2VuZF9za2IuIEJ1dCB3aGVuIHRob3NlIHBhY2tldHMgYXJlIGxvb3BlZCBpbiBkZXZfbG9vcGJhY2tfeG1pdFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA2LVx0ICogdGhlaXIgaXBfc3VtbWVkIENIRUNLU1VNX05PTkUgaXMgY2hhbmdlZCB0byBDSEVDS1NVTV9VTk5FQ0VTU0FSWS5cbi0tXG5uZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcbm5ldC9pcHY0L3VkcC5jLTEwOTItXG5uZXQvaXB2NC91ZHAuYzoxMDkzOnN0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMTc5PWludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMTE5MC1cbm5ldC9pcHY0L3VkcC5jOjExOTE6XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlKTtcbm5ldC9pcHY0L3VkcC5jLTExOTItXG4tLVxubmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcdFx0XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmNvcmspO1xubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cdFx0Z290byBvdXQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5OjQ6IyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9ODc9ZGVmIHRlc3RfaXB2NCgpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMDU6ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigmIzM5O3VkcF9zZW5kX3NrYiYjMzk7KSwgJiMzOTtXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJiMzOTspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQIE1UVSBMaW1pdHMgaW4gdGhlIE5ldHdvcmtpbmcgU3RhY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0d28gdGhpbmdzIGp1bXAgb3V0IGF0IG1lLiBGaXJzdCwgYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSAqc3RhdGljKiDigJMgaW50ZXJlc3RpbmcsIHRoYXQgaW1wbGllcyB0aGV5JiMzOTtyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byB0aGlzIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNjb3BlIG9mIG1vZGlmaWNhdGlvbnMuIFNlY29uZCwgdGhlIGZ1bmN0aW9ucyBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYW5kIGBpcDZfbWFrZV9za2JgIGFyZSAqZXhwb3J0ZWQqIGFuZCBjYWxsZWQgZnJvbSBgdWRwX3NlbmRtc2dgIGFuZCBwcmVzdW1hYmx5IG90aGVyIHByb3RvY29scy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIGludGVyZmFjZSBwb2ludHMgd2UgbmVlZCB0byBjb25zaWRlciB3aGVuIGV2YWx1YXRpbmcgdGhpcyBjaGFuZ2UuCgpOb3csIHRoZSBwYXRjaCBleHBsaWNpdGx5IGxpbWl0cyB0aGUgTVRVIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZSwgYW5kIHRvIGRvIHRoYXQsIEkgbmVlZCB0byBrbm93IHRoZSB2YWx1ZXMgb2YgYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBMZXQgbWUgcXVpY2tseSBjaGVjayB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZC4gSSBoYXZlIGEgZmVlbGluZyBJJiMzOTt2ZSBzZWVuIHRoZXNlIGJlZm9yZSwgYnV0IGl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgYW5kIGNvbmZpcm0gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SVBfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlx0MTAwXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjM1OiNkZWZpbmUgU1NJUF9NQVhfTVRVXHRcdDY1NTM1XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM2LSNkZWZpbmUgU1NJUF9ERUZBVUxUX01UVVx0NDAwMFxuLS1cbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM9MTA3Mz1zdGF0aWMgaW50IHNzaV9wcm90b2NvbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYy0xMTIzLVx0c3NpLVx1MDAzZW5ldGRldi1cdTAwM2VtaW5fbXR1ID0gUEhPTkVUX01JTl9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jOjExMjQ6XHRzc2ktXHUwMDNlbmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBTU0lQX01BWF9NVFU7XG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jPTU3ND1zdGF0aWMgdm9pZCBiYXJldWRwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU4OC1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjU4OTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTU5MC1cdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTA4Mjc9bWx4c3dfc3BfcmlmX2lwaXBfbGJfdWxfcmlmX29wKHN0cnVjdCBtbHhzd19zcF9yaWYgKnVsX3JpZiwgYm9vbCBlbmFibGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTA4MzItXHRtbHhzd19yZWdfcml0cl9wYWNrKHJpdHJfcGwsIGVuYWJsZSwgTUxYU1dfUkVHX1JJVFJfTE9PUEJBQ0tfSUYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcdFx0XHQgICAgdWxfcmlmLVx1MDAzZXJpZl9pbmRleCwgdWxfcmlmLVx1MDAzZXZyX2lkLCBJUF9NQVhfTVRVKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVx0bWx4c3dfcmVnX3JpdHJfbG9vcGJhY2tfcHJvdG9jb2xfc2V0KHJpdHJfcGwsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYwLVx0ICovXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoxODYxOlx0ZGV2LVx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xODYyLVxuLS1cbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jPTE1OD1zdGF0aWMgdm9pZCBvdnBuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBJUFY0X01JTl9NVFU7XG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBPVlBOX0hFQURfUk9PTTtcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cbi0tXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM9NjQyNz1zdGF0aWMgdW5zaWduZWQgaW50IG1lcmdlYWJsZV9taW5fYnVmX2xlbihzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy9uZXQvdmlydGlvX25ldC5jLTY0MzAtXHR1bnNpZ25lZCBpbnQgcnFfc2l6ZSA9IHZpcnRxdWV1ZV9nZXRfdnJpbmdfc2l6ZSh2cSk7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcdHVuc2lnbmVkIGludCBwYWNrZXRfbGVuID0gdmktXHUwMDNlYmlnX3BhY2tldHMgPyBJUF9NQVhfTVRVIDogdmktXHUwMDNlZGV2LVx1MDAzZW1heF9tdHU7XG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMtNjQzMi1cdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBWTEFOX0hMRU4gJiM0MzsgcGFja2V0X2xlbjtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwLmg9NDc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2lwX3RvdGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbGludXgvaXAuaC01Mi0vKiBJUHY0IGRhdGFncmFtIGxlbmd0aCBpcyBzdG9yZWQgaW50byAxNmJpdCBmaWVsZCAodG90X2xlbikgKi9cbmluY2x1ZGUvbGludXgvaXAuaDo1MzojZGVmaW5lIElQX01BWF9NVFVcdDB4RkZGRlVcbmluY2x1ZGUvbGludXgvaXAuaC01NC1cbmluY2x1ZGUvbGludXgvaXAuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgaXBoX3NldF90b3RsZW4oc3RydWN0IGlwaGRyICppcGgsIHVuc2lnbmVkIGludCBsZW4pXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xuaW5jbHVkZS9saW51eC9pcC5oOjU3Olx0aXBoLVx1MDAzZXRvdF9sZW4gPSBsZW4gXHUwMDNjPSBJUF9NQVhfTVRVID8gaHRvbnMobGVuKSA6IDA7XG5pbmNsdWRlL2xpbnV4L2lwLmgtNTgtfVxuLS1cbmluY2x1ZGUvbmV0L2lwLmg9NDY3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxuaW5jbHVkZS9uZXQvaXAuaDo1MDA6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUxOT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbmluY2x1ZGUvbmV0L2lwLmgtNTI2LVx0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuaW5jbHVkZS9uZXQvaXAuaDo1Mjc6XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XG5pbmNsdWRlL25ldC9pcC5oLTUyOC1cdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbi0tXG5pbmNsdWRlL25ldC9pcC5oPTUzND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxuaW5jbHVkZS9uZXQvaXAuaC01NDUtXG5pbmNsdWRlL25ldC9pcC5oOjU0NjpcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVx1MDAzZW10dSksIElQX01BWF9NVFUpO1xuaW5jbHVkZS9uZXQvaXAuaC01NDctXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcdDY4XHRcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmg6NDE6I2RlZmluZSBFVEhfTUFYX01UVVx0MHhGRkZGVVx0XHQvKiA2NTUzNSwgc2FtZSBhcyBJUF9NQVhfTVRVXHQqL1xuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2V0aGVyLmgtNDItXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMxOS1cdGxlbiA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZXNwLVx1MDAzZXRhaWxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XG5uZXQvaXB2NC9lc3A0LmM6MzIwOlx0aWYgKGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSBcdTAwM2UgSVBfTUFYX01UVSlcbm5ldC9pcHY0L2VzcDQuYy0zMjEtXHRcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XG4tLVxubmV0L2lwdjQvZXNwNC5jPTM0MD1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zNDktXHRsZW4gPSBza2ItXHUwMDNlbGVuICYjNDM7IGVzcC1cdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xubmV0L2lwdjQvZXNwNC5jOjM1MDpcdGlmIChsZW4gXHUwMDNlIElQX01BWF9NVFUpXG5uZXQvaXB2NC9lc3A0LmMtMzUxLVx0XHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zNzg9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0zODktXG5uZXQvaXB2NC9pZ21wLmM6MzkwOlx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaWdtcC5jLTM5MS1cdHdoaWxlICgxKSB7XG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUzPXN0YXRpYyBpbnQgX19pcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVx0ZXh0aGRybGVuID0gIXNrYiA/IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUF9NQVhfTVRVIDogY29yay1cdTAwM2VmcmFnc2l6ZTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk4NS1cdHBhZ2VkID0gISFjb3JrLVx1MDAzZWdzb19zaXplO1xuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTk5MC1cdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFx1MDAyNiB+NykgJiM0MzsgZnJhZ2hlYWRlcmxlbjtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk5MTpcdG1heG5vbmZyYWdzaXplID0gaXBfc2tfaWdub3JlX2RmKHNrKSA/IElQX01BWF9NVFUgOiBtdHU7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzMDUtXHRcdFx0IGRzdDRfbXR1KFx1MDAyNnJ0LVx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VtdHUpO1xubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA3LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxNi1cdFx0aGxlbiA9IHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3Olx0XHRtdHUgPSBtaW4odGRldi1cdTAwM2VtdHUsIElQX01BWF9NVFUpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE4LVx0fVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTMyOT1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHRfaGxlbjtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MTA1Nz1pbnQgaXBfdHVubmVsX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cdGludCB0X2hsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEwNjE6XHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMDYyLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjEzLVx0aWYgKHRiW0lGTEFfTVRVXSkge1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MTIxNDpcdFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0xMjE1LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNDY0LVx0aWYgKGxpa2VseSghbXR1KSlcbm5ldC9pcHY0L3JvdXRlLmM6MTQ2NTpcdFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXHUwMDNlbXR1KSwgSVBfTUFYX01UVSk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjYtXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM3MT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVx0bGVuID0gc2tiLVx1MDAzZWxlbiAmIzQzOyBlc3AtXHUwMDNldGFpbGVuIC0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTtcbm5ldC9pcHY2L2VzcDYuYzozODE6XHRpZiAobGVuIFx1MDAzZSBJUF9NQVhfTVRVKVxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVNU0dTSVpFKTtcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVx0fSBlbHNlIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzcwOlx0XHRpZiAobmV3X210dSBcdTAwM2UgSVBfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc3MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTkxOS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjkyMDpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTIxLVx0ZGV2LVx1MDAzZWZsYWdzIHw9IElGRl9OT0FSUDtcbi0tXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDUtXHRkZXYtXHUwMDNlbWluX210dVx0XHQ9IEVUSF9NSU5fTVRVO1xubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jOjc0NjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVBfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXHRkZXYtXHUwMDNlZmxhZ3MgXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMC1cdGlmICgheHRmcy1cdTAwM2VjZmcuZG9udF9mcmFnKVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MTE6XHRcdHJldHVybiB4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQgPyBJUF9NQVhfTVRVIDogSVA2X01BWF9NVFU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtOTU2LVx0XHR4LVx1MDAzZXRmY3BhZCA9IG5sYV9nZXRfdTMyKGF0dHJzW1hGUk1BX1RGQ1BBRF0pO1xubmV0L3hmcm0veGZybV91c2VyLmM6OTU3Olx0XHRpZiAoeC1cdTAwM2V0ZmNwYWQgXHUwMDNlIElQX01BWF9NVFUpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTk1OC1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0V4Y2Vzc2l2ZSBURkMgcGFkZGluZ1wmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqTVRVIExpbWl0cyAtIEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIGxldCBtZSBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IHZhbHVlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBJUF9NQVhfTVRVYCBpcyBkZWZpbmVkIGFzIGAweEZGRkZVYC4gVGhhdCYjMzk7cyBhIHN0YW5kYXJkLCBleHBlY3RlZCB2YWx1ZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBteSBtaW5kIGp1bXBzIHRvIElQdjYuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgSVA2X01BWF9NVFVgIGlzIGFsc28gcHJvYmFibHkgYDB4RkZGRlVgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhdCBsZWFzdCBpbml0aWFsbHkuIEJ1dCB3YWl0IGEgc2Vjb25kLCBJIG5lZWQgdG8gYmUgYSBsaXR0bGUgbW9yZSBjYXJlZnVsLCBnaXZlbiB0aGF0IHdlIGhhdmUganVtYm9ncmFtcyB0byBjb25zaWRlciBpbiBJUHY2LiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSBpZiB0aGF0IHZhbHVlIGlzIHRydWx5IHN0YW5kYXJkIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBsYXJnZXIgdGhhbiB0aGUgSVB2NCBsaW1pdC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUDZfTUFYX01UVSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92cmYuYz0xNTYxPXN0YXRpYyB2b2lkIHZyZl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3ZyZi5jLTE2MDAtXHRkZXYtXHUwMDNlbWluX210dSA9IElQVjZfTUlOX01UVTtcbmRyaXZlcnMvbmV0L3ZyZi5jOjE2MDE6XHRkZXYtXHUwMDNlbWF4X210dSA9IElQNl9NQVhfTVRVO1xuZHJpdmVycy9uZXQvdnJmLmMtMTYwMi1cdGRldi1cdTAwM2VtdHUgPSBkZXYtXHUwMDNlbWF4X210dTtcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xNT1zdHJ1Y3Qgcm91dGVfaW5mbyB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDMtICovXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDo0NDojZGVmaW5lIElQNl9NQVhfTVRVICgweEZGRkYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSlcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQ1LVxuLS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTM2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODYtb3V0OlxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6Mzg3Olx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM4OC1cbi0tXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD00MDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDI0LVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6NDI1Olx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQyNi1cdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNS1cdGlmIChza19pc191ZHAoc2spKVxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE0MzY6XHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM3LVx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYz0xNDUzPXN0YXRpYyBpbnQgX19pcDZfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDg5LVx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTQ5MDpcdG10dSA9IGNvcmstXHUwMDNlZ3NvX3NpemUgPyBJUDZfTUFYX01UVSA6IGNvcmstXHUwMDNlZnJhZ3NpemU7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQ5MS1cdG9yaWdfbXR1ID0gbXR1O1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xNDY2PXN0YXRpYyB2b2lkIGlwNl90bmxfbGlua19jb25maWcoc3RydWN0IGlwNl90bmwgKnQpXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjEtXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGlwX3R1bm5lbF9saW1pdF9oZWFkcm9vbShoZWFkcm9vbSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTUyMjpcdFx0XHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHRkZXYtXHUwMDNlbXR1LCBJUDZfTUFYX01UVSk7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTUyMy1cbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY2LVx0aWYgKHRubC1cdTAwM2VwYXJtcy5wcm90byA9PSBJUFBST1RPX0lQVjYgfHwgdG5sLVx1MDAzZXBhcm1zLnByb3RvID09IDApIHtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzY3Olx0XHRpZiAobmV3X210dSBcdTAwM2UgSVA2X01BWF9NVFUgLSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuKVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjgtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE5Mzc9aXA2X3RubF9kZXZfaW5pdF9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2MS1cdGRldi1cdTAwM2VtaW5fbXR1ID0gRVRIX01JTl9NVFU7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk2MjpcdGRldi1cdTAwM2VtYXhfbXR1ID0gSVA2X01BWF9NVFUgLSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE5NjMtXG4tLVxubmV0L2lwdjYvcm91dGUuYz0xNjM5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmliNl9tdHUoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNjU5LVxubmV0L2lwdjYvcm91dGUuYzoxNjYwOlx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbm5ldC9pcHY2L3JvdXRlLmMtMTY2MS1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzMDI9dTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzMyOS1cbm5ldC9pcHY2L3JvdXRlLmM6MzMzMDpcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMzEtb3V0OlxuLS1cbm5ldC9pcHY2L3NpdC5jPTE0MTk9c3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvc2l0LmMtMTQzMS1cdGRldi1cdTAwM2VtaW5fbXR1XHRcdD0gSVBWNl9NSU5fTVRVO1xubmV0L2lwdjYvc2l0LmM6MTQzMjpcdGRldi1cdTAwM2VtYXhfbXR1XHRcdD0gSVA2X01BWF9NVFUgLSB0X2hsZW47XG5uZXQvaXB2Ni9zaXQuYy0xNDMzLVx0ZGV2LVx1MDAzZWZsYWdzXHRcdD0gSUZGX05PQVJQO1xuLS1cbm5ldC9pcHY2L3NpdC5jPTE1NDk9c3RhdGljIGludCBpcGlwNl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjYvc2l0LmMtMTU4NS1cdFx0aWYgKG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L3NpdC5jOjE1ODY6XHRcdCAgICBtdHUgXHUwMDNjPSBJUDZfTUFYX01UVSAtIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG5uZXQvaXB2Ni9zaXQuYy0xNTg3LVx0XHRcdGRldi1cdTAwM2VtdHUgPSBtdHU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVx0aWYgKCF4dGZzLVx1MDAzZWNmZy5kb250X2ZyYWcpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcdFx0cmV0dXJuIHgtXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVx0cmV0dXJuIF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCBvdXRlcl9tdHUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz04Mz1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y0W10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTE5NC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTU6I2lmbmRlZiBJUDZfTUFYX01UVVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjE5NjojZGVmaW5lIElQNl9NQVhfTVRVXHQoRVRIX01BWF9NVFUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0xOTctI2VuZGlmXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jPTE5OT1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y2W10gPSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1NS1cdFx0Lyogc2VuZCBNQVggc2VncyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI1NjpcdFx0LnRsZW4gPSAoSVA2X01BWF9NVFUgLyBDT05TVF9NU1NfVjYpICogQ09OU1RfTVNTX1Y2LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1Ny1cdFx0Lmdzb19sZW4gPSBDT05TVF9NU1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjU4Olx0XHQucl9udW1fbXNzID0gKElQNl9NQVhfTVRVIC8gQ09OU1RfTVNTX1Y2KSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNTktXHR9LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjItXHRcdC8qIHNlbmQgTUFYIGJ5dGVzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjYzOlx0XHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2LFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI2NC1cdFx0Lmdzb19sZW4gPSBDT05TVF9NU1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjY1LVx0XHQucl9udW1fbXNzID0gQ09OU1RfTUFYX1NFR1NfVjYsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjY2Olx0XHQucl9sZW5fbGFzdCA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2IC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjctXHRcdFx0ICAgICAgKENPTlNUX01BWF9TRUdTX1Y2ICogQ09OU1RfTVNTX1Y2KSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcwLVx0XHQvKiBzZW5kIE1BWCAmIzQzOyAxOiBmYWlsICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjcxOlx0XHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2ICYjNDM7IDEsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcyLVx0XHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKSBMaW1pdHMgaW4gSVB2NioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZGVhbGluZyB3aXRoIE1UVSBsaW1pdHMgaW4gSVB2Ni4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBsaW1pdGluZyB0aGUgTVRVIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCwgd2hlcmUgYElQNl9NQVhfTVRVYCBpcyBjYWxjdWxhdGVkIGFzIGAweEZGRkYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAuIFRoaXMgbG9va3MgcmlwZSBmb3IgZnV6emluZy4gQW55IHRpbWUgdGhlcmUmIzM5O3MgYSBoYXJkIGxpbWl0LCB0aGVyZSYjMzk7cyBhIGNoYW5jZSB0byB0cmlnZ2VyIGFuIG92ZXJmbG93IG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGUgY29yZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkgcHJvYmFibHkgcmVzaWRlcyBpbiB0aGUgZnVuY3Rpb25zIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCwgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhcyBJIGhhZCBwcmV2aW91c2x5IGNvbnNpZGVyZWQuIEZvY3VzaW5nIG9uIHBhY2tldCBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBpcyB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gdGhhdCwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGBpcDZfbWFrZV9za2JgLCBhbmQgYGlwNl9mb3J3YXJkYC4KCldhaXQgYSBtaW51dGUsIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIGFyZSBleHBvcnRlZD8gVGhhdCBtZWFucyB0aGV5IGFyZSB1c2VkIGJ5IGEgdG9uIG9mIGRpZmZlcmVudCBwcm90b2NvbHMsIGluY2x1ZGluZyBVRFAsIElDTVAsIGFuZCBSQVcuIFRoYXQgYnJvYWRlbnMgdGhlIGF0dGFjayBzdXJmYWNlIHNpZ25pZmljYW50bHkuIFRoZSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBVRFAgbGVuZ3RoIG92ZXJmbG93cywgd2hpY2ggaXMgcmVhbGx5IGludGVyZXN0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIGB1ZHBfc2VuZG1zZ2AgYW5kIGB1ZHB2Nl9zZW5kbXNnYCBhcmUgc29saWQgZW50cnkgcG9pbnRzIGZvciBVRFAuIEJpbmdvISBUaGV5IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gUGx1cywgaXQgd291bGQgYmUgdXNlZnVsIHRvIGFsc28gdGFyZ2V0IGBpcDZfZm9yd2FyZGAgZm9yIGFueSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuCgpKdXN0IHRvIGJlIHN1cmUsIGxldCBtZSBnZXQgdGhlIGV4YWN0IG5hbWVzIG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBpbnRlcmVzdGVkIGluOgoKKiAgIGB1ZHBfc2VuZG1zZ2AKKiAgIGB1ZHB2Nl9zZW5kbXNnYAoqICAgYGlwX2FwcGVuZF9kYXRhYAoqICAgYGlwNl9hcHBlbmRfZGF0YWAKKiAgIGBpcF9tYWtlX3NrYmAKKiAgIGBpcDZfbWFrZV9za2JgCiogICBgaXA2X2ZvcndhcmRgCgpBbHJpZ2h0LCB0aW1lIHRvIHN0YXJ0IGZ1enppbmchIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzLCBpbmRlZWQsIGB1ZHB2Nl9zZW5kbXNnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdD0xMj1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdDoxMzpzdHJ1Y3QgaXB2Nl9mbF9zb2NrbGlzdCogaXB2Nl9mbF9saXN0ICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfdjZfY29ubmVjdCxfX2lwNl9kYXRhZ3JhbV9jb25uZWN0LHVkcHY2X3NlbmRtc2cscmF3di4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTQtYmUxNiAgICAgICAgICAgICAgICAgICAgIGluZXRfc3BvcnQgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Y3BfdHJhbnNtaXRfc2tiXG4tLVxuaW5jbHVkZS9uZXQvdWRwLmg9Mjc2PUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKSk7XG5pbmNsdWRlL25ldC91ZHAuaC0yNzctXG5pbmNsdWRlL25ldC91ZHAuaDoyNzg6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pO1xuaW5jbHVkZS9uZXQvdWRwLmgtMjc5LUlORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoaW50IHVkcHY2X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tLVxubmV0L2lwdjYvYWZfaW5ldDYuYz02MzE9aW50IGluZXQ2X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cdHByb3QgPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcHJvdCk7XG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY0MTpcdHJldHVybiBJTkRJUkVDVF9DQUxMXzIocHJvdC1cdTAwM2VzZW5kbXNnLCB0Y3Bfc2VuZG1zZywgdWRwdjZfc2VuZG1zZyxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQyLVx0XHRcdCAgICAgICBzaywgbXNnLCBzaXplKTtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MTctXHRcdFx0ICogYnV0IHRoZXJlIGlzIHN0aWxsIGEgcmFjZS4gIFNlZSB0aGUgbG9ja2xlc3MgcGF0aFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjYxODpcdFx0XHQgKiBpbiB1ZHB2Nl9zZW5kbXNnKCkgYW5kIGlwdjZfbG9jYWxfcnhwbXR1KCkuXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE5LVx0XHRcdCAqL1xuLS1cbm5ldC9pcHY2L3VkcC5jPTEzNTY9c3RhdGljIGludCB1ZHBfdjZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTEzNzMtXHR1aC1cdTAwM2VkZXN0ID0gZmw2LVx1MDAzZWZsNl9kcG9ydDtcbm5ldC9pcHY2L3VkcC5jOjEzNzQ6XHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xubmV0L2lwdjYvdWRwLmMtMTM3NS1cdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTE0Mzg9c3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdWRwLmMtMTQ1OC1cbm5ldC9pcHY2L3VkcC5jOjE0NTk6aW50IHVkcHY2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvaXB2Ni91ZHAuYy0xNDYwLXtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xNzc0LX1cbm5ldC9pcHY2L3VkcC5jOjE3NzU6RVhQT1JUX1NZTUJPTCh1ZHB2Nl9zZW5kbXNnKTtcbm5ldC9pcHY2L3VkcC5jLTE3NzYtXG4tLVxubmV0L2lwdjYvdWRwLmM9MTg5NT1zdHJ1Y3QgcHJvdG8gdWRwdjZfcHJvdCA9IHtcbi0tXG5uZXQvaXB2Ni91ZHAuYy0xOTA2LVx0LmdldHNvY2tvcHRcdFx0PSB1ZHB2Nl9nZXRzb2Nrb3B0LFxubmV0L2lwdjYvdWRwLmM6MTkwNzpcdC5zZW5kbXNnXHRcdD0gdWRwdjZfc2VuZG1zZyxcbm5ldC9pcHY2L3VkcC5jLTE5MDgtXHQucmVjdm1zZ1x0XHQ9IHVkcHY2X3JlY3Ztc2csXG4tLVxubmV0L3J4cnBjL291dHB1dC5jPTE5PXNzaXplX3QgZG9fdWRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29ja2V0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L3J4cnBjL291dHB1dC5jLTI5LVx0XHRcdH1cbm5ldC9yeHJwYy9vdXRwdXQuYzozMDpcdFx0XHRyZXR1cm4gdWRwdjZfc2VuZG1zZyhzaywgbXNnLCBsZW4pO1xubmV0L3J4cnBjL291dHB1dC5jLTMxLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzIzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFVEUHY2IFNlbmQgSXNzdWUqKgoKT2theSwgeWVzLCBgdWRwdjZfc2VuZG1zZ2Agc2VlbXMgdG8gYmUgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGZvY3VzIG9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiB0byBlbnN1cmUgdGhpcyBmaXggd2lsbCB3b3JrIGNvcnJlY3RseSBpbiBhbGwgcmVsZXZhbnQgZW52aXJvbm1lbnRzLgoKVGhlIGV4aXN0aW5nIHNlbGZ0ZXN0IGxldmVyYWdlcyBgQ09ORklHX0RFQlVHX05FVGAgdG8gbG9vayBmb3Igd2FybmluZ3MgaW4gdGhlIGtlcm5lbCBsb2dzLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yLCBidXQgdGhlIGFjdHVhbCBmaXggaXRzZWxmIGFwcGVhcnMgdG8gYmUgc2l0dWF0ZWQgZGVlcCB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IG91dHB1dCBjb2RlOiBzcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aC4gT2YgY291cnNlLCB0aGV5JiMzOTtyZSBjb21waWxlZCB3aGVuIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGVuYWJsZWQsIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCBjb25maWdzIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBlbmFibGVkIGluIG1vc3QgYnVpbGRzLiBTbywgSSB3aWxsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRob3NlIGluIG15IGNvbnNpZGVyYXRpb25zLgoKSG9sZCBvbiwgSSBzZWUgdGhhdCB0aGUgc2VsZnRlc3QsIHNwZWNpZmljYWxseSBgY29ya19mcmFnc2l6ZS5weWAsIGlzIHV0aWxpemluZyBgSVBfTVRVX0RJU0NPVkVSYCBhbmQgYElQVjZfTVRVX0RJU0NPVkVSYCBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyB1c2VzIGBJUFY2X1RMVl9KVU1CT2AgZm9yIGhvcC1ieS1ob3Agb3B0aW9ucy4gVGhhdCB0cmlnZ2VycyBhIG5ldyB0aG91Z2h0LiBJcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gSVB2NiBqdW1ib2dyYW1zIHRoYXQgSSBzaG91bGQgYmUgZG91YmxlIGNoZWNraW5nPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgaW50byB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X1RMVl9KVU1CTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvaW42Lmg9NzE9c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvaW42LmgtMTQ4LSNkZWZpbmUgSVBWNl9UTFZfSU9BTVx0XHQ0OVx0LyogUkZDIDk0ODYgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaDoxNDk6I2RlZmluZSBJUFY2X1RMVl9KVU1CT1x0XHQxOTRcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNTAtI2RlZmluZSBJUFY2X1RMVl9IQU9cdFx0MjAxXHQvKiBob21lIGFkZHJlc3Mgb3B0aW9uICovXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTExND1zdGF0aWMgYm9vbCBpcDZfcGFyc2VfdGx2KGJvb2wgaG9wYnlob3AsXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTE4MS1cdFx0XHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9leHRoZHJzLmM6MTgyOlx0XHRcdFx0Y2FzZSBJUFY2X1RMVl9KVU1CTzpcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODMtXHRcdFx0XHRcdGlmICghaXB2Nl9ob3BfanVtYm8oc2tiLCBvZmYpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYz0xODI9aW50IG5mX2lwNl9jaGVja19oYmhfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqcGxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjExLVxubmV0L25ldGZpbHRlci91dGlscy5jOjIxMjpcdFx0aWYgKG5oW29mZl0gPT0gSVBWNl9UTFZfSlVNQk8pIHtcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYy0yMTMtXHRcdFx0dTMyIHBrdF9sZW47XG4tLVxubmV0L3NjaGVkL2FjdF9jc3VtLmM9NDUyPXN0YXRpYyBpbnQgdGNmX2NzdW1faXB2Nl9ob3BvcHRzKHN0cnVjdCBpcHY2X29wdF9oZHIgKmlwNnhoLCB1bnNpZ25lZCBpbnQgaXhobCxcbi0tXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjUtXHRcdFx0YnJlYWs7XG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo0NjY6XHRcdGNhc2UgSVBWNl9UTFZfSlVNQk86XG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjctXHRcdFx0b3B0bGVuID0geGhbb2ZmICYjNDM7IDFdICYjNDM7IDI7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MjA9SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5OjIxOklQVjZfVExWX0pVTUJPID0gMTk0XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0yMi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weT0xMDg9ZGVmIHRlc3RfaXB2Nl9qdW1ibygpIC1cdTAwM2UgTm9uZTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMTMtICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk6MTE0OiAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMTE1LSAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDM2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBKdW1ib2dyYW0gUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3Mgbm8gc3BlY2lhbCBjb25maWd1cmF0aW9uIG5lZWRlZCBmb3IganVtYm9ncmFtczsgaXQmIzM5O3MgYWxsIGJha2VkIGludG8gc3RhbmRhcmQgSVB2Niwgd2hpY2ggaXMgZ29vZC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zOiBgdWRwX3NlbmRtc2dgLCBgdWRwdjZfc2VuZG1zZ2AsIGBpcF9hcHBlbmRfZGF0YWAsIGBpcDZfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X21ha2Vfc2tiYCwgYW5kIGBpcDZfZm9yd2FyZGAuIFRoZXNlIGFyZSB0aGUgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4KClRoZSBpc3N1ZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBpcyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gZGVhbGluZyB3aXRoIGV4dHJlbWVseSBsYXJnZSBNVFVzLCBzcGVjaWZpY2FsbHkganVtYm9ncmFtcyBvciBzY2VuYXJpb3Mgd2l0aCBhcnRpZmljaWFsbHkgaW5mbGF0ZWQgTVRVcy4gVGhlIGZpeCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiByZXN0cmljdCB0aGUgTVRVLCBib3RoIGZvciBJUHY0IGFuZCBJUHY2LCB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAgcmVzcGVjdGl2ZWx5LiBUaGF0IGNhcHMgaXQuCgpJIGRpZCBhIHF1aWNrIGNoZWNrLCBhbmQgYGlwX3NldHVwX2NvcmtgIGFuZCBgaXA2X3NldHVwX2NvcmtgIGFyZSBzdGF0aWMsIHNvIGl0JiMzOTtzIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIHRoYXQgYXJlIG1vc3QgaW1wb3J0YW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLgoKVGhlIGNvbmZpZ3VyYXRpb24gaW1wbGljYXRpb25zIGFyZSBtaW5pbWFsOyBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2gmIzM5O3MgbGltaXRpbmcgdGhlIE1UVS9mcmFnbWVudCBzaXplIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggZW5vcm1vdXMgTVRVcy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIGBzZW5kbXNnYCBjYWxscyBhbmQgSVAgZm9yd2FyZGluZy4KClRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VkcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3VkcHY2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXBfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXA2X2FwcGVuZF9kYXRhJiMzNDssCiAgICAmIzM0O2lwX21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9tYWtlX3NrYiYjMzQ7LAogICAgJiMzNDtpcDZfZm9yd2FyZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBsaW1pdHMgdGhlIE1UVS9mcmFnc2l6ZSB0byBJUF9NQVhfTVRVIGFuZCBJUDZfTUFYX01UVSBpbiB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gc2VuZGluZyBsYXJnZSBwYWNrZXRzIG92ZXIgaW50ZXJmYWNlcyB3aXRoIHZlcnkgbGFyZ2UgTVRVcyAoZS5nLiB1c2luZyBJUHY2IGp1bWJvZ3JhbXMpLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBVRFAgc2VuZG1zZyBhbmQgSVAgZm9yd2FyZGluZyBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dWRwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dWRwdjZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtpcF9hcHBlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtpcDZfYXBwZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7aXBfbWFrZV9za2ImIzM0OywKICAgICYjMzQ7aXA2X21ha2Vfc2tiJiMzNDssCiAgICAmIzM0O2lwNl9mb3J3YXJkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cblxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2M2Y2MyMjk1OWI3YTVhZjhhYzMxZjAzNDZkYTFmZjI4YzA3ZmIwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDEyOjE4OjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg0LDYgJiM0MzszODQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdAogCXJjdV9yZWFkX3VubG9jaygpOwogCiBvdXQ6CiYjNDM7CW10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7CiYjNDM7CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLAogCiAJY29yay0mZ3Q7ZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgPwogCQkJIGRzdDRfbXR1KCZhbXA7cnQtJmd0O2RzdCkgOiBSRUFEX09OQ0UocnQtJmd0O2RzdC5kZXYtJmd0O210dSk7CiYjNDM7CWNvcmstJmd0O2ZyYWdzaXplID0gbWluKGNvcmstJmd0O2ZyYWdzaXplLCBJUF9NQVhfTVRVKTsKIAogCWlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay0mZ3Q7ZnJhZ3NpemUpKQogCQlyZXR1cm4gLUVORVRVTlJFQUNIOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTE0MzIsNiAmIzQzOzE0MzIsOCBAQCBzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAogCWlmIChmcmFnX3NpemUgJmFtcDsmYW1wOyBmcmFnX3NpemUgJmx0OyBtdHUpCiAJCW10dSA9IGZyYWdfc2l6ZTsKIAomIzQzOwlpZiAoc2tfaXNfdWRwKHNrKSkKJiM0MzsJCW10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTsKIAljb3JrLSZndDtiYXNlLmZyYWdzaXplID0gbXR1OwogCWNvcmstJmd0O2Jhc2UuZ3NvX3NpemUgPSBpcGM2LSZndDtnc29fc2l6ZTsKIAljb3JrLSZndDtiYXNlLnR4X2ZsYWdzID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQppbmRleCAwZjVjMTc4YmMyMjRiLi5jNmQzMzJjOTBhNTQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBURVNUX1BST0dTIDo9IFwKIAljbXNnX3NvX21hcmsuc2ggXAogCWNtc2dfc29fcHJpb3JpdHkuc2ggXAogCWNtc2dfdGltZS5zaCBcCiYjNDM7CWNvcmtfZnJhZ3NpemUucHkgXAogCWRvdWJsZV91ZHBfZW5jYXAuc2ggXAogCWRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcCiAJZWNtcF9yZWhhc2guc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwLi5kODllZjk4OTIzMjk0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLgomIzQzOwomIzQzO2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgaXAsIE5ldE5TLCBOZXROU0VudGVyCiYjNDM7aW1wb3J0IGVycm5vCiYjNDM7aW1wb3J0IGd6aXAKJiM0MztpbXBvcnQgb3MKJiM0MztpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAomIzQzO2ltcG9ydCBzdWJwcm9jZXNzCiYjNDM7CiYjNDM7CiYjNDM7SVBfTVRVX0RJU0NPVkVSID0gMTAKJiM0MztJUF9QTVRVRElTQ19QUk9CRSA9IDMKJiM0MztJUFY2X01UVV9ESVNDT1ZFUiA9IDIzCiYjNDM7SVBWNl9QTVRVRElTQ19ETyA9IDIKJiM0MztJUFY2X1BNVFVESVNDX1BST0JFID0gMwomIzQzO0lQVjZfVExWX0pVTUJPID0gMTk0CiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uKSAtJmd0OyBib29sIHwgTm9uZToKJiM0MzsgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gWwomIzQzOyAgICAgICAgKCYjMzk7L3Byb2MvY29uZmlnLmd6JiMzOTssIGd6aXAub3BlbiksCiYjNDM7ICAgICAgICAoZiYjMzk7L2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9JiMzOTssIG9wZW4pLAomIzQzOyAgICBdOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAmIzM5O3J0JiMzOTspIGFzIGNvbmZpZzoKJiM0MzsgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJiMzOTt7b3B0aW9ufT15JiMzOTs6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKJiM0MzsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjoKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOwomIzQzOwomIzQzO2RlZiBhc3NlcnRfZGVidWdfa2VybmVsKCkgLSZndDsgTm9uZToKJiM0MzsgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygmIzM5O0NPTkZJR19ERUJVR19ORVQmIzM5OykKJiM0MzsgICAgaWYgcmVzIGlzIE5vbmU6CiYjNDM7ICAgICAgICBwcmludCgmIzM0O1dBUk46IENhbiYjMzk7dCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3QmIzM0OykKJiM0MzsgICAgZWxpZiBub3QgcmVzOgomIzQzOyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgmIzM5O0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBjaGVja19kbWVzZ19jbGVhbihmdW5jKSAtJmd0OyBib29sOgomIzQzOyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWyYjMzk7ZG1lc2cmIzM5O10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiYjNDM7ICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKFsmIzM5O2dyZXAmIzM5OywgJiMzOTstcSYjMzk7LCBmJiMzOTtXQVJOSU5HOi4qe2Z1bmN9JiMzOTtdLCBzdGRpbj1kbWVzZy5zdGRvdXQpCiYjNDM7ICAgIGRtZXNnLndhaXQoKQomIzQzOyAgICByZXR1cm4gcmVzdWx0LnJldHVybmNvZGUgIT0gMCBhbmQgZG1lc2cucmV0dXJuY29kZSA9PSAwCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGlwX3NldHVwKG5zOiBOZXROUywgbXR1OiBpbnQsIGlwdjY6IGJvb2wpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgIGlwKCYjMzk7bGluayBhZGQgZHVtbXkgdHlwZSBkdW1teSYjMzk7LCBucz1ucykKJiM0MzsgICAgaXAoZiYjMzk7bGluayBzZXQgZHVtbXkgbXR1IHttdHV9JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcCgmIzM5O2xpbmsgc2V0IGR1bW15IHVwJiMzOTssIG5zPW5zKQomIzQzOyAgICBmbGFnID0gJiMzOTstNiYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgIG5vZGFkID0gJiMzOTtub2RhZCYjMzk7IGlmIGlwdjYgZWxzZSAmIzM5OyYjMzk7CiYjNDM7ICAgIGFkZHJfbG9jYWwgPSAmIzM5O2ZkMDA6OjEvNjQmIzM5OyBpZiBpcHY2IGVsc2UgJiMzOTsxMC4wLjAuMS8yNCYjMzk7CiYjNDM7ICAgIGFkZHJfcmVtb3RlID0gJiMzOTtmZDAwOjoyJiMzOTsgaWYgaXB2NiBlbHNlICYjMzk7MTAuMC4wLjImIzM5OwomIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gYWRkciBhZGQge2FkZHJfbG9jYWx9IGRldiBkdW1teSB7bm9kYWR9JiMzOTssIG5zPW5zKQomIzQzOyAgICBpcChmJiMzOTt7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjYoKSAtJmd0OyBOb25lOgomIzQzOyAgICBhc3NlcnRfZGVidWdfa2VybmVsKCkKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKQomIzQzOwomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKToKJiM0MzsgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pCiYjNDM7ICAgICAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJiMzOTsgJiMzOTsgKiA2NTUyOCwgKCYjMzk7ZmQwMDo6MiYjMzk7LCAxMjM0KSkKJiM0MzsgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKJiM0MzsgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiBpdCBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LgomIzQzOyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRToKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQomIzQzOwomIzQzOyAgICAgICAgaXAoJiMzOTtsaW5rIGRlbCBkdW1teSYjMzk7LCBucz1ucykKJiM0MzsKJiM0MzsgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCYjMzk7dWRwX3Y2X3NlbmRfc2tiJiMzOTspLCAmIzM5O1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgdGVzdF9pcHY0KCkgLSZndDsgTm9uZToKJiM0MzsgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIGlwX3NldHVwKG5zLCA2NTU1NiwgRmFsc2UpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkOgomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKQomIzQzOyAgICAgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgICAgICBmZC5zZW5kdG8oYiYjMzk7ICYjMzk7ICogNjU1MjgsICgmIzM5OzEwLjAuMC4yJiMzOTssIDEyMzQpKQomIzQzOyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgomIzQzOyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuCiYjNDM7ICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOgomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJiMzOTt1ZHBfc2VuZF9za2ImIzM5OyksICYjMzk7V0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtJmd0OyBOb25lOgomIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6CiYjNDM7ICAgICAgICBpcF9zZXR1cChucywgNjU1ODQsIFRydWUpCiYjNDM7CiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOgomIzQzOyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDoKJiM0MzsgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJJiMzOTssIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NCkKJiM0MzsgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KQomIzQzOyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKQomIzQzOyAgICAgICAgICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygmIzM5OyFISEhIJiMzOTssIDEyMzQsIDEyMzQsIDAsIDApICYjNDM7IGImIzM5OyAmIzM5OyAqIDY1NTI4CiYjNDM7ICAgICAgICAgICAgICAgIGZkLnNlbmR0byh1ZHAsICgmIzM5O2ZkMDA6OjImIzM5OywgMCkpCiYjNDM7CiYjNDM7ICAgICAgICBpcCgmIzM5O2xpbmsgZGVsIGR1bW15JiMzOTssIG5zPW5zKQomIzQzOwomIzQzOwomIzQzO2lmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKJiM0MzsgICAga3NmdF9ydW4oWwomIzQzOyAgICAgICAgdGVzdF9pcHY2LAomIzQzOyAgICAgICAgdGVzdF9pcHY0LAomIzQzOyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLAomIzQzOyAgICBdKQomIzQzOyAgICBrc2Z0X2V4aXQoKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQxMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBPdmVyZmxvdyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgb3IgbWF5YmUgZXZlbiBhIGxlbmd0aCBvdmVyZmxvdywgd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIE1UVSBnZXRzIHRvbyBsYXJnZSwgc3BlY2lmaWNhbGx5IGdyZWF0ZXIgdGhhbiA2NTUzNSwgd2UgY2FuIHJ1biBpbnRvIHRyb3VibGUgd2l0aCAxNi1iaXQgbGVuZ3RoIGZpZWxkcywgcmVzdWx0aW5nIGluIGEgcG90ZW50aWFsIG92ZXJmbG93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgb3ZlcmZsb3cgbWlnaHQgbWFuaWZlc3QgaW4gZWl0aGVyIHRoZSBgc2tiLSZndDtsZW5gIG9yIHRoZSBVRFAgbGVuZ3RoIGZpZWxkcy4gVGhlIHRlc3QgY2FzZSB0aGUgYXV0aG9yIHByb3ZpZGVzIGNyZWF0ZXMgYSBoaWdoIE1UVSBkdW1teSBpbnRlcmZhY2UgKElQdjQ6IDY1NTU2LCBJUHY2OiA2NTU3NikgYW5kIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCAoNjU1MjggYnl0ZXMpLiBUaGUgdGVzdCBpcyBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYSB3YXJuaW5nIGluIHRoZSBrZXJuZWwgbG9ncyBmcm9tIGB1ZHBfdjZfc2VuZF9za2JgIG9yIGB1ZHBfc2VuZF9za2JgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWF0dGVyIG9mIGNhcHBpbmcgdGhlIE1UVSBhbmQsIHRoZXJlZm9yZSwgdGhlIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gcHJldmVudCBvdmVyZmxvd3MuIFRoZSBwYXRjaCBpcyBzaW1wbHkgbGltaXRpbmcgYm90aCBNVFUgYW5kIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAod2hpY2ggaXMgNjU1MzUpLiBUaGlzIHNvdW5kcyBjb3JyZWN0LCBhbmQgYSBjbGVhbiBmaXggZm9yIGEgMTYtYml0IGxlbmd0aCBvdmVyZmxvdywgYnV0IG15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpXaGlsZSBhbiBvdmVyZmxvdyBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBLQVNBTiBpcyB0aGVyZSB0byBjYXRjaCB0aG9zZS4gU28gaXMgdGhpcyBwdXJlbHkgYSBjb250cm9sLWZsb3cgaXNzdWU/IElzIHRoZXJlIGEgcmlzayB0aGF0IHRoaXMgd2lsbCBzZW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGZvciBhbGxvY2F0ZWQgYnVmZmVycyBiZWluZyB0b28gc21hbGwgYW5kIHRoZW4gaGF2aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZWQgaW50byB0aGVtLgoKSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBleGNlZWRzIDY1NTM1LCB0aGVyZSYjMzk7cyB0aGUgY2hhbmNlIG9mIGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIGFsbG9jYXRpb24gc2l6ZSBjYWxjdWxhdGlvbnMgb3Igd2hlbiBwb3B1bGF0aW5nIGxlbmd0aCBoZWFkZXIgZmllbGRzLiBBbiBvdmVyZmxvdyBpbiBhbGxvY2F0aW9uIHNpemUgd291bGQgbGVhZCB0byBhIHNtYWxsIGJ1ZmZlciwgdGhlbiBhIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSDigJMgS0FTQU4gd2lsbCBjYXRjaCBpdC4gQW4gb3ZlcmZsb3cgaW4gdGhlIGxlbmd0aCBoZWFkZXIgY291bGQgbGVhZCB0byBlaXRoZXI6CgoxLiAgYSBzbWFsbCBsZW5ndGggaGVhZGVyIHdpdGggYSBsYXJnZSBwYXlsb2FkIChyZWFkaW5nIG91dC1vZi1ib3VuZHMgZnJvbSB0aGUgc2tiKSwgb3IKMi4gIGEgbGFyZ2UgbGVuZ3RoIGhlYWRlciB3aXRoIGEgc21hbGwgcGF5bG9hZCAod2hpY2ggbWlnaHQgaW52b2x2ZSBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KS4KClRoZSBkYXRhIGluIHRoZSBgc2tiYCBpcyB1c3VhbGx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVpdGhlciB0aHJvdWdoIGBjb3B5X2Zyb21fdXNlcmAgb3Igc2ltaWxhci4gSWYgbW9yZSBkYXRhIGlzIHNlbnQgdGhhbiBhbGxvY2F0ZWQsIGl04oCZcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhhdC4gTXkgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIGJlIHNlbnQgZnJvbSBza2IgcGFkZGluZz8KClRvIGNvbmZpcm0sIEkmIzM5O2xsIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBpbiBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIGBmcmFnc2l6ZWAgY2FsY3VsYXRpb24gYW5kIGxlbmd0aCBmaWVsZHMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGEgc3VidGxlciB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dBUk5JTkcuKnVkcF9zZW5kX3NrYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBgdWRwX3NlbmRfc2tiYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgdGhpcyBpcyB0byBpc29sYXRlIHRoZSBwb3RlbnRpYWwgY3VscHJpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBzdHJpbmc6IGBXQVJOX09OYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBkZWJ1Z2dpbmcgdGhlc2Uga2luZHMgb2YgbmV0d29yayBzdGFjayBpc3N1ZXMsIGVzcGVjaWFsbHkgd2hlcmUga2VybmVsIHdhcm5pbmdzIGFyZSBpbnZvbHZlZC4gVGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgYXMgaXQmIzM5O3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNydWNpYWwgcHJvY2VzcyBvZiBzZW5kaW5nIFVEUCBkYXRhZ3JhbXMuIEZpbmRpbmcgYFdBUk5fT05gIHdpdGhpbiBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBzYW5pdHkgY2hlY2sgb3IgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCB0aGF0IHdhcnJhbnRzIGEga2VybmVsLWxldmVsIG1lc3NhZ2UuIEkmIzM5O20gaG9waW5nIHRoYXQgYnkgZ3JlcHBpbmcgZm9yIHRoYXQgc3RyaW5nLCBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbiBhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIHdhcm5pbmcsIHdoaWNoIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGNsdWVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSByb290IGNhdXNlIG9mIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gdHJhY2tpbmcgZG93bi4gVGhpcyBzZWFyY2ggd2lsbCBiZSB0aGUgZm91bmRhdGlvbiBvZiBhIGRlZXBlciBkaXZlIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1dBUk5fT04uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTE5OTU9aW50IHVkcF9yZWFkX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3Rvcilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yMDE0LVxubmV0L2lwdjQvdWRwLmM6MjAxNTpcdFdBUk5fT05fT05DRSghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKTtcbm5ldC9pcHY0L3VkcC5jLTIwMTYtXG4tLVxubmV0L2lwdjQvdWRwLmM9Mjc2ND1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC91ZHAuYy0yODA1LVx0c2tiLVx1MDAzZXNrID0gc2s7XG5uZXQvaXB2NC91ZHAuYzoyODA2Olx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza19pc19yZWZjb3VudGVkKHNrKSk7XG5uZXQvaXB2NC91ZHAuYy0yODA3LVx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTMzNTM9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXG4tLVxubmV0L2lwdjQvdWRwLmMtMzQ2Mi1cbm5ldC9pcHY0L3VkcC5jOjM0NjM6XHRXQVJOX09OX09OQ0UoaXRlci1cdTAwM2VlbmRfc2sgIT0gYmF0Y2hfc2tzKTtcbm5ldC9pcHY0L3VkcC5jLTM0NjQtXHRyZXR1cm4gaXRlci1cdTAwM2VlbmRfc2sgPyBpdGVyLVx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGVidWdnaW5nIGEgVURQIElzc3VlKioKCkFscmlnaHQsIHNvIHRoZSB0ZXN0IHNjcmlwdCBpcyBmbGFnZ2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGUgc3RyaW5nIGBXQVJOSU5HOi4qdWRwX3NlbmRfc2tiYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIHdhcm5pbmcgcmVsYXRlZCB0byB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24sIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIFVEUCB0cmFuc21pc3Npb24gcGF0aC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcD8gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyAqV0FSTiouIEkmIzM5O2xsIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VhcmNoIHdpdGhpbiBgdWRwX3NlbmRfc2tiYCBpdHNlbGYgZm9yIGFueSBpbnN0YW5jZXMgb2YgYFdBUk5gLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByb290IGNhdXNlIGlzIG1vc3QgbGlrZWx5IGhpZGluZy4gVW5kZXJzdGFuZGluZyB3aGF0IGNpcmN1bXN0YW5jZXMgbGVhZCB0byB0aGF0IHdhcm5pbmcgd2lsbCBiZSBrZXkgdG8gZGlhZ25vc2luZyBhbmQgZml4aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXQVJOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdWRwLmM9MTk5NT1pbnQgdWRwX3JlYWRfc2tiKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTIwMTQtXG5uZXQvaXB2NC91ZHAuYzoyMDE1Olx0V0FSTl9PTl9PTkNFKCFza2Jfc2V0X293bmVyX3NrX3NhZmUoc2tiLCBzaykpO1xubmV0L2lwdjQvdWRwLmMtMjAxNi1cbi0tXG5uZXQvaXB2NC91ZHAuYz0yNzY0PWVudW0gc2tiX2Ryb3BfcmVhc29uIHVkcF92NF9lYXJseV9kZW11eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3VkcC5jLTI4MDUtXHRza2ItXHUwMDNlc2sgPSBzaztcbm5ldC9pcHY0L3VkcC5jOjI4MDY6XHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKHNrX2lzX3JlZmNvdW50ZWQoc2spKTtcbm5ldC9pcHY0L3VkcC5jLTI4MDctXHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfcGZyZWU7XG4tLVxubmV0L2lwdjQvdWRwLmM9MzM1Mz1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcbi0tXG5uZXQvaXB2NC91ZHAuYy0zNDYyLVxubmV0L2lwdjQvdWRwLmM6MzQ2MzpcdFdBUk5fT05fT05DRShpdGVyLVx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xubmV0L2lwdjQvdWRwLmMtMzQ2NC1cdHJldHVybiBpdGVyLVx1MDAzZWVuZF9zayA/IGl0ZXItXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xuLS1cbm5ldC9pcHY0L3VkcC5jPTM4MjM9c3RhdGljIGludCBicGZfaXRlcl91ZHBfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VkcF9pdGVyX3N0YXRlICppdGVyLFxuLS1cbm5ldC9pcHY0L3VkcC5jLTM4MjgtXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19vYmpzKCpuZXdfYmF0Y2gsIG5ld19iYXRjaF9zeixcbm5ldC9pcHY0L3VkcC5jOjM4Mjk6XHRcdFx0XHQgIGZsYWdzIHwgX19HRlBfTk9XQVJOKTtcbm5ldC9pcHY0L3VkcC5jLTM4MzAtXHRpZiAoIW5ld19iYXRjaClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVEUCBTZW5kIFBhdGgqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhhdCB3YXJuaW5nIEkgc2F3Li4uIGNvdWxkIGl0IGJlIGJ1cmllZCB3aXRoaW4gdGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uLCBidXQgY2xldmVybHkgZGlzZ3Vpc2VkIGFzIGEgY29uZGl0aW9uYWwgZGVidWcgbWVzc2FnZSBsaWtlIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIHNob3VsZCBwcm9iYWJseSBzdG9wIGFzc3VtaW5nIGFuZCBqdXN0IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEJlc3QgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSBhbmQgc2NydXRpbml6ZSB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24gaXRzZWxmLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfc2VuZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcbm5ldC9pcHY0L3VkcC5jLTEwOTItXG5uZXQvaXB2NC91ZHAuYzoxMDkzOnN0YXRpYyBpbnQgdWRwX3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aTQgKmZsNCxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMTc5PWludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdWRwLmMtMTE5MC1cbm5ldC9pcHY0L3VkcC5jOjExOTE6XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmluZXQtXHUwMDNlY29yay5iYXNlKTtcbm5ldC9pcHY0L3VkcC5jLTExOTItXG4tLVxubmV0L2lwdjQvdWRwLmM9MTIzNT1pbnQgdWRwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cdFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcdFx0XHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFx1MDAyNmNvcmspO1xubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3ODkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHVkcF9zZW5kX3NrYmAqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTGludXgga2VybmVsIGhhbmRsZXMgc2VuZGluZyBVRFAgZGF0YWdyYW1zLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB1ZHBfc2VuZF9za2JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWVudGFsbHkgc2tldGNoIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyDigJMgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBJdCYjMzk7cyBjbGVhcmx5IGEgY29yZSBmdW5jdGlvbiwgbGlrZWx5IGNhbGxlZCBhZnRlciB0aGUgc29ja2V0IGxheWVyIGhhcyBhc3NlbWJsZWQgYW4gU0tCIChTb2NrZXQgQnVmZmVyKS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gcGFja2V0IHRyYW5zbWlzc2lvbi4KCkkgYW50aWNpcGF0ZSBzZWVpbmcgdGhpbmdzIGxpa2U6CgoqICAgKipDaGVja3N1bSBDYWxjdWxhdGlvbjoqKiBIb3cgYXJlIFVEUCBjaGVja3N1bXMgZ2VuZXJhdGVkIGFuZCBoYW5kbGVkIGhlcmUsIGNvbnNpZGVyaW5nIG9mZmxvYWRpbmcgY2FwYWJpbGl0aWVzIGFuZCBoYXJkd2FyZSBhY2NlbGVyYXRpb24/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuCiogICAqKklQIEhlYWRlciBDb25zdHJ1Y3Rpb246KiogVGhlIGZ1bmN0aW9uIHByb2JhYmx5IGJ1aWxkcyB0aGUgSVAgaGVhZGVyIChJUHY0IG9yIElQdjYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCkgb3IgaW50ZXJhY3RzIHdpdGggYSBsb3dlci1sZXZlbCBmdW5jdGlvbiB0aGF0IGRvZXMuIERvZXMgaXQgaGFuZGxlIGZyYWdtZW50YXRpb24gaWYgdGhlIGRhdGFncmFtIHNpemUgZXhjZWVkcyB0aGUgTVRVPwoqICAgKipJbnRlcmZhY2UgU2VsZWN0aW9uOioqIEhvdyBkb2VzIGl0IGNob29zZSB0aGUgb3V0Z29pbmcgbmV0d29yayBpbnRlcmZhY2U/IElzIGl0IGJhc2VkIG9uIHJvdXRpbmcgdGFibGVzLCBzb2NrZXQgb3B0aW9ucywgb3Igc29tZSBvdGhlciBtZWNoYW5pc20/CiogICAqKkxvY2tpbmc6KiogV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgVURQIHNvY2tldCBvciB0aGUgcm91dGluZyBjYWNoZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGxvb2sgb3V0IGZvcj8KKiAgICoqVHJhbnNtaXNzaW9uIFF1ZXVlaW5nOioqIERvZXMgdGhpcyBmdW5jdGlvbiBkaXJlY3RseSBoYW5kIHRoZSBTS0Igb2ZmIHRvIGEgZGV2aWNlIGRyaXZlciwgb3IgaXMgdGhlcmUgYW4gaW50ZXJtZWRpYXRlIHF1ZXVlaW5nIHN0YWdlPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29ya2luZyBkZXZpY2UmIzM5O3MgdHJhbnNtaXQgcXVldWUgKGUuZy4sIGBuZXRpZl9zdGFydF9xdWV1ZWApLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEhvdyBhcmUgdHJhbnNtaXNzaW9uIGZhaWx1cmVzIChlLmcuLCBuZXR3b3JrIGNvbmdlc3Rpb24sIGludGVyZmFjZSBkb3duKSBoYW5kbGVkPyBEb2VzIGl0IGhhbmRsZSBJQ01QIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGdlbmVyYXRlZCBpbiByZXNwb25zZT8KKiAgICoqQ29udHJvbC9TaWduYWxsaW5nOioqIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFueSBzaWduYWxsaW5nIGNvbXBvbmVudHMgdG8gbm90aWZ5IHRoZSBzZW5kaW5nIHByb2Nlc3MgcmVnYXJkaW5nIHRoZSBzdWNjZXNzL2ZhaWx1cmUgb2YgdHJhbnNtaXNzaW9uPwoKSSYjMzk7bGwgYmUgc3BlY2lmaWNhbGx5IHdhdGNoaW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBsb3dlciBsYXllcnM6IElQLCB0aGUgZGV2aWNlIGRyaXZlciwgYW5kIHRoZSBoYXJkd2FyZSBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgaG93IHRoZSBTS0IgaXMgaGFuZGxlZCwgSSBhc3N1bWUgaXQmIzM5O3Mgd2hlcmUgdGhlIG1vc3QgJiMzNDtnbHVlJiMzNDsgaGFwcGVucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIHBhcnRzIHJlc2lkZS4gTGV0JiMzOTtzIGdldCByZWFkaW5nIGFuZCBjb25maXJtIHRoZXNlIGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC91ZHAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTM6XHRzdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4xMDk0Olx0XHRcdFx0c3RydWN0IGluZXRfY29yayAqY29yaylcbjEwOTU6XHR7XG4xMDk2Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4xMDk3Olx0XHRpbnQgb2Zmc2V0LCBsZW4sIGRhdGFsZW47XG4xMDk4Olx0XHRzdHJ1Y3QgdWRwaGRyICp1aDtcbjEwOTk6XHRcdGludCBlcnI7XG4xMTAwOlx0XG4xMTAxOlx0XHRvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xuMTEwMjpcdFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZnNldDtcbjExMDM6XHRcdGRhdGFsZW4gPSBsZW4gLSBzaXplb2YoKnVoKTtcbjExMDQ6XHRcbjExMDU6XHRcdC8qXG4xMTA2Olx0XHQgKiBDcmVhdGUgYSBVRFAgaGVhZGVyXG4xMTA3Olx0XHQgKi9cbjExMDg6XHRcdHVoID0gdWRwX2hkcihza2IpO1xuMTEwOTpcdFx0dWgtXHUwMDNlc291cmNlID0gaW5ldF9zayhzayktXHUwMDNlaW5ldF9zcG9ydDtcbjExMTA6XHRcdHVoLVx1MDAzZWRlc3QgPSBmbDQtXHUwMDNlZmw0X2Rwb3J0O1xuMTExMTpcdFx0LyogRGF0YWdyYW0gbGVuZ3RoIGNoZWNrZWQgaW4gdWRwX3NlbmRtc2cuICovXG4xMTEyOlx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbjExMTM6XHRcdHVoLVx1MDAzZWNoZWNrID0gMDtcbjExMTQ6XHRcbjExMTU6XHRcdGlmIChjb3JrLVx1MDAzZWdzb19zaXplKSB7XG4xMTE2Olx0XHRcdGNvbnN0IGludCBobGVuID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpICYjNDM7XG4xMTE3Olx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuMTExODpcdFxuMTExOTpcdFx0XHRpZiAoaGxlbiAmIzQzOyBtaW4oZGF0YWxlbiwgY29yay1cdTAwM2Vnc29fc2l6ZSkgXHUwMDNlIGNvcmstXHUwMDNlZnJhZ3NpemUpIHtcbjExMjA6XHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExMjE6XHRcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuMTEyMjpcdFx0XHR9XG4xMTIzOlx0XHRcdGlmIChkYXRhbGVuIFx1MDAzZSBjb3JrLVx1MDAzZWdzb19zaXplICogVURQX01BWF9TRUdNRU5UUykge1xuMTEyNDpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEyNTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTEyNjpcdFx0XHR9XG4xMTI3Olx0XHRcdGlmIChzay1cdTAwM2Vza19ub19jaGVja190eCkge1xuMTEyODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTEyOTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTEzMDpcdFx0XHR9XG4xMTMxOlx0XHRcdGlmIChkc3RfeGZybShza2JfZHN0KHNrYikpKSB7XG4xMTMyOlx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xMTMzOlx0XHRcdFx0cmV0dXJuIC1FSU87XG4xMTM0Olx0XHRcdH1cbjExMzU6XHRcbjExMzY6XHRcdFx0aWYgKGRhdGFsZW4gXHUwMDNlIGNvcmstXHUwMDNlZ3NvX3NpemUpIHtcbjExMzc6XHRcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NpemUgPSBjb3JrLVx1MDAzZWdzb19zaXplO1xuMTEzODpcdFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSA9IFNLQl9HU09fVURQX0w0O1xuMTEzOTpcdFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2VncyA9IERJVl9ST1VORF9VUChkYXRhbGVuLFxuMTE0MDpcdFx0XHRcdFx0XHRcdFx0XHQgY29yay1cdTAwM2Vnc29fc2l6ZSk7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0LyogRG9uJiMzOTt0IGNoZWNrc3VtIHRoZSBwYXlsb2FkLCBza2Igd2lsbCBnZXQgc2VnbWVudGVkICovXG4xMTQzOlx0XHRcdFx0Z290byBjc3VtX3BhcnRpYWw7XG4xMTQ0Olx0XHRcdH1cbjExNDU6XHRcdH1cbjExNDY6XHRcbjExNDc6XHRcdGlmIChzay1cdTAwM2Vza19ub19jaGVja190eCkge1x0XHRcdCAvKiBVRFAgY3N1bSBvZmYgKi9cbjExNDg6XHRcdFx0c2tiLVx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XG4xMTQ5Olx0XHRcdGdvdG8gc2VuZDtcbjExNTA6XHRcdH0gZWxzZSBpZiAoc2tiLVx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7IC8qIFVEUCBoYXJkd2FyZSBjc3VtICovXG4xMTUxOlx0Y3N1bV9wYXJ0aWFsOlxuMTE1MjpcdFx0XHR1ZHA0X2h3Y3N1bShza2IsIGZsNC1cdTAwM2VzYWRkciwgZmw0LVx1MDAzZWRhZGRyKTtcbjExNTM6XHRcdFx0Z290byBzZW5kO1xuMTE1NDpcdFx0fVxuMTE1NTpcdFxuMTE1NjpcdFx0LyogYWRkIHByb3RvY29sLWRlcGVuZGVudCBwc2V1ZG8taGVhZGVyICovXG4xMTU3Olx0XHR1aC1cdTAwM2VjaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKGZsNC1cdTAwM2VzYWRkciwgZmw0LVx1MDAzZWRhZGRyLCBsZW4sXG4xMTU4Olx0XHRcdFx0XHQgICAgICBJUFBST1RPX1VEUCwgdWRwX2NzdW0oc2tiKSk7XG4xMTU5Olx0XHRpZiAodWgtXHUwMDNlY2hlY2sgPT0gMClcbjExNjA6XHRcdFx0dWgtXHUwMDNlY2hlY2sgPSBDU1VNX01BTkdMRURfMDtcbjExNjE6XHRcbjExNjI6XHRzZW5kOlxuMTE2MzpcdFx0ZXJyID0gaXBfc2VuZF9za2Ioc29ja19uZXQoc2spLCBza2IpO1xuMTE2NDpcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbjExNjU6XHRcdFx0aWYgKGVyciA9PSAtRU5PQlVGUyBcdTAwMjZcdTAwMjZcbjExNjY6XHRcdFx0ICAgICFpbmV0X3Rlc3RfYml0KFJFQ1ZFUlIsIHNrKSkge1xuMTE2NzpcdFx0XHRcdFVEUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBVRFBfTUlCX1NOREJVRkVSUk9SUyk7XG4xMTY4Olx0XHRcdFx0ZXJyID0gMDtcbjExNjk6XHRcdFx0fVxuMTE3MDpcdFx0fSBlbHNlIHtcbjExNzE6XHRcdFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfT1VUREFUQUdSQU1TKTtcbjExNzI6XHRcdH1cbjExNzM6XHRcdHJldHVybiBlcnI7XG4xMTc0Olx0fVxuMTE3NTpcdFxuMTE3NjpcdC8qXG4xMTc3Olx0ICogUHVzaCBvdXQgYWxsIHBlbmRpbmcgZGF0YSBhcyBvbmUgVURQIGRhdGFncmFtLiBTb2NrZXQgaXMgbG9ja2VkLlxuMTE3ODpcdCAqL1xuMTE3OTpcdGludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXG4xMTgwOlx0e1xuMTE4MTpcdFx0c3RydWN0IHVkcF9zb2NrICAqdXAgPSB1ZHBfc2soc2spO1xuMTE4MjpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTE4MzpcdFx0c3RydWN0IGZsb3dpNCAqZmw0ID0gXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmZsLnUuaXA0O1xuMTE4NDpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjExODU6XHRcdGludCBlcnIgPSAwO1xuMTE4NjpcdFxuMTE4NzpcdFx0c2tiID0gaXBfZmluaXNoX3NrYihzaywgZmw0KTtcbjExODg6XHRcdGlmICghc2tiKVxuMTE4OTpcdFx0XHRnb3RvIG91dDtcbjExOTA6XHRcbjExOTE6XHRcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UpO1xuMTE5MjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTI0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDoKCioqTG9jYXRpbmcgdGhlIFdhcm5pbmcqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgd2FybmluZyBtZXNzYWdlLCBwcmVzdW1hYmx5IHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIHBvdGVudGlhbCBpc3N1ZS4gVGhlIGtleSBxdWVzdGlvbiBpczogd2hlcmUgaXMgdGhhdCB3YXJuaW5nIGFjdHVhbGx5IGdlbmVyYXRlZD8gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHVkcF9zZXRfbGVuX3Nob3J0YC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGNvbnRleHQgaW1wbGllZCBieSB0aGUgcHJvbXB0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1ZHBfc2V0X2xlbl9zaG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3VkcC5jPTEwOTM9c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxuLS1cbm5ldC9pcHY0L3VkcC5jLTExMTEtXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHBfc2VuZG1zZy4gKi9cbm5ldC9pcHY0L3VkcC5jOjExMTI6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L3VkcC5jLTExMTMtXHR1aC1cdTAwM2VjaGVjayA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjI5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBJc3N1ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBUaGUgbmFtZSBgdWRwX3NldF9sZW5fc2hvcnRgIGhhcyBwb3BwZWQgdXAsIGFuZCBpdCYjMzk7cyByaW5naW5nIHNvbWUgYmVsbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0JiMzOTtzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBVRFAgcGFja2V0IGxlbmd0aCBoYW5kbGluZy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gZ3Vlc3NpbmcgaXQgbWlnaHQgYmUgZGVhbGluZyB3aXRoIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FsY3VsYXRlZCBvciBkZXNpcmVkIFVEUCBsZW5ndGggaXMgc21hbGxlciB0aGFuIHNvbWV0aGluZyBpdCBzaG91bGQgYmUsIG1heWJlIGFuIE1UVSBvciBhIG1pbmltdW0gcmVxdWlyZWQgaGVhZGVyIHNpemUuIENvdWxkIGJlIHJlbGF0ZWQgdG8gZnJhZ21lbnRhdGlvbiwgcGFkZGluZywgb3IgZXZlbiBhIHBvdGVudGlhbCBidWcuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSBkZWZpbml0aXZlIGRlZmluaXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGNvZGViYXNlLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dWRwX3NldF9sZW5fc2hvcnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbGFnLmM9MTA9c3RhdGljIHN0cnVjdCBza19idWZmICpyZG1hX2J1aWxkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2xhZy5jLTM4LVx0dWgtXHUwMDNlZGVzdCA9IGh0b25zKFJPQ0VfVjJfVURQX0RQT1JUKTtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2xhZy5jOjM5Olx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy00MC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYz0yOTc9c3RhdGljIHZvaWQgcHJlcGFyZV91ZHBfaGRyKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiBzcmNfcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0zMDctXHR1ZHBoLVx1MDAzZXNvdXJjZSA9IHNyY19wb3J0O1xuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmM6MzA4Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2tiLVx1MDAzZWxlbik7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV9uZXQuYy0zMDktXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz02MTM9c3RhdGljIHZvaWQgYW10X3NlbmRfZGlzY292ZXJ5KHN0cnVjdCBhbXRfZGV2ICphbXQpXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtNjY5LVx0dWRwaC1cdTAwM2VkZXN0XHQ9IGFtdC1cdTAwM2VyZWxheV9wb3J0O1xuZHJpdmVycy9uZXQvYW10LmM6NjcwOlx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKCp1ZHBoKSAmIzQzOyBzaXplb2YoKmFtdGQpKTtcbmRyaXZlcnMvbmV0L2FtdC5jLTY3MS1cdHVkcGgtXHUwMDNlY2hlY2tcdD0gMDtcbi0tXG5kcml2ZXJzL25ldC9hbXQuYz03MDI9c3RhdGljIHZvaWQgYW10X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYW10X2RldiAqYW10LCBib29sIHY2KVxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTc2Mi1cdHVkcGgtXHUwMDNlZGVzdFx0PSBhbXQtXHUwMDNlcmVsYXlfcG9ydDtcbmRyaXZlcnMvbmV0L2FtdC5jOjc2MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqYW10cmgpICYjNDM7IHNpemVvZigqdWRwaCkpO1xuZHJpdmVycy9uZXQvYW10LmMtNzY0LVx0dWRwaC1cdTAwM2VjaGVja1x0PSAwO1xuLS1cbmRyaXZlcnMvbmV0L2FtdC5jPTI1OTQ9c3RhdGljIHZvaWQgYW10X3NlbmRfYWR2ZXJ0aXNlbWVudChzdHJ1Y3QgYW10X2RldiAqYW10LCBfX2JlMzIgbm9uY2UsXG4tLVxuZHJpdmVycy9uZXQvYW10LmMtMjY1Mi1cdHVkcGgtXHUwMDNlZGVzdFx0PSBkcG9ydDtcbmRyaXZlcnMvbmV0L2FtdC5jOjI2NTM6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2YoKmFtdGEpICYjNDM7IHNpemVvZigqdWRwaCkpO1xuZHJpdmVycy9uZXQvYW10LmMtMjY1NC1cdHVkcGgtXHUwMDNlY2hlY2tcdD0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jPTMwNzU9c3RhdGljIGludCBpNDBlX3RzbyhzdHJ1Y3QgaTQwZV90eF9idWZmZXIgKmZpcnN0LCB1OCAqaGRyX2xlbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTMxMzEtXHRcdCAgICAoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX1VEUF9UVU5ORUxfQ1NVTSkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmM6MzEzMjpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0zMTMzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmM9MTcyOT1zdGF0aWMgaW50IGlhdmZfdHNvKHN0cnVjdCBpYXZmX3R4X2J1ZmZlciAqZmlyc3QsIHU4ICpoZHJfbGVuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMtMTc3Ni1cdFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgXHUwMDI2IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYzoxNzc3Olx0XHRcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jLTE3NzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM9MTg0MT1pbnQgaWNlX3RzbyhzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYy0xODkzLVx0XHQgICAgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYzoxODk0Olx0XHRcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3R4cnguYy0xODk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM9MjgyMT1pbnQgaWRwZl90c28oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlkcGZfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jLTI4NzMtXHRcdG9mZi1cdTAwM2V0c29faGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBsNF9zdGFydDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM6Mjg3NDpcdFx0dWRwX3NldF9sZW5fc2hvcnQobDQudWRwLCBzaGluZm8tXHUwMDNlZ3NvX3NpemUgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMtMjg3NS1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jPTcwNz1zdGF0aWMgdm9pZCBvdHgyX3NxZV9hZGRfZXh0KHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IG90eDJfc25kX3F1ZXVlICpzcSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jOjc1MzpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdHhyeC5jLTc1NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwNzc9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY0X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwaGRyICppcHY0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTEwODMtXHR1aCA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHVkcF9vZmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MTA4NDpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXHUwMDNlbGVuIC0gdWRwX29mZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMDg1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwOTY9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY2X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwdjZoZHIgKmlwdjYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTEwMi1cdHVoID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdWRwX29mZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYzoxMTAzOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cdTAwM2VsZW4gLSB1ZHBfb2ZmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jLTExMDQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIHN0cnVjdCBza19idWZmICptbHg1ZV90ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jLTExNS1cdHVkcGgtXHUwMDNlZGVzdCA9IGh0b25zKDkpOyAvKiBEaXNjYXJkIFByb3RvY29sICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fc2VsZnRlc3QuYzoxMTY6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IG1seDVlaGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE3LVx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jPTM4Mj1zdGF0aWMgdm9pZCBlZjRfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWY0X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDMtXHRwYXlsb2FkLVx1MDAzZXVkcC5zb3VyY2UgPSAwO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jOjQwNDpcdHVkcF9zZXRfbGVuX3Nob3J0KFx1MDAyNnBheWxvYWQtXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDUtXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWY0X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jLTQwMC1cdHBheWxvYWQtXHUwMDNldWRwLnNvdXJjZSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYzo0MDE6XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZwYXlsb2FkLVx1MDAzZXVkcCwgc2l6ZW9mKCpwYXlsb2FkKSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYy00MDItXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jPTM4MD1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTQwMS1cdHBheWxvYWQtXHUwMDNldWRwLnNvdXJjZSA9IDA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYzo0MDI6XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZwYXlsb2FkLVx1MDAzZXVkcCwgc2l6ZW9mKCpwYXlsb2FkKSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy00MDMtXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy90Y19lbmNhcF9hY3Rpb25zLmM9MzA1PXN0YXRpYyB2b2lkIGVmeF9nZW5fdHVuX2hlYWRlcl91ZHAoc3RydWN0IGVmeF90Y19lbmNhcF9hY3Rpb24gKmVuY2FwLCB1OCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYy0zMTMtXHR1ZHAtXHUwMDNlZGVzdCA9IGtleS1cdTAwM2V0cF9kc3Q7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jOjMxNDpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcCwgc2l6ZW9mKCp1ZHApICYjNDM7IGxlbik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jLTMxNS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc3RtbWFjX3Rlc3RfZ2V0X3VkcF9za2Ioc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTUtXHRcdHVoZHItXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXHUwMDNlZHBvcnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgc2l6ZW9mKCpzaGRyKSAmIzQzOyBzaXplb2YoKnVoZHIpICYjNDM7IGF0dHItXHUwMDNlc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU3LVx0XHRpZiAoYXR0ci1cdTAwM2VtYXhfc2l6ZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTg6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgYXR0ci1cdTAwM2VtYXhfc2l6ZSAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU5LVx0XHRcdFx0XHQgIChzaXplb2YoKmloZHIpICYjNDM7IHNpemVvZigqZWhkcikpKTtcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz01Nzg9c3RhdGljIGludCBnZW5ldmVfcG9zdF9kZWNhcF9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtXHR1aCA9IHVkcF9oZHIoc2tiKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjY1MTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXHUwMDNlbGVuIC0gZ3JvX2hpbnQtXHUwMDNlbmVzdGVkX3RwX29mZnNldCk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTItXHRpZiAodWgtXHUwMDNlY2hlY2spIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjA4OT1zdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMobnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMDI6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCB1ZHBfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz03MzY9c3RhdGljIHN0cnVjdCBza19idWZmICpuc2ltX2Rldl90cmFwX3NrYl9idWlsZCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03NzItXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnVkcGgtXHUwMDNlZGVzdCwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjc3MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzc0LVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmM9Mzg9c3RhdGljIHN0cnVjdCBza19idWZmICpuc2ltX2Rldl9wc2FtcGxlX3NrYl9idWlsZCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmMtNzUtXHRnZXRfcmFuZG9tX2J5dGVzKFx1MDAyNnVkcGgtXHUwMDNlZGVzdCwgc2l6ZW9mKHUxNikpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYzo3NjpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBkYXRhX2xlbik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc3LVxuLS1cbmluY2x1ZGUvbGludXgvdWRwLmg9NDI9c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuKHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbmluY2x1ZGUvbGludXgvdWRwLmgtNDYtXG5pbmNsdWRlL2xpbnV4L3VkcC5oOjQ3OnN0YXRpYyBpbmxpbmUgdm9pZCB1ZHBfc2V0X2xlbl9zaG9ydChzdHJ1Y3QgdWRwaGRyICp1aCwgdW5zaWduZWQgaW50IGxlbilcbmluY2x1ZGUvbGludXgvdWRwLmgtNDgte1xuLS1cbmxpYi90ZXN0cy9ibGFja2hvbGVfZGV2X2t1bml0LmM9Mjc9c3RhdGljIHZvaWQgdGVzdF9ibGFja2hvbGVkZXYoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmxpYi90ZXN0cy9ibGFja2hvbGVfZGV2X2t1bml0LmMtNDgtXHR1aC1cdTAwM2Vzb3VyY2UgPSB1aC1cdTAwM2VkZXN0ID0gaHRvbnMoVURQX1BPUlQpO1xubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYzo0OTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBkYXRhX2xlbik7XG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jLTUwLVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuLS1cbm5ldC82bG93cGFuL25oY191ZHAuYz0zNj1zdGF0aWMgaW50IHVkcF91bmNvbXByZXNzKHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBuZWVkZWQpXG4tLVxubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTkwLVx0XHRpZiAobG93cGFuXzgwMjE1NF9jYihza2IpLVx1MDAzZWRfc2l6ZSlcbm5ldC82bG93cGFuL25oY191ZHAuYzo5MTpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZ1aCwgbG93cGFuXzgwMjE1NF9jYihza2IpLVx1MDAzZWRfc2l6ZSAtXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTItXHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTMtXHRcdGVsc2Vcbm5ldC82bG93cGFuL25oY191ZHAuYzo5NDpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydChcdTAwMjZ1aCwgc2tiLVx1MDAzZWxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTk1LVx0XHRicmVhaztcbm5ldC82bG93cGFuL25oY191ZHAuYy05Ni1cdGRlZmF1bHQ6XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmM6OTc6XHRcdHVkcF9zZXRfbGVuX3Nob3J0KFx1MDAyNnVoLCBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTgtXHRcdGJyZWFrO1xuLS1cbm5ldC9jb3JlL3BrdGdlbi5jPTI5MzA9c3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LFxuLS1cbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTAtXHR1ZHBoLVx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVx1MDAzZWN1cl91ZHBfZHN0KTtcbm5ldC9jb3JlL3BrdGdlbi5jOjMwMTE6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBkYXRhbGVuICYjNDM7IDgpO1x0LyogREFUQSAmIzQzOyB1ZHBoZHIgKi9cbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTItXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvY29yZS9wa3RnZW4uYz0zMDU4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZmlsbF9wYWNrZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqb2Rldixcbi0tXG5uZXQvY29yZS9wa3RnZW4uYy0zMTQzLVx0dWRwaC1cdTAwM2VkZXN0ID0gaHRvbnMocGt0X2Rldi1cdTAwM2VjdXJfdWRwX2RzdCk7XG5uZXQvY29yZS9wa3RnZW4uYzozMTQ0Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgdWRwbGVuKTtcbm5ldC9jb3JlL3BrdGdlbi5jLTMxNDUtXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvY29yZS9zZWxmdGVzdHMuYz0xOT1zdHJ1Y3Qgc2tfYnVmZiAqbmV0X3Rlc3RfZ2V0X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggaWQsXG4tLVxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzQtXHRcdHVoZHItXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXHUwMDNlZHBvcnQpO1xubmV0L2NvcmUvc2VsZnRlc3RzLmM6NzU6XHRcdHVkcF9zZXRfbGVuX3Nob3J0KHVoZHIsIHNpemVvZigqc2hkcikgJiM0Mzsgc2l6ZW9mKCp1aGRyKSAmIzQzOyBhdHRyLVx1MDAzZXNpemUpO1xubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzYtXHRcdGlmIChhdHRyLVx1MDAzZW1heF9zaXplKVxubmV0L2NvcmUvc2VsZnRlc3RzLmM6Nzc6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWhkciwgYXR0ci1cdTAwM2VtYXhfc2l6ZSAtXG5uZXQvY29yZS9zZWxmdGVzdHMuYy03OC1cdFx0XHRcdFx0ICAoc2l6ZW9mKCppaGRyKSAmIzQzOyBzaXplb2YoKmVoZHIpKSk7XG4tLVxubmV0L2NvcmUvdHNvLmM9OT12b2lkIHRzb19idWlsZF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqaGRyLCBzdHJ1Y3QgdHNvX3QgKnRzbyxcbi0tXG5uZXQvY29yZS90c28uYy00Mi1cdFx0Lyogc2l6ZSBpcyBhZnRlciBzZWdtZW50YXRpb24uICovXG5uZXQvY29yZS90c28uYzo0MzpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNpemVvZigqdWgpICYjNDM7IHNpemUpO1xubmV0L2NvcmUvdHNvLmMtNDQtXHR9XG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMyNS1cdHVoLVx1MDAzZWRlc3QgPSBkcG9ydDtcbm5ldC9pcHY0L2VzcDQuYzozMjY6XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L2VzcDQuYy0zMjctXHR1aC1cdTAwM2VjaGVjayA9IDA7XG4tLVxubmV0L2lwdjQvaXBjb25maWcuYz04MTg9c3RhdGljIHZvaWQgX19pbml0IGljX2Jvb3RwX3NlbmRfaWYoc3RydWN0IGljX2RldmljZSAqZCwgdW5zaWduZWQgbG9uZyBqaWZmaWVzX2RpZmYpXG4tLVxubmV0L2lwdjQvaXBjb25maWcuYy04NDktXHRiLVx1MDAzZXVkcGguZGVzdCA9IGh0b25zKDY3KTtcbm5ldC9pcHY0L2lwY29uZmlnLmM6ODUwOlx0dWRwX3NldF9sZW5fc2hvcnQoXHUwMDI2Yi1cdTAwM2V1ZHBoLCBzaXplb2Yoc3RydWN0IGJvb3RwX3BrdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQvaXB2NC9pcGNvbmZpZy5jLTg1MS1cdC8qIFVEUCBjaGVja3N1bSBub3QgY2FsY3VsYXRlZCAtLSBleHBsaWNpdGx5IGFsbG93ZWQgaW4gQk9PVFAgUkZDICovXG4tLVxubmV0L2lwdjQvcm91dGUuYz0zMTg5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaW5ldF9ydG1fZ2V0cm91dGVfYnVpbGRfc2tiKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zMjIxLVx0XHR1ZHBoLVx1MDAzZWRlc3QgPSBkcG9ydDtcbm5ldC9pcHY0L3JvdXRlLmM6MzIyMjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcbm5ldC9pcHY0L3JvdXRlLmMtMzIyMy1cdFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tLVxubmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvdWRwLmMtMTExMS1cdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xubmV0L2lwdjQvdWRwLmM6MTExMjpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xubmV0L2lwdjQvdWRwLmMtMTExMy1cdHVoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTE3Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX3VkcF90dW5uZWxfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjgzLVx0XHRpZiAoZ3NvX3BhcnRpYWwgXHUwMDI2XHUwMDI2IHNrYl9pc19nc28oc2tiKSkge1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoyODQ6XHRcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2l6ZSAmIzQzO1xubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODUtXHRcdFx0XHRcdCAgU0tCX0dTT19DQihza2IpLVx1MDAzZWRhdGFfb2Zmc2V0ICYjNDM7XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODctXHRcdH0gZWxzZSB7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjI4ODpcdFx0XHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjg5LVx0XHR9XG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NzItXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ3MzpcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcF9oZHIoc2tiKSwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICYjNDM7IG1zcyk7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3NC1cbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXG4tLVxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy01ODEtXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU4MjpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIG5ld2xlbik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4My1cdFx0dWgtXHUwMDNlY2hlY2sgPSBjaGVjaztcbi0tXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTYwMS1cbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NjAyOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIG5ld2xlbik7XG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTYwMy1cdHVoLVx1MDAzZWNoZWNrID0gY2hlY2s7XG4tLVxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zNjEtXHR1aC1cdTAwM2VkZXN0ID0gZHBvcnQ7XG5uZXQvaXB2Ni9lc3A2LmM6MzYyOlx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XG5uZXQvaXB2Ni9lc3A2LmMtMzYzLVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuLS1cbm5ldC9pcHY2L3VkcC5jPTEzNTY9c3RhdGljIGludCB1ZHBfdjZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2LFxuLS1cbm5ldC9pcHY2L3VkcC5jLTEzNzQtXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xubmV0L2lwdjYvdWRwLmM6MTM3NTpcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xubmV0L2lwdjYvdWRwLmMtMTM3Ni1cdHVoLVx1MDAzZWNoZWNrID0gMDtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjI1PXN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTI5OC1cdFx0fVxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTI5OTpcdFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHVkcF9sZW4pO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMwMC1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYz0xMzY9bmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtMTYzLVx0ZGF0YWxlbiA9IHNrYi1cdTAwM2VsZW4gLSBwcm90b2ZmO1xubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6MTY0Olx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgZGF0YWxlbik7XG5uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYy0xNjUtXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM9MTE4PXN0YXRpYyB2b2lkIG5hdF9rZWVwYWxpdmVfc2VuZChzdHJ1Y3QgbmF0X2tlZXBhbGl2ZSAqa2EpXG4tLVxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM3LVx0dWgtXHUwMDNlZGVzdCA9IGthLVx1MDAzZWVuY2FwX2Rwb3J0O1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmM6MTM4Olx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cdTAwM2VsZW4pO1xubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM5LVx0dWgtXHUwMDNlY2hlY2sgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg0MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFVEUCBIZWFkZXIgU3RydWN0dXJlKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgVURQIGhlYWRlciBzdHJ1Y3R1cmUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3VkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJIHJlbWVtYmVyIHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3Rpbmcgc3R1ZmYgZGVmaW5lZCB0aGVyZSwgYW5kIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBgc3RydWN0IHVkcGhkcmAgZGVmaW5pdGlvbiwgdG8gdmVyaWZ5IHRoZSBleHBlY3RlZCBsYXlvdXQgb2YgdGhlIHNvdXJjZSBwb3J0LCBkZXN0aW5hdGlvbiBwb3J0LCBsZW5ndGgsIGFuZCBjaGVja3N1bSBmaWVsZHMsIGFuZCBwZXJoYXBzIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHBvdGVudGlhbCBmbGFncyBvciBvcHRpb25zIGRlZmluZWQgZnVydGhlciBkb3duIGluIHRoYXQgaW5jbHVkZSBmaWxlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIG1vdmUgb24gdG8gd2hhdGV2ZXIgbXkgYWN0dWFsIHRhc2sgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91ZHAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuKHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxuICA0MzpcdHtcbiAgNDQ6XHRcdHVoLVx1MDAzZWxlbiA9IGxlbiBcdTAwM2MgR1JPX0xFR0FDWV9NQVhfU0laRSA/IGh0b25zKGxlbikgOiAwO1xuICA0NTpcdH1cbiAgNDY6XHRcbiAgNDc6XHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW5fc2hvcnQoc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXG4gIDQ4Olx0e1xuICA0OTpcdFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShsZW4gXHUwMDNlPSBHUk9fTEVHQUNZX01BWF9TSVpFKTtcbiAgNTA6XHRcdHVoLVx1MDAzZWxlbiA9IGh0b25zKGxlbik7XG4gIDUxOlx0fVxuICA1MjpcdFxuICA1MzpcdCNkZWZpbmUgVURQX0hUQUJMRV9TSVpFX01JTl9QRVJORVRcdDEyOFxuICA1NDpcdCNkZWZpbmUgVURQX0hUQUJMRV9TSVpFX01JTlx0XHQoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAxMjggOiAyNTYpXG4gIDU1Olx0I2RlZmluZSBVRFBfSFRBQkxFX1NJWkVfTUFYXHRcdDY1NTM2XG4gIDU2Olx0XG4gIDU3Olx0c3RhdGljIGlubGluZSB1MzIgdWRwX2hhc2hmbihjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBudW0sIHUzMiBtYXNrKVxuICA1ODpcdHtcbiAgNTk6XHRcdHJldHVybiAobnVtICYjNDM7IG5ldF9oYXNoX21peChuZXQpKSBcdTAwMjYgbWFzaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMDA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBVRFAgTGVuZ3RoIFRydW5jYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBpbW1lZGlhdGVseSBjYXVnaHQgbXkgZXllLCBzcGVjaWZpY2FsbHkgdGhlIGBsZW4gJmd0Oz0gR1JPX0xFR0FDWV9NQVhfU0laRWAgY2hlY2ssIHdoZXJlIGBHUk9fTEVHQUNZX01BWF9TSVpFYCBpcyA2NTUzNi4gVGhpcyB3YXJuaW5nLCB0cmlnZ2VyZWQgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2ggaXMgaW5saW5lZCBpbnRvIGB1ZHBfc2VuZF9za2JgLCBleHBsYWlucyB0aGUgdGVzdCBzY3JpcHQmIzM5O3Mgc2VhcmNoIGZvciBgV0FSTklORzouKnVkcF9zZW5kX3NrYmAuIFNvLCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGBsZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA2NTUzNi4KCk5vdywgd2h5IGlzIGBsZW5gIGV4Y2VlZGluZyA2NTUzNT8gVGhlIHJvb3QgY2F1c2Ugc2VlbXMgdG8gYmUgdGhhdCBgY29yay0mZ3Q7ZnJhZ3NpemVgIHdhcyBub3QgYmVpbmcgcHJvcGVybHkgY2FwcGVkIGJ5IGBpcF9zZXR1cF9jb3JrYCwgbGVhZGluZyB0byB0aGUgdXNlciBwb3RlbnRpYWxseSBzZW5kaW5nIGEgbWFzc2l2ZSBVRFAgcGFja2V0IOKAkyBsZXQmIzM5O3Mgc2F5IGEgNjU1MjgtYnl0ZSBwYXlsb2FkIHBsdXMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgdG90YWwgb2YgNjU1NTYgYnl0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZS4KCkhvd2V2ZXIsIGlmIGBsZW5gIGlzIGluZGVlZCA2NTUzNiBvciBncmVhdGVyLCB0aGUgVURQIGxlbmd0aCBmaWVsZCAoYHVoLSZndDtsZW4gPSBodG9ucyhsZW4pYCkgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gMTYgYml0cy4gVGhlIHBheWxvYWQgaXRzZWxmIGFwcGVhcnMgdG8gYmUgZnVsbHkgaW5pdGlhbGl6ZWQg4oCTIGNyZWF0ZWQgZnJvbSBgY29weV9mcm9tX3VzZXJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBTbywgaXQmIzM5O3MganVzdCBhIHRydW5jYXRlZCBVRFAgbGVuZ3RoIGZpZWxkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uIGFuZCBhIGJ1ZywgYnV0IG5vdCBhbiBpbmZvcm1hdGlvbiBsZWFrLgoKQnV0LCBkb2VzIHRoaXMgY2F1c2UgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGF0IHRoZSByZWNlaXZlciBvciBzZW5kZXI/IElmIGBsZW5gIGlzIDY1NTU2LCBgaHRvbnMoNjU1NTYpYCBiZWNvbWVzIGBodG9ucygyMClgLiBUaGUgVURQIGhlYWRlciBjbGFpbXMgYSBsZW5ndGggb2YgMjAsIGJ1dCB0aGUgSVAgaGVhZGVyIGFzc2VydHMgYSBsZW5ndGggb2YgNjU1NTYuIFdoZW4gdGhlIHBhY2tldCBpcyBzZW50LCB0aGUgbmV0d29yayBkcml2ZXIgKndpbGwqIHNlbmQgNjU1NTYgYnl0ZXMuIFRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIHRob3NlIDY1NTU2IGJ5dGVzIGFyZSBhY3R1YWxseSAqaW5pdGlhbGl6ZWQqLiBBbmQgeWVzLCB0aGV5IHdlcmUuIFRoZXkgd2VyZSBhbGxvY2F0ZWQgYW5kIGZpbGxlZCBieSB0aGUgc29ja2V0IGxheWVyLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCBmcm9tIHdoYXQgSSBjYW4gc2VlLgoKTGV0JiMzOTtzIHNlZSBpZiB0aGUgcGF0Y2ggZml4ZXMgYW55dGhpbmcgZWxzZS4gVGhlIHBhdGNoIGlzIGNhcHBpbmcgdGhlIE1UVSAoTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCkgdG8gYElQX01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLiBUaGlzIGVuc3VyZXMgdGhhdCBgY29yay0mZ3Q7ZnJhZ3NpemVgIGRvZXNuJiMzOTt0IGV4Y2VlZCA2NTUzNS4gSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBpcyAmbHQ7PSA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBmcmFnbWVudHMgdGhlIHBhY2tldC4gSWYgYGNvcmstJmd0O2ZyYWdzaXplYCBleGNlZWRlZCA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCB3b3VsZCBwbGFjZSB1cCB0byBgY29yay0mZ3Q7ZnJhZ3NpemVgIGJ5dGVzIGludG8gYSBzaW5nbGUgYHNrYmAuIFdoaWxlIGBza2ItJmd0O2xlbmAgY291bGQgYmUgJmd0OyA2NTUzNSwgYHNrYi0mZ3Q7bGVuYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aGljaCBjYW4gaGFuZGxlIGxhcmdlciB2YWx1ZXMuIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhlIHRydW5jYXRpb24gaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBhbmQgdGhlIHdhcm5pbmcuCgpBbHNvLCB0aGUgSVB2NCB0b3RhbCBsZW5ndGggZmllbGQgaXMgMTYgYml0cy4gSWYgYHNrYi0mZ3Q7bGVuYCBpcyAmZ3Q7IDY1NTM1LCBgaXBfc2VuZF9za2JgIGNvdWxkIHRydW5jYXRlIHRoZSBJUCBsZW5ndGgsIHRvby4gU28sIEkgbmVlZCB0byBjaGVjayBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2suIElmIGBza2ItJmd0O2xlbmAgJmd0OyA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBhbGxvY2F0ZXMgYSBzdWl0YWJseSBzaXplZCBgc2tiYC4gVGhlIGtleSBpczogZG9lcyBpdCBhbGxvY2F0ZSBpdCBwcm9wZXJseT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCB1c2VzIGBzb2NrX2FsbG9jX3NlbmRfc2tiYCBvciBzaW1pbGFyLCB3aGljaCBkb2VzIGFsbG9jYXRlIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gSWYgdGhlIHNpemUgaXMgJmd0OyA2NTUzNSwgaXQgYWxsb2NhdGVzLCBjb3BpZXMgZGF0YSBmcm9tIHVzZXJzcGFjZSwgYW5kIHNldHMgYHNrYi0mZ3Q7bGVuYC4gQWdhaW4sIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIFRoZSBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdXNlciBkYXRhLgoKU28sIHRoZSBjb3JlIGlzc3VlIGlzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIDE2LWJpdCBsZW5ndGggZmllbGRzIG9mIFVEUCBhbmQgSVAgaGVhZGVycy4gVGhpcyBsZWFkcyB0byBhIHdhcm5pbmcgYW5kIG1hbGZvcm1lZCBwYWNrZXRzLCBidXQgbm8gaW5mb3JtYXRpb24gbGVha2FnZSBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgIGp1c3QgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfcm91dGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIDM3MTpcdFx0dW5zaWduZWQgaW50IG10dTtcbiAzNzI6XHRcbiAzNzM6XHRcdGlmICghZm9yd2FyZGluZyB8fCBkc3RfbWV0cmljX2xvY2tlZChkc3QsIFJUQVhfTVRVKSkge1xuIDM3NDpcdFx0XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiAzNzU6XHRcdFx0aWYgKG10dSlcbiAzNzY6XHRcdFx0XHRnb3RvIG91dDtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcbiAzNzk6XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiAzODA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODE6XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuIDM4MjpcdFx0aWYgKGlkZXYpXG4gMzgzOlx0XHRcdG10dSA9IFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KTtcbiAzODQ6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM4NTpcdFxuIDM4NjpcdG91dDpcbiAzODc6XHRcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4gMzg4Olx0XG4gMzg5Olx0XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIDM5MDpcdH1cbiAzOTE6XHRcbiAzOTI6XHQvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4gMzkzOlx0ICpcbiAzOTQ6XHQgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiAzOTU6XHQgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbiAzOTY6XHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuIDM5NzpcdCAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiAzOTg6XHQgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbiAzOTk6XHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIElQIEZyYWdtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBJUDZfTUFYX01UVWAgdmFsdWUsIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lOiBpdCYjMzk7cyA2NTUzNSwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgY291bGQgZGlyZWN0bHkgaW1wYWN0IG91ciBmcmFnbWVudGF0aW9uIGxvZ2ljLiBJZiB0aGUgYG10dWAgdmFsdWUgZXhjZWVkcyB0aGlzIGxpbWl0LCB3ZSBydW4gaW50byB0aGUgcmlzayBvZiB0aGUgYGNvcmstJmd0O2ZyYWdzaXplYCB2YWx1ZSBiZWNvbWluZyBsYXJnZXIgdGhhbiA2NTUzNS4gVGhpcyB3b3VsZCBiZSBhIHByb2JsZW0gYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSB0aGUgVURQIGxlbmd0aCB0byBiZSB0cnVuY2F0ZWQsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIHdhcm5pbmcgdGhhdCB3ZSBoYXZlLiAKCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdGhpbmsgb2YgYW55IG90aGVyIGVkZ2UgY2FzZXMuIFNwZWNpZmljYWxseSwgY291bGQgYG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSlgIHVuZGVyZmxvdyBpZiB0aGUgYG10dWAgaXMgZXhjZXB0aW9uYWxseSBsYXJnZT8gTGV0JiMzOTtzIHJ1bGUgdGhhdCBvdXQ6IGBsd3R1bm5lbF9oZWFkcm9vbWAgcmV0dXJucyBhIHNtYWxsIHZhbHVlLiBTaW5jZSBgbXR1YCBpcyBjYXBwZWQgYXQgNjU1MzUsIHRoYXQgc2hvdWxkIHByZXZlbnQgYGZyYWdzaXplYCBmcm9tIGV2ZXIgZXhjZWVkaW5nIHRoYXQgbWF4aW11bSB2YWx1ZS4KCkFscmlnaHQsIGxldCBtZSBub3cgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBpcF9zZXR1cF9jb3JrYCBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9vdXRwdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRhdG9taWNfZGVjKFx1MDAyNnNrLVx1MDAzZXNrX3Rza2V5KTtcbjEyOTE6XHRcdHJldHVybiBlcnI7XG4xMjkyOlx0fVxuMTI5MzpcdFxuMTI5NDpcdHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4xMjk1Olx0XHRcdFx0IHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBzdHJ1Y3QgcnRhYmxlICoqcnRwKVxuMTI5NjpcdHtcbjEyOTc6XHRcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0O1xuMTI5ODpcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4xMjk5Olx0XG4xMzAwOlx0XHRydCA9ICpydHA7XG4xMzAxOlx0XHRpZiAodW5saWtlbHkoIXJ0KSlcbjEzMDI6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xMzAzOlx0XG4xMzA0Olx0XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbjEzMDU6XHRcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4xMzA2Olx0XHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuMTMwNzpcdFxuMTMwODpcdFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbjEzMDk6XHRcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbjEzMTA6XHRcbjEzMTE6XHRcdC8qXG4xMzEyOlx0XHQgKiBzZXR1cCBmb3IgY29ya2luZy5cbjEzMTM6XHRcdCAqL1xuMTMxNDpcdFx0b3B0ID0gaXBjLVx1MDAzZW9wdDtcbjEzMTU6XHRcdGlmIChvcHQpIHtcbjEzMTY6XHRcdFx0aWYgKCFjb3JrLVx1MDAzZW9wdCkge1xuMTMxNzpcdFx0XHRcdGNvcmstXHUwMDNlb3B0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpICYjNDM7IDQwLFxuMTMxODpcdFx0XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfYWxsb2NhdGlvbik7XG4xMzE5Olx0XHRcdFx0aWYgKHVubGlrZWx5KCFjb3JrLVx1MDAzZW9wdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBgaXBfYXBwZW5kX2RhdGFgKioKCkFscmlnaHQsIGxldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIElmIHRoZSBgY29yay0mZ3Q7ZnJhZ3NpemVgIHZhbHVlIHNvbWVob3cgYmFsbG9vbnMgYmV5b25kIDY1NTM1LCBhIHNlcmlvdXMgcHJvYmxlbSBjb3VsZCBhcmlzZSB3aXRoaW4gdGhlIGBpcF9hcHBlbmRfZGF0YWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgY291bGQgbGVhZCB0byB0aGUgY29uc3RydWN0aW9uIG9mIGFuIHNrYiB3aXRoIGEgbGVuZ3RoIChgbGVuYCkgdGhhdCBleGNlZWRzIHRoZSA2NTUzNS1ieXRlIGxpbWl0LiBUaGlzIGlzIGEgY2xhc3NpYyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBzY2VuYXJpbywgYW5kIGEgc2lnbmlmaWNhbnQgc2VjdXJpdHkgY29uY2Vybiwgc28gbGV0JiMzOTtzIGNoZWNrIG91dCBgaXBfYXBwZW5kX2RhdGFgIHRvIGNvbmZpcm0gdGhlIGNvZGUmIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX2FwcGVuZF9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmM9OTUxPUVYUE9SVF9TWU1CT0woaXBfZ2VuZXJpY19nZXRmcmFnKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk1Mi1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjk1MzpzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTU0LVx0XHRcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNDktLypcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNTA6ICpcdGlwX2FwcGVuZF9kYXRhKCkgY2FuIG1ha2Ugb25lIGxhcmdlIElQIGRhdGFncmFtIGZyb20gbWFueSBwaWVjZXMgb2Zcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNTEtICpcdGRhdGEuICBFYWNoIHBpZWNlIHdpbGwgYmUgaGVsZCBvbiB0aGUgc29ja2V0IHVudGlsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM1OS0gKi9cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNjA6aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM2MS1cdFx0ICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM4MC1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzODE6XHRyZXR1cm4gX19pcF9hcHBlbmRfZGF0YShzaywgZmw0LCBcdTAwMjZzay1cdTAwM2Vza193cml0ZV9xdWV1ZSwgXHUwMDI2aW5ldC1cdTAwM2Vjb3JrLmJhc2UsXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgyLVx0XHRcdFx0c2tfcGFnZV9mcmFnKHNrKSwgZ2V0ZnJhZyxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzk5PXN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDg5LVxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTQ5MDpcdFx0LyogRm9yIHN1Y2ggc29ja2V0cywgdHJhbnNoZHJsZW4gaXMgemVybyB3aGVuIGRvIGlwX2FwcGVuZF9kYXRhKCksXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDkxLVx0XHQgKiBzbyBpY21waGRyIGRvZXMgbm90IGluIHNrYiBsaW5lYXIgcmVnaW9uIGFuZCBjYW4gbm90IGdldCBpY21wX3R5cGVcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNTU0PXN0cnVjdCBza19idWZmICppcF9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Ni1cbm5ldC9pcHY0L2lwX291dHB1dC5jOjE1Nzc6XHRlcnIgPSBfX2lwX2FwcGVuZF9kYXRhKHNrLCBmbDQsIFx1MDAyNnF1ZXVlLCBjb3JrLFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3OC1cdFx0XHQgICAgICAgXHUwMDI2Y3VycmVudC1cdTAwM2V0YXNrX2ZyYWcsIGdldGZyYWcsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTYwNT12b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvcmlnX3NrLFxuLS1cbm5ldC9pcHY0L2lwX291dHB1dC5jLTE2NTgtXHRpcGMuc29ja2MubWFyayA9IGZsNC5mbG93aTRfbWFyaztcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NTk6XHRlcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgXHUwMDI2Zmw0LCBpcF9yZXBseV9nbHVlX2JpdHMsIGFyZy1cdTAwM2Vpb3YtXHUwMDNlaW92X2Jhc2UsXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjYwLVx0XHRcdCAgICAgbGVuLCAwLCBcdTAwMjZpcGMsIFx1MDAyNnJ0LCBNU0dfRE9OVFdBSVQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYF9faXBfYXBwZW5kX2RhdGFgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBfX2lwX2FwcGVuZF9kYXRhYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBJUCBzdGFjayBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIOKAkyB0aGUgYHNrX2J1ZmZgIHN0cnVjdHMsIHRoZSBuZXR3b3JrIGhlYWRlcnMsIHRoZSBjaGVja3N1bSBjYWxjdWxhdGlvbnMuLi4gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIGZyYWdtZW50aW5nIGFuZCBzZW5kaW5nIElQIHBhY2tldHMsIHNwZWNpZmljYWxseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCYjMzk7cyBwcmFjdGljYWxseSBzY3JlYW1pbmcgJiMzNDtkYXRhIG1hbmlwdWxhdGlvbiYjMzQ7IHdoaWNoIGltcGxpZXMgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgbmVlZCB0byBiZSBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZS4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgTVRVcz8gV2hhdCBhYm91dCBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGF2b2lkZWQgb3Igb3B0aW1pemVkIHdpdGggdGVjaG5pcXVlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIEkvTz8gSSYjMzk7bSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBzY2VuYXJpb3MuCgpGdXJ0aGVybW9yZSwgSeKAmW0gbWVudGFsbHkgY29tcGFyaW5nIGFuZCBjb250cmFzdGluZyBpdCB3aXRoIG90aGVyIHNpbWlsYXIgZnVuY3Rpb25zIEnigJl2ZSB3b3JrZWQgd2l0aCBpbiB0aGUgcGFzdCwgbWF5YmUgaW4gb3RoZXIgT1Mga2VybmVscyBvciBuZXR3b3JrIGRldmljZSBkcml2ZXJzLiBBcmUgdGhlcmUgYW55IGNvbW1vbiBwaXRmYWxscz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBjbGV2ZXIgdGVjaG5pcXVlcyBmb3IgaGFuZGxpbmcgcGFydGlhbCB3cml0ZXMgb3IgZXJyb3JzPyBJ4oCZbSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncyBvciBvcHBvcnR1bml0aWVzIGZvciBlbmhhbmNlbWVudC4KCkkmIzM5O20gZ2V0dGluZyByZWFkeSB0byBzY3J1dGluaXplIHRoZSBjb2RlIGl0c2VsZiwgbG9va2luZyBmb3IgZWZmaWNpZW5jeSwgdGhyZWFkLXNhZmV0eSwgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIGltcHJvdmVtZW50LiBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIHBvaW50ZXIgYXJpdGhtZXRpYyBhbmQgbGlrZWx5IHNvbWUgYml0d2lzZSBvcGVyYXRpb25zLCB3aGljaCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIGZvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb2RlJiMzOTtzIGVmZmljaWVuY3ksIGFuZCBpZiBub3QsIEkmIzM5O2xsIGJlIGRpdmluZyBkZWVwIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgaW4gdGhlIHdheSBpdCBpcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIElQIHN0YWNrJiMzOTtzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgcGFja2V0IHNpemVzLCBmcmFnbWVudGF0aW9uIG9wdGlvbnMsIGFuZCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfb3V0cHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTM6XHRzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxuIDk1NDpcdFx0XHRcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gOTU1Olx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxuIDk1NjpcdFx0XHRcdCAgICBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxuIDk1NzpcdFx0XHRcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcbiA5NTg6XHRcdFx0XHQgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsXG4gOTU5Olx0XHRcdFx0XHRcdGludCBsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLFxuIDk2MDpcdFx0XHRcdCAgICB2b2lkICpmcm9tLCBpbnQgbGVuZ3RoLCBpbnQgdHJhbnNoZHJsZW4sXG4gOTYxOlx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBmbGFncylcbiA5NjI6XHR7XG4gOTYzOlx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XG4gOTY0Olx0XHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gTlVMTDtcbiA5NjU6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gOTY2Olx0XHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gY29yay1cdTAwM2VvcHQ7XG4gOTY3Olx0XHRpbnQgaGhfbGVuO1xuIDk2ODpcdFx0aW50IGV4dGhkcmxlbjtcbiA5Njk6XHRcdGludCBtdHU7XG4gOTcwOlx0XHRpbnQgY29weTtcbiA5NzE6XHRcdGludCBlcnI7XG4gOTcyOlx0XHRpbnQgb2Zmc2V0ID0gMDtcbiA5NzM6XHRcdGJvb2wgemMgPSBmYWxzZTtcbiA5NzQ6XHRcdHVuc2lnbmVkIGludCBtYXhmcmFnbGVuLCBmcmFnaGVhZGVybGVuLCBtYXhub25mcmFnc2l6ZTtcbiA5NzU6XHRcdGludCBjc3VtbW9kZSA9IENIRUNLU1VNX05PTkU7XG4gOTc2Olx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IGRzdF9ydGFibGUoY29yay1cdTAwM2Vkc3QpO1xuIDk3NzpcdFx0Ym9vbCBwYWdlZCwgaG9sZF90c2tleSA9IGZhbHNlLCBleHRyYV91cmVmID0gZmFsc2U7XG4gOTc4Olx0XHR1bnNpZ25lZCBpbnQgd21lbV9hbGxvY19kZWx0YSA9IDA7XG4gOTc5Olx0XHR1MzIgdHNrZXkgPSAwO1xuIDk4MDpcdFxuIDk4MTpcdFx0c2tiID0gc2tiX3BlZWtfdGFpbChxdWV1ZSk7XG4gOTgyOlx0XG4gOTgzOlx0XHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xuIDk4NDpcdFx0bXR1ID0gY29yay1cdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVx1MDAzZWZyYWdzaXplO1xuIDk4NTpcdFx0cGFnZWQgPSAhIWNvcmstXHUwMDNlZ3NvX3NpemU7XG4gOTg2Olx0XG4gOTg3Olx0XHRoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KTtcbiA5ODg6XHRcbiA5ODk6XHRcdGZyYWdoZWFkZXJsZW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyAob3B0ID8gb3B0LVx1MDAzZW9wdGxlbiA6IDApO1xuIDk5MDpcdFx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXHUwMDI2IH43KSAmIzQzOyBmcmFnaGVhZGVybGVuO1xuIDk5MTpcdFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcbiA5OTI6XHRcbiA5OTM6XHRcdGlmIChjb3JrLVx1MDAzZWxlbmd0aCAmIzQzOyBsZW5ndGggXHUwMDNlIG1heG5vbmZyYWdzaXplIC0gZnJhZ2hlYWRlcmxlbikge1xuIDk5NDpcdFx0XHRpcF9sb2NhbF9lcnJvcihzaywgRU1TR1NJWkUsIGZsNC1cdTAwM2VkYWRkciwgaW5ldC1cdTAwM2VpbmV0X2Rwb3J0LFxuIDk5NTpcdFx0XHRcdCAgICAgICBtdHUgLSAob3B0ID8gb3B0LVx1MDAzZW9wdGxlbiA6IDApKTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA5OTc6XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdC8qXG4xMDAwOlx0XHQgKiB0cmFuc2hkcmxlbiBcdTAwM2UgMCBtZWFucyB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGZyYWdtZW50IGFuZCB3ZSB3aXNoXG4xMDAxOlx0XHQgKiBpdCB3b24mIzM5O3QgYmUgZnJhZ21lbnRlZCBpbiB0aGUgZnV0dXJlLlxuMTAwMjpcdFx0ICovXG4xMDAzOlx0XHRpZiAodHJhbnNoZHJsZW4gXHUwMDI2XHUwMDI2XG4xMDA0Olx0XHQgICAgbGVuZ3RoICYjNDM7IGZyYWdoZWFkZXJsZW4gXHUwMDNjPSBtdHUgXHUwMDI2XHUwMDI2XG4xMDA1Olx0XHQgICAgcnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgKE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTSkgXHUwMDI2XHUwMDI2XG4xMDA2Olx0XHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19NT1JFKSB8fCBjb3JrLVx1MDAzZWdzb19zaXplKSBcdTAwMjZcdTAwMjZcbjEwMDc6XHRcdCAgICAoIWV4dGhkcmxlbiB8fCAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkpKVxuMTAwODpcdFx0XHRjc3VtbW9kZSA9IENIRUNLU1VNX1BBUlRJQUw7XG4xMDA5Olx0XG4xMDEwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBsZW5ndGgpIHtcbjEwMTE6XHRcdFx0c3RydWN0IG1zZ2hkciAqbXNnID0gZnJvbTtcbjEwMTI6XHRcbjEwMTM6XHRcdFx0aWYgKGdldGZyYWcgPT0gaXBfZ2VuZXJpY19nZXRmcmFnIFx1MDAyNlx1MDAyNiBtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjEwMTQ6XHRcdFx0XHRpZiAoc2tiX3pjb3B5KHNrYikgXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2Vtc2dfdWJ1ZiAhPSBza2JfemNvcHkoc2tiKSlcbjEwMTU6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTAxNjpcdFxuMTAxNzpcdFx0XHRcdC8qIExlYXZlIHVhcmcgTlVMTCBpZiBjYW4mIzM5O3QgemVyb2NvcHksIGNhbGxlcnMgc2hvdWxkXG4xMDE4Olx0XHRcdFx0ICogYmUgYWJsZSB0byBoYW5kbGUgaXQuXG4xMDE5Olx0XHRcdFx0ICovXG4xMDIwOlx0XHRcdFx0aWYgKChydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX1NHKSBcdTAwMjZcdTAwMjZcbjEwMjE6XHRcdFx0XHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTAyMjpcdFx0XHRcdFx0cGFnZWQgPSB0cnVlO1xuMTAyMzpcdFx0XHRcdFx0emMgPSB0cnVlO1xuMTAyNDpcdFx0XHRcdFx0dWFyZyA9IG1zZy1cdTAwM2Vtc2dfdWJ1ZjtcbjEwMjU6XHRcdFx0XHR9XG4xMDI2Olx0XHRcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xuMTAyNzpcdFx0XHRcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgbGVuZ3RoLCBza2JfemNvcHkoc2tiKSxcbjEwMjg6XHRcdFx0XHRcdFx0XHQgICAgZmFsc2UpO1xuMTAyOTpcdFx0XHRcdGlmICghdWFyZylcbjEwMzA6XHRcdFx0XHRcdHJldHVybiAtRU5PQlVGUztcbjEwMzE6XHRcdFx0XHRleHRyYV91cmVmID0gIXNrYl96Y29weShza2IpO1x0Lyogb25seSByZWYgb24gbmV3IHVhcmcgKi9cbjEwMzI6XHRcdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9TRyBcdTAwMjZcdTAwMjZcbjEwMzM6XHRcdFx0XHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xuMTAzNDpcdFx0XHRcdFx0cGFnZWQgPSB0cnVlO1xuMTAzNTpcdFx0XHRcdFx0emMgPSB0cnVlO1xuMTAzNjpcdFx0XHRcdH0gZWxzZSB7XG4xMDM3Olx0XHRcdFx0XHR1YXJnX3RvX21zZ3pjKHVhcmcpLVx1MDAzZXplcm9jb3B5ID0gMDtcbjEwMzg6XHRcdFx0XHRcdHNrYl96Y29weV9zZXQoc2tiLCB1YXJnLCBcdTAwMjZleHRyYV91cmVmKTtcbjEwMzk6XHRcdFx0XHR9XG4xMDQwOlx0XHRcdH1cbjEwNDE6XHRcdH0gZWxzZSBpZiAoKGZsYWdzIFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcdTAwMjZcdTAwMjYgbGVuZ3RoKSB7XG4xMDQyOlx0XHRcdGlmIChpbmV0X3Rlc3RfYml0KEhEUklOQ0wsIHNrKSlcbjEwNDM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTA0NDpcdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9TRyBcdTAwMjZcdTAwMjZcbjEwNDU6XHRcdFx0ICAgIGdldGZyYWcgPT0gaXBfZ2VuZXJpY19nZXRmcmFnKVxuMTA0NjpcdFx0XHRcdC8qIFdlIG5lZWQgYW4gZW1wdHkgYnVmZmVyIHRvIGF0dGFjaCBzdHVmZiB0byAqL1xuMTA0NzpcdFx0XHRcdHBhZ2VkID0gdHJ1ZTtcbjEwNDg6XHRcdFx0ZWxzZVxuMTA0OTpcdFx0XHRcdGZsYWdzIFx1MDAyNj0gfk1TR19TUExJQ0VfUEFHRVM7XG4xMDUwOlx0XHR9XG4xMDUxOlx0XG4xMDUyOlx0XHRjb3JrLVx1MDAzZWxlbmd0aCAmIzQzOz0gbGVuZ3RoO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE1MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJc3N1ZSB3aXRoIExhcmdlIFVEUCBQYWNrZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBwb3RlbnRpYWwgb3ZlcmZsb3cuIEluaXRpYWxseSwgbXkgdGhpbmtpbmcgd2FzOiBpZiBgY29yay0mZ3Q7ZnJhZ3NpemVgIGlzIG1hc3NpdmUsIHRoZW4gYG10dWAgd291bGQgYmUgZXF1YWxseSBodWdlLCBhbmQgc28gYG1heG5vbmZyYWdzaXplYCB3b3VsZCBmb2xsb3cuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBjb3JrLSZndDtsZW5ndGggJiM0MzsgbGVuZ3RoICZndDsgbWF4bm9uZnJhZ3NpemUgLSBmcmFnaGVhZGVybGVuYCBtaWdodCBub3QgZXZlbiBraWNrIGluIGZvciBwYWNrZXQgc2l6ZXMgYmVsb3cgNjU1MzUsIHNvIHRoYXQgd2FzIGNvbmNlcm5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBjb3JrLSZndDtsZW5ndGhgIGFuZCBgbGVuZ3RoYCBhcmUganVzdCBpbnRlZ2Vycy4KCldhaXQgYSBzZWNvbmQsIHRoZSBjb2RlICpkb2VzKiBjYXAgYG10dWAgYXQgYElQX01BWF9NVFVgICg2NTUzNSkuIFRoZXJlZm9yZSwgYG1heG5vbmZyYWdzaXplYCBpcyAqYXQgbW9zdCogNjU1MzUuIFNvIHRoYXQgbWVhbnMgYGNvcmstJmd0O2xlbmd0aCAmIzQzOyBsZW5ndGhgICpjYW4mIzM5O3QqIGdvIGJleW9uZCA2NTUzNSBtaW51cyB0aGUgZnJhZ21lbnRhdGlvbiBoZWFkZXIgbGVuZ3RoLiBJZiBpdCBkb2VzLCB0aGVuIHRoZSBjb2RlICpzaG91bGQqIHJldHVybiBgLUVNU0dTSVpFYC4KClRoZSB0ZXN0IHNjcmlwdCBzZWVtcyB0byBleHBlY3QgcHJlY2lzZWx5IHRoaXMgYmVoYXZpb3Igd2l0aCBpdHMgYHRyeS4uLmV4Y2VwdGAgYmxvY2ssIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGF0IGBFTVNHU0laRWAgZXJyb3IuIEJ1dCB0aGUgc2NyaXB0IHNheXMgc29tZXRoaW5nIGFib3V0IGEgV0FSTiBtZXNzYWdlIGJlaW5nIHByaW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrLiBSaWdodCwgaWYgYG10dWAgaXNuJiMzOTt0IGNhcHBlZCwgYG1heG5vbmZyYWdzaXplYCBnb2VzIGJleW9uZCA2NTUzNS4gU28sIGBfX2lwX2FwcGVuZF9kYXRhYCBjb3VsZCAqYWxsb3cqIGBjb3JrLSZndDtsZW5ndGhgIHRvIGV4Y2VlZCA2NTUzNS4gSXQgd291bGQgdGhlbiBhbGxvY2F0ZSBhbiBTS0IgYW5kIGNvcHkgdGhlIGRhdGEuIGB1ZHBfc2VuZF9za2JgIGlzIGNhbGxlZCBhbmQgY2FsbHMgYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2gsICp0aGF0JiMzOTtzKiB3aGVyZSB0aGUgV0FSTiBpcyB0cmlnZ2VyZWQgYmVjYXVzZSBgbGVuYCBpcyAmZ3Q7PSA2NTUzNi4gYHVkcF9zZW5kX3NrYmAgZ29lcyBhaGVhZCBhbmQgc2VuZHMgdGhlIHBhY2tldC4gU28sIGl0JiMzOTtzIGEgV0FSTiwgYnV0IHRoZSBkYXRhIGlzIGNvcnJlY3RseSBjb3BpZWQuCgpOb3csIEkgd2FzIHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgaXQmIzM5O3Mgb2theSBiZWNhdXNlIGBfX2lwX2FwcGVuZF9kYXRhYCBjb3BpZXMgYGxlbmd0aGAgYnl0ZXMgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIFNLQi4gVGhlIFNLQiBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIG15IGNvbmNlcm5zIGFyZSBsYWlkIHRvIHJlc3QuIFRoZSBvbmx5IGlzc3VlLCBhcyBJIHNlZSBpdCBub3csIGlzIHRoYXQgdGhlIFVEUCBsZW5ndGggZmllbGQgKndpbGwqIGJlIHRydW5jYXRlZCB0byAxNiBiaXRzLCBhbmQgdGhlIElQIGxlbmd0aCBmaWVsZCAqbWlnaHQqIGFsc28gZ2V0IHRydW5jYXRlZCB0b28sIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uLiBJdCB3YXJyYW50cyBhIHdhcm5pbmcsIGJ1dCBpdCYjMzk7cyBub3QgYWN0dWFsbHkgYSBtZW1vcnkgbGVhay4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgaXA2X3NldHVwX2NvcmtgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X291dHB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDIwOlx0XHR9XG4xNDIxOlx0XHR2Nl9jb3JrLVx1MDAzZWhvcF9saW1pdCA9IGlwYzYtXHUwMDNlaGxpbWl0O1xuMTQyMjpcdFx0djZfY29yay1cdTAwM2V0Y2xhc3MgPSBpcGM2LVx1MDAzZXRjbGFzcztcbjE0MjM6XHRcdHY2X2NvcmstXHUwMDNlZG9udGZyYWcgPSBpcGM2LVx1MDAzZWRvbnRmcmFnO1xuMTQyNDpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5mbGFncyBcdTAwMjYgRFNUX1hGUk1fVFVOTkVMKVxuMTQyNTpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI2Olx0XHRcdCAgICAgIFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSkgOiBkc3Q2X210dShcdTAwMjZydC1cdTAwM2Vkc3QpO1xuMTQyNzpcdFx0ZWxzZVxuMTQyODpcdFx0XHRtdHUgPSBSRUFEX09OQ0UobnAtXHUwMDNlcG10dWRpc2MpIFx1MDAzZT0gSVBWNl9QTVRVRElTQ19QUk9CRSA/XG4xNDI5Olx0XHRcdFx0UkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KSA6IGRzdDZfbXR1KHhmcm1fZHN0X3BhdGgoXHUwMDI2cnQtXHUwMDNlZHN0KSk7XG4xNDMwOlx0XG4xNDMxOlx0XHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXHUwMDNlZnJhZ19zaXplKTtcbjE0MzI6XHRcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuMTQzMzpcdFx0XHRtdHUgPSBmcmFnX3NpemU7XG4xNDM0Olx0XG4xNDM1Olx0XHRpZiAoc2tfaXNfdWRwKHNrKSlcbjE0MzY6XHRcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuMTQzNzpcdFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuMTQzODpcdFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbjE0Mzk6XHRcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG4xNDQwOlx0XHRjb3JrLVx1MDAzZWJhc2UubWFyayA9IGlwYzYtXHUwMDNlc29ja2MubWFyaztcbjE0NDE6XHRcdGNvcmstXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXHUwMDNlc29ja2MucHJpb3JpdHk7XG4xNDQyOlx0XHRzb2NrX3R4X3RpbWVzdGFtcChzaywgXHUwMDI2aXBjNi1cdTAwM2Vzb2NrYywgXHUwMDI2Y29yay1cdTAwM2ViYXNlLnR4X2ZsYWdzKTtcbjE0NDM6XHRcdGlmIChpcGM2LVx1MDAzZXNvY2tjLnRzZmxhZ3MgXHUwMDI2IFNPQ0tDTV9GTEFHX1RTX09QVF9JRCkge1xuMTQ0NDpcdFx0XHRjb3JrLVx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcbjE0NDU6XHRcdFx0Y29yay1cdTAwM2ViYXNlLnRzX29wdF9pZCA9IGlwYzYtXHUwMDNlc29ja2MudHNfb3B0X2lkO1xuMTQ0NjpcdFx0fVxuMTQ0NzpcdFx0Y29yay1cdTAwM2ViYXNlLmxlbmd0aCA9IDA7XG4xNDQ4Olx0XHRjb3JrLVx1MDAzZWJhc2UudHJhbnNtaXRfdGltZSA9IGlwYzYtXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcbjE0NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MDkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBJUHY2IFVEUCBKdW1ibyBGcmFtZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlwNl9zZXR1cF9jb3JrYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIE1UVSBhbmQgVURQIHNvY2tldHMuIFRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIGJlIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIFVEUCBsZW5ndGggZmllbGQuIFdoZW4gYSBzb2NrZXQgaXMgVURQLCB0aGUgTVRVIGlzIGNhcHBlZCBhdCBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9zZXR1cF9jb3JrYC4gVGhpcyBrZWVwcyBgY29yay0mZ3Q7YmFzZS5mcmFnc2l6ZWAgd2l0aGluIGJvdW5kcywgd2hpY2ggaW4gdHVybiBwcmV2ZW50cyBgc2tiLSZndDtsZW5gIGZyb20gZXhjZWVkaW5nIDY1NTM1IHdoZW4gYXBwZW5kaW5nIGRhdGEgaW4gYGlwNl9hcHBlbmRfZGF0YWAuIFRoaXMsIGltcG9ydGFudGx5LCBhdm9pZHMgdGhlIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCB3YXJuaW5nIGluIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoIHNpZ25pZmllcyB0aGUgdHJ1bmNhdGlvbiBvZiB0aGUgVURQIGxlbmd0aCBmaWVsZC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIEJ1dCBubywgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIFRoZSBkYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlIG9yIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLCBlbnN1cmluZyBmdWxsIGluaXRpYWxpemF0aW9uLiBUaGUgcHJvYmxlbSBpcyBwdXJlbHkgYW4gaW50ZWdlciBvdmVyZmxvdyB0aGF0IHJlc3VsdHMgaW4gYSBtYWxmb3JtZWQgcGFja2V0IHdpdGggYSB0cnVuY2F0ZWQgbGVuZ3RoLiBUaGUga2VybmVsJiMzOTtzIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGlmIHRoZXkgd2VyZSBoYXBwZW5pbmcuIEJ1dCBoZXJlLCBpdCYjMzk7cyBqdXN0IGFib3V0IHRoZSBsZW5ndGggZmllbGQgZ2V0dGluZyB0cnVuY2F0ZWQuCgpOb3csIGlmIHRoZSBsZW5ndGggZmllbGQgZ2V0cyB0cnVuY2F0ZWQsIGNvdWxkIGEgcmVjZWl2ZXIgbWlzaW50ZXJwcmV0IHRoZSBwYWNrZXQ/IENvdWxkIGl0IGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIHRoZSByZWNlaXZpbmcgZW5kPyBJZiB0aGUgcmVjZWl2ZXIgZ2V0cyBhIHBhY2tldCB3aXRoIGEgKnNtYWxsKiBsZW5ndGggZmllbGQgYnV0IGEgKmxhcmdlKiBwYXlsb2FkLCBpdCYjMzk7bGwganVzdCBpZ25vcmUgdGhlIGV4dHJhIHBheWxvYWQuIEhvd2V2ZXIsIGlmIHRoZSByZWNlaXZlciBnZXRzIGEgcGFja2V0IHdpdGggYSAqbGFyZ2UqIGxlbmd0aCBmaWVsZCBidXQgYSAqc21hbGwqIHBheWxvYWQsIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtLCBwb3RlbnRpYWxseSBjYXVzaW5nIGl0IHRvIHJlYWQgb3V0IG9mIGJvdW5kcy4gQnV0IHdhaXQsIGluIG91ciBjYXNlLCB0aGUgbGVuZ3RoICppcyogdHJ1bmNhdGVkIChlLmcuLCA2NTU1NiBiZWNvbWVzIDIwKS4gU28gdGhlIGFjdHVhbCBwYXlsb2FkIGlzIHNtYWxsZXIgdGhhbiB0aGUgbGVuZ3RoIGZpZWxkIGluIHRoZSBwYWNrZXQuIFNvIHRoZSByZWNlaXZlciB3aWxsIG9ubHkgc2VlIGEgVURQIHBhY2tldCBvZiBsZW5ndGggMjAgYW5kIGlnbm9yZSB0aGUgcmVzdCBvZiB0aGUgZ2FyYmFnZS4gU28sIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsgaGVyZS4KCkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkgc2VlIHRoZSB0ZXN0IHNjcmlwdCB1c2VzIGBJUFY2X1RMVl9KVU1CT2AuIFRoZSB0ZXN0IHNldHMgdXAgYW4gSVB2NiBjb25uZWN0aW9uIGFuZCBhIHJhdyBVRFAgc29ja2V0IHdpdGggYSBqdW1ibyBwYXlsb2FkLiBJdCB1c2VzIGEgUkFXIHNvY2tldCB3aXRoIGBJUFBST1RPX1VEUGAgYW5kIHNlbmRzIGEgcGFja2V0IHdpdGggYSBKdW1ibyBwYXlsb2FkIG9wdGlvbi4gSG9sZCBvbi4uLiBpZiBpdCYjMzk7cyBhIFJBVyBzb2NrZXQsIHRoZW4gYHNrX2lzX3VkcChzaylgIGlzIGZhbHNlLiBTbywgdGhhdCBtZWFucyB0aGUgTVRVIGlzbiYjMzk7dCBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCBmb3IgUkFXIHNvY2tldHMuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25kaXRpb25zIGFuZCBsb2dpYyB3aXRoaW4gYHNrX2lzX3VkcGAgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcHJvdGVjdGlvbiBwcm92aWRlZCBmb3IgVURQIHNvY2tldHMgbWlnaHQgbm90IGFwcGx5IHRvIFJBVyBzb2NrZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza19pc191ZHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc29jay5oPTI5NjU9c3RhdGljIGlubGluZSBib29sIHNrX2lzX3RjcChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI5NzEtXG5pbmNsdWRlL25ldC9zb2NrLmg6Mjk3MjpzdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdWRwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTczLXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTk3OD1CUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Ny1cdFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFRDUCBzb2NrZXQgaW4gTElTVEVOICovXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4ODpcdGlmICh1bmxpa2VseShzayBcdTAwMjZcdTAwMjYgc2tfaXNfdWRwKHNrKSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg5LVx0XHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsgLyogb25seSBhY2NlcHQgVURQIHNvY2tldCBpbiBDTE9TRSAqL1xuLS1cbm5ldC9jb3JlL3NvY2suYz00NDY1PWJvb2wgc2tfYnVzeV9sb29wX2VuZCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUpXG4tLVxubmV0L2NvcmUvc29jay5jLTQ0NzEtXG5uZXQvY29yZS9zb2NrLmM6NDQ3MjpcdGlmIChza19pc191ZHAoc2spIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvc29jay5jLTQ0NzMtXHQgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcyhcdTAwMjZ1ZHBfc2soc2spLVx1MDAzZXJlYWRlcl9xdWV1ZSkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz01NDE9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy01NDQtXHRcdHJldHVybiAoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiAoVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfTElTVEVOKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTQ1Olx0aWYgKHNrX2lzX3VkcChzaykpXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0Ni1cdFx0cmV0dXJuIHNrX2hhc2hlZChzayk7XG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNC1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxNDM1Olx0aWYgKHNrX2lzX3VkcChzaykpXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTQzNi1cdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMwMT1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMDctXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1RDUDtcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMwODpcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwOS1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVURQO1xuLS1cbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMxNz1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zMjUtXHRcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1RDUDtcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMyNjpcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNy1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzM3LVx0ICovXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYzozMzg6XHRpZiAocmV0ID09IDAgXHUwMDI2XHUwMDI2IHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSBcdTAwMjZcdTAwMjZcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzOS1cdCAgICBhZGRybGVuIFx1MDAzZT0gb2Zmc2V0b2ZlbmQodHlwZW9mKCphZGRyZXNzKSwgc2FfZmFtaWx5KSBcdTAwMjZcdTAwMjZcbi0tXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zNDY9c3RhdGljIGludCBob29rX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXG4tLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzYxLVxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzYyOlx0aWYgKHNrX2lzX3VkcChzb2NrLVx1MDAzZXNrKSlcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM2My1cdFx0YWNjZXNzX3JlcXVlc3QgPSBMQU5ETE9DS19BQ0NFU1NfTkVUX0NPTk5FQ1RfU0VORF9VRFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzQyCgkJCQkJCQlvdXRwdXQ6IDI2NwoJCQkJCQkJdGhvdWdodHM6IDEyODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiB0aGUgTVRVIENhcHBpbmcgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2tfaXNfdWRwYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgVURQIHNvY2tldC4gRm9yIFJBVyBzb2NrZXRzLCBpdCYjMzk7cyBmYWxzZSwgc28gdGhlIE1UVSBpc24mIzM5O3QgY2FwcGVkLiBUaGF0IG1lYW5zIHRoYXQgYGNvcmstJmd0O2ZyYWdzaXplYCBjb3VsZCB0ZWNobmljYWxseSBiZSBncmVhdGVyIHRoYW4gNjU1MzUsIGJ1dCB0aGUga2VybmVsICpkb2VzbiYjMzk7dCogY2FsbCBgdWRwX3NldF9sZW5fc2hvcnRgIGZvciBSQVcgc29ja2V0cyBzaW5jZSB0aGUgdXNlciBoYW5kbGVzIHRoYXQuIFNvLCBubyB3YXJuaW5nLiBUaGUgYHRlc3RfaXB2Nl9qdW1ib2Agc2NyaXB0IGlzIGxpa2VseSBqdXN0IHZlcmlmeWluZyB0aGF0IEp1bWJvIHBhY2tldHMgKG92ZXIgNjU1MzUgYnl0ZXMpIGNvbnRpbnVlIHRvIHdvcmsgZmluZSB3aXRoIFJBVyBzb2NrZXRzLCBhbmQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIHRoZW0uCgpOb3csIGRvZXMgdGhpcyBoYXZlIGFueSBLTVNBTiByZWxldmFuY2U/IFRoZSBwYXRjaCBtb2RpZmllcyBNVFUgY2FsY3VsYXRpb25zIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyB3aXRoaW4gdGhlIGxlbmd0aCBmaWVsZHMsIHNwZWNpZmljYWxseSBmb3IgVURQIHBhY2tldHMgd2hpY2ggYXJlIGNhcHBlZCB0byA2NTUzNSBieXRlcy4gVGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIFNLQiBtZW1vcnkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyIGRhdGEuIFRoZSBpc3N1ZSBpcyBwdXJlbHkgYSBsZW5ndGggdHJ1bmNhdGlvbiB0aGF0IGNhbiBsZWFkIHRvIGEgbWFsZm9ybWVkIHBhY2tldCBhbmQgYSBrZXJuZWwgd2FybmluZy4gS0FTQU4gaXMgY2VydGFpbmx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgYW55IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaWYgdGhleSBzb21laG93IG9jY3VycmVkLCBidXQgdGhleSBkb24mIzM5O3QgKmhhcHBlbiogaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgYWdhaW4gdG8gYmUgc3VyZS4gSSYjMzk7bSBzZWVpbmcgdGhlIGNoYW5nZXMsIGFuZCB0aGV5JiMzOTtyZSBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBqdXN0IGNhcHMgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgKDY1NTM1KSBvciBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gdmFyaW91cyBwbGFjZXMuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGxlbmd0aHMgZm9yIFVEUCBwYWNrZXRzLCB3aGljaCBoYXZlIGEgMTYtYml0IGxlbmd0aCBmaWVsZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuCgpIZXJlJiMzOTtzIG15IGZ1bGwgS01TQU4gcmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LiBUaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLSZndDtmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxuXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxuXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS4zNzIxMjk0MzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODMxMjMyNTYyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF9zZW5kbXNnXCIsXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCIsXG4gICAgXCJpcF9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxcblxcblRoZSBmaXggc2ltcGx5IGNhcHMgdGhlIE1UVSBhbmQgYGNvcmstXFx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS4zNzIxMzUzMzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTA2NTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjNmNjMjI5NTliN2E1YWY4YWMzMWYwMzQ2ZGExZmYyOGMwN2ZiMDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBvdXQ6XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxuK1xcbiBcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbmluZGV4IDc0ZTA5NWI2YjdjYTAuLmEyNGNjOGVlMTFkM2UgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xcbkBAIC0xMzAzLDYgKzEzMDMsNyBAQCBzdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbiBcXG4gXFx0Y29yay1cXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xcbiBcXHRcXHRcXHQgZHN0NF9tdHUoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuIFxcbiBcXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXFx1MDAzZWZyYWdzaXplKSlcXG4gXFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXFxuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4gXFx0aWYgKGZyYWdfc2l6ZSBcXHUwMDI2XFx1MDAyNiBmcmFnX3NpemUgXFx1MDAzYyBtdHUpXFxuIFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4gXFxuK1xcdGlmIChza19pc191ZHAoc2spKVxcbitcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuIFxcdGNvcmstXFx1MDAzZWJhc2UuZ3NvX3NpemUgPSBpcGM2LVxcdTAwM2Vnc29fc2l6ZTtcXG4gXFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDBmNWMxNzhiYzIyNGIuLmM2ZDMzMmM5MGE1NDQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXFxuQEAgLTI1LDYgKzI1LDcgQEAgVEVTVF9QUk9HUyA6PSBcXFxcXFxuIFxcdGNtc2dfc29fbWFyay5zaCBcXFxcXFxuIFxcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcXFxcbiBcXHRjbXNnX3RpbWUuc2ggXFxcXFxcbitcXHRjb3JrX2ZyYWdzaXplLnB5IFxcXFxcXG4gXFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxcXFxuIFxcdGRyb3BfbW9uaXRvcl90ZXN0cy5zaCBcXFxcXFxuIFxcdGVjbXBfcmVoYXNoLnNoIFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDg5ZWY5ODkyMzI5NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rIyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cXG4rXFxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X3J1biwga3NmdF9leGl0LCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGlwLCBOZXROUywgTmV0TlNFbnRlclxcbitpbXBvcnQgZXJybm9cXG4raW1wb3J0IGd6aXBcXG4raW1wb3J0IG9zXFxuK2ltcG9ydCBzb2NrZXRcXG4raW1wb3J0IHN0cnVjdFxcbitpbXBvcnQgc3VicHJvY2Vzc1xcbitcXG4rXFxuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXFxuK0lQX1BNVFVESVNDX1BST0JFID0gM1xcbitJUFY2X01UVV9ESVNDT1ZFUiA9IDIzXFxuK0lQVjZfUE1UVURJU0NfRE8gPSAyXFxuK0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzXFxuK0lQVjZfVExWX0pVTUJPID0gMTk0XFxuK1xcbitcXG4rZGVmIGNoZWNrX2tlcm5lbF9jb25maWcob3B0aW9uKSAtXFx1MDAzZSBib29sIHwgTm9uZTpcXG4rICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFtcXG4rICAgICAgICAoJy9wcm9jL2NvbmZpZy5neicsIGd6aXAub3BlbiksXFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXFxuKyAgICBdOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcXG4rICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzpcXG4rICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnJzdHJpcCgpID09IGYne29wdGlvbn09eSc6XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXFxuKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rXFxuK1xcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICByZXMgPSBjaGVja19rZXJuZWxfY29uZmlnKCdDT05GSUdfREVCVUdfTkVUJylcXG4rICAgIGlmIHJlcyBpcyBOb25lOlxcbisgICAgICAgIHByaW50KFxcXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcXFwiKVxcbisgICAgZWxpZiBub3QgcmVzOlxcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCcpXFxuK1xcbitcXG4rZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC1cXHUwMDNlIGJvb2w6XFxuKyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxcbisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydncmVwJywgJy1xJywgZidXQVJOSU5HOi4qe2Z1bmN9J10sIHN0ZGluPWRtZXNnLnN0ZG91dClcXG4rICAgIGRtZXNnLndhaXQoKVxcbisgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxcbitcXG4rXFxuK2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXFx1MDAzZSBOb25lOlxcbisgICAgaXAoJ2xpbmsgYWRkIGR1bW15IHR5cGUgZHVtbXknLCBucz1ucylcXG4rICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXFxuKyAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcXG4rICAgIGZsYWcgPSAnLTYnIGlmIGlwdjYgZWxzZSAnJ1xcbisgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xcbisgICAgYWRkcl9sb2NhbCA9ICdmZDAwOjoxLzY0JyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4xLzI0J1xcbisgICAgYWRkcl9yZW1vdGUgPSAnZmQwMDo6MicgaWYgaXB2NiBlbHNlICcxMC4wLjAuMidcXG4rICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHthZGRyX2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxcbisgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JywgbnM9bnMpXFxuK1xcbitcXG4rZGVmIHRlc3RfaXB2NigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxcbitcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxcbisgICAgICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnZmQwMDo6MicsIDEyMzQpKVxcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcXG4rICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBFTVNHU0laRTogaXQgaGFwcGVucyBvbiBrZXJuZWxzIHdpdGggdGhlIGZpeC5cXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxcbitcXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcXG4rXFxuKyAgICBrc2Z0X3RydWUoY2hlY2tfZG1lc2dfY2xlYW4oJ3VkcF92Nl9zZW5kX3NrYicpLCAnV0FSTklORyBkZXRlY3RlZCBpbiBkbWVzZycpXFxuK1xcbitcXG4rZGVmIHRlc3RfaXB2NCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcXG4rXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcXG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBJUF9NVFVfRElTQ09WRVIsIElQX1BNVFVESVNDX1BST0JFKVxcbisgICAgICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnMTAuMC4wLjInLCAxMjM0KSlcXG4rICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6XFxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuXFxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VcXG4rXFxuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXFxuK1xcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxcbitcXG4rXFxuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcXG4rXFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcXG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxcbisgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUE9QVFMsIGhvcG9wdHMpXFxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcXG4rICAgICAgICAgICAgICAgIHVkcCA9IHN0cnVjdC5wYWNrKCchSEhISCcsIDEyMzQsIDEyMzQsIDAsIDApICsgYicgJyAqIDY1NTI4XFxuKyAgICAgICAgICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcXG4rXFxuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXFxuK1xcbitcXG4raWYgX19uYW1lX18gPT0gXFxcIl9fbWFpbl9fXFxcIjpcXG4rICAgIGtzZnRfcnVuKFtcXG4rICAgICAgICB0ZXN0X2lwdjYsXFxuKyAgICAgICAgdGVzdF9pcHY0LFxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcXG4rICAgIF0pXFxuKyAgICBrc2Z0X2V4aXQoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODoyOS44MzI0NDIwOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjg3MDMxMDIyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInVkcF9zZW5kbXNnXCIsXG4gICAgXCJ1ZHB2Nl9zZW5kbXNnXCIsXG4gICAgXCJpcF9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXA2X2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcF9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfZm9yd2FyZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGxpbWl0cyB0aGUgTVRVL2ZyYWdzaXplIHRvIElQX01BWF9NVFUgYW5kIElQNl9NQVhfTVRVIGluIHRoZSBJUHY0IGFuZCBJUHY2IG91dHB1dCBwYXRocyAoaXBfc2V0dXBfY29yaywgaXA2X3NldHVwX2NvcmssIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggdmVyeSBsYXJnZSBNVFVzIChlLmcuIHVzaW5nIElQdjYganVtYm9ncmFtcykuIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgYW5kIGFyZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFVEUCBzZW5kbXNnIGFuZCBJUCBmb3J3YXJkaW5nIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YzZjYzIyOTU5YjdhNWFmOGFjMzFmMDM0NmRhMWZmMjhjMDdmYjA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTI6MTg6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCBjNjlmMWM4NzE5MjIzLi5iOWU4ZDJiNzU5ZTliIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMzg0LDYgKzM4NCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBvdXQ6XG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuK1xuIFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuaW5kZXggNzRlMDk1YjZiN2NhMC4uYTI0Y2M4ZWUxMWQzZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jXG4rKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuY1xuQEAgLTEzMDMsNiArMTMwMyw3IEBAIHN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXG4gXG4gXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cbiBcdFx0XHQgZHN0NF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSA6IFJFQURfT05DRShydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW10dSk7XG4rXHRjb3JrLVx1MDAzZWZyYWdzaXplID0gbWluKGNvcmstXHUwMDNlZnJhZ3NpemUsIElQX01BWF9NVFUpO1xuIFxuIFx0aWYgKCFpbmV0ZGV2X3ZhbGlkX210dShjb3JrLVx1MDAzZWZyYWdzaXplKSlcbiBcdFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbmluZGV4IDhmYzQ3NjZjOGRhOTAuLjU1MDk2NTA1ODk5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuQEAgLTE0MzIsNiArMTQzMiw4IEBAIHN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXG4gXHRpZiAoZnJhZ19zaXplIFx1MDAyNlx1MDAyNiBmcmFnX3NpemUgXHUwMDNjIG10dSlcbiBcdFx0bXR1ID0gZnJhZ19zaXplO1xuIFxuK1x0aWYgKHNrX2lzX3VkcChzaykpXG4rXHRcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcbiBcdGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZSA9IG10dTtcbiBcdGNvcmstXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXHUwMDNlZ3NvX3NpemU7XG4gXHRjb3JrLVx1MDAzZWJhc2UudHhfZmxhZ3MgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuaW5kZXggMGY1YzE3OGJjMjI0Yi4uYzZkMzMyYzkwYTU0NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5AQCAtMjUsNiArMjUsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRjbXNnX3NvX21hcmsuc2ggXFxcbiBcdGNtc2dfc29fcHJpb3JpdHkuc2ggXFxcbiBcdGNtc2dfdGltZS5zaCBcXFxuK1x0Y29ya19mcmFnc2l6ZS5weSBcXFxuIFx0ZG91YmxlX3VkcF9lbmNhcC5zaCBcXFxuIFx0ZHJvcF9tb25pdG9yX3Rlc3RzLnNoIFxcXG4gXHRlY21wX3JlaGFzaC5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHlcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kODllZjk4OTIzMjk0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxuQEAgLTAsMCArMSwxMzAgQEBcbisjIS91c3IvYmluL2VudiBweXRob24zXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyMgVGVzdCBwb3NzaWJsZSBVRFAgbGVuZ3RoIG92ZXJmbG93IGluIHVkcF9zZW5kX3NrYi91ZHBfdjZfc2VuZF9za2IuXG4rXG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfcnVuLCBrc2Z0X2V4aXQsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuK2Zyb20gbGliLnB5IGltcG9ydCBpcCwgTmV0TlMsIE5ldE5TRW50ZXJcbitpbXBvcnQgZXJybm9cbitpbXBvcnQgZ3ppcFxuK2ltcG9ydCBvc1xuK2ltcG9ydCBzb2NrZXRcbitpbXBvcnQgc3RydWN0XG4raW1wb3J0IHN1YnByb2Nlc3NcbitcbitcbitJUF9NVFVfRElTQ09WRVIgPSAxMFxuK0lQX1BNVFVESVNDX1BST0JFID0gM1xuK0lQVjZfTVRVX0RJU0NPVkVSID0gMjNcbitJUFY2X1BNVFVESVNDX0RPID0gMlxuK0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9UTFZfSlVNQk8gPSAxOTRcbitcbitcbitkZWYgY2hlY2tfa2VybmVsX2NvbmZpZyhvcHRpb24pIC1cdTAwM2UgYm9vbCB8IE5vbmU6XG4rICAgIGZvciBmaWxlbmFtZSwgbWV0aG9kIGluIFtcbisgICAgICAgICgnL3Byb2MvY29uZmlnLmd6JywgZ3ppcC5vcGVuKSxcbisgICAgICAgIChmJy9ib290L2NvbmZpZy17b3MudW5hbWUoKS5yZWxlYXNlfScsIG9wZW4pLFxuKyAgICBdOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIHdpdGggbWV0aG9kKGZpbGVuYW1lLCAncnQnKSBhcyBjb25maWc6XG4rICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUucnN0cmlwKCkgPT0gZid7b3B0aW9ufT15JzpcbisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZVxuKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VcbisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rXG4rXG4rZGVmIGFzc2VydF9kZWJ1Z19rZXJuZWwoKSAtXHUwMDNlIE5vbmU6XG4rICAgIHJlcyA9IGNoZWNrX2tlcm5lbF9jb25maWcoJ0NPTkZJR19ERUJVR19ORVQnKVxuKyAgICBpZiByZXMgaXMgTm9uZTpcbisgICAgICAgIHByaW50KFwiV0FSTjogQ2FuJ3QgcmVhZCBrZXJuZWwgY29uZmlnOyBhc3N1bWluZyBkZWJ1ZyBrZXJuZWwsIGFuZCBydW5uaW5nIHRoZSB0ZXN0XCIpXG4rICAgIGVsaWYgbm90IHJlczpcbisgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJ0NPTkZJR19ERUJVR19ORVQgaXMgbm90IHNldCcpXG4rXG4rXG4rZGVmIGNoZWNrX2RtZXNnX2NsZWFuKGZ1bmMpIC1cdTAwM2UgYm9vbDpcbisgICAgZG1lc2cgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZG1lc2cnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSlcbisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5ydW4oWydncmVwJywgJy1xJywgZidXQVJOSU5HOi4qe2Z1bmN9J10sIHN0ZGluPWRtZXNnLnN0ZG91dClcbisgICAgZG1lc2cud2FpdCgpXG4rICAgIHJldHVybiByZXN1bHQucmV0dXJuY29kZSAhPSAwIGFuZCBkbWVzZy5yZXR1cm5jb2RlID09IDBcbitcbitcbitkZWYgaXBfc2V0dXAobnM6IE5ldE5TLCBtdHU6IGludCwgaXB2NjogYm9vbCkgLVx1MDAzZSBOb25lOlxuKyAgICBpcCgnbGluayBhZGQgZHVtbXkgdHlwZSBkdW1teScsIG5zPW5zKVxuKyAgICBpcChmJ2xpbmsgc2V0IGR1bW15IG10dSB7bXR1fScsIG5zPW5zKVxuKyAgICBpcCgnbGluayBzZXQgZHVtbXkgdXAnLCBucz1ucylcbisgICAgZmxhZyA9ICctNicgaWYgaXB2NiBlbHNlICcnXG4rICAgIG5vZGFkID0gJ25vZGFkJyBpZiBpcHY2IGVsc2UgJydcbisgICAgYWRkcl9sb2NhbCA9ICdmZDAwOjoxLzY0JyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4xLzI0J1xuKyAgICBhZGRyX3JlbW90ZSA9ICdmZDAwOjoyJyBpZiBpcHY2IGVsc2UgJzEwLjAuMC4yJ1xuKyAgICBpcChmJ3tmbGFnfSBhZGRyIGFkZCB7YWRkcl9sb2NhbH0gZGV2IGR1bW15IHtub2RhZH0nLCBucz1ucylcbisgICAgaXAoZid7ZmxhZ30gbmVpZ2ggYWRkIHthZGRyX3JlbW90ZX0gbGxhZGRyIDAyOjAwOjAwOjAwOjAwOjAyIGRldiBkdW1teSBudWQgcGVybWFuZW50JywgbnM9bnMpXG4rXG4rXG4rZGVmIHRlc3RfaXB2NigpIC1cdTAwM2UgTm9uZTpcbisgICAgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU3NiwgVHJ1ZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pIGFzIGZkOlxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX0RPKVxuKyAgICAgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgICAgICBmZC5zZW5kdG8oYicgJyAqIDY1NTI4LCAoJ2ZkMDA6OjInLCAxMjM0KSlcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcbisgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiBpdCBoYXBwZW5zIG9uIGtlcm5lbHMgd2l0aCB0aGUgZml4LlxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXG4rXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3Y2X3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY0KCkgLVx1MDAzZSBOb25lOlxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTU2LCBGYWxzZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIElQX01UVV9ESVNDT1ZFUiwgSVBfUE1UVURJU0NfUFJPQkUpXG4rICAgICAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnMTAuMC4wLjInLCAxMjM0KSlcbisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZTpcbisgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIEVNU0dTSVpFOiB0aGUgY2hlY2sgaGFwcGVucyBhZnRlciB0aGUgV0FSTiBpcyBwcmludGVkLlxuKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTVNHU0laRTpcbisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZVxuK1xuKyAgICAgICAgaXAoJ2xpbmsgZGVsIGR1bW15JywgbnM9bnMpXG4rXG4rICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcbitcbitcbitkZWYgdGVzdF9pcHY2X2p1bWJvKCkgLVx1MDAzZSBOb25lOlxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBpcF9zZXR1cChucywgNjU1ODQsIFRydWUpXG4rXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIobnMpOlxuKyAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDpcbisgICAgICAgICAgICAgICAgaG9wb3B0cyA9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAwLCAwLCBJUFY2X1RMVl9KVU1CTywgNCwgNjU1NDQpXG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QT1BUUywgaG9wb3B0cylcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9DSEVDS1NVTSwgNilcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBJUFY2X01UVV9ESVNDT1ZFUiwgSVBWNl9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgICAgICAgICAgdWRwID0gc3RydWN0LnBhY2soJyFISEhIJywgMTIzNCwgMTIzNCwgMCwgMCkgKyBiJyAnICogNjU1MjhcbisgICAgICAgICAgICAgICAgZmQuc2VuZHRvKHVkcCwgKCdmZDAwOjoyJywgMCkpXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbitcbitpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4rICAgIGtzZnRfcnVuKFtcbisgICAgICAgIHRlc3RfaXB2NixcbisgICAgICAgIHRlc3RfaXB2NCxcbisgICAgICAgIHRlc3RfaXB2Nl9qdW1ibyxcbisgICAgXSlcbisgICAga3NmdF9leGl0KClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE4OjI5LjgzMjQ0Mzc4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDUyMjIzOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyYWdtZW50IHNpemUgYW5kIE1UVSBoYW5kbGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kLCB0YXJnZXRlZCBjaGFuZ2UuIFdlJ3JlIHRvdWNoaW5nIGBpcDZfcm91dGUuaGAsIGBpcF9vdXRwdXQuY2AsIGFuZCBgaXA2X291dHB1dC5jYCwgd2hpY2ggYXJlIGNlbnRyYWwgdG8gdGhlIHBhY2tldCBmb3J3YXJkaW5nIGxvZ2ljLiBUaGUgYWRkaXRpb24gb2YgYSBzZWxmdGVzdCwgYGNvcmtfZnJhZ3NpemUucHlgLCBpcyBhIGdyZWF0IHNpZ247IGl0IGluZGljYXRlcyB0aGF0IHRoZSBpc3N1ZSB3ZSBhcmUgYWRkcmVzc2luZyBpcyBhIHJlYWwgb25lLCBhbmQgd2UgaGF2ZSBhIHRlc3QgdG8gdmVyaWZ5IHRoZSBmaXguXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZnMsIHRoZSBrZXkgY2hhbmdlIGlzIHRoYXQgd2UgYXJlIGxpbWl0aW5nIHRoZSBNVFUgb3IgZnJhZ21lbnQgc2l6ZSB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAgaW4gYGlwX3NldHVwX2NvcmtgIChJUHY0KSBhbmQgYGlwNl9zZXR1cF9jb3JrYCAoSVB2NiksIGFuZCBhbHNvIGluIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYC4gVGhpcyBzb3VuZHMgbGlrZSB3ZSBhcmUgcHJldmVudGluZyBzb21lIGtpbmQgb2Ygb3ZlcmZsb3cuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbnMgb2YgdGhvc2UgY29uc3RhbnRzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgYWN0dWFsIGxpbWl0cyBhcmUuIEknbSBhc3N1bWluZyB0aGVzZSBhcmUgc3RhbmRhcmQgdmFsdWVzLCBidXQgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gdGhhdCB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBuZXR3b3JrIHN0YWNrLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3csIGxpa2VseSByZWxhdGVkIHRvIHRoZSBmcmFnbWVudCBzaXplIGNhbGN1bGF0aW9uLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGluIHRoZSBjcml0aWNhbCBwYXRoIGZvciBJUHY0L0lQdjYgcGFja2V0IG91dHB1dCwgc28gdGhpcyBmaXggaXMgaW1wb3J0YW50LlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQuIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHdpdGhpbiB0aGUgcmVzcGVjdGl2ZSBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCBmaWxlcy4gSSBiZWxpZXZlIHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgZnVuY3Rpb25zIGxpa2UgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX2FwcGVuZF9wYWdlYCwgYW5kIGBpcDZfYXBwZW5kX2RhdGFgLCB3aGljaCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIGFwcGVuZGluZyBwcm9jZXNzLiBLbm93aW5nIHRoZXNlIGNhbGwgc2l0ZXMgaXMgY3J1Y2lhbC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGFyZWFzIHRvIGZvY3VzIG9uIGluIGZ1enppbmcgYW5kIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxODo1OS44ODQ2Njk5MzVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDQwMzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9zZXR1cF9jb3JrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5My1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxMjk0OnN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTI5NS1cXHRcXHRcXHQgc3RydWN0IGlwY21fY29va2llICppcGMsIHN0cnVjdCBydGFibGUgKipydHApXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzYwPWludCBpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzMtXFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3dyaXRlX3F1ZXVlKSkge1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNzQ6XFx0XFx0ZXJyID0gaXBfc2V0dXBfY29yayhzaywgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSwgaXBjLCBydHApO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNzUtXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTE1NTQ9c3RydWN0IHNrX2J1ZmYgKmlwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzItXFx0Y29yay1cXHUwMDNlb3B0ID0gTlVMTDtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTczOlxcdGVyciA9IGlwX3NldHVwX2Nvcmsoc2ssIGNvcmssIGlwYywgcnRwKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNTc0LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE5OjAxLjYwOTA4MTQxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODE1MTAzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpcDZfc2V0dXBfY29ya2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGEgcXVpY2sgc2NhbiB0byBzZWUgd2hvJ3MgYWN0dWFsbHkgdXNpbmcgdGhlIGBpcDZfc2V0dXBfY29ya2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBjb250ZXh0IGJldHRlciBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBpdC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYXNzZXNzaW5nIGl0cyBpbXBhY3QgYW5kIHdoZXJlIHBvdGVudGlhbCBwcm9ibGVtcyBtaWdodCBvcmlnaW5hdGUuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggc3Vic3lzdGVtcyBvciBtb2R1bGVzIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIHZpdGFsIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uJ3MgaW5mbHVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDIxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MTk6MDcuNTkwNTk1Mjc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjEwNDU5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3NldHVwX2NvcmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNTA9c3RhdGljIHZvaWQgaXA2X2FwcGVuZF9kYXRhX210dSh1bnNpZ25lZCBpbnQgKm10dSxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMzczLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMzc0OnN0YXRpYyBpbnQgaXA2X3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTEzNzUtXFx0XFx0XFx0ICBzdHJ1Y3QgaXBjbTZfY29va2llICppcGM2LFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTE4NjA9aW50IGlwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTg3Ny1cXHRcXHRkc3RfaG9sZChcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE4Nzg6XFx0XFx0ZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLFxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xODc5LVxcdFxcdFxcdFxcdCAgICAgaXBjNiwgcnQpO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTIwNjY9c3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMjA4Ny1cXHRjb3JrLVxcdTAwM2ViYXNlNi5vcHQgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoyMDg4OlxcdGVyciA9IGlwNl9zZXR1cF9jb3JrKHNrLCBjb3JrLCBpcGM2LCBydCk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTIwODktXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoxOTowOS4zNTE2NTA4NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzYzMzM5OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuXG5cbioqSW5pdGlhbCBDb25zaWRlcmF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiBEYXRhIEFwcGVuZCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgcGFja2V0IGNvbnN0cnVjdGlvbiBhbmQgZGF0YSBhcHBlbmRpbmcuIFRoZSBsaWtlbHkgc3VzcGVjdHMgaGVyZSBmb3IgYWRkaW5nIGRhdGEgdG8gSVB2NCBvciBJUHY2IHBhY2tldHMgYXJlIGRlZmluaXRlbHkgYGlwX2FwcGVuZF9kYXRhYCwgYGlwX21ha2Vfc2tiYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGFuZCBgaXA2X21ha2Vfc2tiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgZ2l2ZW4gdGhlaXIgbmFtZXMuIFRoZXkgbGlrZWx5IGhhbmRsZSB0aGUgY29yZSBsb2dpYyBvZiBhc3NlbWJsaW5nIHRoZSBwYWNrZXQuXG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlciwgc28gbGV0J3Mgc2hpZnQgZm9jdXMuIEknbSBlc3BlY2lhbGx5IGN1cmlvdXMgYWJvdXQgaG93IElQdjYncyBNVFUgaXMgaGFuZGxlZCwgc28gSSdsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAgdG8gc2VlIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBJUHY2IHBhdGguIFRoaXMgd2lsbCBnaXZlIGEgZ29vZCBpZGVhIG9mIHdoaWNoIHBhcnRzIG9mIHRoZSBzdGFjayBhcmUgcGF5aW5nIGF0dGVudGlvbiB0byBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MTk6MTYuMTE0OTk0Mzc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjAwMzE2MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNTM9c3RhdGljIGlubGluZSBib29sIHJ0Nl9kdXBsaWNhdGVfbmV4dGhvcChzdHJ1Y3QgZmliNl9pbmZvICphLCBzdHJ1Y3QgZmliNl9pbmZvICpiKVxcbi0tXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzY2LVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM2NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zNjgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZvcndhcmRpbmcpXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zOTMtICpcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDozOTQ6ICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMzk1LSAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTUyMT1pbnQgaXA2X2ZvcndhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy02NjQtXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjY2NTpcXHRtdHUgPSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTY2Ni1cXHRpZiAobXR1IFxcdTAwM2MgSVBWNl9NSU5fTVRVKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjg4PUlORElSRUNUX0NBTExBQkxFX1NDT1BFIHVuc2lnbmVkIGludCBpcDZfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyODkte1xcbm5ldC9pcHY2L3JvdXRlLmM6MzI5MDpcXHRyZXR1cm4gaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChkc3QsIGZhbHNlKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyOTEtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYz05Nz1zdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9maWxsX3JvdXRlKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTEwOS1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjExMDpcXHRcXHRmbG93X3R1cGxlLVxcdTAwM2VtdHUgPSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKGRzdCwgdHJ1ZSk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy0xMTEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjE5OjE3LjczNTAzMTEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODUwNzk2NTY2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgTVRVIGFuZCBGb3J3YXJkaW5nIGZvciBQb3RlbnRpYWwgVURQIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgSVB2NiBNVFUgYW5kIGZvcndhcmRpbmcgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXA2X210dWAsIGBpcDZfZm9yd2FyZGAsIGFuZCBgZmxvd19vZmZsb2FkX2ZpbGxfcm91dGVgLCB3aGljaCBhbGwgc2VlbSB0byBiZSB1c2luZyBgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZGAuIGBpcDZfbXR1YCBhcHBlYXJzIHRvIGJlIGFuIGluZGlyZWN0IGNhbGxhYmxlLiBgaXA2X2ZvcndhcmRgIGxvb2tzIGxpa2UgYSBwcmltZSBhcmVhIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgYmVoYXZpb3IuIFRoZSBzZWxmdGVzdCBtZW50aW9ucyBgQ09ORklHX0RFQlVHX05FVGAsIGJ1dCB0aGF0IHNlZW1zIHRvIGJlIGp1c3QgZm9yIGEgd2FybmluZyBtZXNzYWdlIGFuZCB0aGUgYWN0dWFsIGZpeCBpcyB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IGNvZGUuIEdvb2QsIG5vIGV4b3RpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gU3RhbmRhcmQgYE5FVGAsIGBJTkVUYCwgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuTm93LCB0byBuYXJyb3cgZG93biB0aGUgc2NvcGUsIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBzcGVjaWZpY2FsbHkgYW4gaXNzdWUgd2l0aCBVRFAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYC4gVGhlIHNlbGZ0ZXN0IGlzIHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCBVRFAgbGVuZ3RoIG92ZXJmbG93cywgc28gdGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yLiBUaGUgc2VsZnRlc3QgYWxzbyBtZW50aW9ucyBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAuIFRoZXJlZm9yZSwgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRob3NlIGZ1bmN0aW9ucyBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDcwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIwOjQyLjgxNDY4OTg0NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNDQzMDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHBfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0PTU9RG9jdW1lbnRhdGlvbiB3cml0dGVuIGJ5IFRvbSBaYW51c3NpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExMi0gICAgICAgICBpcF9zZW5kX3NrYisweDFhLzB4NTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTExMzogICAgICAgICB1ZHBfc2VuZF9za2IrMHgxNzMvMHgyYTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTExNC0gICAgICAgICB1ZHBfc2VuZG1zZysweDJiZi8weDlmMFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1MzctICAgICAgICAgICAgIGlwX3NlbmRfc2tiKzB4MWEvMHg1MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTM4OiAgICAgICAgICAgICB1ZHBfc2VuZF9za2IrMHgxM2UvMHgyNzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTUzOS0gICAgICAgICAgICAgdWRwX3NlbmRtc2crMHgyYmYvMHg5ODBcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTU3LSAgICAgICAgICAgICBpcF9zZW5kX3NrYisweDFhLzB4NTBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3Q6MTU1ODogICAgICAgICAgICAgdWRwX3NlbmRfc2tiKzB4MTZkLzB4MjcwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1NTktICAgICAgICAgICAgIHVkcF9zZW5kbXNnKzB4MmJmLzB4OTgwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU3NS0gICAgICAgICAgICAgaXBfc2VuZF9za2IrMHgxYS8weDUwXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0OjE1NzY6ICAgICAgICAgICAgIHVkcF9zZW5kX3NrYisweDE2ZC8weDI3MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdC0xNTc3LSAgICAgICAgICAgICB1ZHBfc2VuZG1zZysweDJiZi8weDk4MFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9oaXN0b2dyYW0ucnN0LTE1OTMtICAgICAgICAgICAgIGlwX3NlbmRfc2tiKzB4MWEvMHg1MFxcbkRvY3VtZW50YXRpb24vdHJhY2UvaGlzdG9ncmFtLnJzdDoxNTk0OiAgICAgICAgICAgICB1ZHBfc2VuZF9za2IrMHgxNmQvMHgyNzBcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL2hpc3RvZ3JhbS5yc3QtMTU5NS0gICAgICAgICAgICAgdWRwX3NlbmRtc2crMHgyYmYvMHg5ODBcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz0yMzg9dm9pZCBvdnBuX2VuY3J5cHRfcG9zdCh2b2lkICpkYXRhLCBpbnQgcmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI4NC1cXHRjYXNlIElQUFJPVE9fVURQOlxcbmRyaXZlcnMvbmV0L292cG4vaW8uYzoyODU6XFx0XFx0b3Zwbl91ZHBfc2VuZF9za2IocGVlciwgc29jay1cXHUwMDNlc2ssIHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTI4Ni1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM9Mjk2PXN0YXRpYyBpbnQgb3Zwbl91ZHBfb3V0cHV0KHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBkc3RfY2FjaGUgKmNhY2hlLFxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYy0zMzQtLyoqXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuYzozMzU6ICogb3Zwbl91ZHBfc2VuZF9za2IgLSBwcmVwYXJlIHNrYiBhbmQgc2VuZCBpdCBvdmVyIHZpYSBVRFBcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5jLTMzNi0gKiBAcGVlcjogdGhlIGRlc3RpbmF0aW9uIHBlZXJcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzM5LSAqL1xcbmRyaXZlcnMvbmV0L292cG4vdWRwLmM6MzQwOnZvaWQgb3Zwbl91ZHBfc2VuZF9za2Ioc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNvY2sgKnNrLFxcbmRyaXZlcnMvbmV0L292cG4vdWRwLmMtMzQxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaD0yMD12b2lkIG92cG5fdWRwX3NvY2tldF9kZXRhY2goc3RydWN0IG92cG5fc29ja2V0ICpvdnBuX3NvY2spO1xcbmRyaXZlcnMvbmV0L292cG4vdWRwLmgtMjEtXFxuZHJpdmVycy9uZXQvb3Zwbi91ZHAuaDoyMjp2b2lkIG92cG5fdWRwX3NlbmRfc2tiKHN0cnVjdCBvdnBuX3BlZXIgKnBlZXIsIHN0cnVjdCBzb2NrICpzayxcXG5kcml2ZXJzL25ldC9vdnBuL3VkcC5oLTIzLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3VkcC5oPTU4MD1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp1ZHBfcmN2X3NlZ21lbnQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA0LVxcdCAqIHBhY2tldHMgaW4gdWRwX2dyb19jb21wbGV0ZV9zZWdtZW50LiBBcyBkb2VzIFVEUCBHU08sIHZlcmlmaWVkIGJ5XFxuaW5jbHVkZS9uZXQvdWRwLmg6NjA1OlxcdCAqIHVkcF9zZW5kX3NrYi4gQnV0IHdoZW4gdGhvc2UgcGFja2V0cyBhcmUgbG9vcGVkIGluIGRldl9sb29wYmFja194bWl0XFxuaW5jbHVkZS9uZXQvdWRwLmgtNjA2LVxcdCAqIHRoZWlyIGlwX3N1bW1lZCBDSEVDS1NVTV9OT05FIGlzIGNoYW5nZWQgdG8gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkuXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xMDkxPUVYUE9SVF9TWU1CT0wodWRwX3NldF9jc3VtKTtcXG5uZXQvaXB2NC91ZHAuYy0xMDkyLVxcbm5ldC9pcHY0L3VkcC5jOjEwOTM6c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L3VkcC5jLTEwOTQtXFx0XFx0XFx0c3RydWN0IGluZXRfY29yayAqY29yaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTExNzk9aW50IHVkcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTExOTAtXFxubmV0L2lwdjQvdWRwLmM6MTE5MTpcXHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFxcdTAwMjZpbmV0LVxcdTAwM2Vjb3JrLmJhc2UpO1xcbm5ldC9pcHY0L3VkcC5jLTExOTItXFxuLS1cXG5uZXQvaXB2NC91ZHAuYz0xMjM1PWludCB1ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTE0NDQtXFx0XFx0aWYgKCFJU19FUlJfT1JfTlVMTChza2IpKVxcbm5ldC9pcHY0L3VkcC5jOjE0NDU6XFx0XFx0XFx0ZXJyID0gdWRwX3NlbmRfc2tiKHNrYiwgZmw0LCBcXHUwMDI2Y29yayk7XFxubmV0L2lwdjQvdWRwLmMtMTQ0Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk6NDojIFRlc3QgcG9zc2libGUgVURQIGxlbmd0aCBvdmVyZmxvdyBpbiB1ZHBfc2VuZF9za2IvdWRwX3Y2X3NlbmRfc2tiLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weT04Nz1kZWYgdGVzdF9pcHY0KCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTEwNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMDU6ICAgIGtzZnRfdHJ1ZShjaGVja19kbWVzZ19jbGVhbigndWRwX3NlbmRfc2tiJyksICdXQVJOSU5HIGRldGVjdGVkIGluIGRtZXNnJylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weS0xMDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIwOjQ0LjcxOTEyNjExOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTE3NzAwMTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJUCBNVFUgTGltaXRzIGluIHRoZSBOZXR3b3JraW5nIFN0YWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHR3byB0aGluZ3MganVtcCBvdXQgYXQgbWUuIEZpcnN0LCBgaXBfc2V0dXBfY29ya2AgYW5kIGBpcDZfc2V0dXBfY29ya2AgYXJlICpzdGF0aWMqIOKAkyBpbnRlcmVzdGluZywgdGhhdCBpbXBsaWVzIHRoZXkncmUgb25seSB1c2VkIGludGVybmFsbHkgdG8gdGhpcyBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LiBUaGF0J3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIHNjb3BlIG9mIG1vZGlmaWNhdGlvbnMuIFNlY29uZCwgdGhlIGZ1bmN0aW9ucyBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYW5kIGBpcDZfbWFrZV9za2JgIGFyZSAqZXhwb3J0ZWQqIGFuZCBjYWxsZWQgZnJvbSBgdWRwX3NlbmRtc2dgIGFuZCBwcmVzdW1hYmx5IG90aGVyIHByb3RvY29scy4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIGludGVyZmFjZSBwb2ludHMgd2UgbmVlZCB0byBjb25zaWRlciB3aGVuIGV2YWx1YXRpbmcgdGhpcyBjaGFuZ2UuXG5cbk5vdywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgbGltaXRzIHRoZSBNVFUgdG8gYElQX01BWF9NVFVgIGFuZCBgSVA2X01BWF9NVFVgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBhbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRvIGtub3cgdGhlIHZhbHVlcyBvZiBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAuIExldCBtZSBxdWlja2x5IGNoZWNrIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkLiBJIGhhdmUgYSBmZWVsaW5nIEkndmUgc2VlbiB0aGVzZSBiZWZvcmUsIGJ1dCBpdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHN1cmUgYW5kIGNvbmZpcm0gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo0OC44MzY4Mjg1NjNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkyNjM0OTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfTUFYX01UVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTM0LSNkZWZpbmUgU1NJUF9UWFFVRVVFX0xFTlxcdDEwMFxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM6MzU6I2RlZmluZSBTU0lQX01BWF9NVFVcXHRcXHQ2NTUzNVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmMtMzYtI2RlZmluZSBTU0lQX0RFRkFVTFRfTVRVXFx0NDAwMFxcbi0tXFxuZHJpdmVycy9oc2kvY2xpZW50cy9zc2lfcHJvdG9jb2wuYz0xMDczPXN0YXRpYyBpbnQgc3NpX3Byb3RvY29sX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmMtMTEyMy1cXHRzc2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlbWluX210dSA9IFBIT05FVF9NSU5fTVRVO1xcbmRyaXZlcnMvaHNpL2NsaWVudHMvc3NpX3Byb3RvY29sLmM6MTEyNDpcXHRzc2ktXFx1MDAzZW5ldGRldi1cXHUwMDNlbWF4X210dSA9IFNTSVBfTUFYX01UVTtcXG5kcml2ZXJzL2hzaS9jbGllbnRzL3NzaV9wcm90b2NvbC5jLTExMjUtXFxuLS1cXG5kcml2ZXJzL25ldC9iYXJldWRwLmM9NTc0PXN0YXRpYyB2b2lkIGJhcmV1ZHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy01ODgtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gSVBWNF9NSU5fTVRVO1xcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYzo1ODk6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIEJBUkVVRFBfQkFTRV9ITEVOO1xcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy01OTAtXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYz0xMDgyNz1tbHhzd19zcF9yaWZfaXBpcF9sYl91bF9yaWZfb3Aoc3RydWN0IG1seHN3X3NwX3JpZiAqdWxfcmlmLCBib29sIGVuYWJsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODMyLVxcdG1seHN3X3JlZ19yaXRyX3BhY2socml0cl9wbCwgZW5hYmxlLCBNTFhTV19SRUdfUklUUl9MT09QQkFDS19JRixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMDgzMzpcXHRcXHRcXHQgICAgdWxfcmlmLVxcdTAwM2VyaWZfaW5kZXgsIHVsX3JpZi1cXHUwMDNldnJfaWQsIElQX01BWF9NVFUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTEwODM0LVxcdG1seHN3X3JlZ19yaXRyX2xvb3BiYWNrX3Byb3RvY29sX3NldChyaXRyX3BsLFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MTgyOD1zdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4NjAtXFx0ICovXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTg2MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gR0VORVZFX0JBU0VfSExFTiAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE4NjItXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYz0xNTg9c3RhdGljIHZvaWQgb3Zwbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9tYWluLmMtMTc1LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5kcml2ZXJzL25ldC9vdnBuL21haW4uYzoxNzY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVBfTUFYX01UVSAtIE9WUE5fSEVBRF9ST09NO1xcbmRyaXZlcnMvbmV0L292cG4vbWFpbi5jLTE3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYz02NDI3PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWVyZ2VhYmxlX21pbl9idWZfbGVuKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3QgdmlydHF1ZXVlICp2cSlcXG4tLVxcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy02NDMwLVxcdHVuc2lnbmVkIGludCBycV9zaXplID0gdmlydHF1ZXVlX2dldF92cmluZ19zaXplKHZxKTtcXG5kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmM6NjQzMTpcXHR1bnNpZ25lZCBpbnQgcGFja2V0X2xlbiA9IHZpLVxcdTAwM2ViaWdfcGFja2V0cyA/IElQX01BWF9NVFUgOiB2aS1cXHUwMDNlZGV2LVxcdTAwM2VtYXhfbXR1O1xcbmRyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYy02NDMyLVxcdHVuc2lnbmVkIGludCBidWZfbGVuID0gaGRyX2xlbiArIEVUSF9ITEVOICsgVkxBTl9ITEVOICsgcGFja2V0X2xlbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvaXAuaD00Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfaXBfdG90bGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTItLyogSVB2NCBkYXRhZ3JhbSBsZW5ndGggaXMgc3RvcmVkIGludG8gMTZiaXQgZmllbGQgKHRvdF9sZW4pICovXFxuaW5jbHVkZS9saW51eC9pcC5oOjUzOiNkZWZpbmUgSVBfTUFYX01UVVxcdDB4RkZGRlVcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTQtXFxuaW5jbHVkZS9saW51eC9pcC5oPTU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcGhfc2V0X3RvdGxlbihzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IGxlbilcXG5pbmNsdWRlL2xpbnV4L2lwLmgtNTYte1xcbmluY2x1ZGUvbGludXgvaXAuaDo1NzpcXHRpcGgtXFx1MDAzZXRvdF9sZW4gPSBsZW4gXFx1MDAzYz0gSVBfTUFYX01UVSA/IGh0b25zKGxlbikgOiAwO1xcbmluY2x1ZGUvbGludXgvaXAuaC01OC19XFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oPTQ2Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvaXAuaC00OTktb3V0OlxcbmluY2x1ZGUvbmV0L2lwLmg6NTAwOlxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcC5oLTUwMS1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTE5PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5pbmNsdWRlL25ldC9pcC5oLTUyNi1cXHRcXHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cXHUwMDNlbXR1KTtcXG5pbmNsdWRlL25ldC9pcC5oOjUyNzpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7XFxuaW5jbHVkZS9uZXQvaXAuaC01MjgtXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmg9NTM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L2lwLmgtNTQ1LVxcbmluY2x1ZGUvbmV0L2lwLmg6NTQ2OlxcdG10dSA9IG1pbihSRUFEX09OQ0UoZHN0X2Rldihkc3QpLVxcdTAwM2VtdHUpLCBJUF9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcC5oLTU0Ny1cXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQwLSNkZWZpbmUgRVRIX01JTl9NVFVcXHQ2OFxcdFxcdC8qIE1pbiBJUHY0IE1UVSBwZXIgUkZDNzkxXFx0Ki9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfZXRoZXIuaDo0MTojZGVmaW5lIEVUSF9NQVhfTVRVXFx0MHhGRkZGVVxcdFxcdC8qIDY1NTM1LCBzYW1lIGFzIElQX01BWF9NVFVcXHQqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9ldGhlci5oLTQyLVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzE5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozMjA6XFx0aWYgKGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpIFxcdTAwM2UgSVBfTUFYX01UVSlcXG5uZXQvaXB2NC9lc3A0LmMtMzIxLVxcdFxcdHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzQwPXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzQ5LVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY0L2VzcDQuYzozNTA6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjQvZXNwNC5jLTM1MS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTM3OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlnbXB2M19uZXdwYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBtdHUpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMzg5LVxcbm5ldC9pcHY0L2lnbXAuYzozOTA6XFx0c2l6ZSA9IG1pbihtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lnbXAuYy0zOTEtXFx0d2hpbGUgKDEpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTk1Mz1zdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTgzLVxcdGV4dGhkcmxlbiA9ICFza2IgPyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gOiAwO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk4NDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQX01BWF9NVFUgOiBjb3JrLVxcdTAwM2VmcmFnc2l6ZTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05ODUtXFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTkwLVxcdG1heGZyYWdsZW4gPSAoKG10dSAtIGZyYWdoZWFkZXJsZW4pIFxcdTAwMjYgfjcpICsgZnJhZ2hlYWRlcmxlbjtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzo5OTE6XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy05OTItXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMjk0PXN0YXRpYyBpbnQgaXBfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzA1LVxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTMwNjpcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTMwNy1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTI4MD1zdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzE2LVxcdFxcdGhsZW4gPSB0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyB0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb207XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzE3OlxcdFxcdG10dSA9IG1pbih0ZGV2LVxcdTAwM2VtdHUsIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMxOC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0zMjk9c3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzUwLVxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjM1MTpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUF9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM1Mi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTEwNTc9aW50IGlwX3R1bm5lbF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2MC1cXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MTA2MTpcXHRpbnQgbWF4X210dSA9IElQX01BWF9NVFUgLSB0X2hsZW47XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTA2Mi1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTExODI9aW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTEyMTMtXFx0aWYgKHRiW0lGTEFfTVRVXSkge1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjEyMTQ6XFx0XFx0dW5zaWduZWQgaW50IG1heCA9IElQX01BWF9NVFUgLSAobnQtXFx1MDAzZWhsZW4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMTIxNS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTQ0NT11MzIgaXBfbXR1X2Zyb21fZmliX3Jlc3VsdChzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgZGFkZHIpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE0NjQtXFx0aWYgKGxpa2VseSghbXR1KSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjE0NjU6XFx0XFx0bXR1ID0gbWluKFJFQURfT05DRShkZXYtXFx1MDAzZW10dSksIElQX01BWF9NVFUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTQ2Ni1cXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNzE9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMzgwLVxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuICsgZXNwLVxcdTAwM2V0YWlsZW4gLSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpO1xcbm5ldC9pcHY2L2VzcDYuYzozODE6XFx0aWYgKGxlbiBcXHUwMDNlIElQX01BWF9NVFUpXFxubmV0L2lwdjYvZXNwNi5jLTM4Mi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU1TR1NJWkUpO1xcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE3NTM9aW50IGlwNl90bmxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xNzY5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE3NzA6XFx0XFx0aWYgKG5ld19tdHUgXFx1MDAzZSBJUF9NQVhfTVRVIC0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSB0X2hsZW4pXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NzEtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9OTExPXN0YXRpYyB2b2lkIHZ0aTZfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmMtOTE5LVxcdGRldi1cXHUwMDNlbWluX210dSA9IElQVjRfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmM6OTIwOlxcdGRldi1cXHUwMDNlbWF4X210dSA9IElQX01BWF9NVFUgLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy05MjEtXFx0ZGV2LVxcdTAwM2VmbGFncyB8PSBJRkZfTk9BUlA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2ludGVyZmFjZV9jb3JlLmM9NzM5PXN0YXRpYyB2b2lkIHhmcm1pX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9pbnRlcmZhY2VfY29yZS5jLTc0NS1cXHRkZXYtXFx1MDAzZW1pbl9tdHVcXHRcXHQ9IEVUSF9NSU5fTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYzo3NDY6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0PSBJUF9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faW50ZXJmYWNlX2NvcmUuYy03NDctXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHRcXHQ9IElGRl9OT0FSUDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNTA1PXN0YXRpYyB1MzIgaXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEwLVxcdGlmICgheHRmcy1cXHUwMDNlY2ZnLmRvbnRfZnJhZylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUxMTpcXHRcXHRyZXR1cm4geC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVCA/IElQX01BWF9NVFUgOiBJUDZfTUFYX01UVTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUxMi1cXHRyZXR1cm4gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIG91dGVyX210dSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz05MDc9c3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2NvbnN0cnVjdChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy05NTYtXFx0XFx0eC1cXHUwMDNldGZjcGFkID0gbmxhX2dldF91MzIoYXR0cnNbWEZSTUFfVEZDUEFEXSk7XFxubmV0L3hmcm0veGZybV91c2VyLmM6OTU3OlxcdFxcdGlmICh4LVxcdTAwM2V0ZmNwYWQgXFx1MDAzZSBJUF9NQVhfTVRVKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtOTU4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkV4Y2Vzc2l2ZSBURkMgcGFkZGluZ1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1MC4zNTYwOTY0NTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MDI5NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqTVRVIExpbWl0cyAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4uLiBJJ20gdGhpbmtpbmcgYWJvdXQgTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCB2YWx1ZXMuIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGBJUF9NQVhfTVRVYCBpcyBkZWZpbmVkIGFzIGAweEZGRkZVYC4gVGhhdCdzIGEgc3RhbmRhcmQsIGV4cGVjdGVkIHZhbHVlLiBObyBzdXJwcmlzZXMgdGhlcmUuIFRoZW4sIG15IG1pbmQganVtcHMgdG8gSVB2Ni4gSSdtIGFzc3VtaW5nIHRoYXQgYElQNl9NQVhfTVRVYCBpcyBhbHNvIHByb2JhYmx5IGAweEZGRkZVYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYXQgbGVhc3QgaW5pdGlhbGx5LiBCdXQgd2FpdCBhIHNlY29uZCwgSSBuZWVkIHRvIGJlIGEgbGl0dGxlIG1vcmUgY2FyZWZ1bCwgZ2l2ZW4gdGhhdCB3ZSBoYXZlIGp1bWJvZ3JhbXMgdG8gY29uc2lkZXIgaW4gSVB2Ni4gSSBzaG91bGQgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCB2YWx1ZSBpcyB0cnVseSBzdGFuZGFyZCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGFyZ2VyIHRoYW4gdGhlIElQdjQgbGltaXQuIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1NC4xMzYzOTM3NDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1Njg5NTkwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVA2X01BWF9NVFVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnJmLmM9MTU2MT1zdGF0aWMgdm9pZCB2cmZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3ZyZi5jLTE2MDAtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gSVBWNl9NSU5fTVRVO1xcbmRyaXZlcnMvbmV0L3ZyZi5jOjE2MDE6XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gSVA2X01BWF9NVFU7XFxuZHJpdmVycy9uZXQvdnJmLmMtMTYwMi1cXHRkZXYtXFx1MDAzZW10dSA9IGRldi1cXHUwMDNlbWF4X210dTtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTE1PXN0cnVjdCByb3V0ZV9pbmZvIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQzLSAqL1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjQ0OiNkZWZpbmUgSVA2X01BWF9NVFUgKDB4RkZGRiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtNDUtXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaD0zNjc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0zODYtb3V0OlxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjM4NzpcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTM4OC1cXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTQwMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTQyNC1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDo0MjU6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC00MjYtXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTM3ND1zdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE0MzUtXFx0aWYgKHNrX2lzX3VkcChzaykpXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjE0MzY6XFx0XFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM3LVxcdGNvcmstXFx1MDAzZWJhc2UuZnJhZ3NpemUgPSBtdHU7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM9MTQ1Mz1zdGF0aWMgaW50IF9faXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDg5LVxcdHBhZ2VkID0gISFjb3JrLVxcdTAwM2Vnc29fc2l6ZTtcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTQ5MDpcXHRtdHUgPSBjb3JrLVxcdTAwM2Vnc29fc2l6ZSA/IElQNl9NQVhfTVRVIDogY29yay1cXHUwMDNlZnJhZ3NpemU7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTE0OTEtXFx0b3JpZ19tdHUgPSBtdHU7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTQ2Nj1zdGF0aWMgdm9pZCBpcDZfdG5sX2xpbmtfY29uZmlnKHN0cnVjdCBpcDZfdG5sICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjEtXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20oaGVhZHJvb20pO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNTIyOlxcdFxcdFxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgdGRldi1cXHUwMDNlbXR1LCBJUDZfTUFYX01UVSk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE1MjMtXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9MTc1Mz1pbnQgaXA2X3RubF9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE3NjYtXFx0aWYgKHRubC1cXHUwMDNlcGFybXMucHJvdG8gPT0gSVBQUk9UT19JUFY2IHx8IHRubC1cXHUwMDNlcGFybXMucHJvdG8gPT0gMCkge1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYzoxNzY3OlxcdFxcdGlmIChuZXdfbXR1IFxcdTAwM2UgSVA2X01BWF9NVFUgLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIHRfaGxlbilcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTc2OC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xOTM3PWlwNl90bmxfZGV2X2luaXRfZ2VuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTk2MS1cXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTk2MjpcXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBJUDZfTUFYX01UVSAtIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gdF9obGVuO1xcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xOTYzLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0xNjM5PXN0YXRpYyB1bnNpZ25lZCBpbnQgZmliNl9tdHUoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTE2NTktXFxubmV0L2lwdjYvcm91dGUuYzoxNjYwOlxcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XFxubmV0L2lwdjYvcm91dGUuYy0xNjYxLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMzAyPXUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzMyOS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMzMzA6XFx0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzMzEtb3V0Olxcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTQxOT1zdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE0MzEtXFx0ZGV2LVxcdTAwM2VtaW5fbXR1XFx0XFx0PSBJUFY2X01JTl9NVFU7XFxubmV0L2lwdjYvc2l0LmM6MTQzMjpcXHRkZXYtXFx1MDAzZW1heF9tdHVcXHRcXHQ9IElQNl9NQVhfTVRVIC0gdF9obGVuO1xcbm5ldC9pcHY2L3NpdC5jLTE0MzMtXFx0ZGV2LVxcdTAwM2VmbGFnc1xcdFxcdD0gSUZGX05PQVJQO1xcbi0tXFxubmV0L2lwdjYvc2l0LmM9MTU0OT1zdGF0aWMgaW50IGlwaXA2X25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L3NpdC5jLTE1ODUtXFx0XFx0aWYgKG10dSBcXHUwMDNlPSBJUFY2X01JTl9NVFUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9zaXQuYzoxNTg2OlxcdFxcdCAgICBtdHUgXFx1MDAzYz0gSVA2X01BWF9NVFUgLSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG5uZXQvaXB2Ni9zaXQuYy0xNTg3LVxcdFxcdFxcdGRldi1cXHUwMDNlbXR1ID0gbXR1O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MDU9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MTAtXFx0aWYgKCF4dGZzLVxcdTAwM2VjZmcuZG9udF9mcmFnKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTExOlxcdFxcdHJldHVybiB4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUID8gSVBfTUFYX01UVSA6IElQNl9NQVhfTVRVO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTEyLVxcdHJldHVybiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoeCwgb3V0ZXJfbXR1KTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz04Mz1zdHJ1Y3QgdGVzdGNhc2UgdGVzdGNhc2VzX3Y0W10gPSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMTk0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTU6I2lmbmRlZiBJUDZfTUFYX01UVVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYzoxOTY6I2RlZmluZSBJUDZfTUFYX01UVVxcdChFVEhfTUFYX01UVSArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTE5Ny0jZW5kaWZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYz0xOTk9c3RydWN0IHRlc3RjYXNlIHRlc3RjYXNlc192NltdID0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1NS1cXHRcXHQvKiBzZW5kIE1BWCBzZWdzICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI1NjpcXHRcXHQudGxlbiA9IChJUDZfTUFYX01UVSAvIENPTlNUX01TU19WNikgKiBDT05TVF9NU1NfVjYsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI1Ny1cXHRcXHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjU4OlxcdFxcdC5yX251bV9tc3MgPSAoSVA2X01BWF9NVFUgLyBDT05TVF9NU1NfVjYpLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNTktXFx0fSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjItXFx0XFx0Lyogc2VuZCBNQVggYnl0ZXMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjYzOlxcdFxcdC50bGVuID0gSVA2X01BWF9NVFUgLSBDT05TVF9IRFJMRU5fVjYsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jLTI2NC1cXHRcXHQuZ3NvX2xlbiA9IENPTlNUX01TU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjY1LVxcdFxcdC5yX251bV9tc3MgPSBDT05TVF9NQVhfU0VHU19WNixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmM6MjY2OlxcdFxcdC5yX2xlbl9sYXN0ID0gSVA2X01BWF9NVFUgLSBDT05TVF9IRFJMRU5fVjYgLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNjctXFx0XFx0XFx0ICAgICAgKENPTlNUX01BWF9TRUdTX1Y2ICogQ09OU1RfTVNTX1Y2KSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC91ZHBnc28uYy0yNzAtXFx0XFx0Lyogc2VuZCBNQVggKyAxOiBmYWlsICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3VkcGdzby5jOjI3MTpcXHRcXHQudGxlbiA9IElQNl9NQVhfTVRVIC0gQ09OU1RfSERSTEVOX1Y2ICsgMSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdWRwZ3NvLmMtMjcyLVxcdFxcdC5nc29fbGVuID0gQ09OU1RfTVNTX1Y2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMDo1NS43MDUzNTcyMzNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcwNTczNDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBNYXhpbXVtIFRyYW5zbWlzc2lvbiBVbml0IChNVFUpIExpbWl0cyBpbiBJUHY2KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggTVRVIGxpbWl0cyBpbiBJUHY2LiBTcGVjaWZpY2FsbHksIGl0J3MgbGltaXRpbmcgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgYW5kIGBJUDZfTUFYX01UVWAsIHdoZXJlIGBJUDZfTUFYX01UVWAgaXMgY2FsY3VsYXRlZCBhcyBgMHhGRkZGICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKWAuIFRoaXMgbG9va3MgcmlwZSBmb3IgZnV6emluZy4gQW55IHRpbWUgdGhlcmUncyBhIGhhcmQgbGltaXQsIHRoZXJlJ3MgYSBjaGFuY2UgdG8gdHJpZ2dlciBhbiBvdmVyZmxvdyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGUgY29yZSBvZiB0aGlzIHZ1bG5lcmFiaWxpdHkgcHJvYmFibHkgcmVzaWRlcyBpbiB0aGUgZnVuY3Rpb25zIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCwgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBhcyBJIGhhZCBwcmV2aW91c2x5IGNvbnNpZGVyZWQuIEZvY3VzaW5nIG9uIHBhY2tldCBjb25zdHJ1Y3Rpb24gYW5kIHRyYW5zbWlzc2lvbiBpcyB0aGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gdGhhdCwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbiBgaXBfYXBwZW5kX2RhdGFgLCBgaXBfbWFrZV9za2JgLCBgaXA2X2FwcGVuZF9kYXRhYCwgYGlwNl9tYWtlX3NrYmAsIGFuZCBgaXA2X2ZvcndhcmRgLlxuXG5XYWl0IGEgbWludXRlLCBgaXBfYXBwZW5kX2RhdGFgIGFuZCBgaXA2X2FwcGVuZF9kYXRhYCBhcmUgZXhwb3J0ZWQ/IFRoYXQgbWVhbnMgdGhleSBhcmUgdXNlZCBieSBhIHRvbiBvZiBkaWZmZXJlbnQgcHJvdG9jb2xzLCBpbmNsdWRpbmcgVURQLCBJQ01QLCBhbmQgUkFXLiBUaGF0IGJyb2FkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBzaWduaWZpY2FudGx5LiBUaGUgc2VsZnRlc3Qgc3BlY2lmaWNhbGx5IHRhcmdldHMgVURQIGxlbmd0aCBvdmVyZmxvd3MsIHdoaWNoIGlzIHJlYWxseSBpbnRlcmVzdGluZy4gTGV0J3Mgc2VlIGlmIGB1ZHBfc2VuZG1zZ2AgYW5kIGB1ZHB2Nl9zZW5kbXNnYCBhcmUgc29saWQgZW50cnkgcG9pbnRzIGZvciBVRFAuIEJpbmdvISBUaGV5IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gUGx1cywgaXQgd291bGQgYmUgdXNlZnVsIHRvIGFsc28gdGFyZ2V0IGBpcDZfZm9yd2FyZGAgZm9yIGFueSBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGdldCB0aGUgZXhhY3QgbmFtZXMgb2YgdGhlIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbjpcblxuKiAgIGB1ZHBfc2VuZG1zZ2BcbiogICBgdWRwdjZfc2VuZG1zZ2BcbiogICBgaXBfYXBwZW5kX2RhdGFgXG4qICAgYGlwNl9hcHBlbmRfZGF0YWBcbiogICBgaXBfbWFrZV9za2JgXG4qICAgYGlwNl9tYWtlX3NrYmBcbiogICBgaXA2X2ZvcndhcmRgXG5cbkFscmlnaHQsIHRpbWUgdG8gc3RhcnQgZnV6emluZyEgTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBJJ20gaW50ZXJlc3RlZCBpbiBpcywgaW5kZWVkLCBgdWRwdjZfc2VuZG1zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODA1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjAyLjQxMTA5NDk4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2ODM3MDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVkcHY2X3NlbmRtc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3Q9MTI9c3RydWN0IGlwdjZfcGluZm8qICAgICAgIHBpbmV0NlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0OjEzOnN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0KiBpcHY2X2ZsX2xpc3QgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF92Nl9jb25uZWN0LF9faXA2X2RhdGFncmFtX2Nvbm5lY3QsdWRwdjZfc2VuZG1zZyxyYXd2Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTQtYmUxNiAgICAgICAgICAgICAgICAgICAgIGluZXRfc3BvcnQgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190Y3BfdHJhbnNtaXRfc2tiXFxuLS1cXG5pbmNsdWRlL25ldC91ZHAuaD0yNzY9SU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICopKTtcXG5pbmNsdWRlL25ldC91ZHAuaC0yNzctXFxuaW5jbHVkZS9uZXQvdWRwLmg6Mjc4OmludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG5pbmNsdWRlL25ldC91ZHAuaC0yNzktSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShpbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC9pcHY2L2FmX2luZXQ2LmM9NjMxPWludCBpbmV0Nl9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jLTY0MC1cXHRwcm90ID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19wcm90KTtcXG5uZXQvaXB2Ni9hZl9pbmV0Ni5jOjY0MTpcXHRyZXR1cm4gSU5ESVJFQ1RfQ0FMTF8yKHByb3QtXFx1MDAzZXNlbmRtc2csIHRjcF9zZW5kbXNnLCB1ZHB2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L2FmX2luZXQ2LmMtNjQyLVxcdFxcdFxcdCAgICAgICBzaywgbXNnLCBzaXplKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0zNzY9aW50IGRvX2lwdjZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE3LVxcdFxcdFxcdCAqIGJ1dCB0aGVyZSBpcyBzdGlsbCBhIHJhY2UuICBTZWUgdGhlIGxvY2tsZXNzIHBhdGhcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjE4OlxcdFxcdFxcdCAqIGluIHVkcHY2X3NlbmRtc2coKSBhbmQgaXB2Nl9sb2NhbF9yeHBtdHUoKS5cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjE5LVxcdFxcdFxcdCAqL1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xMzczLVxcdHVoLVxcdTAwM2VkZXN0ID0gZmw2LVxcdTAwM2VmbDZfZHBvcnQ7XFxubmV0L2lwdjYvdWRwLmM6MTM3NDpcXHQvKiBEYXRhZ3JhbSBsZW5ndGggY2hlY2tlZCBpbiB1ZHB2Nl9zZW5kbXNnLiAqL1xcbm5ldC9pcHY2L3VkcC5jLTEzNzUtXFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xNDM4PXN0YXRpYyBpbnQgdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTQ1OC1cXG5uZXQvaXB2Ni91ZHAuYzoxNDU5OmludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9pcHY2L3VkcC5jLTE0NjAte1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTc3NC19XFxubmV0L2lwdjYvdWRwLmM6MTc3NTpFWFBPUlRfU1lNQk9MKHVkcHY2X3NlbmRtc2cpO1xcbm5ldC9pcHY2L3VkcC5jLTE3NzYtXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYz0xODk1PXN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvdWRwLmMtMTkwNi1cXHQuZ2V0c29ja29wdFxcdFxcdD0gdWRwdjZfZ2V0c29ja29wdCxcXG5uZXQvaXB2Ni91ZHAuYzoxOTA3OlxcdC5zZW5kbXNnXFx0XFx0PSB1ZHB2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L3VkcC5jLTE5MDgtXFx0LnJlY3Ztc2dcXHRcXHQ9IHVkcHY2X3JlY3Ztc2csXFxuLS1cXG5uZXQvcnhycGMvb3V0cHV0LmM9MTk9c3NpemVfdCBkb191ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG4tLVxcbm5ldC9yeHJwYy9vdXRwdXQuYy0yOS1cXHRcXHRcXHR9XFxubmV0L3J4cnBjL291dHB1dC5jOjMwOlxcdFxcdFxcdHJldHVybiB1ZHB2Nl9zZW5kbXNnKHNrLCBtc2csIGxlbik7XFxubmV0L3J4cnBjL291dHB1dC5jLTMxLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MDMuOTI3OTM1OTczWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjY0MDc4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVURQdjYgU2VuZCBJc3N1ZSoqXG5cbk9rYXksIHllcywgYHVkcHY2X3NlbmRtc2dgIHNlZW1zIHRvIGJlIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbiBoZXJlLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdG8gZW5zdXJlIHRoaXMgZml4IHdpbGwgd29yayBjb3JyZWN0bHkgaW4gYWxsIHJlbGV2YW50IGVudmlyb25tZW50cy5cblxuVGhlIGV4aXN0aW5nIHNlbGZ0ZXN0IGxldmVyYWdlcyBgQ09ORklHX0RFQlVHX05FVGAgdG8gbG9vayBmb3Igd2FybmluZ3MgaW4gdGhlIGtlcm5lbCBsb2dzLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yLCBidXQgdGhlIGFjdHVhbCBmaXggaXRzZWxmIGFwcGVhcnMgdG8gYmUgc2l0dWF0ZWQgZGVlcCB3aXRoaW4gdGhlIGNvcmUgSVB2NC9JUHY2IG91dHB1dCBjb2RlOiBzcGVjaWZpY2FsbHksIGluIGBuZXQvaXB2NC9pcF9vdXRwdXQuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfb3V0cHV0LmNgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGVzZSBmaWxlcyBhcmUgcGFydCBvZiB0aGUgY3JpdGljYWwgcGF0aC4gT2YgY291cnNlLCB0aGV5J3JlIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggYXJlIHByZXR0eSBtdWNoIHN0YW5kYXJkIGNvbmZpZ3MgSSdkIGV4cGVjdCB0byBzZWUgZW5hYmxlZCBpbiBtb3N0IGJ1aWxkcy4gU28sIEkgd2lsbCBkZWZpbml0ZWx5IGJlIGluY2x1ZGluZyB0aG9zZSBpbiBteSBjb25zaWRlcmF0aW9ucy5cblxuSG9sZCBvbiwgSSBzZWUgdGhhdCB0aGUgc2VsZnRlc3QsIHNwZWNpZmljYWxseSBgY29ya19mcmFnc2l6ZS5weWAsIGlzIHV0aWxpemluZyBgSVBfTVRVX0RJU0NPVkVSYCBhbmQgYElQVjZfTVRVX0RJU0NPVkVSYCBzb2NrZXQgb3B0aW9ucy4gSXQgYWxzbyB1c2VzIGBJUFY2X1RMVl9KVU1CT2AgZm9yIGhvcC1ieS1ob3Agb3B0aW9ucy4gVGhhdCB0cmlnZ2VycyBhIG5ldyB0aG91Z2h0LiBJcyB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gSVB2NiBqdW1ib2dyYW1zIHRoYXQgSSBzaG91bGQgYmUgZG91YmxlIGNoZWNraW5nPyBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzIzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjA5LjA5NDM0Njc0OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTY4NTk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2X1RMVl9KVU1CT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaW42Lmg9NzE9c3RydWN0IGluNl9mbG93bGFiZWxfcmVxIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNDgtI2RlZmluZSBJUFY2X1RMVl9JT0FNXFx0XFx0NDlcXHQvKiBSRkMgOTQ4NiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaDoxNDk6I2RlZmluZSBJUFY2X1RMVl9KVU1CT1xcdFxcdDE5NFxcbmluY2x1ZGUvdWFwaS9saW51eC9pbjYuaC0xNTAtI2RlZmluZSBJUFY2X1RMVl9IQU9cXHRcXHQyMDFcXHQvKiBob21lIGFkZHJlc3Mgb3B0aW9uICovXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmM9MTE0PXN0YXRpYyBib29sIGlwNl9wYXJzZV90bHYoYm9vbCBob3BieWhvcCxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODEtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjYvZXh0aGRycy5jOjE4MjpcXHRcXHRcXHRcXHRjYXNlIElQVjZfVExWX0pVTUJPOlxcbm5ldC9pcHY2L2V4dGhkcnMuYy0xODMtXFx0XFx0XFx0XFx0XFx0aWYgKCFpcHY2X2hvcF9qdW1ibyhza2IsIG9mZikpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmM9MTgyPWludCBuZl9pcDZfY2hlY2tfaGJoX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnBsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjExLVxcbm5ldC9uZXRmaWx0ZXIvdXRpbHMuYzoyMTI6XFx0XFx0aWYgKG5oW29mZl0gPT0gSVBWNl9UTFZfSlVNQk8pIHtcXG5uZXQvbmV0ZmlsdGVyL3V0aWxzLmMtMjEzLVxcdFxcdFxcdHUzMiBwa3RfbGVuO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9jc3VtLmM9NDUyPXN0YXRpYyBpbnQgdGNmX2NzdW1faXB2Nl9ob3BvcHRzKHN0cnVjdCBpcHY2X29wdF9oZHIgKmlwNnhoLCB1bnNpZ25lZCBpbnQgaXhobCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfY3N1bS5jLTQ2NS1cXHRcXHRcXHRicmVhaztcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYzo0NjY6XFx0XFx0Y2FzZSBJUFY2X1RMVl9KVU1CTzpcXG5uZXQvc2NoZWQvYWN0X2NzdW0uYy00NjctXFx0XFx0XFx0b3B0bGVuID0geGhbb2ZmICsgMV0gKyAyO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MjA9SVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToyMTpJUFY2X1RMVl9KVU1CTyA9IDE5NFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTIyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHk9MTA4PWRlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHktMTEzLSAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LklQUFJPVE9fVURQKSBhcyBmZDpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weToxMTQ6ICAgICAgICAgICAgICAgIGhvcG9wdHMgPSBzdHJ1Y3QucGFjaygnIUJCQkJJJywgMCwgMCwgSVBWNl9UTFZfSlVNQk8sIDQsIDY1NTQ0KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5LTExNS0gICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMToxMC42MjAwNDI3MTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzgzNjczMjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBKdW1ib2dyYW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIGp1bWJvZ3JhbXM7IGl0J3MgYWxsIGJha2VkIGludG8gc3RhbmRhcmQgSVB2Niwgd2hpY2ggaXMgZ29vZC4gTGV0J3MgZ2V0IHRvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guIE15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGtleSBmdW5jdGlvbnM6IGB1ZHBfc2VuZG1zZ2AsIGB1ZHB2Nl9zZW5kbXNnYCwgYGlwX2FwcGVuZF9kYXRhYCwgYGlwNl9hcHBlbmRfZGF0YWAsIGBpcF9tYWtlX3NrYmAsIGBpcDZfbWFrZV9za2JgLCBhbmQgYGlwNl9mb3J3YXJkYC4gVGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIGNvZGUgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSBhbGwgbm9uLXN0YXRpYy5cblxuVGhlIGlzc3VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGlzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgd2hlbiBkZWFsaW5nIHdpdGggZXh0cmVtZWx5IGxhcmdlIE1UVXMsIHNwZWNpZmljYWxseSBqdW1ib2dyYW1zIG9yIHNjZW5hcmlvcyB3aXRoIGFydGlmaWNpYWxseSBpbmZsYXRlZCBNVFVzLiBUaGUgZml4IGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHJlc3RyaWN0IHRoZSBNVFUsIGJvdGggZm9yIElQdjQgYW5kIElQdjYsIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCByZXNwZWN0aXZlbHkuIFRoYXQgY2FwcyBpdC5cblxuSSBkaWQgYSBxdWljayBjaGVjaywgYW5kIGBpcF9zZXR1cF9jb3JrYCBhbmQgYGlwNl9zZXR1cF9jb3JrYCBhcmUgc3RhdGljLCBzbyBpdCdzIGBpcF9hcHBlbmRfZGF0YWAgYW5kIGBpcDZfYXBwZW5kX2RhdGFgIHRoYXQgYXJlIG1vc3QgaW1wb3J0YW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLlxuXG5UaGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMgYXJlIG1pbmltYWw7IGBJTkVUYCBhbmQgYElQVjZgIGFyZSB0aGUgcmVsZXZhbnQgZmxhZ3MuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoJ3MgbGltaXRpbmcgdGhlIE1UVS9mcmFnbWVudCBzaXplIHRvIGBJUF9NQVhfTVRVYCBhbmQgYElQNl9NQVhfTVRVYCB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzLiBUaGlzIGZpeGVzIGEgcG90ZW50aWFsIFVEUCBsZW5ndGggb3ZlcmZsb3cgaXNzdWUgd2hlbiBzZW5kaW5nIGxhcmdlIHBhY2tldHMgb3ZlciBpbnRlcmZhY2VzIHdpdGggZW5vcm1vdXMgTVRVcy4gSXQgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIGBzZW5kbXNnYCBjYWxscyBhbmQgSVAgZm9yd2FyZGluZy5cblxuVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2OCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNDU2Nzc4ODgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NjEzNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1ZHBfc2VuZG1zZ1wiLFxuICAgIFwidWRwdjZfc2VuZG1zZ1wiLFxuICAgIFwiaXBfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwNl9hcHBlbmRfZGF0YVwiLFxuICAgIFwiaXBfbWFrZV9za2JcIixcbiAgICBcImlwNl9tYWtlX3NrYlwiLFxuICAgIFwiaXA2X2ZvcndhcmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBsaW1pdHMgdGhlIE1UVS9mcmFnc2l6ZSB0byBJUF9NQVhfTVRVIGFuZCBJUDZfTUFYX01UVSBpbiB0aGUgSVB2NCBhbmQgSVB2NiBvdXRwdXQgcGF0aHMgKGlwX3NldHVwX2NvcmssIGlwNl9zZXR1cF9jb3JrLCBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBVRFAgbGVuZ3RoIG92ZXJmbG93IHdoZW4gc2VuZGluZyBsYXJnZSBwYWNrZXRzIG92ZXIgaW50ZXJmYWNlcyB3aXRoIHZlcnkgbGFyZ2UgTVRVcyAoZS5nLiB1c2luZyBJUHY2IGp1bWJvZ3JhbXMpLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGxvZ2ljIGFuZCBhcmUgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBVRFAgc2VuZG1zZyBhbmQgSVAgZm9yd2FyZGluZyBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidWRwX3NlbmRtc2dcIixcbiAgICBcInVkcHY2X3NlbmRtc2dcIixcbiAgICBcImlwX2FwcGVuZF9kYXRhXCIsXG4gICAgXCJpcDZfYXBwZW5kX2RhdGFcIixcbiAgICBcImlwX21ha2Vfc2tiXCIsXG4gICAgXCJpcDZfbWFrZV9za2JcIixcbiAgICBcImlwNl9mb3J3YXJkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbGltaXRzIHRoZSBNVFUvZnJhZ3NpemUgdG8gSVBfTUFYX01UVSBhbmQgSVA2X01BWF9NVFUgaW4gdGhlIElQdjQgYW5kIElQdjYgb3V0cHV0IHBhdGhzIChpcF9zZXR1cF9jb3JrLCBpcDZfc2V0dXBfY29yaywgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgVURQIGxlbmd0aCBvdmVyZmxvdyB3aGVuIHNlbmRpbmcgbGFyZ2UgcGFja2V0cyBvdmVyIGludGVyZmFjZXMgd2l0aCB2ZXJ5IGxhcmdlIE1UVXMgKGUuZy4gdXNpbmcgSVB2NiBqdW1ib2dyYW1zKS4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBsb2dpYyBhbmQgYXJlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVURQIHNlbmRtc2cgYW5kIElQIGZvcndhcmRpbmcgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIxOjE4LjUzNTU0ODcyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzOTU5ODI1Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNTM2MTc4ODczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjIxMzk1OTE5MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIGludGVnZXIgb3ZlcmZsb3cgaXNzdWUgd2hlcmUgdGhlIE1UVSBvciBmcmFnbWVudGF0aW9uIHNpemUgY291bGQgZXhjZWVkIDY1NTM1IGJ5dGVzICh0aGUgbWF4aW11bSBzaXplIHJlcHJlc2VudGFibGUgYnkgdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGZpZWxkKS4gV2hlbiBhIHVzZXIgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0IG92ZXIgYW4gaW50ZXJmYWNlIHdpdGggYSB2ZXJ5IGxhcmdlIE1UVSwgdGhlIGtlcm5lbCB3b3VsZCBhdHRlbXB0IHRvIGNyZWF0ZSBhIHNpbmdsZSBsYXJnZSBTS0IuIFRoZSBsZW5ndGggb2YgdGhpcyBTS0Igd291bGQgdGhlbiBiZSB0cnVuY2F0ZWQgd2hlbiB3cml0dGVuIHRvIHRoZSAxNi1iaXQgVURQIGxlbmd0aCBoZWFkZXIsIHRyaWdnZXJpbmcgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgaW4gYHVkcF9zZXRfbGVuX3Nob3J0KClgIGFuZCByZXN1bHRpbmcgaW4gYSBtYWxmb3JtZWQgcGFja2V0LlxcblxcblRoZSBmaXggc2ltcGx5IGNhcHMgdGhlIE1UVSBhbmQgYGNvcmstXFx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICg2NTUzNSkgdG8gcHJldmVudCB0aGlzIG92ZXJmbG93LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlIFNLQiBkYXRhIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBwYXlsb2FkLiBBbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHJlc3VsdGluZyBmcm9tIGxlbmd0aCBtaXNjYWxjdWxhdGlvbnMgd291bGQgYmUgcmVsaWFibHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdjNmNjMjI5NTliN2E1YWY4YWMzMWYwMzQ2ZGExZmYyOGMwN2ZiMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxMjoxODoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IGM2OWYxYzg3MTkyMjMuLmI5ZThkMmI3NTllOWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODQsNiArMzg0LDggQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIG91dDpcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5pbmRleCA3NGUwOTViNmI3Y2EwLi5hMjRjYzhlZTExZDNlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jXG5AQCAtMTMwMyw2ICsxMzAzLDcgQEAgc3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcbiBcbiBcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBpcF9za191c2VfcG10dShzaykgP1xuIFx0XHRcdCBkc3Q0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIDogUkVBRF9PTkNFKHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbXR1KTtcbitcdGNvcmstXHUwMDNlZnJhZ3NpemUgPSBtaW4oY29yay1cdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XG4gXG4gXHRpZiAoIWluZXRkZXZfdmFsaWRfbXR1KGNvcmstXHUwMDNlZnJhZ3NpemUpKVxuIFx0XHRyZXR1cm4gLUVORVRVTlJFQUNIO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuaW5kZXggOGZjNDc2NmM4ZGE5MC4uNTUwOTY1MDU4OTkxNSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jXG5AQCAtMTQzMiw2ICsxNDMyLDggQEAgc3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcbiBcdGlmIChmcmFnX3NpemUgXHUwMDI2XHUwMDI2IGZyYWdfc2l6ZSBcdTAwM2MgbXR1KVxuIFx0XHRtdHUgPSBmcmFnX3NpemU7XG4gXG4rXHRpZiAoc2tfaXNfdWRwKHNrKSlcbitcdFx0bXR1ID0gbWluKG10dSwgSVA2X01BWF9NVFUpO1xuIFx0Y29yay1cdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xuIFx0Y29yay1cdTAwM2ViYXNlLmdzb19zaXplID0gaXBjNi1cdTAwM2Vnc29fc2l6ZTtcbiBcdGNvcmstXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCAwZjVjMTc4YmMyMjRiLi5jNmQzMzJjOTBhNTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbkBAIC0yNSw2ICsyNSw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGNtc2dfc29fbWFyay5zaCBcXFxuIFx0Y21zZ19zb19wcmlvcml0eS5zaCBcXFxuIFx0Y21zZ190aW1lLnNoIFxcXG4rXHRjb3JrX2ZyYWdzaXplLnB5IFxcXG4gXHRkb3VibGVfdWRwX2VuY2FwLnNoIFxcXG4gXHRkcm9wX21vbml0b3JfdGVzdHMuc2ggXFxcbiBcdGVjbXBfcmVoYXNoLnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2NvcmtfZnJhZ3NpemUucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvY29ya19mcmFnc2l6ZS5weVxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ4OWVmOTg5MjMyOTRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9jb3JrX2ZyYWdzaXplLnB5XG5AQCAtMCwwICsxLDEzMCBAQFxuKyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rIyBUZXN0IHBvc3NpYmxlIFVEUCBsZW5ndGggb3ZlcmZsb3cgaW4gdWRwX3NlbmRfc2tiL3VkcF92Nl9zZW5kX3NrYi5cbitcbitmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ydW4sIGtzZnRfZXhpdCwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4rZnJvbSBsaWIucHkgaW1wb3J0IGlwLCBOZXROUywgTmV0TlNFbnRlclxuK2ltcG9ydCBlcnJub1xuK2ltcG9ydCBnemlwXG4raW1wb3J0IG9zXG4raW1wb3J0IHNvY2tldFxuK2ltcG9ydCBzdHJ1Y3RcbitpbXBvcnQgc3VicHJvY2Vzc1xuK1xuK1xuK0lQX01UVV9ESVNDT1ZFUiA9IDEwXG4rSVBfUE1UVURJU0NfUFJPQkUgPSAzXG4rSVBWNl9NVFVfRElTQ09WRVIgPSAyM1xuK0lQVjZfUE1UVURJU0NfRE8gPSAyXG4rSVBWNl9QTVRVRElTQ19QUk9CRSA9IDNcbitJUFY2X1RMVl9KVU1CTyA9IDE5NFxuK1xuK1xuK2RlZiBjaGVja19rZXJuZWxfY29uZmlnKG9wdGlvbikgLVx1MDAzZSBib29sIHwgTm9uZTpcbisgICAgZm9yIGZpbGVuYW1lLCBtZXRob2QgaW4gW1xuKyAgICAgICAgKCcvcHJvYy9jb25maWcuZ3onLCBnemlwLm9wZW4pLFxuKyAgICAgICAgKGYnL2Jvb3QvY29uZmlnLXtvcy51bmFtZSgpLnJlbGVhc2V9Jywgb3BlbiksXG4rICAgIF06XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgd2l0aCBtZXRob2QoZmlsZW5hbWUsICdydCcpIGFzIGNvbmZpZzpcbisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnOlxuKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoKSA9PSBmJ3tvcHRpb259PXknOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlXG4rICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgY29udGludWVcbitcbitcbitkZWYgYXNzZXJ0X2RlYnVnX2tlcm5lbCgpIC1cdTAwM2UgTm9uZTpcbisgICAgcmVzID0gY2hlY2tfa2VybmVsX2NvbmZpZygnQ09ORklHX0RFQlVHX05FVCcpXG4rICAgIGlmIHJlcyBpcyBOb25lOlxuKyAgICAgICAgcHJpbnQoXCJXQVJOOiBDYW4ndCByZWFkIGtlcm5lbCBjb25maWc7IGFzc3VtaW5nIGRlYnVnIGtlcm5lbCwgYW5kIHJ1bm5pbmcgdGhlIHRlc3RcIilcbisgICAgZWxpZiBub3QgcmVzOlxuKyAgICAgICAgcmFpc2UgS3NmdFNraXBFeCgnQ09ORklHX0RFQlVHX05FVCBpcyBub3Qgc2V0JylcbitcbitcbitkZWYgY2hlY2tfZG1lc2dfY2xlYW4oZnVuYykgLVx1MDAzZSBib29sOlxuKyAgICBkbWVzZyA9IHN1YnByb2Nlc3MuUG9wZW4oWydkbWVzZyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKVxuKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihbJ2dyZXAnLCAnLXEnLCBmJ1dBUk5JTkc6Lip7ZnVuY30nXSwgc3RkaW49ZG1lc2cuc3Rkb3V0KVxuKyAgICBkbWVzZy53YWl0KClcbisgICAgcmV0dXJuIHJlc3VsdC5yZXR1cm5jb2RlICE9IDAgYW5kIGRtZXNnLnJldHVybmNvZGUgPT0gMFxuK1xuK1xuK2RlZiBpcF9zZXR1cChuczogTmV0TlMsIG10dTogaW50LCBpcHY2OiBib29sKSAtXHUwMDNlIE5vbmU6XG4rICAgIGlwKCdsaW5rIGFkZCBkdW1teSB0eXBlIGR1bW15JywgbnM9bnMpXG4rICAgIGlwKGYnbGluayBzZXQgZHVtbXkgbXR1IHttdHV9JywgbnM9bnMpXG4rICAgIGlwKCdsaW5rIHNldCBkdW1teSB1cCcsIG5zPW5zKVxuKyAgICBmbGFnID0gJy02JyBpZiBpcHY2IGVsc2UgJydcbisgICAgbm9kYWQgPSAnbm9kYWQnIGlmIGlwdjYgZWxzZSAnJ1xuKyAgICBhZGRyX2xvY2FsID0gJ2ZkMDA6OjEvNjQnIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjEvMjQnXG4rICAgIGFkZHJfcmVtb3RlID0gJ2ZkMDA6OjInIGlmIGlwdjYgZWxzZSAnMTAuMC4wLjInXG4rICAgIGlwKGYne2ZsYWd9IGFkZHIgYWRkIHthZGRyX2xvY2FsfSBkZXYgZHVtbXkge25vZGFkfScsIG5zPW5zKVxuKyAgICBpcChmJ3tmbGFnfSBuZWlnaCBhZGQge2FkZHJfcmVtb3RlfSBsbGFkZHIgMDI6MDA6MDA6MDA6MDA6MDIgZGV2IGR1bW15IG51ZCBwZXJtYW5lbnQnLCBucz1ucylcbitcbitcbitkZWYgdGVzdF9pcHY2KCkgLVx1MDAzZSBOb25lOlxuKyAgICBhc3NlcnRfZGVidWdfa2VybmVsKClcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgaXBfc2V0dXAobnMsIDY1NTc2LCBUcnVlKVxuK1xuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19ER1JBTSkgYXMgZmQ6XG4rICAgICAgICAgICAgICAgIGZkLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgSVBWNl9NVFVfRElTQ09WRVIsIElQVjZfUE1UVURJU0NfRE8pXG4rICAgICAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgICAgIGZkLnNlbmR0byhiJyAnICogNjU1MjgsICgnZmQwMDo6MicsIDEyMzQpKVxuKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IGl0IGhhcHBlbnMgb24ga2VybmVscyB3aXRoIHRoZSBmaXguXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfdjZfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxuK1xuK1xuK2RlZiB0ZXN0X2lwdjQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIGFzc2VydF9kZWJ1Z19rZXJuZWwoKVxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBpcF9zZXR1cChucywgNjU1NTYsIEZhbHNlKVxuK1xuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKG5zKTpcbisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKSBhcyBmZDpcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgSVBfTVRVX0RJU0NPVkVSLCBJUF9QTVRVRElTQ19QUk9CRSlcbisgICAgICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICAgICAgZmQuc2VuZHRvKGInICcgKiA2NTUyOCwgKCcxMC4wLjAuMicsIDEyMzQpKVxuKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOlxuKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRU1TR1NJWkU6IHRoZSBjaGVjayBoYXBwZW5zIGFmdGVyIHRoZSBXQVJOIGlzIHByaW50ZWQuXG4rICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNU0dTSVpFOlxuKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlXG4rXG4rICAgICAgICBpcCgnbGluayBkZWwgZHVtbXknLCBucz1ucylcbitcbisgICAga3NmdF90cnVlKGNoZWNrX2RtZXNnX2NsZWFuKCd1ZHBfc2VuZF9za2InKSwgJ1dBUk5JTkcgZGV0ZWN0ZWQgaW4gZG1lc2cnKVxuK1xuK1xuK2RlZiB0ZXN0X2lwdjZfanVtYm8oKSAtXHUwMDNlIE5vbmU6XG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIGlwX3NldHVwKG5zLCA2NTU4NCwgVHJ1ZSlcbitcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihucyk6XG4rICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuSVBQUk9UT19VRFApIGFzIGZkOlxuKyAgICAgICAgICAgICAgICBob3BvcHRzID0gc3RydWN0LnBhY2soJyFCQkJCSScsIDAsIDAsIElQVjZfVExWX0pVTUJPLCA0LCA2NTU0NClcbisgICAgICAgICAgICAgICAgZmQuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9IT1BPUFRTLCBob3BvcHRzKVxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0NIRUNLU1VNLCA2KVxuKyAgICAgICAgICAgICAgICBmZC5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIElQVjZfTVRVX0RJU0NPVkVSLCBJUFY2X1BNVFVESVNDX1BST0JFKVxuKyAgICAgICAgICAgICAgICB1ZHAgPSBzdHJ1Y3QucGFjaygnIUhISEgnLCAxMjM0LCAxMjM0LCAwLCAwKSArIGInICcgKiA2NTUyOFxuKyAgICAgICAgICAgICAgICBmZC5zZW5kdG8odWRwLCAoJ2ZkMDA6OjInLCAwKSlcbitcbisgICAgICAgIGlwKCdsaW5rIGRlbCBkdW1teScsIG5zPW5zKVxuK1xuK1xuK2lmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbisgICAga3NmdF9ydW4oW1xuKyAgICAgICAgdGVzdF9pcHY2LFxuKyAgICAgICAgdGVzdF9pcHY0LFxuKyAgICAgICAgdGVzdF9pcHY2X2p1bWJvLFxuKyAgICBdKVxuKyAgICBrc2Z0X2V4aXQoKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6MTguNTM2MTc5NjUzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTA4NzcyOTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBVRFAgTGVuZ3RoIE92ZXJmbG93IFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSwgb3IgbWF5YmUgZXZlbiBhIGxlbmd0aCBvdmVyZmxvdywgd2l0aGluIHRoZSBgdWRwX3NlbmRfc2tiYCBhbmQgYHVkcF92Nl9zZW5kX3NrYmAgZnVuY3Rpb25zLiBUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoYXQgaWYgdGhlIE1UVSBnZXRzIHRvbyBsYXJnZSwgc3BlY2lmaWNhbGx5IGdyZWF0ZXIgdGhhbiA2NTUzNSwgd2UgY2FuIHJ1biBpbnRvIHRyb3VibGUgd2l0aCAxNi1iaXQgbGVuZ3RoIGZpZWxkcywgcmVzdWx0aW5nIGluIGEgcG90ZW50aWFsIG92ZXJmbG93LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoaXMgb3ZlcmZsb3cgbWlnaHQgbWFuaWZlc3QgaW4gZWl0aGVyIHRoZSBgc2tiLVx1MDAzZWxlbmAgb3IgdGhlIFVEUCBsZW5ndGggZmllbGRzLiBUaGUgdGVzdCBjYXNlIHRoZSBhdXRob3IgcHJvdmlkZXMgY3JlYXRlcyBhIGhpZ2ggTVRVIGR1bW15IGludGVyZmFjZSAoSVB2NDogNjU1NTYsIElQdjY6IDY1NTc2KSBhbmQgc2VuZHMgYSBsYXJnZSBVRFAgcGFja2V0ICg2NTUyOCBieXRlcykuIFRoZSB0ZXN0IGlzIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhIHdhcm5pbmcgaW4gdGhlIGtlcm5lbCBsb2dzIGZyb20gYHVkcF92Nl9zZW5kX3NrYmAgb3IgYHVkcF9zZW5kX3NrYmAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHByaW1hcmlseSBhIG1hdHRlciBvZiBjYXBwaW5nIHRoZSBNVFUgYW5kLCB0aGVyZWZvcmUsIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gcHJldmVudCBvdmVyZmxvd3MuIFRoZSBwYXRjaCBpcyBzaW1wbHkgbGltaXRpbmcgYm90aCBNVFUgYW5kIGBjb3JrLVx1MDAzZWZyYWdzaXplYCB0byBgSVBfTUFYX01UVWAgLyBgSVA2X01BWF9NVFVgICh3aGljaCBpcyA2NTUzNSkuIFRoaXMgc291bmRzIGNvcnJlY3QsIGFuZCBhIGNsZWFuIGZpeCBmb3IgYSAxNi1iaXQgbGVuZ3RoIG92ZXJmbG93LCBidXQgbXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuV2hpbGUgYW4gb3ZlcmZsb3cgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgS0FTQU4gaXMgdGhlcmUgdG8gY2F0Y2ggdGhvc2UuIFNvIGlzIHRoaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGlzc3VlPyBJcyB0aGVyZSBhIHJpc2sgdGhhdCB0aGlzIHdpbGwgc2VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBmb3IgYWxsb2NhdGVkIGJ1ZmZlcnMgYmVpbmcgdG9vIHNtYWxsIGFuZCB0aGVuIGhhdmluZyB1bmluaXRpYWxpemVkIGRhdGEgY29waWVkIGludG8gdGhlbS5cblxuSWYgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGV4Y2VlZHMgNjU1MzUsIHRoZXJlJ3MgdGhlIGNoYW5jZSBvZiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyBhbGxvY2F0aW9uIHNpemUgY2FsY3VsYXRpb25zIG9yIHdoZW4gcG9wdWxhdGluZyBsZW5ndGggaGVhZGVyIGZpZWxkcy4gQW4gb3ZlcmZsb3cgaW4gYWxsb2NhdGlvbiBzaXplIHdvdWxkIGxlYWQgdG8gYSBzbWFsbCBidWZmZXIsIHRoZW4gYSBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUg4oCTIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIEFuIG92ZXJmbG93IGluIHRoZSBsZW5ndGggaGVhZGVyIGNvdWxkIGxlYWQgdG8gZWl0aGVyOlxuXG4xLiAgYSBzbWFsbCBsZW5ndGggaGVhZGVyIHdpdGggYSBsYXJnZSBwYXlsb2FkIChyZWFkaW5nIG91dC1vZi1ib3VuZHMgZnJvbSB0aGUgc2tiKSwgb3JcbjIuICBhIGxhcmdlIGxlbmd0aCBoZWFkZXIgd2l0aCBhIHNtYWxsIHBheWxvYWQgKHdoaWNoIG1pZ2h0IGludm9sdmUgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSkuXG5cblRoZSBkYXRhIGluIHRoZSBgc2tiYCBpcyB1c3VhbGx5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVpdGhlciB0aHJvdWdoIGBjb3B5X2Zyb21fdXNlcmAgb3Igc2ltaWxhci4gSWYgbW9yZSBkYXRhIGlzIHNlbnQgdGhhbiBhbGxvY2F0ZWQsIGl04oCZcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhhdC4gTXkgcXVlc3Rpb24gaXMsIGNvdWxkIHRoaXMgY2F1c2UgdW5pbml0aWFsaXplZCBkYXRhIHRvIGJlIHNlbnQgZnJvbSBza2IgcGFkZGluZz9cblxuVG8gY29uZmlybSwgSSdsbCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgaW4gYHVkcF9zZW5kX3NrYmAgYW5kIGB1ZHBfdjZfc2VuZF9za2JgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZSBgZnJhZ3NpemVgIGNhbGN1bGF0aW9uIGFuZCBsZW5ndGggZmllbGRzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZml4IGRvZXNuJ3QgaW50cm9kdWNlIGEgc3VidGxlciB2dWxuZXJhYmlsaXR5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDEyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjE6NTkuMDQ0OTU1MDE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzE1MDA2MjUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOSU5HLip1ZHBfc2VuZF9za2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjAxLjM1OTk2OTk2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM1ODc2NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdWRwX3NlbmRfc2tiYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyB0aGlzIGlzIHRvIGlzb2xhdGUgdGhlIHBvdGVudGlhbCBjdWxwcml0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIHNwZWNpZmljIHN0cmluZzogYFdBUk5fT05gLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaXRzIHVzYWdlIHdpdGhpbiB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgZGVidWdnaW5nIHRoZXNlIGtpbmRzIG9mIG5ldHdvcmsgc3RhY2sgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZXJlIGtlcm5lbCB3YXJuaW5ncyBhcmUgaW52b2x2ZWQuIFRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbiBpcyBhIGxpa2VseSBjYW5kaWRhdGUsIGFzIGl0J3MgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGNydWNpYWwgcHJvY2VzcyBvZiBzZW5kaW5nIFVEUCBkYXRhZ3JhbXMuIEZpbmRpbmcgYFdBUk5fT05gIHdpdGhpbiBpdCBzdWdnZXN0cyBhIHBvdGVudGlhbCBzYW5pdHkgY2hlY2sgb3IgY29uZGl0aW9uIGJlaW5nIHRyaWdnZXJlZCB0aGF0IHdhcnJhbnRzIGEga2VybmVsLWxldmVsIG1lc3NhZ2UuIEknbSBob3BpbmcgdGhhdCBieSBncmVwcGluZyBmb3IgdGhhdCBzdHJpbmcsIEkgY2FuIHF1aWNrbHkgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgd2FybmluZywgd2hpY2ggd2lsbCBwcm92aWRlIGNydWNpYWwgY2x1ZXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXNzdWUgSSdtIHRyYWNraW5nIGRvd24uIFRoaXMgc2VhcmNoIHdpbGwgYmUgdGhlIGZvdW5kYXRpb24gb2YgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBjb25kaXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjI6NDEuNzE4NzM4MTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYzMjMyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOX09OLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MTk5NT1pbnQgdWRwX3JlYWRfc2tiKHN0cnVjdCBzb2NrICpzaywgc2tiX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMjAxNC1cXG5uZXQvaXB2NC91ZHAuYzoyMDE1OlxcdFdBUk5fT05fT05DRSghc2tiX3NldF9vd25lcl9za19zYWZlKHNrYiwgc2spKTtcXG5uZXQvaXB2NC91ZHAuYy0yMDE2LVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9Mjc2ND1lbnVtIHNrYl9kcm9wX3JlYXNvbiB1ZHBfdjRfZWFybHlfZGVtdXgoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTI4MDUtXFx0c2tiLVxcdTAwM2VzayA9IHNrO1xcbm5ldC9pcHY0L3VkcC5jOjI4MDY6XFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShza19pc19yZWZjb3VudGVkKHNrKSk7XFxubmV0L2lwdjQvdWRwLmMtMjgwNy1cXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3BmcmVlO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MzM1Mz1zdGF0aWMgc3RydWN0IHNvY2sgKmJwZl9pdGVyX3VkcF9iYXRjaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSlcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTM0NjItXFxubmV0L2lwdjQvdWRwLmM6MzQ2MzpcXHRXQVJOX09OX09OQ0UoaXRlci1cXHUwMDNlZW5kX3NrICE9IGJhdGNoX3Nrcyk7XFxubmV0L2lwdjQvdWRwLmMtMzQ2NC1cXHRyZXR1cm4gaXRlci1cXHUwMDNlZW5kX3NrID8gaXRlci1cXHUwMDNlYmF0Y2hbMF0uc2sgOiBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMjo0MS43NzMzODIxM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTAxNjA2OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRlYnVnZ2luZyBhIFVEUCBJc3N1ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSB0ZXN0IHNjcmlwdCBpcyBmbGFnZ2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0J3Mgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHRoZSBzdHJpbmcgYFdBUk5JTkc6Lip1ZHBfc2VuZF9za2JgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCB3YXJuaW5nIHJlbGF0ZWQgdG8gdGhlIGB1ZHBfc2VuZF9za2JgIGZ1bmN0aW9uLCB3aGljaCBpcywgb2YgY291cnNlLCBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBVRFAgdHJhbnNtaXNzaW9uIHBhdGguIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXA/IEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzICpXQVJOKi4gSSdsbCBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHNlYXJjaCB3aXRoaW4gYHVkcF9zZW5kX3NrYmAgaXRzZWxmIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBXQVJOYC4gVGhhdCdzIHdoZXJlIHRoZSByb290IGNhdXNlIGlzIG1vc3QgbGlrZWx5IGhpZGluZy4gVW5kZXJzdGFuZGluZyB3aGF0IGNpcmN1bXN0YW5jZXMgbGVhZCB0byB0aGF0IHdhcm5pbmcgd2lsbCBiZSBrZXkgdG8gZGlhZ25vc2luZyBhbmQgZml4aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA3LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjI6NDUuNjc0OTkyMzE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJXQVJOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTE5OTU9aW50IHVkcF9yZWFkX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNrYl9yZWFkX2FjdG9yX3QgcmVjdl9hY3RvcilcXG4tLVxcbm5ldC9pcHY0L3VkcC5jLTIwMTQtXFxubmV0L2lwdjQvdWRwLmM6MjAxNTpcXHRXQVJOX09OX09OQ0UoIXNrYl9zZXRfb3duZXJfc2tfc2FmZShza2IsIHNrKSk7XFxubmV0L2lwdjQvdWRwLmMtMjAxNi1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTI3NjQ9ZW51bSBza2JfZHJvcF9yZWFzb24gdWRwX3Y0X2Vhcmx5X2RlbXV4KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0yODA1LVxcdHNrYi1cXHUwMDNlc2sgPSBzaztcXG5uZXQvaXB2NC91ZHAuYzoyODA2OlxcdERFQlVHX05FVF9XQVJOX09OX09OQ0Uoc2tfaXNfcmVmY291bnRlZChzaykpO1xcbm5ldC9pcHY0L3VkcC5jLTI4MDctXFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja19wZnJlZTtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTMzNTM9c3RhdGljIHN0cnVjdCBzb2NrICpicGZfaXRlcl91ZHBfYmF0Y2goc3RydWN0IHNlcV9maWxlICpzZXEpXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0zNDYyLVxcbm5ldC9pcHY0L3VkcC5jOjM0NjM6XFx0V0FSTl9PTl9PTkNFKGl0ZXItXFx1MDAzZWVuZF9zayAhPSBiYXRjaF9za3MpO1xcbm5ldC9pcHY0L3VkcC5jLTM0NjQtXFx0cmV0dXJuIGl0ZXItXFx1MDAzZWVuZF9zayA/IGl0ZXItXFx1MDAzZWJhdGNoWzBdLnNrIDogTlVMTDtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTM4MjM9c3RhdGljIGludCBicGZfaXRlcl91ZHBfcmVhbGxvY19iYXRjaChzdHJ1Y3QgYnBmX3VkcF9pdGVyX3N0YXRlICppdGVyLFxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMzgyOC1cXHRuZXdfYmF0Y2ggPSBrdm1hbGxvY19vYmpzKCpuZXdfYmF0Y2gsIG5ld19iYXRjaF9zeixcXG5uZXQvaXB2NC91ZHAuYzozODI5OlxcdFxcdFxcdFxcdCAgZmxhZ3MgfCBfX0dGUF9OT1dBUk4pO1xcbm5ldC9pcHY0L3VkcC5jLTM4MzAtXFx0aWYgKCFuZXdfYmF0Y2gpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjQ1LjcyMzg5MjU2MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTYyNDAzMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFVEUCBTZW5kIFBhdGgqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBUaGF0IHdhcm5pbmcgSSBzYXcuLi4gY291bGQgaXQgYmUgYnVyaWVkIHdpdGhpbiB0aGUgYHVkcF9zZW5kX3NrYmAgZnVuY3Rpb24sIGJ1dCBjbGV2ZXJseSBkaXNndWlzZWQgYXMgYSBjb25kaXRpb25hbCBkZWJ1ZyBtZXNzYWdlIGxpa2UgYSBgREVCVUdfTkVUX1dBUk5fT05fT05DRWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEkgc2hvdWxkIHByb2JhYmx5IHN0b3AgYXNzdW1pbmcgYW5kIGp1c3QgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gQmVzdCB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIGFuZCBzY3J1dGluaXplIHRoZSBgdWRwX3NlbmRfc2tiYCBmdW5jdGlvbiBpdHNlbGYuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI1NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIyOjUwLjY4NjI5Nzg0OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNTU1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3NlbmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3VkcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3VkcC5jPTEwOTE9RVhQT1JUX1NZTUJPTCh1ZHBfc2V0X2NzdW0pO1xcbm5ldC9pcHY0L3VkcC5jLTEwOTItXFxubmV0L2lwdjQvdWRwLmM6MTA5MzpzdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvdWRwLmMtMTA5NC1cXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTE3OT1pbnQgdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTE5MC1cXG5uZXQvaXB2NC91ZHAuYzoxMTkxOlxcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSk7XFxubmV0L2lwdjQvdWRwLmMtMTE5Mi1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTEyMzU9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQ0NC1cXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNrYikpXFxubmV0L2lwdjQvdWRwLmM6MTQ0NTpcXHRcXHRcXHRlcnIgPSB1ZHBfc2VuZF9za2Ioc2tiLCBmbDQsIFxcdTAwMjZjb3JrKTtcXG5uZXQvaXB2NC91ZHAuYy0xNDQ2LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMjo1MC43MzM1NjE4MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzNjgxMDU5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdWRwX3NlbmRfc2tiYCoqXG5cbk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExpbnV4IGtlcm5lbCBoYW5kbGVzIHNlbmRpbmcgVURQIGRhdGFncmFtcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGB1ZHBfc2VuZF9za2JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWVudGFsbHkgc2tldGNoIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyDigJMgd2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIGZpdCBpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrPyBJdCdzIGNsZWFybHkgYSBjb3JlIGZ1bmN0aW9uLCBsaWtlbHkgY2FsbGVkIGFmdGVyIHRoZSBzb2NrZXQgbGF5ZXIgaGFzIGFzc2VtYmxlZCBhbiBTS0IgKFNvY2tldCBCdWZmZXIpLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBwYWNrZXQgdHJhbnNtaXNzaW9uLlxuXG5JIGFudGljaXBhdGUgc2VlaW5nIHRoaW5ncyBsaWtlOlxuXG4qICAgKipDaGVja3N1bSBDYWxjdWxhdGlvbjoqKiBIb3cgYXJlIFVEUCBjaGVja3N1bXMgZ2VuZXJhdGVkIGFuZCBoYW5kbGVkIGhlcmUsIGNvbnNpZGVyaW5nIG9mZmxvYWRpbmcgY2FwYWJpbGl0aWVzIGFuZCBoYXJkd2FyZSBhY2NlbGVyYXRpb24/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UuXG4qICAgKipJUCBIZWFkZXIgQ29uc3RydWN0aW9uOioqIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBidWlsZHMgdGhlIElQIGhlYWRlciAoSVB2NCBvciBJUHY2LCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQpIG9yIGludGVyYWN0cyB3aXRoIGEgbG93ZXItbGV2ZWwgZnVuY3Rpb24gdGhhdCBkb2VzLiBEb2VzIGl0IGhhbmRsZSBmcmFnbWVudGF0aW9uIGlmIHRoZSBkYXRhZ3JhbSBzaXplIGV4Y2VlZHMgdGhlIE1UVT9cbiogICAqKkludGVyZmFjZSBTZWxlY3Rpb246KiogSG93IGRvZXMgaXQgY2hvb3NlIHRoZSBvdXRnb2luZyBuZXR3b3JrIGludGVyZmFjZT8gSXMgaXQgYmFzZWQgb24gcm91dGluZyB0YWJsZXMsIHNvY2tldCBvcHRpb25zLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbT9cbiogICAqKkxvY2tpbmc6KiogV2hhdCBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIGVtcGxveWVkIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5IHdoZW4gYWNjZXNzaW5nIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSB0aGUgVURQIHNvY2tldCBvciB0aGUgcm91dGluZyBjYWNoZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGxvb2sgb3V0IGZvcj9cbiogICAqKlRyYW5zbWlzc2lvbiBRdWV1ZWluZzoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgaGFuZCB0aGUgU0tCIG9mZiB0byBhIGRldmljZSBkcml2ZXIsIG9yIGlzIHRoZXJlIGFuIGludGVybWVkaWF0ZSBxdWV1ZWluZyBzdGFnZT8gSSdsbCBiZSBsb29raW5nIGZvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29ya2luZyBkZXZpY2UncyB0cmFuc21pdCBxdWV1ZSAoZS5nLiwgYG5ldGlmX3N0YXJ0X3F1ZXVlYCkuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQ/IEhvdyBhcmUgdHJhbnNtaXNzaW9uIGZhaWx1cmVzIChlLmcuLCBuZXR3b3JrIGNvbmdlc3Rpb24sIGludGVyZmFjZSBkb3duKSBoYW5kbGVkPyBEb2VzIGl0IGhhbmRsZSBJQ01QIGVycm9ycyB0aGF0IG1pZ2h0IGJlIGdlbmVyYXRlZCBpbiByZXNwb25zZT9cbiogICAqKkNvbnRyb2wvU2lnbmFsbGluZzoqKiBEb2VzIHRoaXMgZnVuY3Rpb24gaGF2ZSBhbnkgc2lnbmFsbGluZyBjb21wb25lbnRzIHRvIG5vdGlmeSB0aGUgc2VuZGluZyBwcm9jZXNzIHJlZ2FyZGluZyB0aGUgc3VjY2Vzcy9mYWlsdXJlIG9mIHRyYW5zbWlzc2lvbj9cblxuSSdsbCBiZSBzcGVjaWZpY2FsbHkgd2F0Y2hpbmcgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGxvd2VyIGxheWVyczogSVAsIHRoZSBkZXZpY2UgZHJpdmVyLCBhbmQgdGhlIGhhcmR3YXJlIGl0c2VsZi4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyBob3cgdGhlIFNLQiBpcyBoYW5kbGVkLCBJIGFzc3VtZSBpdCdzIHdoZXJlIHRoZSBtb3N0IFwiZ2x1ZVwiIGhhcHBlbnMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyByZXNpZGUuIExldCdzIGdldCByZWFkaW5nIGFuZCBjb25maXJtIHRoZXNlIGV4cGVjdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjI1LjEwMTY3MDA0MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdWRwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTM6XFx0c3RhdGljIGludCB1ZHBfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbjEwOTQ6XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfY29yayAqY29yaylcXG4xMDk1OlxcdHtcXG4xMDk2OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuMTA5NzpcXHRcXHRpbnQgb2Zmc2V0LCBsZW4sIGRhdGFsZW47XFxuMTA5ODpcXHRcXHRzdHJ1Y3QgdWRwaGRyICp1aDtcXG4xMDk5OlxcdFxcdGludCBlcnI7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdG9mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7XFxuMTEwMjpcXHRcXHRsZW4gPSBza2ItXFx1MDAzZWxlbiAtIG9mZnNldDtcXG4xMTAzOlxcdFxcdGRhdGFsZW4gPSBsZW4gLSBzaXplb2YoKnVoKTtcXG4xMTA0OlxcdFxcbjExMDU6XFx0XFx0LypcXG4xMTA2OlxcdFxcdCAqIENyZWF0ZSBhIFVEUCBoZWFkZXJcXG4xMTA3OlxcdFxcdCAqL1xcbjExMDg6XFx0XFx0dWggPSB1ZHBfaGRyKHNrYik7XFxuMTEwOTpcXHRcXHR1aC1cXHUwMDNlc291cmNlID0gaW5ldF9zayhzayktXFx1MDAzZWluZXRfc3BvcnQ7XFxuMTExMDpcXHRcXHR1aC1cXHUwMDNlZGVzdCA9IGZsNC1cXHUwMDNlZmw0X2Rwb3J0O1xcbjExMTE6XFx0XFx0LyogRGF0YWdyYW0gbGVuZ3RoIGNoZWNrZWQgaW4gdWRwX3NlbmRtc2cuICovXFxuMTExMjpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG4xMTEzOlxcdFxcdHVoLVxcdTAwM2VjaGVjayA9IDA7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdGlmIChjb3JrLVxcdTAwM2Vnc29fc2l6ZSkge1xcbjExMTY6XFx0XFx0XFx0Y29uc3QgaW50IGhsZW4gPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikgK1xcbjExMTc6XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0XFx0aWYgKGhsZW4gKyBtaW4oZGF0YWxlbiwgY29yay1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwM2UgY29yay1cXHUwMDNlZnJhZ3NpemUpIHtcXG4xMTIwOlxcdFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4xMTIyOlxcdFxcdFxcdH1cXG4xMTIzOlxcdFxcdFxcdGlmIChkYXRhbGVuIFxcdTAwM2UgY29yay1cXHUwMDNlZ3NvX3NpemUgKiBVRFBfTUFYX1NFR01FTlRTKSB7XFxuMTEyNDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTI1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjExMjY6XFx0XFx0XFx0fVxcbjExMjc6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19ub19jaGVja190eCkge1xcbjExMjg6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTEyOTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTMwOlxcdFxcdFxcdH1cXG4xMTMxOlxcdFxcdFxcdGlmIChkc3RfeGZybShza2JfZHN0KHNrYikpKSB7XFxuMTEzMjpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTMzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjExMzQ6XFx0XFx0XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHRcXHRcXHRpZiAoZGF0YWxlbiBcXHUwMDNlIGNvcmstXFx1MDAzZWdzb19zaXplKSB7XFxuMTEzNzpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zaXplID0gY29yay1cXHUwMDNlZ3NvX3NpemU7XFxuMTEzODpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlID0gU0tCX0dTT19VRFBfTDQ7XFxuMTEzOTpcXHRcXHRcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb19zZWdzID0gRElWX1JPVU5EX1VQKGRhdGFsZW4sXFxuMTE0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgY29yay1cXHUwMDNlZ3NvX3NpemUpO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHRcXHQvKiBEb24ndCBjaGVja3N1bSB0aGUgcGF5bG9hZCwgc2tiIHdpbGwgZ2V0IHNlZ21lbnRlZCAqL1xcbjExNDM6XFx0XFx0XFx0XFx0Z290byBjc3VtX3BhcnRpYWw7XFxuMTE0NDpcXHRcXHRcXHR9XFxuMTE0NTpcXHRcXHR9XFxuMTE0NjpcXHRcXG4xMTQ3OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfbm9fY2hlY2tfdHgpIHtcXHRcXHRcXHQgLyogVURQIGNzdW0gb2ZmICovXFxuMTE0ODpcXHRcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuMTE0OTpcXHRcXHRcXHRnb3RvIHNlbmQ7XFxuMTE1MDpcXHRcXHR9IGVsc2UgaWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsgLyogVURQIGhhcmR3YXJlIGNzdW0gKi9cXG4xMTUxOlxcdGNzdW1fcGFydGlhbDpcXG4xMTUyOlxcdFxcdFxcdHVkcDRfaHdjc3VtKHNrYiwgZmw0LVxcdTAwM2VzYWRkciwgZmw0LVxcdTAwM2VkYWRkcik7XFxuMTE1MzpcXHRcXHRcXHRnb3RvIHNlbmQ7XFxuMTE1NDpcXHRcXHR9XFxuMTE1NTpcXHRcXG4xMTU2OlxcdFxcdC8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqL1xcbjExNTc6XFx0XFx0dWgtXFx1MDAzZWNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmw0LVxcdTAwM2VzYWRkciwgZmw0LVxcdTAwM2VkYWRkciwgbGVuLFxcbjExNTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgSVBQUk9UT19VRFAsIHVkcF9jc3VtKHNrYikpO1xcbjExNTk6XFx0XFx0aWYgKHVoLVxcdTAwM2VjaGVjayA9PSAwKVxcbjExNjA6XFx0XFx0XFx0dWgtXFx1MDAzZWNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7XFxuMTE2MTpcXHRcXG4xMTYyOlxcdHNlbmQ6XFxuMTE2MzpcXHRcXHRlcnIgPSBpcF9zZW5kX3NrYihzb2NrX25ldChzayksIHNrYik7XFxuMTE2NDpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbjExNjU6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU5PQlVGUyBcXHUwMDI2XFx1MDAyNlxcbjExNjY6XFx0XFx0XFx0ICAgICFpbmV0X3Rlc3RfYml0KFJFQ1ZFUlIsIHNrKSkge1xcbjExNjc6XFx0XFx0XFx0XFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfU05EQlVGRVJST1JTKTtcXG4xMTY4OlxcdFxcdFxcdFxcdGVyciA9IDA7XFxuMTE2OTpcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXHR9IGVsc2Uge1xcbjExNzE6XFx0XFx0XFx0VURQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFVEUF9NSUJfT1VUREFUQUdSQU1TKTtcXG4xMTcyOlxcdFxcdH1cXG4xMTczOlxcdFxcdHJldHVybiBlcnI7XFxuMTE3NDpcXHR9XFxuMTE3NTpcXHRcXG4xMTc2OlxcdC8qXFxuMTE3NzpcXHQgKiBQdXNoIG91dCBhbGwgcGVuZGluZyBkYXRhIGFzIG9uZSBVRFAgZGF0YWdyYW0uIFNvY2tldCBpcyBsb2NrZWQuXFxuMTE3ODpcXHQgKi9cXG4xMTc5OlxcdGludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spXFxuMTE4MDpcXHR7XFxuMTE4MTpcXHRcXHRzdHJ1Y3QgdWRwX3NvY2sgICp1cCA9IHVkcF9zayhzayk7XFxuMTE4MjpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuMTE4MzpcXHRcXHRzdHJ1Y3QgZmxvd2k0ICpmbDQgPSBcXHUwMDI2aW5ldC1cXHUwMDNlY29yay5mbC51LmlwNDtcXG4xMTg0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTE4NTpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0c2tiID0gaXBfZmluaXNoX3NrYihzaywgZmw0KTtcXG4xMTg4OlxcdFxcdGlmICghc2tiKVxcbjExODk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdGVyciA9IHVkcF9zZW5kX3NrYihza2IsIGZsNCwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSk7XFxuMTE5MjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6MjUuMTAxODU3NTUyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODgzMzM5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIHRoZSBXYXJuaW5nKipcblxuQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4uLiBJJ20gbG9va2luZyBmb3IgYSB3YXJuaW5nIG1lc3NhZ2UsIHByZXN1bWFibHkgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgcG90ZW50aWFsIGlzc3VlLiBUaGUga2V5IHF1ZXN0aW9uIGlzOiB3aGVyZSBpcyB0aGF0IHdhcm5pbmcgYWN0dWFsbHkgZ2VuZXJhdGVkPyBJdCdzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGB1ZHBfc2V0X2xlbl9zaG9ydGAuIEknbSBndWVzc2luZyB0aGF0IGZ1bmN0aW9uIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSwgZ2l2ZW4gdGhlIGNvbnRleHQgaW1wbGllZCBieSB0aGUgcHJvbXB0LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjI4Ljk5MDE5MzY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5NjE1MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidWRwX3NldF9sZW5fc2hvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdWRwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0xMTExLVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xcbm5ldC9pcHY0L3VkcC5jOjExMTI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwLmMtMTExMy1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMzoyOS40MTIxNjE5NzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxMzM0Mjk2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBJc3N1ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBuYW1lIGB1ZHBfc2V0X2xlbl9zaG9ydGAgaGFzIHBvcHBlZCB1cCwgYW5kIGl0J3MgcmluZ2luZyBzb21lIGJlbGxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCB3aGVyZSBpdCdzIHVzZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGxpa2VseSByZWxhdGVkIHRvIFVEUCBwYWNrZXQgbGVuZ3RoIGhhbmRsaW5nLiBHaXZlbiB0aGUgbmFtZSwgSSdtIGd1ZXNzaW5nIGl0IG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBzY2VuYXJpb3Mgd2hlcmUgdGhlIGNhbGN1bGF0ZWQgb3IgZGVzaXJlZCBVRFAgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiBzb21ldGhpbmcgaXQgc2hvdWxkIGJlLCBtYXliZSBhbiBNVFUgb3IgYSBtaW5pbXVtIHJlcXVpcmVkIGhlYWRlciBzaXplLiBDb3VsZCBiZSByZWxhdGVkIHRvIGZyYWdtZW50YXRpb24sIHBhZGRpbmcsIG9yIGV2ZW4gYSBwb3RlbnRpYWwgYnVnLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgZGVmaW5pdGl2ZSBkZWZpbml0aW9uIG9mIHRoaXMgZnVuY3Rpb24uIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGNvZGViYXNlLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIyOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjMzLjIyNTUwNzQxMloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODY2MDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1ZHBfc2V0X2xlbl9zaG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYz0xMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJkbWFfYnVpbGRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy0zOC1cXHR1aC1cXHUwMDNlZGVzdCA9IGh0b25zKFJPQ0VfVjJfVURQX0RQT1JUKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYzozOTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9sYWcuYy00MC1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jPTI5Nz1zdGF0aWMgdm9pZCBwcmVwYXJlX3VkcF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHNyY19wb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMzA3LVxcdHVkcGgtXFx1MDAzZXNvdXJjZSA9IHNyY19wb3J0O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX25ldC5jOjMwODpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBza2ItXFx1MDAzZWxlbik7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfbmV0LmMtMzA5LVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jPTYxMz1zdGF0aWMgdm9pZCBhbXRfc2VuZF9kaXNjb3Zlcnkoc3RydWN0IGFtdF9kZXYgKmFtdClcXG4tLVxcbmRyaXZlcnMvbmV0L2FtdC5jLTY2OS1cXHR1ZHBoLVxcdTAwM2VkZXN0XFx0PSBhbXQtXFx1MDAzZXJlbGF5X3BvcnQ7XFxuZHJpdmVycy9uZXQvYW10LmM6NjcwOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqdWRwaCkgKyBzaXplb2YoKmFtdGQpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy02NzEtXFx0dWRwaC1cXHUwMDNlY2hlY2tcXHQ9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz03MDI9c3RhdGljIHZvaWQgYW10X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYW10X2RldiAqYW10LCBib29sIHY2KVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtNzYyLVxcdHVkcGgtXFx1MDAzZWRlc3RcXHQ9IGFtdC1cXHUwMDNlcmVsYXlfcG9ydDtcXG5kcml2ZXJzL25ldC9hbXQuYzo3NjM6XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKCphbXRyaCkgKyBzaXplb2YoKnVkcGgpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy03NjQtXFx0dWRwaC1cXHUwMDNlY2hlY2tcXHQ9IDA7XFxuLS1cXG5kcml2ZXJzL25ldC9hbXQuYz0yNTk0PXN0YXRpYyB2b2lkIGFtdF9zZW5kX2FkdmVydGlzZW1lbnQoc3RydWN0IGFtdF9kZXYgKmFtdCwgX19iZTMyIG5vbmNlLFxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjY1Mi1cXHR1ZHBoLVxcdTAwM2VkZXN0XFx0PSBkcG9ydDtcXG5kcml2ZXJzL25ldC9hbXQuYzoyNjUzOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZigqYW10YSkgKyBzaXplb2YoKnVkcGgpKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yNjU0LVxcdHVkcGgtXFx1MDAzZWNoZWNrXFx0PSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYz0zMDc1PXN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jLTMxMzEtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYzozMTMyOlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYy0zMTMzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYz0xNzI5PXN0YXRpYyBpbnQgaWF2Zl90c28oc3RydWN0IGlhdmZfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jLTE3NzYtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYzoxNzc3OlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KGw0LnVkcCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYy0xNzc4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM9MTg0MT1pbnQgaWNlX3RzbyhzdHJ1Y3QgaWNlX3R4X2J1ZiAqZmlyc3QsIHN0cnVjdCBpY2VfdHhfb2ZmbG9hZF9wYXJhbXMgKm9mZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jLTE4OTMtXFx0XFx0ICAgIChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWdzb190eXBlIFxcdTAwMjYgU0tCX0dTT19VRFBfVFVOTkVMX0NTVU0pKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV90eHJ4LmM6MTg5NDpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdHhyeC5jLTE4OTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jPTI4MjE9aW50IGlkcGZfdHNvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZHBmX3R4X29mZmxvYWRfcGFyYW1zICpvZmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jLTI4NzMtXFx0XFx0b2ZmLVxcdTAwM2V0c29faGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGw0X3N0YXJ0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmM6Mjg3NDpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydChsNC51ZHAsIHNoaW5mby1cXHUwMDNlZ3NvX3NpemUgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMtMjg3NS1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYz03MDc9c3RhdGljIHZvaWQgb3R4Ml9zcWVfYWRkX2V4dChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBvdHgyX3NuZF9xdWV1ZSAqc3EsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3R4cnguYzo3NTM6XFx0XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90eHJ4LmMtNzU0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwNzc9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY0X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwaGRyICppcHY0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTA4My1cXHR1aCA9IChzdHJ1Y3QgdWRwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIHVkcF9vZmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jOjEwODQ6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIHNrYi1cXHUwMDNlbGVuIC0gdWRwX29mZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMtMTA4NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jPTEwOTY9c3RhdGljIHZvaWQgbWx4NWVfc2hhbXBvX3VwZGF0ZV9pcHY2X3VkcF9oZHIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IGlwdjZoZHIgKmlwdjYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMTAyLVxcdHVoID0gKHN0cnVjdCB1ZHBoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgdWRwX29mZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmM6MTEwMzpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiLVxcdTAwM2VsZW4gLSB1ZHBfb2ZmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYy0xMTA0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmM9ODA9c3RhdGljIHN0cnVjdCBza19idWZmICptbHg1ZV90ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE1LVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyg5KTsgLyogRGlzY2FyZCBQcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9zZWxmdGVzdC5jOjExNjpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBzaXplb2Yoc3RydWN0IG1seDVlaGRyKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3NlbGZ0ZXN0LmMtMTE3LVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYz0zODI9c3RhdGljIHZvaWQgZWY0X2l0ZXJhdGVfc3RhdGUoc3RydWN0IGVmNF9uaWMgKmVmeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9mYWxjb24vc2VsZnRlc3QuYy00MDMtXFx0cGF5bG9hZC1cXHUwMDNldWRwLnNvdXJjZSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL2ZhbGNvbi9zZWxmdGVzdC5jOjQwNDpcXHR1ZHBfc2V0X2xlbl9zaG9ydChcXHUwMDI2cGF5bG9hZC1cXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvZmFsY29uL3NlbGZ0ZXN0LmMtNDA1LVxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGVmNF9sb29wYmFja19wYXlsb2FkLCB1ZHApKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jPTM3OT1zdGF0aWMgdm9pZCBlZnhfaXRlcmF0ZV9zdGF0ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NlbGZ0ZXN0LmMtNDAwLVxcdHBheWxvYWQtXFx1MDAzZXVkcC5zb3VyY2UgPSAwO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zZWxmdGVzdC5jOjQwMTpcXHR1ZHBfc2V0X2xlbl9zaG9ydChcXHUwMDI2cGF5bG9hZC1cXHUwMDNldWRwLCBzaXplb2YoKnBheWxvYWQpIC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2VsZnRlc3QuYy00MDItXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3BheWxvYWQsIHVkcCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM9MzgwPXN0YXRpYyB2b2lkIGVmeF9pdGVyYXRlX3N0YXRlKHN0cnVjdCBlZnhfbmljICplZngpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvc2llbmEvc2VsZnRlc3QuYy00MDEtXFx0cGF5bG9hZC1cXHUwMDNldWRwLnNvdXJjZSA9IDA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3NpZW5hL3NlbGZ0ZXN0LmM6NDAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2V1ZHAsIHNpemVvZigqcGF5bG9hZCkgLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9zaWVuYS9zZWxmdGVzdC5jLTQwMy1cXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBlZnhfbG9vcGJhY2tfcGF5bG9hZCwgdWRwKSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvdGNfZW5jYXBfYWN0aW9ucy5jPTMwNT1zdGF0aWMgdm9pZCBlZnhfZ2VuX3R1bl9oZWFkZXJfdWRwKHN0cnVjdCBlZnhfdGNfZW5jYXBfYWN0aW9uICplbmNhcCwgdTggbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYy0zMTMtXFx0dWRwLVxcdTAwM2VkZXN0ID0ga2V5LVxcdTAwM2V0cF9kc3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL3RjX2VuY2FwX2FjdGlvbnMuYzozMTQ6XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwLCBzaXplb2YoKnVkcCkgKyBsZW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy90Y19lbmNhcF9hY3Rpb25zLmMtMzE1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz01OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN0bW1hY190ZXN0X2dldF91ZHBfc2tiKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTUtXFx0XFx0dWhkci1cXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXFx1MDAzZWRwb3J0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2OlxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoZHIsIHNpemVvZigqc2hkcikgKyBzaXplb2YoKnVoZHIpICsgYXR0ci1cXHUwMDNlc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1Ny1cXHRcXHRpZiAoYXR0ci1cXHUwMDNlbWF4X3NpemUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1ODpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBhdHRyLVxcdTAwM2VtYXhfc2l6ZSAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1OS1cXHRcXHRcXHRcXHRcXHQgIChzaXplb2YoKmloZHIpICsgc2l6ZW9mKCplaGRyKSkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9NTc4PXN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTAtXFx0dWggPSB1ZHBfaGRyKHNrYik7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6NjUxOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBza2ItXFx1MDAzZWxlbiAtIGdyb19oaW50LVxcdTAwM2VuZXN0ZWRfdHBfb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy02NTItXFx0aWYgKHVoLVxcdTAwM2VjaGVjaykge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwODk9c3RhdGljIHZvaWQgcHVzaF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAxLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHVkcF9sZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTczNj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5zaW1fZGV2X3RyYXBfc2tiX2J1aWxkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzcyLVxcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNnVkcGgtXFx1MDAzZWRlc3QsIHNpemVvZih1MTYpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NzczOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzc0LVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYz0zOD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKm5zaW1fZGV2X3BzYW1wbGVfc2tiX2J1aWxkKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc1LVxcdGdldF9yYW5kb21fYnl0ZXMoXFx1MDAyNnVkcGgtXFx1MDAzZWRlc3QsIHNpemVvZih1MTYpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jOjc2OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGRhdGFfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTc3LVxcbi0tXFxuaW5jbHVkZS9saW51eC91ZHAuaD00Mj1zdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW4oc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VkcC5oLTQ2LVxcbmluY2x1ZGUvbGludXgvdWRwLmg6NDc6c3RhdGljIGlubGluZSB2b2lkIHVkcF9zZXRfbGVuX3Nob3J0KHN0cnVjdCB1ZHBoZHIgKnVoLCB1bnNpZ25lZCBpbnQgbGVuKVxcbmluY2x1ZGUvbGludXgvdWRwLmgtNDgte1xcbi0tXFxubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYz0yNz1zdGF0aWMgdm9pZCB0ZXN0X2JsYWNraG9sZWRldihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jLTQ4LVxcdHVoLVxcdTAwM2Vzb3VyY2UgPSB1aC1cXHUwMDNlZGVzdCA9IGh0b25zKFVEUF9QT1JUKTtcXG5saWIvdGVzdHMvYmxhY2tob2xlX2Rldl9rdW5pdC5jOjQ5OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBkYXRhX2xlbik7XFxubGliL3Rlc3RzL2JsYWNraG9sZV9kZXZfa3VuaXQuYy01MC1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jPTM2PXN0YXRpYyBpbnQgdWRwX3VuY29tcHJlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2l6ZV90IG5lZWRlZClcXG4tLVxcbm5ldC82bG93cGFuL25oY191ZHAuYy05MC1cXHRcXHRpZiAobG93cGFuXzgwMjE1NF9jYihza2IpLVxcdTAwM2VkX3NpemUpXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jOjkxOlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZ1aCwgbG93cGFuXzgwMjE1NF9jYihza2IpLVxcdTAwM2VkX3NpemUgLVxcbm5ldC82bG93cGFuL25oY191ZHAuYy05Mi1cXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbm5ldC82bG93cGFuL25oY191ZHAuYy05My1cXHRcXHRlbHNlXFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jOjk0OlxcdFxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZ1aCwgc2tiLVxcdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpO1xcbm5ldC82bG93cGFuL25oY191ZHAuYy05NS1cXHRcXHRicmVhaztcXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmMtOTYtXFx0ZGVmYXVsdDpcXG5uZXQvNmxvd3Bhbi9uaGNfdWRwLmM6OTc6XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQoXFx1MDAyNnVoLCBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7XFxubmV0LzZsb3dwYW4vbmhjX3VkcC5jLTk4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MjkzMD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMDEwLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVxcdTAwM2VjdXJfdWRwX2RzdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzAxMTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCBkYXRhbGVuICsgOCk7XFx0LyogREFUQSArIHVkcGhkciAqL1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMwMTItXFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2NvcmUvcGt0Z2VuLmM9MzA1OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKm9kZXYsXFxuLS1cXG5uZXQvY29yZS9wa3RnZW4uYy0zMTQzLVxcdHVkcGgtXFx1MDAzZWRlc3QgPSBodG9ucyhwa3RfZGV2LVxcdTAwM2VjdXJfdWRwX2RzdCk7XFxubmV0L2NvcmUvcGt0Z2VuLmM6MzE0NDpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBoLCB1ZHBsZW4pO1xcbm5ldC9jb3JlL3BrdGdlbi5jLTMxNDUtXFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmM9MTk9c3RydWN0IHNrX2J1ZmYgKm5ldF90ZXN0X2dldF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IGlkLFxcbi0tXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzQtXFx0XFx0dWhkci1cXHUwMDNlZGVzdCA9IGh0b25zKGF0dHItXFx1MDAzZWRwb3J0KTtcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo3NTpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBzaXplb2YoKnNoZHIpICsgc2l6ZW9mKCp1aGRyKSArIGF0dHItXFx1MDAzZXNpemUpO1xcbm5ldC9jb3JlL3NlbGZ0ZXN0cy5jLTc2LVxcdFxcdGlmIChhdHRyLVxcdTAwM2VtYXhfc2l6ZSlcXG5uZXQvY29yZS9zZWxmdGVzdHMuYzo3NzpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aGRyLCBhdHRyLVxcdTAwM2VtYXhfc2l6ZSAtXFxubmV0L2NvcmUvc2VsZnRlc3RzLmMtNzgtXFx0XFx0XFx0XFx0XFx0ICAoc2l6ZW9mKCppaGRyKSArIHNpemVvZigqZWhkcikpKTtcXG4tLVxcbm5ldC9jb3JlL3Rzby5jPTk9dm9pZCB0c29fYnVpbGRfaGRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmhkciwgc3RydWN0IHRzb190ICp0c28sXFxuLS1cXG5uZXQvY29yZS90c28uYy00Mi1cXHRcXHQvKiBzaXplIGlzIGFmdGVyIHNlZ21lbnRhdGlvbi4gKi9cXG5uZXQvY29yZS90c28uYzo0MzpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2l6ZW9mKCp1aCkgKyBzaXplKTtcXG5uZXQvY29yZS90c28uYy00NC1cXHR9XFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0zMjUtXFx0dWgtXFx1MDAzZWRlc3QgPSBkcG9ydDtcXG5uZXQvaXB2NC9lc3A0LmM6MzI2OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBsZW4pO1xcbm5ldC9pcHY0L2VzcDQuYy0zMjctXFx0dWgtXFx1MDAzZWNoZWNrID0gMDtcXG4tLVxcbm5ldC9pcHY0L2lwY29uZmlnLmM9ODE4PXN0YXRpYyB2b2lkIF9faW5pdCBpY19ib290cF9zZW5kX2lmKHN0cnVjdCBpY19kZXZpY2UgKmQsIHVuc2lnbmVkIGxvbmcgamlmZmllc19kaWZmKVxcbi0tXFxubmV0L2lwdjQvaXBjb25maWcuYy04NDktXFx0Yi1cXHUwMDNldWRwaC5kZXN0ID0gaHRvbnMoNjcpO1xcbm5ldC9pcHY0L2lwY29uZmlnLmM6ODUwOlxcdHVkcF9zZXRfbGVuX3Nob3J0KFxcdTAwMjZiLVxcdTAwM2V1ZHBoLCBzaXplb2Yoc3RydWN0IGJvb3RwX3BrdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxubmV0L2lwdjQvaXBjb25maWcuYy04NTEtXFx0LyogVURQIGNoZWNrc3VtIG5vdCBjYWxjdWxhdGVkIC0tIGV4cGxpY2l0bHkgYWxsb3dlZCBpbiBCT09UUCBSRkMgKi9cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzE4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmluZXRfcnRtX2dldHJvdXRlX2J1aWxkX3NrYihfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMjIxLVxcdFxcdHVkcGgtXFx1MDAzZWRlc3QgPSBkcG9ydDtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMyMjI6XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWRwaCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTMyMjMtXFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjQvdWRwLmM9MTA5Mz1zdGF0aWMgaW50IHVkcF9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuLS1cXG5uZXQvaXB2NC91ZHAuYy0xMTExLVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcF9zZW5kbXNnLiAqL1xcbm5ldC9pcHY0L3VkcC5jOjExMTI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwLmMtMTExMy1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz0xNzI9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3NrYl91ZHBfdHVubmVsX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjgzLVxcdFxcdGlmIChnc29fcGFydGlhbCBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvKHNrYikpIHtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjI4NDpcXHRcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSArXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODUtXFx0XFx0XFx0XFx0XFx0ICBTS0JfR1NPX0NCKHNrYiktXFx1MDAzZWRhdGFfb2Zmc2V0ICtcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtMjg3LVxcdFxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYzoyODg6XFx0XFx0XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy0yODktXFx0XFx0fVxcbi0tXFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYz00NjM9c3RhdGljIHN0cnVjdCBza19idWZmICpfX3VkcF9nc29fc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTQ3Mi1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjQ3MzpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1ZHBfaGRyKHNrYiksIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIG1zcyk7XFxubmV0L2lwdjQvdWRwX29mZmxvYWQuYy00NzQtXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jPTQ4MT1zdHJ1Y3Qgc2tfYnVmZiAqX191ZHBfZ3NvX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmdzb19za2IsXFxuLS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4MS1cXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jOjU4MjpcXHRcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbmV3bGVuKTtcXG5uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jLTU4My1cXHRcXHR1aC1cXHUwMDNlY2hlY2sgPSBjaGVjaztcXG4tLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjAxLVxcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmM6NjAyOlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCBuZXdsZW4pO1xcbm5ldC9pcHY0L3VkcF9vZmZsb2FkLmMtNjAzLVxcdHVoLVxcdTAwM2VjaGVjayA9IGNoZWNrO1xcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM2MS1cXHR1aC1cXHUwMDNlZGVzdCA9IGRwb3J0O1xcbm5ldC9pcHY2L2VzcDYuYzozNjI6XFx0dWRwX3NldF9sZW5fc2hvcnQodWgsIGxlbik7XFxubmV0L2lwdjYvZXNwNi5jLTM2My1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcbi0tXFxubmV0L2lwdjYvdWRwLmM9MTM1Nj1zdGF0aWMgaW50IHVkcF92Nl9zZW5kX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsXFxuLS1cXG5uZXQvaXB2Ni91ZHAuYy0xMzc0LVxcdC8qIERhdGFncmFtIGxlbmd0aCBjaGVja2VkIGluIHVkcHY2X3NlbmRtc2cuICovXFxubmV0L2lwdjYvdWRwLmM6MTM3NTpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgbGVuKTtcXG5uZXQvaXB2Ni91ZHAuYy0xMzc2LVxcdHVoLVxcdTAwM2VjaGVjayA9IDA7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjI1PXN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMjk4LVxcdFxcdH1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjk5OlxcdFxcdHVkcF9zZXRfbGVuX3Nob3J0KHVoLCB1ZHBfbGVuKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzAwLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM9MTM2PW5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMtMTYzLVxcdGRhdGFsZW4gPSBza2ItXFx1MDAzZWxlbiAtIHByb3RvZmY7XFxubmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmM6MTY0OlxcdHVkcF9zZXRfbGVuX3Nob3J0KHVkcGgsIGRhdGFsZW4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jLTE2NS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jPTExOD1zdGF0aWMgdm9pZCBuYXRfa2VlcGFsaXZlX3NlbmQoc3RydWN0IG5hdF9rZWVwYWxpdmUgKmthKVxcbi0tXFxubmV0L3hmcm0veGZybV9uYXRfa2VlcGFsaXZlLmMtMTM3LVxcdHVoLVxcdTAwM2VkZXN0ID0ga2EtXFx1MDAzZWVuY2FwX2Rwb3J0O1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jOjEzODpcXHR1ZHBfc2V0X2xlbl9zaG9ydCh1aCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC94ZnJtL3hmcm1fbmF0X2tlZXBhbGl2ZS5jLTEzOS1cXHR1aC1cXHUwMDNlY2hlY2sgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyMzozNC44MjQxNzc4NDdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0NjAwNTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVURQIEhlYWRlciBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVEUCBoZWFkZXIgc3RydWN0dXJlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3VkcC5oYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ3LiBJIHJlbWVtYmVyIHRoZXJlJ3Mgc29tZSBpbnRlcmVzdGluZyBzdHVmZiBkZWZpbmVkIHRoZXJlLCBhbmQgaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGRpdmUuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciB0aGUgY29yZSBgc3RydWN0IHVkcGhkcmAgZGVmaW5pdGlvbiwgdG8gdmVyaWZ5IHRoZSBleHBlY3RlZCBsYXlvdXQgb2YgdGhlIHNvdXJjZSBwb3J0LCBkZXN0aW5hdGlvbiBwb3J0LCBsZW5ndGgsIGFuZCBjaGVja3N1bSBmaWVsZHMsIGFuZCBwZXJoYXBzIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHBvdGVudGlhbCBmbGFncyBvciBvcHRpb25zIGRlZmluZWQgZnVydGhlciBkb3duIGluIHRoYXQgaW5jbHVkZSBmaWxlLiBUaGlzIGlzIGp1c3QgYSBwcmVsaW1pbmFyeSBzY2FuIGJlZm9yZSBJIG1vdmUgb24gdG8gd2hhdGV2ZXIgbXkgYWN0dWFsIHRhc2sgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODQyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6NDIuMzcwMTg1NDA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdWRwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW4oc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuICA0MzpcXHR7XFxuICA0NDpcXHRcXHR1aC1cXHUwMDNlbGVuID0gbGVuIFxcdTAwM2MgR1JPX0xFR0FDWV9NQVhfU0laRSA/IGh0b25zKGxlbikgOiAwO1xcbiAgNDU6XFx0fVxcbiAgNDY6XFx0XFxuICA0NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9sZW5fc2hvcnQoc3RydWN0IHVkcGhkciAqdWgsIHVuc2lnbmVkIGludCBsZW4pXFxuICA0ODpcXHR7XFxuICA0OTpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKGxlbiBcXHUwMDNlPSBHUk9fTEVHQUNZX01BWF9TSVpFKTtcXG4gIDUwOlxcdFxcdHVoLVxcdTAwM2VsZW4gPSBodG9ucyhsZW4pO1xcbiAgNTE6XFx0fVxcbiAgNTI6XFx0XFxuICA1MzpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NSU5fUEVSTkVUXFx0MTI4XFxuICA1NDpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NSU5cXHRcXHQoSVNfRU5BQkxFRChDT05GSUdfQkFTRV9TTUFMTCkgPyAxMjggOiAyNTYpXFxuICA1NTpcXHQjZGVmaW5lIFVEUF9IVEFCTEVfU0laRV9NQVhcXHRcXHQ2NTUzNlxcbiAgNTY6XFx0XFxuICA1NzpcXHRzdGF0aWMgaW5saW5lIHUzMiB1ZHBfaGFzaGZuKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgdTMyIG51bSwgdTMyIG1hc2spXFxuICA1ODpcXHR7XFxuICA1OTpcXHRcXHRyZXR1cm4gKG51bSArIG5ldF9oYXNoX21peChuZXQpKSBcXHUwMDI2IG1hc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjQyLjM3MDI0NTQ3N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTcxODgyNTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVURQIExlbmd0aCBUcnVuY2F0aW9uIElzc3VlKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpbiBgdWRwX3NldF9sZW5fc2hvcnRgIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUsIHNwZWNpZmljYWxseSB0aGUgYGxlbiBcdTAwM2U9IEdST19MRUdBQ1lfTUFYX1NJWkVgIGNoZWNrLCB3aGVyZSBgR1JPX0xFR0FDWV9NQVhfU0laRWAgaXMgNjU1MzYuIFRoaXMgd2FybmluZywgdHJpZ2dlcmVkIGluIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoIGlzIGlubGluZWQgaW50byBgdWRwX3NlbmRfc2tiYCwgZXhwbGFpbnMgdGhlIHRlc3Qgc2NyaXB0J3Mgc2VhcmNoIGZvciBgV0FSTklORzouKnVkcF9zZW5kX3NrYmAuIFNvLCB0aGUgcHJvYmxlbSBib2lscyBkb3duIHRvIGBsZW5gIGJlaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA2NTUzNi5cblxuTm93LCB3aHkgaXMgYGxlbmAgZXhjZWVkaW5nIDY1NTM1PyBUaGUgcm9vdCBjYXVzZSBzZWVtcyB0byBiZSB0aGF0IGBjb3JrLVx1MDAzZWZyYWdzaXplYCB3YXMgbm90IGJlaW5nIHByb3Blcmx5IGNhcHBlZCBieSBgaXBfc2V0dXBfY29ya2AsIGxlYWRpbmcgdG8gdGhlIHVzZXIgcG90ZW50aWFsbHkgc2VuZGluZyBhIG1hc3NpdmUgVURQIHBhY2tldCDigJMgbGV0J3Mgc2F5IGEgNjU1MjgtYnl0ZSBwYXlsb2FkIHBsdXMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgdG90YWwgb2YgNjU1NTYgYnl0ZXMuIE15IGZpcnN0IHRob3VnaHQgd2FzIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZS5cblxuSG93ZXZlciwgaWYgYGxlbmAgaXMgaW5kZWVkIDY1NTM2IG9yIGdyZWF0ZXIsIHRoZSBVRFAgbGVuZ3RoIGZpZWxkIChgdWgtXHUwMDNlbGVuID0gaHRvbnMobGVuKWApIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIDE2IGJpdHMuIFRoZSBwYXlsb2FkIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGZ1bGx5IGluaXRpYWxpemVkIOKAkyBjcmVhdGVkIGZyb20gYGNvcHlfZnJvbV91c2VyYCBvciBzb21ldGhpbmcgc2ltaWxhci4gU28sIGl0J3MganVzdCBhIHRydW5jYXRlZCBVRFAgbGVuZ3RoIGZpZWxkIGluIHRoZSBoZWFkZXIsIHdoaWNoIGlzIGEgcHJvdG9jb2wgdmlvbGF0aW9uIGFuZCBhIGJ1ZywgYnV0IG5vdCBhbiBpbmZvcm1hdGlvbiBsZWFrLlxuXG5CdXQsIGRvZXMgdGhpcyBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYXQgdGhlIHJlY2VpdmVyIG9yIHNlbmRlcj8gSWYgYGxlbmAgaXMgNjU1NTYsIGBodG9ucyg2NTU1NilgIGJlY29tZXMgYGh0b25zKDIwKWAuIFRoZSBVRFAgaGVhZGVyIGNsYWltcyBhIGxlbmd0aCBvZiAyMCwgYnV0IHRoZSBJUCBoZWFkZXIgYXNzZXJ0cyBhIGxlbmd0aCBvZiA2NTU1Ni4gV2hlbiB0aGUgcGFja2V0IGlzIHNlbnQsIHRoZSBuZXR3b3JrIGRyaXZlciAqd2lsbCogc2VuZCA2NTU1NiBieXRlcy4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhvc2UgNjU1NTYgYnl0ZXMgYXJlIGFjdHVhbGx5ICppbml0aWFsaXplZCouIEFuZCB5ZXMsIHRoZXkgd2VyZS4gVGhleSB3ZXJlIGFsbG9jYXRlZCBhbmQgZmlsbGVkIGJ5IHRoZSBzb2NrZXQgbGF5ZXIuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludm9sdmVkIGZyb20gd2hhdCBJIGNhbiBzZWUuXG5cbkxldCdzIHNlZSBpZiB0aGUgcGF0Y2ggZml4ZXMgYW55dGhpbmcgZWxzZS4gVGhlIHBhdGNoIGlzIGNhcHBpbmcgdGhlIE1UVSAoTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCkgdG8gYElQX01BWF9NVFVgICg2NTUzNSkgaW4gYGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmRgLCBgaXBfc2V0dXBfY29ya2AsIGFuZCBgaXA2X3NldHVwX2NvcmtgLiBUaGlzIGVuc3VyZXMgdGhhdCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgZG9lc24ndCBleGNlZWQgNjU1MzUuIElmIGBjb3JrLVx1MDAzZWZyYWdzaXplYCBpcyBcdTAwM2M9IDY1NTM1LCBgaXBfYXBwZW5kX2RhdGFgIGZyYWdtZW50cyB0aGUgcGFja2V0LiBJZiBgY29yay1cdTAwM2VmcmFnc2l6ZWAgZXhjZWVkZWQgNjU1MzUsIGBpcF9hcHBlbmRfZGF0YWAgd291bGQgcGxhY2UgdXAgdG8gYGNvcmstXHUwMDNlZnJhZ3NpemVgIGJ5dGVzIGludG8gYSBzaW5nbGUgYHNrYmAuIFdoaWxlIGBza2ItXHUwMDNlbGVuYCBjb3VsZCBiZSBcdTAwM2UgNjU1MzUsIGBza2ItXHUwMDNlbGVuYCBpcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aGljaCBjYW4gaGFuZGxlIGxhcmdlciB2YWx1ZXMuIFRoZSBvbmx5IHByb2JsZW0gaXMgdGhlIHRydW5jYXRpb24gaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCBhbmQgdGhlIHdhcm5pbmcuXG5cbkFsc28sIHRoZSBJUHY0IHRvdGFsIGxlbmd0aCBmaWVsZCBpcyAxNiBiaXRzLiBJZiBgc2tiLVx1MDAzZWxlbmAgaXMgXHUwMDNlIDY1NTM1LCBgaXBfc2VuZF9za2JgIGNvdWxkIHRydW5jYXRlIHRoZSBJUCBsZW5ndGgsIHRvby4gU28sIEkgbmVlZCB0byBjaGVjayBgaXBfb3V0cHV0LmNgIGFuZCBgaXA2X291dHB1dC5jYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzay4gSWYgYHNrYi1cdTAwM2VsZW5gIFx1MDAzZSA2NTUzNSwgYGlwX2FwcGVuZF9kYXRhYCBhbGxvY2F0ZXMgYSBzdWl0YWJseSBzaXplZCBgc2tiYC4gVGhlIGtleSBpczogZG9lcyBpdCBhbGxvY2F0ZSBpdCBwcm9wZXJseT8gSSdtIHByZXR0eSBzdXJlIGl0IHVzZXMgYHNvY2tfYWxsb2Nfc2VuZF9za2JgIG9yIHNpbWlsYXIsIHdoaWNoIGRvZXMgYWxsb2NhdGUgdGhlIHJlcXVlc3RlZCBzaXplLiBJZiB0aGUgc2l6ZSBpcyBcdTAwM2UgNjU1MzUsIGl0IGFsbG9jYXRlcywgY29waWVzIGRhdGEgZnJvbSB1c2Vyc3BhY2UsIGFuZCBzZXRzIGBza2ItXHUwMDNlbGVuYC4gQWdhaW4sIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGVyZS4gVGhlIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB1c2VyIGRhdGEuXG5cblNvLCB0aGUgY29yZSBpc3N1ZSBpcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSAxNi1iaXQgbGVuZ3RoIGZpZWxkcyBvZiBVRFAgYW5kIElQIGhlYWRlcnMuIFRoaXMgbGVhZHMgdG8gYSB3YXJuaW5nIGFuZCBtYWxmb3JtZWQgcGFja2V0cywgYnV0IG5vIGluZm9ybWF0aW9uIGxlYWthZ2Ugb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkYCBqdXN0IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mzk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjIzOjU4LjA4OTA3Mjk2MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQ2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzcwOlxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIDM3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbXR1O1xcbiAzNzI6XFx0XFxuIDM3MzpcXHRcXHRpZiAoIWZvcndhcmRpbmcgfHwgZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX01UVSkpIHtcXG4gMzc0OlxcdFxcdFxcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbiAzNzU6XFx0XFx0XFx0aWYgKG10dSlcXG4gMzc2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAzNzc6XFx0XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHRcXHRtdHUgPSBJUFY2X01JTl9NVFU7XFxuIDM4MDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDM4MTpcXHRcXHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcXG4gMzgyOlxcdFxcdGlmIChpZGV2KVxcbiAzODM6XFx0XFx0XFx0bXR1ID0gUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KTtcXG4gMzg0OlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzODU6XFx0XFxuIDM4NjpcXHRvdXQ6XFxuIDM4NzpcXHRcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4gMzkwOlxcdH1cXG4gMzkxOlxcdFxcbiAzOTI6XFx0LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbiAzOTM6XFx0ICpcXG4gMzk0OlxcdCAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxcbiAzOTU6XFx0ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXFxuIDM5NjpcXHQgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbiAzOTc6XFx0ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxcbiAzOTg6XFx0ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXFxuIDM5OTpcXHQgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjM6NTguMDg5MjA5MjcyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNzgzMzQyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIElQIEZyYWdtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgSVA2X01BWF9NVFVgIHZhbHVlLCBhbmQgaXQncyBoaXR0aW5nIG1lOiBpdCdzIDY1NTM1LCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjb3VsZCBkaXJlY3RseSBpbXBhY3Qgb3VyIGZyYWdtZW50YXRpb24gbG9naWMuIElmIHRoZSBgbXR1YCB2YWx1ZSBleGNlZWRzIHRoaXMgbGltaXQsIHdlIHJ1biBpbnRvIHRoZSByaXNrIG9mIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdmFsdWUgYmVjb21pbmcgbGFyZ2VyIHRoYW4gNjU1MzUuIFRoaXMgd291bGQgYmUgYSBwcm9ibGVtIGJlY2F1c2UgaXQgd291bGQgY2F1c2UgdGhlIFVEUCBsZW5ndGggdG8gYmUgdHJ1bmNhdGVkLCB3aGljaCB3b3VsZCB0cmlnZ2VyIHRoZSB3YXJuaW5nIHRoYXQgd2UgaGF2ZS4gXG5cbk5vdywgSSdtIHRyeWluZyB0byB0aGluayBvZiBhbnkgb3RoZXIgZWRnZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCBjb3VsZCBgbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpYCB1bmRlcmZsb3cgaWYgdGhlIGBtdHVgIGlzIGV4Y2VwdGlvbmFsbHkgbGFyZ2U/IExldCdzIHJ1bGUgdGhhdCBvdXQ6IGBsd3R1bm5lbF9oZWFkcm9vbWAgcmV0dXJucyBhIHNtYWxsIHZhbHVlLiBTaW5jZSBgbXR1YCBpcyBjYXBwZWQgYXQgNjU1MzUsIHRoYXQgc2hvdWxkIHByZXZlbnQgYGZyYWdzaXplYCBmcm9tIGV2ZXIgZXhjZWVkaW5nIHRoYXQgbWF4aW11bSB2YWx1ZS5cblxuQWxyaWdodCwgbGV0IG1lIG5vdyBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGlwX3NldHVwX2NvcmtgIGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjI0OjAzLjM2NzU0NTkyN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZzay1cXHUwMDNlc2tfdHNrZXkpO1xcbjEyOTE6XFx0XFx0cmV0dXJuIGVycjtcXG4xMjkyOlxcdH1cXG4xMjkzOlxcdFxcbjEyOTQ6XFx0c3RhdGljIGludCBpcF9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29yayAqY29yayxcXG4xMjk1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgaXBjbV9jb29raWUgKmlwYywgc3RydWN0IHJ0YWJsZSAqKnJ0cClcXG4xMjk2OlxcdHtcXG4xMjk3OlxcdFxcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqb3B0O1xcbjEyOTg6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuMTI5OTpcXHRcXG4xMzAwOlxcdFxcdHJ0ID0gKnJ0cDtcXG4xMzAxOlxcdFxcdGlmICh1bmxpa2VseSghcnQpKVxcbjEzMDI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTMwMzpcXHRcXG4xMzA0OlxcdFxcdGNvcmstXFx1MDAzZWZyYWdzaXplID0gaXBfc2tfdXNlX3BtdHUoc2spID9cXG4xMzA1OlxcdFxcdFxcdFxcdCBkc3Q0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgOiBSRUFEX09OQ0UocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW10dSk7XFxuMTMwNjpcXHRcXHRjb3JrLVxcdTAwM2VmcmFnc2l6ZSA9IG1pbihjb3JrLVxcdTAwM2VmcmFnc2l6ZSwgSVBfTUFYX01UVSk7XFxuMTMwNzpcXHRcXG4xMzA4OlxcdFxcdGlmICghaW5ldGRldl92YWxpZF9tdHUoY29yay1cXHUwMDNlZnJhZ3NpemUpKVxcbjEzMDk6XFx0XFx0XFx0cmV0dXJuIC1FTkVUVU5SRUFDSDtcXG4xMzEwOlxcdFxcbjEzMTE6XFx0XFx0LypcXG4xMzEyOlxcdFxcdCAqIHNldHVwIGZvciBjb3JraW5nLlxcbjEzMTM6XFx0XFx0ICovXFxuMTMxNDpcXHRcXHRvcHQgPSBpcGMtXFx1MDAzZW9wdDtcXG4xMzE1OlxcdFxcdGlmIChvcHQpIHtcXG4xMzE2OlxcdFxcdFxcdGlmICghY29yay1cXHUwMDNlb3B0KSB7XFxuMTMxNzpcXHRcXHRcXHRcXHRjb3JrLVxcdTAwM2VvcHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykgKyA0MCxcXG4xMzE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfYWxsb2NhdGlvbik7XFxuMTMxOTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIWNvcmstXFx1MDAzZW9wdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDEyOjI0OjAzLjM2NzY1NTg2N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMzNDc4MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBpcF9hcHBlbmRfZGF0YWAqKlxuXG5BbHJpZ2h0LCBsZXQncyB0aGluayB0aGlzIHRocm91Z2guIElmIHRoZSBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdmFsdWUgc29tZWhvdyBiYWxsb29ucyBiZXlvbmQgNjU1MzUsIGEgc2VyaW91cyBwcm9ibGVtIGNvdWxkIGFyaXNlIHdpdGhpbiB0aGUgYGlwX2FwcGVuZF9kYXRhYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBjb3VsZCBsZWFkIHRvIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYW4gc2tiIHdpdGggYSBsZW5ndGggKGBsZW5gKSB0aGF0IGV4Y2VlZHMgdGhlIDY1NTM1LWJ5dGUgbGltaXQuIFRoaXMgaXMgYSBjbGFzc2ljIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHNjZW5hcmlvLCBhbmQgYSBzaWduaWZpY2FudCBzZWN1cml0eSBjb25jZXJuLCBzbyBsZXQncyBjaGVjayBvdXQgYGlwX2FwcGVuZF9kYXRhYCB0byBjb25maXJtIHRoZSBjb2RlJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDowOC4xMDExMzYzMTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjkxNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2FwcGVuZF9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jPTk1MT1FWFBPUlRfU1lNQk9MKGlwX2dlbmVyaWNfZ2V0ZnJhZyk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtOTUyLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjk1MzpzdGF0aWMgaW50IF9faXBfYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTk1NC1cXHRcXHRcXHQgICAgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTI5ND1zdGF0aWMgaW50IGlwX3NldHVwX2Nvcmsoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb3JrICpjb3JrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM0OS0vKlxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNTA6ICpcXHRpcF9hcHBlbmRfZGF0YSgpIGNhbiBtYWtlIG9uZSBsYXJnZSBJUCBkYXRhZ3JhbSBmcm9tIG1hbnkgcGllY2VzIG9mXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTM1MS0gKlxcdGRhdGEuICBFYWNoIHBpZWNlIHdpbGwgYmUgaGVsZCBvbiB0aGUgc29ja2V0IHVudGlsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzU5LSAqL1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzNjA6aW50IGlwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTEzNjEtXFx0XFx0ICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgwLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjEzODE6XFx0cmV0dXJuIF9faXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgXFx1MDAyNnNrLVxcdTAwM2Vza193cml0ZV9xdWV1ZSwgXFx1MDAyNmluZXQtXFx1MDAzZWNvcmsuYmFzZSxcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xMzgyLVxcdFxcdFxcdFxcdHNrX3BhZ2VfZnJhZyhzayksIGdldGZyYWcsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xMzk5PXN0cnVjdCBza19idWZmICpfX2lwX21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE0ODktXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM6MTQ5MDpcXHRcXHQvKiBGb3Igc3VjaCBzb2NrZXRzLCB0cmFuc2hkcmxlbiBpcyB6ZXJvIHdoZW4gZG8gaXBfYXBwZW5kX2RhdGEoKSxcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNDkxLVxcdFxcdCAqIHNvIGljbXBoZHIgZG9lcyBub3QgaW4gc2tiIGxpbmVhciByZWdpb24gYW5kIGNhbiBub3QgZ2V0IGljbXBfdHlwZVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTU1ND1zdHJ1Y3Qgc2tfYnVmZiAqaXBfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTU3Ni1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYzoxNTc3OlxcdGVyciA9IF9faXBfYXBwZW5kX2RhdGEoc2ssIGZsNCwgXFx1MDAyNnF1ZXVlLCBjb3JrLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE1NzgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjdXJyZW50LVxcdTAwM2V0YXNrX2ZyYWcsIGdldGZyYWcsXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNjA1PXZvaWQgaXBfc2VuZF91bmljYXN0X3JlcGx5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKm9yaWdfc2ssXFxuLS1cXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjU4LVxcdGlwYy5zb2NrYy5tYXJrID0gZmw0LmZsb3dpNF9tYXJrO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NTk6XFx0ZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIFxcdTAwMjZmbDQsIGlwX3JlcGx5X2dsdWVfYml0cywgYXJnLVxcdTAwM2Vpb3YtXFx1MDAzZWlvdl9iYXNlLFxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTE2NjAtXFx0XFx0XFx0ICAgICBsZW4sIDAsIFxcdTAwMjZpcGMsIFxcdTAwMjZydCwgTVNHX0RPTlRXQUlUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MDguMTYzNDM2MzIxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NDY3MDYxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGBfX2lwX2FwcGVuZF9kYXRhYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBkaXNzZWN0IHRoaXMgYF9faXBfYXBwZW5kX2RhdGFgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQIHN0YWNrIGltcGxlbWVudGF0aW9uLiBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcyDigJMgdGhlIGBza19idWZmYCBzdHJ1Y3RzLCB0aGUgbmV0d29yayBoZWFkZXJzLCB0aGUgY2hlY2tzdW0gY2FsY3VsYXRpb25zLi4uIEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gdmlzdWFsaXplIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwcm9jZXNzIG9mIGZyYWdtZW50aW5nIGFuZCBzZW5kaW5nIElQIHBhY2tldHMsIHNwZWNpZmljYWxseS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgYmUgYSBjcnVjaWFsIGZ1bmN0aW9uOyBpdCdzIHByYWN0aWNhbGx5IHNjcmVhbWluZyBcImRhdGEgbWFuaXB1bGF0aW9uXCIgd2hpY2ggaW1wbGllcyBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBuZWVkIHRvIGJlIGF0IHRoZSBmb3JlZnJvbnQgb2YgbXkgbWluZC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZS4gSXMgdGhpcyBmdW5jdGlvbiBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgTVRVcz8gV2hhdCBhYm91dCBmcmFnbWVudGF0aW9uIGFuZCByZWFzc2VtYmx5IHNjZW5hcmlvcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcHkgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIGJlIGF2b2lkZWQgb3Igb3B0aW1pemVkIHdpdGggdGVjaG5pcXVlcyBsaWtlIHNjYXR0ZXItZ2F0aGVyIEkvTz8gSSdtIGFscmVhZHkgc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHNjZW5hcmlvcy5cblxuRnVydGhlcm1vcmUsIEnigJltIG1lbnRhbGx5IGNvbXBhcmluZyBhbmQgY29udHJhc3RpbmcgaXQgd2l0aCBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucyBJ4oCZdmUgd29ya2VkIHdpdGggaW4gdGhlIHBhc3QsIG1heWJlIGluIG90aGVyIE9TIGtlcm5lbHMgb3IgbmV0d29yayBkZXZpY2UgZHJpdmVycy4gQXJlIHRoZXJlIGFueSBjb21tb24gcGl0ZmFsbHM/IEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgb3IgY2xldmVyIHRlY2huaXF1ZXMgZm9yIGhhbmRsaW5nIHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycz8gSeKAmW0gbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3IgZW5oYW5jZW1lbnQuXG5cbkknbSBnZXR0aW5nIHJlYWR5IHRvIHNjcnV0aW5pemUgdGhlIGNvZGUgaXRzZWxmLCBsb29raW5nIGZvciBlZmZpY2llbmN5LCB0aHJlYWQtc2FmZXR5LCBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBmb3IgaW1wcm92ZW1lbnQuIEknbSBhbnRpY2lwYXRpbmcgc29tZSBwb2ludGVyIGFyaXRobWV0aWMgYW5kIGxpa2VseSBzb21lIGJpdHdpc2Ugb3BlcmF0aW9ucywgd2hpY2ggSSdtIGFscmVhZHkgbWVudGFsbHkgcHJlcGFyaW5nIGZvci4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpbW1lZGlhdGVseSB1bmRlcnN0YW5kIHRoZSBjb2RlJ3MgZWZmaWNpZW5jeSwgYW5kIGlmIG5vdCwgSSdsbCBiZSBkaXZpbmcgZGVlcCB0byB1bmRlcnN0YW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgaW4gdGhlIHdheSBpdCBpcy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIElQIHN0YWNrJ3Mgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBwYWNrZXQgc2l6ZXMsIGZyYWdtZW50YXRpb24gb3B0aW9ucywgYW5kIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoxNC4wMTAxNDUxNTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX291dHB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NTM6XFx0c3RhdGljIGludCBfX2lwX2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzayxcXG4gOTU0OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIDk1NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXFxuIDk1NjpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGluZXRfY29yayAqY29yayxcXG4gOTU3OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyxcXG4gOTU4OlxcdFxcdFxcdFxcdCAgICBpbnQgZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCxcXG4gOTU5OlxcdFxcdFxcdFxcdFxcdFxcdGludCBsZW4sIGludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLFxcbiA5NjA6XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbixcXG4gOTYxOlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIDk2MjpcXHR7XFxuIDk2MzpcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7XFxuIDk2NDpcXHRcXHRzdHJ1Y3QgdWJ1Zl9pbmZvICp1YXJnID0gTlVMTDtcXG4gOTY1OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDk2NjpcXHRcXHRzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gY29yay1cXHUwMDNlb3B0O1xcbiA5Njc6XFx0XFx0aW50IGhoX2xlbjtcXG4gOTY4OlxcdFxcdGludCBleHRoZHJsZW47XFxuIDk2OTpcXHRcXHRpbnQgbXR1O1xcbiA5NzA6XFx0XFx0aW50IGNvcHk7XFxuIDk3MTpcXHRcXHRpbnQgZXJyO1xcbiA5NzI6XFx0XFx0aW50IG9mZnNldCA9IDA7XFxuIDk3MzpcXHRcXHRib29sIHpjID0gZmFsc2U7XFxuIDk3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbWF4ZnJhZ2xlbiwgZnJhZ2hlYWRlcmxlbiwgbWF4bm9uZnJhZ3NpemU7XFxuIDk3NTpcXHRcXHRpbnQgY3N1bW1vZGUgPSBDSEVDS1NVTV9OT05FO1xcbiA5NzY6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBkc3RfcnRhYmxlKGNvcmstXFx1MDAzZWRzdCk7XFxuIDk3NzpcXHRcXHRib29sIHBhZ2VkLCBob2xkX3Rza2V5ID0gZmFsc2UsIGV4dHJhX3VyZWYgPSBmYWxzZTtcXG4gOTc4OlxcdFxcdHVuc2lnbmVkIGludCB3bWVtX2FsbG9jX2RlbHRhID0gMDtcXG4gOTc5OlxcdFxcdHUzMiB0c2tleSA9IDA7XFxuIDk4MDpcXHRcXG4gOTgxOlxcdFxcdHNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpO1xcbiA5ODI6XFx0XFxuIDk4MzpcXHRcXHRleHRoZHJsZW4gPSAhc2tiID8gcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuIDogMDtcXG4gOTg0OlxcdFxcdG10dSA9IGNvcmstXFx1MDAzZWdzb19zaXplID8gSVBfTUFYX01UVSA6IGNvcmstXFx1MDAzZWZyYWdzaXplO1xcbiA5ODU6XFx0XFx0cGFnZWQgPSAhIWNvcmstXFx1MDAzZWdzb19zaXplO1xcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRoaF9sZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldik7XFxuIDk4ODpcXHRcXG4gOTg5OlxcdFxcdGZyYWdoZWFkZXJsZW4gPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIChvcHQgPyBvcHQtXFx1MDAzZW9wdGxlbiA6IDApO1xcbiA5OTA6XFx0XFx0bWF4ZnJhZ2xlbiA9ICgobXR1IC0gZnJhZ2hlYWRlcmxlbikgXFx1MDAyNiB+NykgKyBmcmFnaGVhZGVybGVuO1xcbiA5OTE6XFx0XFx0bWF4bm9uZnJhZ3NpemUgPSBpcF9za19pZ25vcmVfZGYoc2spID8gSVBfTUFYX01UVSA6IG10dTtcXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0aWYgKGNvcmstXFx1MDAzZWxlbmd0aCArIGxlbmd0aCBcXHUwMDNlIG1heG5vbmZyYWdzaXplIC0gZnJhZ2hlYWRlcmxlbikge1xcbiA5OTQ6XFx0XFx0XFx0aXBfbG9jYWxfZXJyb3Ioc2ssIEVNU0dTSVpFLCBmbDQtXFx1MDAzZWRhZGRyLCBpbmV0LVxcdTAwM2VpbmV0X2Rwb3J0LFxcbiA5OTU6XFx0XFx0XFx0XFx0ICAgICAgIG10dSAtIChvcHQgPyBvcHQtXFx1MDAzZW9wdGxlbiA6IDApKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuIDk5NzpcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdC8qXFxuMTAwMDpcXHRcXHQgKiB0cmFuc2hkcmxlbiBcXHUwMDNlIDAgbWVhbnMgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBmcmFnbWVudCBhbmQgd2Ugd2lzaFxcbjEwMDE6XFx0XFx0ICogaXQgd29uJ3QgYmUgZnJhZ21lbnRlZCBpbiB0aGUgZnV0dXJlLlxcbjEwMDI6XFx0XFx0ICovXFxuMTAwMzpcXHRcXHRpZiAodHJhbnNoZHJsZW4gXFx1MDAyNlxcdTAwMjZcXG4xMDA0OlxcdFxcdCAgICBsZW5ndGggKyBmcmFnaGVhZGVybGVuIFxcdTAwM2M9IG10dSBcXHUwMDI2XFx1MDAyNlxcbjEwMDU6XFx0XFx0ICAgIHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IChORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX0lQX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuMTAwNjpcXHRcXHQgICAgKCEoZmxhZ3MgXFx1MDAyNiBNU0dfTU9SRSkgfHwgY29yay1cXHUwMDNlZ3NvX3NpemUpIFxcdTAwMjZcXHUwMDI2XFxuMTAwNzpcXHRcXHQgICAgKCFleHRoZHJsZW4gfHwgKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQX1RYX0NTVU0pKSlcXG4xMDA4OlxcdFxcdFxcdGNzdW1tb2RlID0gQ0hFQ0tTVU1fUEFSVElBTDtcXG4xMDA5OlxcdFxcbjEwMTA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgbGVuZ3RoKSB7XFxuMTAxMTpcXHRcXHRcXHRzdHJ1Y3QgbXNnaGRyICptc2cgPSBmcm9tO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRcXHRpZiAoZ2V0ZnJhZyA9PSBpcF9nZW5lcmljX2dldGZyYWcgXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjEwMTQ6XFx0XFx0XFx0XFx0aWYgKHNrYl96Y29weShza2IpIFxcdTAwMjZcXHUwMDI2IG1zZy1cXHUwMDNlbXNnX3VidWYgIT0gc2tiX3pjb3B5KHNrYikpXFxuMTAxNTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMDE2OlxcdFxcbjEwMTc6XFx0XFx0XFx0XFx0LyogTGVhdmUgdWFyZyBOVUxMIGlmIGNhbid0IHplcm9jb3B5LCBjYWxsZXJzIHNob3VsZFxcbjEwMTg6XFx0XFx0XFx0XFx0ICogYmUgYWJsZSB0byBoYW5kbGUgaXQuXFxuMTAxOTpcXHRcXHRcXHRcXHQgKi9cXG4xMDIwOlxcdFxcdFxcdFxcdGlmICgocnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9TRykgXFx1MDAyNlxcdTAwMjZcXG4xMDIxOlxcdFxcdFxcdFxcdCAgICBjc3VtbW9kZSA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7XFxuMTAyMjpcXHRcXHRcXHRcXHRcXHRwYWdlZCA9IHRydWU7XFxuMTAyMzpcXHRcXHRcXHRcXHRcXHR6YyA9IHRydWU7XFxuMTAyNDpcXHRcXHRcXHRcXHRcXHR1YXJnID0gbXNnLVxcdTAwM2Vtc2dfdWJ1ZjtcXG4xMDI1OlxcdFxcdFxcdFxcdH1cXG4xMDI2OlxcdFxcdFxcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xcbjEwMjc6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBsZW5ndGgsIHNrYl96Y29weShza2IpLFxcbjEwMjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGZhbHNlKTtcXG4xMDI5OlxcdFxcdFxcdFxcdGlmICghdWFyZylcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4xMDMxOlxcdFxcdFxcdFxcdGV4dHJhX3VyZWYgPSAhc2tiX3pjb3B5KHNrYik7XFx0Lyogb25seSByZWYgb24gbmV3IHVhcmcgKi9cXG4xMDMyOlxcdFxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHIFxcdTAwMjZcXHUwMDI2XFxuMTAzMzpcXHRcXHRcXHRcXHQgICAgY3N1bW1vZGUgPT0gQ0hFQ0tTVU1fUEFSVElBTCkge1xcbjEwMzQ6XFx0XFx0XFx0XFx0XFx0cGFnZWQgPSB0cnVlO1xcbjEwMzU6XFx0XFx0XFx0XFx0XFx0emMgPSB0cnVlO1xcbjEwMzY6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDM3OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMDM4OlxcdFxcdFxcdFxcdFxcdHNrYl96Y29weV9zZXQoc2tiLCB1YXJnLCBcXHUwMDI2ZXh0cmFfdXJlZik7XFxuMTAzOTpcXHRcXHRcXHRcXHR9XFxuMTA0MDpcXHRcXHRcXHR9XFxuMTA0MTpcXHRcXHR9IGVsc2UgaWYgKChmbGFncyBcXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFxcdTAwMjZcXHUwMDI2IGxlbmd0aCkge1xcbjEwNDI6XFx0XFx0XFx0aWYgKGluZXRfdGVzdF9iaXQoSERSSU5DTCwgc2spKVxcbjEwNDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xMDQ0OlxcdFxcdFxcdGlmIChydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1NHIFxcdTAwMjZcXHUwMDI2XFxuMTA0NTpcXHRcXHRcXHQgICAgZ2V0ZnJhZyA9PSBpcF9nZW5lcmljX2dldGZyYWcpXFxuMTA0NjpcXHRcXHRcXHRcXHQvKiBXZSBuZWVkIGFuIGVtcHR5IGJ1ZmZlciB0byBhdHRhY2ggc3R1ZmYgdG8gKi9cXG4xMDQ3OlxcdFxcdFxcdFxcdHBhZ2VkID0gdHJ1ZTtcXG4xMDQ4OlxcdFxcdFxcdGVsc2VcXG4xMDQ5OlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5NU0dfU1BMSUNFX1BBR0VTO1xcbjEwNTA6XFx0XFx0fVxcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHRjb3JrLVxcdTAwM2VsZW5ndGggKz0gbGVuZ3RoO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoxNC4wMTAyNjQ5MTZaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgwMDM1NzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJc3N1ZSB3aXRoIExhcmdlIFVEUCBQYWNrZXRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoaXMgcG90ZW50aWFsIG92ZXJmbG93LiBJbml0aWFsbHksIG15IHRoaW5raW5nIHdhczogaWYgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGlzIG1hc3NpdmUsIHRoZW4gYG10dWAgd291bGQgYmUgZXF1YWxseSBodWdlLCBhbmQgc28gYG1heG5vbmZyYWdzaXplYCB3b3VsZCBmb2xsb3cuIFRoaXMgbWVhbnQgdGhlIGNoZWNrIGBjb3JrLVx1MDAzZWxlbmd0aCArIGxlbmd0aCBcdTAwM2UgbWF4bm9uZnJhZ3NpemUgLSBmcmFnaGVhZGVybGVuYCBtaWdodCBub3QgZXZlbiBraWNrIGluIGZvciBwYWNrZXQgc2l6ZXMgYmVsb3cgNjU1MzUsIHNvIHRoYXQgd2FzIGNvbmNlcm5pbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGF0IGBjb3JrLVx1MDAzZWxlbmd0aGAgYW5kIGBsZW5ndGhgIGFyZSBqdXN0IGludGVnZXJzLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGUgY29kZSAqZG9lcyogY2FwIGBtdHVgIGF0IGBJUF9NQVhfTVRVYCAoNjU1MzUpLiBUaGVyZWZvcmUsIGBtYXhub25mcmFnc2l6ZWAgaXMgKmF0IG1vc3QqIDY1NTM1LiBTbyB0aGF0IG1lYW5zIGBjb3JrLVx1MDAzZWxlbmd0aCArIGxlbmd0aGAgKmNhbid0KiBnbyBiZXlvbmQgNjU1MzUgbWludXMgdGhlIGZyYWdtZW50YXRpb24gaGVhZGVyIGxlbmd0aC4gSWYgaXQgZG9lcywgdGhlbiB0aGUgY29kZSAqc2hvdWxkKiByZXR1cm4gYC1FTVNHU0laRWAuXG5cblRoZSB0ZXN0IHNjcmlwdCBzZWVtcyB0byBleHBlY3QgcHJlY2lzZWx5IHRoaXMgYmVoYXZpb3Igd2l0aCBpdHMgYHRyeS4uLmV4Y2VwdGAgYmxvY2ssIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB0aGF0IGBFTVNHU0laRWAgZXJyb3IuIEJ1dCB0aGUgc2NyaXB0IHNheXMgc29tZXRoaW5nIGFib3V0IGEgV0FSTiBtZXNzYWdlIGJlaW5nIHByaW50ZWQgKmJlZm9yZSogdGhlIGNoZWNrLiBSaWdodCwgaWYgYG10dWAgaXNuJ3QgY2FwcGVkLCBgbWF4bm9uZnJhZ3NpemVgIGdvZXMgYmV5b25kIDY1NTM1LiBTbywgYF9faXBfYXBwZW5kX2RhdGFgIGNvdWxkICphbGxvdyogYGNvcmstXHUwMDNlbGVuZ3RoYCB0byBleGNlZWQgNjU1MzUuIEl0IHdvdWxkIHRoZW4gYWxsb2NhdGUgYW4gU0tCIGFuZCBjb3B5IHRoZSBkYXRhLiBgdWRwX3NlbmRfc2tiYCBpcyBjYWxsZWQgYW5kIGNhbGxzIGB1ZHBfc2V0X2xlbl9zaG9ydGAsIHdoaWNoLCAqdGhhdCdzKiB3aGVyZSB0aGUgV0FSTiBpcyB0cmlnZ2VyZWQgYmVjYXVzZSBgbGVuYCBpcyBcdTAwM2U9IDY1NTM2LiBgdWRwX3NlbmRfc2tiYCBnb2VzIGFoZWFkIGFuZCBzZW5kcyB0aGUgcGFja2V0LiBTbywgaXQncyBhIFdBUk4sIGJ1dCB0aGUgZGF0YSBpcyBjb3JyZWN0bHkgY29waWVkLlxuXG5Ob3csIEkgd2FzIHdvcnJpZWQgYWJvdXQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgaXQncyBva2F5IGJlY2F1c2UgYF9faXBfYXBwZW5kX2RhdGFgIGNvcGllcyBgbGVuZ3RoYCBieXRlcyBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgU0tCLiBUaGUgU0tCIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgbXkgY29uY2VybnMgYXJlIGxhaWQgdG8gcmVzdC4gVGhlIG9ubHkgaXNzdWUsIGFzIEkgc2VlIGl0IG5vdywgaXMgdGhhdCB0aGUgVURQIGxlbmd0aCBmaWVsZCAqd2lsbCogYmUgdHJ1bmNhdGVkIHRvIDE2IGJpdHMsIGFuZCB0aGUgSVAgbGVuZ3RoIGZpZWxkICptaWdodCogYWxzbyBnZXQgdHJ1bmNhdGVkIHRvbywgd2hpY2ggaXMgYSBwcm90b2NvbCB2aW9sYXRpb24uIEl0IHdhcnJhbnRzIGEgd2FybmluZywgYnV0IGl0J3Mgbm90IGFjdHVhbGx5IGEgbWVtb3J5IGxlYWsuIEknbSBnb2luZyB0byBjaGVjayBgaXA2X3NldHVwX2NvcmtgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTUxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MjIuODEwNjI1NzQ3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9pcDZfb3V0cHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXHR9XFxuMTQyMTpcXHRcXHR2Nl9jb3JrLVxcdTAwM2Vob3BfbGltaXQgPSBpcGM2LVxcdTAwM2VobGltaXQ7XFxuMTQyMjpcXHRcXHR2Nl9jb3JrLVxcdTAwM2V0Y2xhc3MgPSBpcGM2LVxcdTAwM2V0Y2xhc3M7XFxuMTQyMzpcXHRcXHR2Nl9jb3JrLVxcdTAwM2Vkb250ZnJhZyA9IGlwYzYtXFx1MDAzZWRvbnRmcmFnO1xcbjE0MjQ6XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZmxhZ3MgXFx1MDAyNiBEU1RfWEZSTV9UVU5ORUwpXFxuMTQyNTpcXHRcXHRcXHRtdHUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZXBtdHVkaXNjKSBcXHUwMDNlPSBJUFY2X1BNVFVESVNDX1BST0JFID9cXG4xNDI2OlxcdFxcdFxcdCAgICAgIFJFQURfT05DRShydC1cXHUwMDNlZHN0LmRldi1cXHUwMDNlbXR1KSA6IGRzdDZfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4xNDI3OlxcdFxcdGVsc2VcXG4xNDI4OlxcdFxcdFxcdG10dSA9IFJFQURfT05DRShucC1cXHUwMDNlcG10dWRpc2MpIFxcdTAwM2U9IElQVjZfUE1UVURJU0NfUFJPQkUgP1xcbjE0Mjk6XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHJ0LVxcdTAwM2Vkc3QuZGV2LVxcdTAwM2VtdHUpIDogZHN0Nl9tdHUoeGZybV9kc3RfcGF0aChcXHUwMDI2cnQtXFx1MDAzZWRzdCkpO1xcbjE0MzA6XFx0XFxuMTQzMTpcXHRcXHRmcmFnX3NpemUgPSBSRUFEX09OQ0UobnAtXFx1MDAzZWZyYWdfc2l6ZSk7XFxuMTQzMjpcXHRcXHRpZiAoZnJhZ19zaXplIFxcdTAwMjZcXHUwMDI2IGZyYWdfc2l6ZSBcXHUwMDNjIG10dSlcXG4xNDMzOlxcdFxcdFxcdG10dSA9IGZyYWdfc2l6ZTtcXG4xNDM0OlxcdFxcbjE0MzU6XFx0XFx0aWYgKHNrX2lzX3VkcChzaykpXFxuMTQzNjpcXHRcXHRcXHRtdHUgPSBtaW4obXR1LCBJUDZfTUFYX01UVSk7XFxuMTQzNzpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLmZyYWdzaXplID0gbXR1O1xcbjE0Mzg6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5nc29fc2l6ZSA9IGlwYzYtXFx1MDAzZWdzb19zaXplO1xcbjE0Mzk6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50eF9mbGFncyA9IDA7XFxuMTQ0MDpcXHRcXHRjb3JrLVxcdTAwM2ViYXNlLm1hcmsgPSBpcGM2LVxcdTAwM2Vzb2NrYy5tYXJrO1xcbjE0NDE6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5wcmlvcml0eSA9IGlwYzYtXFx1MDAzZXNvY2tjLnByaW9yaXR5O1xcbjE0NDI6XFx0XFx0c29ja190eF90aW1lc3RhbXAoc2ssIFxcdTAwMjZpcGM2LVxcdTAwM2Vzb2NrYywgXFx1MDAyNmNvcmstXFx1MDAzZWJhc2UudHhfZmxhZ3MpO1xcbjE0NDM6XFx0XFx0aWYgKGlwYzYtXFx1MDAzZXNvY2tjLnRzZmxhZ3MgXFx1MDAyNiBTT0NLQ01fRkxBR19UU19PUFRfSUQpIHtcXG4xNDQ0OlxcdFxcdFxcdGNvcmstXFx1MDAzZWJhc2UuZmxhZ3MgfD0gSVBDT1JLX1RTX09QVF9JRDtcXG4xNDQ1OlxcdFxcdFxcdGNvcmstXFx1MDAzZWJhc2UudHNfb3B0X2lkID0gaXBjNi1cXHUwMDNlc29ja2MudHNfb3B0X2lkO1xcbjE0NDY6XFx0XFx0fVxcbjE0NDc6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS5sZW5ndGggPSAwO1xcbjE0NDg6XFx0XFx0Y29yay1cXHUwMDNlYmFzZS50cmFuc21pdF90aW1lID0gaXBjNi1cXHUwMDNlc29ja2MudHJhbnNtaXRfdGltZTtcXG4xNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDoyMi44MTA3NTYxMTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxOTk2MDg1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBJUHY2IFVEUCBKdW1ibyBGcmFtZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcDZfc2V0dXBfY29ya2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBNVFUgYW5kIFVEUCBzb2NrZXRzLiBUaGUgY29yZSBpc3N1ZSBzZWVtcyB0byBiZSBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBVRFAgbGVuZ3RoIGZpZWxkLiBXaGVuIGEgc29ja2V0IGlzIFVEUCwgdGhlIE1UVSBpcyBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCAoNjU1MzUpIGluIGBpcDZfc2V0dXBfY29ya2AuIFRoaXMga2VlcHMgYGNvcmstXHUwMDNlYmFzZS5mcmFnc2l6ZWAgd2l0aGluIGJvdW5kcywgd2hpY2ggaW4gdHVybiBwcmV2ZW50cyBgc2tiLVx1MDAzZWxlbmAgZnJvbSBleGNlZWRpbmcgNjU1MzUgd2hlbiBhcHBlbmRpbmcgZGF0YSBpbiBgaXA2X2FwcGVuZF9kYXRhYC4gVGhpcywgaW1wb3J0YW50bHksIGF2b2lkcyB0aGUgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIHdhcm5pbmcgaW4gYHVkcF9zZXRfbGVuX3Nob3J0YCwgd2hpY2ggc2lnbmlmaWVzIHRoZSB0cnVuY2F0aW9uIG9mIHRoZSBVRFAgbGVuZ3RoIGZpZWxkLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHdoZXRoZXIgdGhlcmUncyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIGhlcmUuIEJ1dCBubywgdGhhdCdzIG5vdCB0aGUgY2FzZS4gVGhlIGRhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHVzZXIgc3BhY2Ugb3IgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwsIGVuc3VyaW5nIGZ1bGwgaW5pdGlhbGl6YXRpb24uIFRoZSBwcm9ibGVtIGlzIHB1cmVseSBhbiBpbnRlZ2VyIG92ZXJmbG93IHRoYXQgcmVzdWx0cyBpbiBhIG1hbGZvcm1lZCBwYWNrZXQgd2l0aCBhIHRydW5jYXRlZCBsZW5ndGguIFRoZSBrZXJuZWwncyBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBpZiB0aGV5IHdlcmUgaGFwcGVuaW5nLiBCdXQgaGVyZSwgaXQncyBqdXN0IGFib3V0IHRoZSBsZW5ndGggZmllbGQgZ2V0dGluZyB0cnVuY2F0ZWQuXG5cbk5vdywgaWYgdGhlIGxlbmd0aCBmaWVsZCBnZXRzIHRydW5jYXRlZCwgY291bGQgYSByZWNlaXZlciBtaXNpbnRlcnByZXQgdGhlIHBhY2tldD8gQ291bGQgaXQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb24gdGhlIHJlY2VpdmluZyBlbmQ/IElmIHRoZSByZWNlaXZlciBnZXRzIGEgcGFja2V0IHdpdGggYSAqc21hbGwqIGxlbmd0aCBmaWVsZCBidXQgYSAqbGFyZ2UqIHBheWxvYWQsIGl0J2xsIGp1c3QgaWdub3JlIHRoZSBleHRyYSBwYXlsb2FkLiBIb3dldmVyLCBpZiB0aGUgcmVjZWl2ZXIgZ2V0cyBhIHBhY2tldCB3aXRoIGEgKmxhcmdlKiBsZW5ndGggZmllbGQgYnV0IGEgKnNtYWxsKiBwYXlsb2FkLCB0aGlzIGNvdWxkIGJlIGEgcHJvYmxlbSwgcG90ZW50aWFsbHkgY2F1c2luZyBpdCB0byByZWFkIG91dCBvZiBib3VuZHMuIEJ1dCB3YWl0LCBpbiBvdXIgY2FzZSwgdGhlIGxlbmd0aCAqaXMqIHRydW5jYXRlZCAoZS5nLiwgNjU1NTYgYmVjb21lcyAyMCkuIFNvIHRoZSBhY3R1YWwgcGF5bG9hZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGxlbmd0aCBmaWVsZCBpbiB0aGUgcGFja2V0LiBTbyB0aGUgcmVjZWl2ZXIgd2lsbCBvbmx5IHNlZSBhIFVEUCBwYWNrZXQgb2YgbGVuZ3RoIDIwIGFuZCBpZ25vcmUgdGhlIHJlc3Qgb2YgdGhlIGdhcmJhZ2UuIFNvLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrIGhlcmUuXG5cbkxldCBtZSB0YWtlIGFub3RoZXIgbG9vayB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSBzZWUgdGhlIHRlc3Qgc2NyaXB0IHVzZXMgYElQVjZfVExWX0pVTUJPYC4gVGhlIHRlc3Qgc2V0cyB1cCBhbiBJUHY2IGNvbm5lY3Rpb24gYW5kIGEgcmF3IFVEUCBzb2NrZXQgd2l0aCBhIGp1bWJvIHBheWxvYWQuIEl0IHVzZXMgYSBSQVcgc29ja2V0IHdpdGggYElQUFJPVE9fVURQYCBhbmQgc2VuZHMgYSBwYWNrZXQgd2l0aCBhIEp1bWJvIHBheWxvYWQgb3B0aW9uLiBIb2xkIG9uLi4uIGlmIGl0J3MgYSBSQVcgc29ja2V0LCB0aGVuIGBza19pc191ZHAoc2spYCBpcyBmYWxzZS4gU28sIHRoYXQgbWVhbnMgdGhlIE1UVSBpc24ndCBjYXBwZWQgYXQgYElQNl9NQVhfTVRVYCBmb3IgUkFXIHNvY2tldHMuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uLiBPa2F5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgYW5kIGxvZ2ljIHdpdGhpbiBgc2tfaXNfdWRwYCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgYW5kIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBwcm90ZWN0aW9uIHByb3ZpZGVkIGZvciBVRFAgc29ja2V0cyBtaWdodCBub3QgYXBwbHkgdG8gUkFXIHNvY2tldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTA5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MzUuMDEwMzY2NTI2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUxMjY1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2lzX3VkcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9zb2NrLmg9Mjk2NT1zdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTcxLVxcbmluY2x1ZGUvbmV0L3NvY2suaDoyOTcyOnN0YXRpYyBpbmxpbmUgYm9vbCBza19pc191ZHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yOTczLXtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExOTc4PUJQRl9DQUxMXzMoYnBmX3NrX2xvb2t1cF9hc3NpZ24sIHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODctXFx0XFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFRDUCBzb2NrZXQgaW4gTElTVEVOICovXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODg6XFx0aWYgKHVubGlrZWx5KHNrIFxcdTAwMjZcXHUwMDI2IHNrX2lzX3VkcChzaykgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODktXFx0XFx0cmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7IC8qIG9ubHkgYWNjZXB0IFVEUCBzb2NrZXQgaW4gQ0xPU0UgKi9cXG4tLVxcbm5ldC9jb3JlL3NvY2suYz00NDY1PWJvb2wgc2tfYnVzeV9sb29wX2VuZCh2b2lkICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUpXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNDQ3MS1cXG5uZXQvY29yZS9zb2NrLmM6NDQ3MjpcXHRpZiAoc2tfaXNfdWRwKHNrKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9jb3JlL3NvY2suYy00NDczLVxcdCAgICAhc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKFxcdTAwMjZ1ZHBfc2soc2spLVxcdTAwM2VyZWFkZXJfcXVldWUpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz01NDE9c3RhdGljIGJvb2wgc29ja19tYXBfc2tfc3RhdGVfYWxsb3dlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTU0NC1cXHRcXHRyZXR1cm4gKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IChUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9MSVNURU4pO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NTQ1OlxcdGlmIChza19pc191ZHAoc2spKVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNTQ2LVxcdFxcdHJldHVybiBza19oYXNoZWQoc2spO1xcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTEzNzQ9c3RhdGljIGludCBpcDZfc2V0dXBfY29yayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2NvcmtfZnVsbCAqY29yayxcXG4tLVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM0LVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxNDM1OlxcdGlmIChza19pc191ZHAoc2spKVxcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xNDM2LVxcdFxcdG10dSA9IG1pbihtdHUsIElQNl9NQVhfTVRVKTtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMwMT1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMwNy1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzA4OlxcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykpXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzA5LVxcdFxcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9CSU5EX1VEUDtcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jPTMxNz1zdGF0aWMgaW50IGhvb2tfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqY29uc3Qgc29jayxcXG4tLVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMyNS1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9UQ1A7XFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzI2OlxcdGVsc2UgaWYgKHNrX2lzX3VkcChzb2NrLVxcdTAwM2VzaykpXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzI3LVxcdFxcdGFjY2Vzc19yZXF1ZXN0ID0gTEFORExPQ0tfQUNDRVNTX05FVF9DT05ORUNUX1NFTkRfVURQO1xcbi0tXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmMtMzM3LVxcdCAqL1xcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jOjMzODpcXHRpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgc2tfaXNfdWRwKHNvY2stXFx1MDAzZXNrKSBcXHUwMDI2XFx1MDAyNlxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTMzOS1cXHQgICAgYWRkcmxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZCh0eXBlb2YoKmFkZHJlc3MpLCBzYV9mYW1pbHkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYz0zNDY9c3RhdGljIGludCBob29rX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKmNvbnN0IHNvY2ssXFxuLS1cXG5zZWN1cml0eS9sYW5kbG9jay9uZXQuYy0zNjEtXFxuc2VjdXJpdHkvbGFuZGxvY2svbmV0LmM6MzYyOlxcdGlmIChza19pc191ZHAoc29jay1cXHUwMDNlc2spKVxcbnNlY3VyaXR5L2xhbmRsb2NrL25ldC5jLTM2My1cXHRcXHRhY2Nlc3NfcmVxdWVzdCA9IExBTkRMT0NLX0FDQ0VTU19ORVRfQ09OTkVDVF9TRU5EX1VEUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTI6MjQ6MzYuOTYxNjM5OTA0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTMzNzEwNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgdGhlIE1UVSBDYXBwaW5nIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgc2tfaXNfdWRwYCBpcyB1c2VkIHRvIGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBVRFAgc29ja2V0LiBGb3IgUkFXIHNvY2tldHMsIGl0J3MgZmFsc2UsIHNvIHRoZSBNVFUgaXNuJ3QgY2FwcGVkLiBUaGF0IG1lYW5zIHRoYXQgYGNvcmstXHUwMDNlZnJhZ3NpemVgIGNvdWxkIHRlY2huaWNhbGx5IGJlIGdyZWF0ZXIgdGhhbiA2NTUzNSwgYnV0IHRoZSBrZXJuZWwgKmRvZXNuJ3QqIGNhbGwgYHVkcF9zZXRfbGVuX3Nob3J0YCBmb3IgUkFXIHNvY2tldHMgc2luY2UgdGhlIHVzZXIgaGFuZGxlcyB0aGF0LiBTbywgbm8gd2FybmluZy4gVGhlIGB0ZXN0X2lwdjZfanVtYm9gIHNjcmlwdCBpcyBsaWtlbHkganVzdCB2ZXJpZnlpbmcgdGhhdCBKdW1ibyBwYWNrZXRzIChvdmVyIDY1NTM1IGJ5dGVzKSBjb250aW51ZSB0byB3b3JrIGZpbmUgd2l0aCBSQVcgc29ja2V0cywgYW5kIHRoZSBwYXRjaCBkb2Vzbid0IGJyZWFrIHRoZW0uXG5cbk5vdywgZG9lcyB0aGlzIGhhdmUgYW55IEtNU0FOIHJlbGV2YW5jZT8gVGhlIHBhdGNoIG1vZGlmaWVzIE1UVSBjYWxjdWxhdGlvbnMgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93IHdpdGhpbiB0aGUgbGVuZ3RoIGZpZWxkcywgc3BlY2lmaWNhbGx5IGZvciBVRFAgcGFja2V0cyB3aGljaCBhcmUgY2FwcGVkIHRvIDY1NTM1IGJ5dGVzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoZSBTS0IgbWVtb3J5IGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggdXNlciBkYXRhLiBUaGUgaXNzdWUgaXMgcHVyZWx5IGEgbGVuZ3RoIHRydW5jYXRpb24gdGhhdCBjYW4gbGVhZCB0byBhIG1hbGZvcm1lZCBwYWNrZXQgYW5kIGEga2VybmVsIHdhcm5pbmcuIEtBU0FOIGlzIGNlcnRhaW5seSBjYXBhYmxlIG9mIGNhdGNoaW5nIGFueSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGlmIHRoZXkgc29tZWhvdyBvY2N1cnJlZCwgYnV0IHRoZXkgZG9uJ3QgKmhhcHBlbiogaGVyZS4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29kZSBhZ2FpbiB0byBiZSBzdXJlLiBJJ20gc2VlaW5nIHRoZSBjaGFuZ2VzLCBhbmQgdGhleSdyZSBzdHJhaWdodGZvcndhcmQuIFRoZSBwYXRjaCBqdXN0IGNhcHMgdGhlIE1UVSB0byBgSVBfTUFYX01UVWAgKDY1NTM1KSBvciBgSVA2X01BWF9NVFVgICg2NTUzNSkgaW4gdmFyaW91cyBwbGFjZXMuIFRoaXMgcHJldmVudHMgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIGxlbmd0aHMgZm9yIFVEUCBwYWNrZXRzLCB3aGljaCBoYXZlIGEgMTYtYml0IGxlbmd0aCBmaWVsZC4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW52b2x2ZWQuXG5cbkhlcmUncyBteSBmdWxsIEtNU0FOIHJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC4gVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNDIsIk91dHB1dFRva2VucyI6MjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxMjoyNDo1Mi40OTUzNTI4NjlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIHdoZXJlIHRoZSBNVFUgb3IgZnJhZ21lbnRhdGlvbiBzaXplIGNvdWxkIGV4Y2VlZCA2NTUzNSBieXRlcyAodGhlIG1heGltdW0gc2l6ZSByZXByZXNlbnRhYmxlIGJ5IHRoZSAxNi1iaXQgVURQIGxlbmd0aCBmaWVsZCkuIFdoZW4gYSB1c2VyIHNlbmRzIGEgbGFyZ2UgVURQIHBhY2tldCBvdmVyIGFuIGludGVyZmFjZSB3aXRoIGEgdmVyeSBsYXJnZSBNVFUsIHRoZSBrZXJuZWwgd291bGQgYXR0ZW1wdCB0byBjcmVhdGUgYSBzaW5nbGUgbGFyZ2UgU0tCLiBUaGUgbGVuZ3RoIG9mIHRoaXMgU0tCIHdvdWxkIHRoZW4gYmUgdHJ1bmNhdGVkIHdoZW4gd3JpdHRlbiB0byB0aGUgMTYtYml0IFVEUCBsZW5ndGggaGVhZGVyLCB0cmlnZ2VyaW5nIGEgYERFQlVHX05FVF9XQVJOX09OX09OQ0VgIGluIGB1ZHBfc2V0X2xlbl9zaG9ydCgpYCBhbmQgcmVzdWx0aW5nIGluIGEgbWFsZm9ybWVkIHBhY2tldC5cXG5cXG5UaGUgZml4IHNpbXBseSBjYXBzIHRoZSBNVFUgYW5kIGBjb3JrLVxcdTAwM2VmcmFnc2l6ZWAgdG8gYElQX01BWF9NVFVgIC8gYElQNl9NQVhfTVRVYCAoNjU1MzUpIHRvIHByZXZlbnQgdGhpcyBvdmVyZmxvdy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZSBTS0IgZGF0YSBpcyBmdWxseSBpbml0aWFsaXplZCB3aXRoIHVzZXIgcGF5bG9hZC4gQW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyByZXN1bHRpbmcgZnJvbSBsZW5ndGggbWlzY2FsY3VsYXRpb25zIHdvdWxkIGJlIHJlbGlhYmx5IGNhdWdodCBieSBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSB3aGVyZSB0aGUgTVRVIG9yIGZyYWdtZW50YXRpb24gc2l6ZSBjb3VsZCBleGNlZWQgNjU1MzUgYnl0ZXMgKHRoZSBtYXhpbXVtIHNpemUgcmVwcmVzZW50YWJsZSBieSB0aGUgMTYtYml0IFVEUCBsZW5ndGggZmllbGQpLiBXaGVuIGEgdXNlciBzZW5kcyBhIGxhcmdlIFVEUCBwYWNrZXQgb3ZlciBhbiBpbnRlcmZhY2Ugd2l0aCBhIHZlcnkgbGFyZ2UgTVRVLCB0aGUga2VybmVsIHdvdWxkIGF0dGVtcHQgdG8gY3JlYXRlIGEgc2luZ2xlIGxhcmdlIFNLQi4gVGhlIGxlbmd0aCBvZiB0aGlzIFNLQiB3b3VsZCB0aGVuIGJlIHRydW5jYXRlZCB3aGVuIHdyaXR0ZW4gdG8gdGhlIDE2LWJpdCBVRFAgbGVuZ3RoIGhlYWRlciwgdHJpZ2dlcmluZyBhIGBERUJVR19ORVRfV0FSTl9PTl9PTkNFYCBpbiBgdWRwX3NldF9sZW5fc2hvcnQoKWAgYW5kIHJlc3VsdGluZyBpbiBhIG1hbGZvcm1lZCBwYWNrZXQuXFxuXFxuVGhlIGZpeCBzaW1wbHkgY2FwcyB0aGUgTVRVIGFuZCBgY29yay1cXHUwMDNlZnJhZ3NpemVgIHRvIGBJUF9NQVhfTVRVYCAvIGBJUDZfTUFYX01UVWAgKDY1NTM1KSB0byBwcmV2ZW50IHRoaXMgb3ZlcmZsb3cuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGUgU0tCIGRhdGEgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCB1c2VyIHBheWxvYWQuIEFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgcmVzdWx0aW5nIGZyb20gbGVuZ3RoIG1pc2NhbGN1bGF0aW9ucyB3b3VsZCBiZSByZWxpYWJseSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workfloww5wpf[1] Phase: Succeeded StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 12:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 12:25:03 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2] Phase: Succeeded StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 12:25:13 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 12:25:03 +0000 UTC FinishedAt: 2026-08-22 12:25:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww5wpf/series-workfloww5wpf-convert-artifact-3313468964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 12:25:13 +0000 UTC FinishedAt: 2026-08-22 12:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 12:25:13 +0000 UTC FinishedAt: 2026-08-22 12:41:39 +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:*f51abd1c-c2a2-4ec4-9aa3-5cba1665456a,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-workfloww5wpf/series-workfloww5wpf-convert-artifact-3313468964/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": "91706604-8d19-4515-bbcd-2e1d96e28920", "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-workfloww5wpf/series-workfloww5wpf-build-action-1040128098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 12:25:13 +0000 UTC FinishedAt: 2026-08-22 12:41:29 +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:*f51abd1c-c2a2-4ec4-9aa3-5cba1665456a,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-workfloww5wpf/series-workfloww5wpf-convert-artifact-3313468964/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": "91706604-8d19-4515-bbcd-2e1d96e28920", "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-workfloww5wpf/series-workfloww5wpf-build-action-1040128098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 12:41:39 +0000 UTC FinishedAt: 2026-08-22 12:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 12:41:39 +0000 UTC FinishedAt: 2026-08-22 12:41:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 12:41:39 +0000 UTC FinishedAt: 2026-08-22 12:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 12:41:39 +0000 UTC FinishedAt: 2026-08-22 12:41:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww5wpf/series-workfloww5wpf-convert-artifact-4114185507/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 12:41:49 +0000 UTC FinishedAt: 2026-08-22 12:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 12:41:49 +0000 UTC FinishedAt: 2026-08-22 12:43:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91706604-8d19-4515-bbcd-2e1d96e28920,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-workfloww5wpf/series-workfloww5wpf-build-action-1040128098/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-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 12:43:52 +0000 UTC FinishedAt: 2026-08-22 12:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 12:43:52 +0000 UTC FinishedAt: 2026-08-22 12:43:52 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 12:43:52 +0000 UTC FinishedAt: 2026-08-22 13:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 12:43:52 +0000 UTC FinishedAt: 2026-08-22 13:00:39 +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:*f51abd1c-c2a2-4ec4-9aa3-5cba1665456a,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-workfloww5wpf/series-workfloww5wpf-convert-artifact-4114185507/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": "944c3543-0a6e-41f1-b8c7-3697bdbed4d6", "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-workfloww5wpf/series-workfloww5wpf-build-action-489980375/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 12:43:52 +0000 UTC FinishedAt: 2026-08-22 13:00:29 +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:*f51abd1c-c2a2-4ec4-9aa3-5cba1665456a,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-workfloww5wpf/series-workfloww5wpf-convert-artifact-4114185507/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": "944c3543-0a6e-41f1-b8c7-3697bdbed4d6", "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-workfloww5wpf/series-workfloww5wpf-build-action-489980375/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 13:00:39 +0000 UTC FinishedAt: 2026-08-22 13:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 13:00:39 +0000 UTC FinishedAt: 2026-08-22 13:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 13:00:39 +0000 UTC FinishedAt: 2026-08-22 13:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 13:00:39 +0000 UTC FinishedAt: 2026-08-22 13:02:34 +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:*944c3543-0a6e-41f1-b8c7-3697bdbed4d6,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-workfloww5wpf/series-workfloww5wpf-build-action-489980375/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-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"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:*91706604-8d19-4515-bbcd-2e1d96e28920,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*944c3543-0a6e-41f1-b8c7-3697bdbed4d6,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-workfloww5wpf/series-workfloww5wpf-build-action-1040128098/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-workfloww5wpf/series-workfloww5wpf-build-action-489980375/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 13:02:54 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 13:02:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"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-workfloww5wpf/series-workfloww5wpf-convert-artifact-2157560892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 13:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 13:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 13:02:44 +0000 UTC FinishedAt: 2026-08-22 13:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 13:02:54 +0000 UTC FinishedAt: 2026-08-22 16:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww5wpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["udp_sendmsg","udpv6_sendmsg","ip_append_data","ip6_append_data","ip_make_skb","ip6_make_skb","ip6_forward"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"ead14217-b363-4b1c-96a2-7fc98a5fce6e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 13:02:54 +0000 UTC FinishedAt: 2026-08-22 16:05:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*91706604-8d19-4515-bbcd-2e1d96e28920,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*944c3543-0a6e-41f1-b8c7-3697bdbed4d6,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-workfloww5wpf/series-workfloww5wpf-build-action-1040128098/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-workfloww5wpf/series-workfloww5wpf-build-action-489980375/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-workfloww5wpf/series-workfloww5wpf-convert-artifact-2157560892/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,}